uima-addons-2.3.1/0000755000175000017500000000000011625130124013605 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/0000755000175000017500000000000011625126774016365 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/pom.xml0000644000175000017500000001052511625126464017701 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent ConceptMapper 2.3.1 UIMA Annotator: ${project.artifactId} Extracts concepts from a CAS ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/analysis_engine/primitive/ConceptMapperOffsetTokenizer.xml ConceptMapperAnnotatorUserGuide org.apache.uima uimaj-core ${uimaDependencyVersion} provided uima-an-conceptMapper org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/main/java/org/apache/uima/conceptMapper/DictTerm*.java src/main/java/org/apache/uima/conceptMapper/support/tokenizer/TokenAnnotation*.java src/main/java/uima/tt/TokenAnnotation*.java uima-addons-2.3.1/ConceptMapper/resources/0000755000175000017500000000000011625126464020373 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/resources/dict/0000755000175000017500000000000011625126464021316 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/resources/dict/testDict.xml0000644000175000017500000000563611625126464023635 0ustar drazzibdrazzib uima-addons-2.3.1/ConceptMapper/readme.txt0000644000175000017500000000031211625126464020353 0ustar drazzibdrazzibPortions of ConceptMapper were originally developed by International Business Machines Corporation and are licensed to the Apache Software Foundation under the "Software Grant License Agreement". uima-addons-2.3.1/ConceptMapper/LICENSE.txt0000644000175000017500000002644611625126464020220 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/ConceptMapper/marker-file-identifying-single-project0000644000175000017500000000000011625126464025722 0ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/marker-file-identifying-standard-pear0000644000175000017500000000000011625126464025522 0ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/marker-file-identifying-osgi-project0000644000175000017500000000000011625126464025402 0ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/NOTICE.txt0000644000175000017500000000032511625126464020103 0ustar drazzibdrazzibApache UIMA ConceptMapper annotator software component Copyright 2008-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). uima-addons-2.3.1/ConceptMapper/src/0000755000175000017500000000000011625126462017146 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/0000755000175000017500000000000011625126464020074 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/resources/0000755000175000017500000000000011625126464022106 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/java/0000755000175000017500000000000011625126464021015 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/java/org/0000755000175000017500000000000011625126462021602 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/0000755000175000017500000000000011625126462023023 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/0000755000175000017500000000000011625126462023756 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/0000755000175000017500000000000011625126464026560 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/DictTerm.java0000644000175000017500000001473411625126464031147 0ustar drazzibdrazzib /* First created by JCasGen Sat Dec 22 14:05:15 EST 2007 */ package org.apache.uima.conceptMapper; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.jcas.cas.TOP; import org.apache.uima.jcas.cas.FSArray; /** Annotation for dictionary lookup matches * Updated by JCasGen Tue Mar 25 15:43:47 EDT 2008 * XML source: /OtherStuff/IBM/eclipse-apacheuima/conceptMapper/src/org/apache/uima/conceptMapper/DictTerm.xml * @generated */ public class DictTerm extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(DictTerm.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected DictTerm() {} /** Internal - constructor used by generator * @generated */ public DictTerm(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public DictTerm(JCas jcas) { super(jcas); readObject(); } /** @generated */ public DictTerm(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: DictCanon /** getter for DictCanon - gets canonical form * @generated */ public String getDictCanon() { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_DictCanon == null) jcasType.jcas.throwFeatMissing("DictCanon", "org.apache.uima.conceptMapper.DictTerm"); return jcasType.ll_cas.ll_getStringValue(addr, ((DictTerm_Type)jcasType).casFeatCode_DictCanon);} /** setter for DictCanon - sets canonical form * @generated */ public void setDictCanon(String v) { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_DictCanon == null) jcasType.jcas.throwFeatMissing("DictCanon", "org.apache.uima.conceptMapper.DictTerm"); jcasType.ll_cas.ll_setStringValue(addr, ((DictTerm_Type)jcasType).casFeatCode_DictCanon, v);} //*--------------* //* Feature: enclosingSpan /** getter for enclosingSpan - gets span that this NoTerm is contained within (i.e. its sentence) * @generated */ public Annotation getEnclosingSpan() { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_enclosingSpan == null) jcasType.jcas.throwFeatMissing("enclosingSpan", "org.apache.uima.conceptMapper.DictTerm"); return (Annotation)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((DictTerm_Type)jcasType).casFeatCode_enclosingSpan)));} /** setter for enclosingSpan - sets span that this NoTerm is contained within (i.e. its sentence) * @generated */ public void setEnclosingSpan(Annotation v) { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_enclosingSpan == null) jcasType.jcas.throwFeatMissing("enclosingSpan", "org.apache.uima.conceptMapper.DictTerm"); jcasType.ll_cas.ll_setRefValue(addr, ((DictTerm_Type)jcasType).casFeatCode_enclosingSpan, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: matchedText /** getter for matchedText - gets * @generated */ public String getMatchedText() { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_matchedText == null) jcasType.jcas.throwFeatMissing("matchedText", "org.apache.uima.conceptMapper.DictTerm"); return jcasType.ll_cas.ll_getStringValue(addr, ((DictTerm_Type)jcasType).casFeatCode_matchedText);} /** setter for matchedText - sets * @generated */ public void setMatchedText(String v) { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_matchedText == null) jcasType.jcas.throwFeatMissing("matchedText", "org.apache.uima.conceptMapper.DictTerm"); jcasType.ll_cas.ll_setStringValue(addr, ((DictTerm_Type)jcasType).casFeatCode_matchedText, v);} //*--------------* //* Feature: matchedTokens /** getter for matchedTokens - gets * @generated */ public FSArray getMatchedTokens() { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_matchedTokens == null) jcasType.jcas.throwFeatMissing("matchedTokens", "org.apache.uima.conceptMapper.DictTerm"); return (FSArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((DictTerm_Type)jcasType).casFeatCode_matchedTokens)));} /** setter for matchedTokens - sets * @generated */ public void setMatchedTokens(FSArray v) { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_matchedTokens == null) jcasType.jcas.throwFeatMissing("matchedTokens", "org.apache.uima.conceptMapper.DictTerm"); jcasType.ll_cas.ll_setRefValue(addr, ((DictTerm_Type)jcasType).casFeatCode_matchedTokens, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for matchedTokens - gets an indexed value - * @generated */ public TOP getMatchedTokens(int i) { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_matchedTokens == null) jcasType.jcas.throwFeatMissing("matchedTokens", "org.apache.uima.conceptMapper.DictTerm"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((DictTerm_Type)jcasType).casFeatCode_matchedTokens), i); return (TOP)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((DictTerm_Type)jcasType).casFeatCode_matchedTokens), i)));} /** indexed setter for matchedTokens - sets an indexed value - * @generated */ public void setMatchedTokens(int i, TOP v) { if (DictTerm_Type.featOkTst && ((DictTerm_Type)jcasType).casFeat_matchedTokens == null) jcasType.jcas.throwFeatMissing("matchedTokens", "org.apache.uima.conceptMapper.DictTerm"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((DictTerm_Type)jcasType).casFeatCode_matchedTokens), i); jcasType.ll_cas.ll_setRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((DictTerm_Type)jcasType).casFeatCode_matchedTokens), i, jcasType.ll_cas.ll_getFSRef(v));} } uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/DictTerm.xml0000644000175000017500000000362111625126464031017 0ustar drazzibdrazzib DictTerm 1 org.apache.uima.conceptMapper.DictTerm Annotation for dictionary lookup matches uima.tcas.Annotation DictCanon canonical form uima.cas.String enclosingSpan span that this NoTerm is contained within (i.e. its sentence) uima.tcas.Annotation matchedText uima.cas.String matchedTokens uima.cas.FSArray uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/DictTerm_Type.java0000644000175000017500000001527411625126464032150 0ustar drazzibdrazzib /* First created by JCasGen Tue Jul 19 09:44:40 EDT 2005 */ package org.apache.uima.conceptMapper; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.Annotation_Type; /** Annotation for dictionary lookup matches * Updated by JCasGen Tue Mar 25 15:43:47 EDT 2008 * @generated */ public class DictTerm_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (DictTerm_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = DictTerm_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new DictTerm(addr, DictTerm_Type.this); DictTerm_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new DictTerm(addr, DictTerm_Type.this); } }; /** @generated */ public final static int typeIndexID = DictTerm.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.conceptMapper.DictTerm"); /** @generated */ final Feature casFeat_DictCanon; /** @generated */ final int casFeatCode_DictCanon; /** @generated */ public String getDictCanon(int addr) { if (featOkTst && casFeat_DictCanon == null) jcas.throwFeatMissing("DictCanon", "org.apache.uima.conceptMapper.DictTerm"); return ll_cas.ll_getStringValue(addr, casFeatCode_DictCanon); } /** @generated */ public void setDictCanon(int addr, String v) { if (featOkTst && casFeat_DictCanon == null) jcas.throwFeatMissing("DictCanon", "org.apache.uima.conceptMapper.DictTerm"); ll_cas.ll_setStringValue(addr, casFeatCode_DictCanon, v);} /** @generated */ final Feature casFeat_enclosingSpan; /** @generated */ final int casFeatCode_enclosingSpan; /** @generated */ public int getEnclosingSpan(int addr) { if (featOkTst && casFeat_enclosingSpan == null) jcas.throwFeatMissing("enclosingSpan", "org.apache.uima.conceptMapper.DictTerm"); return ll_cas.ll_getRefValue(addr, casFeatCode_enclosingSpan); } /** @generated */ public void setEnclosingSpan(int addr, int v) { if (featOkTst && casFeat_enclosingSpan == null) jcas.throwFeatMissing("enclosingSpan", "org.apache.uima.conceptMapper.DictTerm"); ll_cas.ll_setRefValue(addr, casFeatCode_enclosingSpan, v);} /** @generated */ final Feature casFeat_matchedText; /** @generated */ final int casFeatCode_matchedText; /** @generated */ public String getMatchedText(int addr) { if (featOkTst && casFeat_matchedText == null) jcas.throwFeatMissing("matchedText", "org.apache.uima.conceptMapper.DictTerm"); return ll_cas.ll_getStringValue(addr, casFeatCode_matchedText); } /** @generated */ public void setMatchedText(int addr, String v) { if (featOkTst && casFeat_matchedText == null) jcas.throwFeatMissing("matchedText", "org.apache.uima.conceptMapper.DictTerm"); ll_cas.ll_setStringValue(addr, casFeatCode_matchedText, v);} /** @generated */ final Feature casFeat_matchedTokens; /** @generated */ final int casFeatCode_matchedTokens; /** @generated */ public int getMatchedTokens(int addr) { if (featOkTst && casFeat_matchedTokens == null) jcas.throwFeatMissing("matchedTokens", "org.apache.uima.conceptMapper.DictTerm"); return ll_cas.ll_getRefValue(addr, casFeatCode_matchedTokens); } /** @generated */ public void setMatchedTokens(int addr, int v) { if (featOkTst && casFeat_matchedTokens == null) jcas.throwFeatMissing("matchedTokens", "org.apache.uima.conceptMapper.DictTerm"); ll_cas.ll_setRefValue(addr, casFeatCode_matchedTokens, v);} /** @generated */ public int getMatchedTokens(int addr, int i) { if (featOkTst && casFeat_matchedTokens == null) jcas.throwFeatMissing("matchedTokens", "org.apache.uima.conceptMapper.DictTerm"); if (lowLevelTypeChecks) return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_matchedTokens), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_matchedTokens), i); return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_matchedTokens), i); } /** @generated */ public void setMatchedTokens(int addr, int i, int v) { if (featOkTst && casFeat_matchedTokens == null) jcas.throwFeatMissing("matchedTokens", "org.apache.uima.conceptMapper.DictTerm"); if (lowLevelTypeChecks) ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_matchedTokens), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_matchedTokens), i); ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_matchedTokens), i, v); } /** initialize variables to correspond with Cas Type and Features * @generated */ public DictTerm_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_DictCanon = jcas.getRequiredFeatureDE(casType, "DictCanon", "uima.cas.String", featOkTst); casFeatCode_DictCanon = (null == casFeat_DictCanon) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_DictCanon).getCode(); casFeat_enclosingSpan = jcas.getRequiredFeatureDE(casType, "enclosingSpan", "uima.tcas.Annotation", featOkTst); casFeatCode_enclosingSpan = (null == casFeat_enclosingSpan) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_enclosingSpan).getCode(); casFeat_matchedText = jcas.getRequiredFeatureDE(casType, "matchedText", "uima.cas.String", featOkTst); casFeatCode_matchedText = (null == casFeat_matchedText) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_matchedText).getCode(); casFeat_matchedTokens = jcas.getRequiredFeatureDE(casType, "matchedTokens", "uima.cas.FSArray", featOkTst); casFeatCode_matchedTokens = (null == casFeat_matchedTokens) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_matchedTokens).getCode(); } } uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/Logger.java0000644000175000017500000000363411625126464030650 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper; import org.apache.uima.util.Level; public class Logger { private org.apache.uima.util.Logger logger; private String prefix; public Logger(String prefix, org.apache.uima.util.Logger logger) { super(); this.prefix = prefix; this.logger = logger; } public Logger(org.apache.uima.util.Logger logger) { super(); this.prefix = ""; this.logger = logger; } private void log(Level level, String message) { String logMessage = prefix + " " + level.toString() + ": " + message; if (logger == null) { System.err.println(logMessage); } else { logger.log(level, logMessage); } } public void logError(String message) { log(Level.SEVERE, message); } public void logWarning(String message) { log(Level.WARNING, message); } public void logInfo(String message) { log(Level.INFO, message); } public void logFine(String message) { log(Level.FINE, message); } public void logFinest(String message) { log(Level.FINEST, message); } } uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/ConceptMapper.java0000644000175000017500000012165611625126464032176 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.apache.uima.analysis_engine.ResultSpecification; import org.apache.uima.analysis_engine.annotator.AnnotatorConfigurationException; import org.apache.uima.analysis_engine.annotator.AnnotatorContext; import org.apache.uima.analysis_engine.annotator.AnnotatorInitializationException; import org.apache.uima.analysis_engine.annotator.AnnotatorProcessException; import org.apache.uima.analysis_engine.annotator.Annotator_ImplBase; import org.apache.uima.analysis_engine.annotator.TextAnnotator; import org.apache.uima.cas.FSIndex; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.cas.text.AnnotationIndex; import org.apache.uima.cas.CAS; import org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource; import org.apache.uima.conceptMapper.support.dictionaryResource.EntryProperties; import org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource.DictEntry; import org.apache.uima.conceptMapper.support.tokens.TokenFilter; import org.apache.uima.conceptMapper.support.tokens.TokenNormalizer; import org.apache.uima.conceptMapper.support.tokens.UnknownTypeException; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; public class ConceptMapper extends Annotator_ImplBase implements TextAnnotator { /** Configuration parameter key/label for the dictionary file to load */ public static final String PARAM_DICT_FILE = "DictionaryFile"; /** * Configuration parameter for name of token class feature of token annotations, to distinguish * classes of tokens to skip during lookups. Token class features are Strings. */ public static final String PARAM_TOKENCLASSFEATURENAME = "TokenClassFeatureName"; private String tokenClassFeatureName; /** * Configuration parameter for name of token type feature of token annotations, to distinguish * types of tokens to skip during lookups. Token type features are Integers */ public static final String PARAM_TOKENTYPEFEATURENAME = "TokenTypeFeatureName"; private String tokenTypeFeatureName; /** Configuration parameter key/label for the annotation name */ public static final String PARAM_ANNOTATION_NAME = "ResultingAnnotationName"; /** * Configuration parameter key/label for the name of the feature that contains the resulting * term's span, i.e. sentence */ public static final String PARAM_ENCLOSINGSPAN = "ResultingEnclosingSpanName"; private String resultEnclosingSpanName; private Feature resultEnclosingSpan; /** * Configuration parameter feature in resulting annotation to store text matched in successful * dict lookup */ public static final String PARAM_MATCHEDFEATURE = "ResultingAnnotationMatchedTextFeature"; private String resultMatchedTextFeatureName; private Feature resultMatchedTextFeature; /** Configuration parameter key/label for the attribute list */ public static final String PARAM_ATTRIBUTE_LIST = "AttributeList"; /** Configuration parameter key/label for the feature list */ public static final String PARAM_FEATURE_LIST = "FeatureList"; /** Configuration parameter giving type of tokens */ public static final String PARAM_TOKENANNOTATION = "TokenAnnotation"; private String tokenAnnotationName; /** * Configuration parameter specifying name of token's feature containing text. If not specified, * the token annotation's covered text is used */ public static final String PARAM_TOKENTEXTFEATURENAME = "TokenTextFeatureName"; private String tokenTextFeatureName; private Feature tokenTextFeature; /** * array of features of the token annotation which should be written back to the token from the * resulting entry. For example, if a Part of Speech is specified as part of a dictionary entry, * it could be written back to the token so that a subsequent POS tagger would be able to use it * as a preannotated item. */ public static final String PARAM_TOKENCLASSWRITEBACKFEATURENAMES = "TokenClassWriteBackFeatureNames"; private String[] tokenClassWriteBackFeatureNames; private Feature[] tokenClassWriteBackFeatures; /** * Configuration parameter for name of feature in result annotations to contain list of matched * tokens */ public static final String PARAM_MATCHEDTOKENSFEATURENAME = "MatchedTokensFeatureName"; private String matchedTokensFeatureName; private Feature matchedTokensFeature; /** * Configuration parameter key/label to indicate if order-independent lookup is to be performed. * If true, words in a phrase are sorted alphabetically before lookup. This implies that a phrase * "C D A" would be considered equivalent to "A C D" and "D A C", etc. */ public static final String PARAM_ORDERINDEPENDENTLOOKUP = "OrderIndependentLookup"; private boolean sortElements; private final static int ContiguousMatch = 1; public static final String PARAMVALUE_CONTIGUOUSMATCH = "ContiguousMatch"; private final static int SkipAnyMatch = 2; public static final String PARAMVALUE_SKIPANYMATCH = "SkipAnyMatch"; private static final int SkipAnyMatchAllowOverlap = 3; public static final String PARAMVALUE_SKIPANYMATCHALLOWOVERLAP = "SkipAnyMatchAllowOverlap"; private final static int DefaultSearchStrategy = ContiguousMatch; // private final static int DefaultSearchStrategy = SkipAnyMatch; /** * Configuration parameter to indicate search strategy, either: LongestMatch: longest match of * contiguous tokens within enclosing span(taking into account included/excluded items). DEFAULT * strategy SkipAnyMatch: longest match of noncontiguous tokens enclosing span (taking into * account included/excluded items). IMPLIES order-independent lookup */ public static final String PARAM_SEARCHSTRATEGY = "SearchStrategy"; private int searchStrategy = DefaultSearchStrategy; public static final String PARAM_FINDALLMATCHES = "FindAllMatches"; private boolean findAllMatches; /** object used to stem/case normalize text */ private TokenNormalizer tokenNormalizer; private TokenFilter tokenFilter; /** The name of the annotation type posted to the CAS by this TAE */ protected String resultAnnotationName; /** The type of annotation posted to the CAS by this TAE */ protected Type resultAnnotationType; /** The type of token annotations to consider */ protected Type tokenType; /** * Array of Feature objects associated with {link #annotationType annotationType} */ protected Feature features[]; /** Array of feature names, obtained as a configuration parameter. */ protected String featureNames[]; /** * Array of attribute names for the XML dictionary token element, obtained as a configuration * parameter. */ protected String attributeNames[]; /** The dictionary */ private DictionaryResource dict; /** * type of annotation that defines a block for processing, e.g. a sentence */ private static final String PARAM_DATA_BLOCK_FS = "SpanFeatureStructure"; private String spanFeatureStructureName; private Type spanFeatureStructureType; private Logger logger; private JCas jcas; private static final String PARAM_TOKENIZERDESCRIPTOR = "TokenizerDescriptorPath"; private static final String UNKNOWN_VALUE = "unknown"; // private FileWriter tokenDebugFile; // private FileWriter potentialMatchDebugFile; // private FileWriter findMatchDebugFile; // private void debugWrite (FileWriter file, String text) // { // try // { // file.write(text + "\n"); // } // catch (Exception e) // { // } // } /** * Initialize the annotator, which includes compilation of regular expressions, fetching * configuration parameters from XML descriptor file, and loading of the dictionary file. */ public void initialize(AnnotatorContext annotatorContext) throws AnnotatorConfigurationException, AnnotatorInitializationException { super.initialize(annotatorContext); // Process configration parameters try { // logger = new Logger (annotatorContext.getLogger ()); logger = new Logger("ConceptMapper", annotatorContext.getLogger()); // tokenDebugFile = new FileWriter("/tmp/cm/tokens."+ // Calendar.getInstance ().getTimeInMillis () + ".txt"); // potentialMatchDebugFile = new FileWriter("/tmp/cm/pm."+ // Calendar.getInstance ().getTimeInMillis () + ".txt"); // findMatchDebugFile = new FileWriter("/tmp/cm/fm."+ // Calendar.getInstance ().getTimeInMillis () + ".txt"); // FileWriter dictDebugFile = new FileWriter("/tmp/cm/dict."+ // Calendar.getInstance ().getTimeInMillis () + ".txt"); tokenAnnotationName = (String) annotatorContext .getConfigParameterValue(PARAM_TOKENANNOTATION); String tokenizerDescriptor = (String) annotatorContext .getConfigParameterValue(PARAM_TOKENIZERDESCRIPTOR); tokenClassFeatureName = (String) annotatorContext .getConfigParameterValue(PARAM_TOKENCLASSFEATURENAME); tokenTypeFeatureName = (String) annotatorContext .getConfigParameterValue(PARAM_TOKENTYPEFEATURENAME); resultAnnotationName = (String) annotatorContext .getConfigParameterValue(PARAM_ANNOTATION_NAME); resultEnclosingSpanName = (String) annotatorContext .getConfigParameterValue(PARAM_ENCLOSINGSPAN); resultMatchedTextFeatureName = (String) annotatorContext .getConfigParameterValue(PARAM_MATCHEDFEATURE); featureNames = (String[]) annotatorContext.getConfigParameterValue(PARAM_FEATURE_LIST); attributeNames = (String[]) annotatorContext.getConfigParameterValue(PARAM_ATTRIBUTE_LIST); spanFeatureStructureName = (String) annotatorContext .getConfigParameterValue(PARAM_DATA_BLOCK_FS); tokenTextFeatureName = (String) annotatorContext .getConfigParameterValue(PARAM_TOKENTEXTFEATURENAME); tokenClassWriteBackFeatureNames = (String[]) annotatorContext .getConfigParameterValue(PARAM_TOKENCLASSWRITEBACKFEATURENAMES); tokenAnnotationName = (String) annotatorContext .getConfigParameterValue(PARAM_TOKENANNOTATION); matchedTokensFeatureName = (String) annotatorContext .getConfigParameterValue(PARAM_MATCHEDTOKENSFEATURENAME); Boolean sortElementsParam = (Boolean) annotatorContext .getConfigParameterValue(PARAM_ORDERINDEPENDENTLOOKUP); sortElements = (sortElementsParam == null) ? false : sortElementsParam.booleanValue(); searchStrategy = detectSearchStrategy((String) annotatorContext .getConfigParameterValue(PARAM_SEARCHSTRATEGY)); // System.err.println("SEARCH STRATEGY = " + searchStrategy); Boolean findAllMatchesParam = (Boolean) annotatorContext .getConfigParameterValue(PARAM_FINDALLMATCHES); findAllMatches = (findAllMatchesParam == null) ? false : findAllMatchesParam.booleanValue(); // always do order-independent lookup if performing "SkipAnyMatch" // lookups if (searchStrategy == SkipAnyMatch) { sortElements = true; } if (featureNames.length != attributeNames.length) { throw new Exception("AttributeList and FeatureList are inconsistent"); } // for (int i = 0; i < featureNames.length; i++ ) // { // logger.logInfo ("Attribute \"" + attributeNames [i] + "\" mapped // to feature \"" + featureNames [i] + "\""); // } tokenNormalizer = new TokenNormalizer(annotatorContext, logger); tokenFilter = new TokenFilter(tokenAnnotationName, tokenTypeFeatureName, tokenClassFeatureName, logger); tokenFilter.initConfig(annotatorContext); dict = (DictionaryResource) annotatorContext.getResourceObject(PARAM_DICT_FILE); if (!dict.isLoaded()) { // logger.logInfo("dictionary not yet loaded"); dict.loadDictionaryContents(annotatorContext, logger, tokenAnnotationName, tokenTypeFeatureName, tokenClassFeatureName, tokenizerDescriptor); // logger.logInfo( "now is loaded: "+dict.toString() ); // System.err.println ("NEW DICTIONARY:\n" + dict.toString()); // debugWrite (dictDebugFile, dict.toString()); } } catch (Exception e) { throw new AnnotatorConfigurationException(e); } } private int detectSearchStrategy(String strategyString) throws AnnotatorConfigurationException { if ((strategyString == null) || (strategyString.equals(""))) { return DefaultSearchStrategy; } else if (strategyString.equals(PARAMVALUE_CONTIGUOUSMATCH)) { return ContiguousMatch; } else if (strategyString.equals(PARAMVALUE_SKIPANYMATCH)) { return SkipAnyMatch; } else if (strategyString.equals(PARAMVALUE_SKIPANYMATCHALLOWOVERLAP)) { return SkipAnyMatchAllowOverlap; } else { throw new AnnotatorConfigurationException(); } } /** * Perform local type system initialization. * * @param typeSystem * the current type system. * @see org.apache.uima.analysis_engine.annotator.TextAnnotator#typeSystemInit(TypeSystem) */ public void typeSystemInit(TypeSystem typeSystem) throws AnnotatorConfigurationException, AnnotatorInitializationException { tokenType = typeSystem.getType(tokenAnnotationName); if (tokenType == null) { logger.logError(PARAM_TOKENANNOTATION + " '" + tokenAnnotationName + "' specified, but does not exist"); throw new AnnotatorInitializationException(); } if ((tokenTextFeatureName == null) || (tokenTextFeatureName.equals(""))) { tokenTextFeature = null; } else { tokenTextFeature = tokenType.getFeatureByBaseName(tokenTextFeatureName); if (tokenTextFeature == null) { logger.logError(PARAM_TOKENTEXTFEATURENAME + " '" + tokenTextFeatureName + "' specified, but does not exist for type: " + tokenType.getName()); throw new AnnotatorInitializationException(); } } if ((tokenClassWriteBackFeatureNames != null) && (tokenClassWriteBackFeatureNames.length > 0)) { tokenClassWriteBackFeatures = new Feature[tokenClassWriteBackFeatureNames.length]; for (int i = 0; i < tokenClassWriteBackFeatureNames.length; i++) { tokenClassWriteBackFeatures[i] = tokenType .getFeatureByBaseName(tokenClassWriteBackFeatureNames[i]); if (tokenClassWriteBackFeatures[i] == null) { logger.logError(PARAM_TOKENCLASSWRITEBACKFEATURENAMES + "[" + i + "] '" + tokenClassWriteBackFeatureNames[i] + "' specified, but does not exist for type: " + tokenType.getName()); throw new AnnotatorInitializationException(); } } } else { tokenClassWriteBackFeatures = null; } spanFeatureStructureType = typeSystem.getType(spanFeatureStructureName); if (spanFeatureStructureType == null) { logger.logError(PARAM_DATA_BLOCK_FS + " '" + spanFeatureStructureName + "' specified, but does not exist for type: " + tokenType.getName()); throw new AnnotatorInitializationException(); } resultAnnotationType = typeSystem.getType(resultAnnotationName); if (resultAnnotationType == null) { logger.logError(PARAM_ANNOTATION_NAME + " '" + resultAnnotationName + "' specified, but does not exist"); throw new AnnotatorInitializationException(); } if ((resultEnclosingSpanName == null) || (resultEnclosingSpanName.equals(""))) { resultEnclosingSpan = null; } else { resultEnclosingSpan = resultAnnotationType.getFeatureByBaseName(resultEnclosingSpanName); if (resultEnclosingSpan == null) { logger.logError(PARAM_ENCLOSINGSPAN + " '" + resultEnclosingSpanName + "' specified, but does not exist for type: " + resultAnnotationType.getName()); throw new AnnotatorInitializationException(); } } if ((resultMatchedTextFeatureName == null) || (resultMatchedTextFeatureName.equals(""))) { resultMatchedTextFeature = null; } else { resultMatchedTextFeature = resultAnnotationType .getFeatureByBaseName(resultMatchedTextFeatureName); if (resultMatchedTextFeature == null) { logger.logError(PARAM_MATCHEDFEATURE + " '" + resultMatchedTextFeatureName + "' specified, but does not exist for type: " + resultAnnotationType.getName()); throw new AnnotatorInitializationException(); } } if ((matchedTokensFeatureName == null) || (matchedTokensFeatureName.equals(""))) { matchedTokensFeature = null; } else { matchedTokensFeature = resultAnnotationType.getFeatureByBaseName(matchedTokensFeatureName); if (matchedTokensFeature == null) { logger.logError(PARAM_MATCHEDTOKENSFEATURENAME + " '" + matchedTokensFeatureName + "' specified, but does not exist for type: " + resultAnnotationType.getName()); throw new AnnotatorInitializationException(); } } int numFeatures = featureNames.length; features = new Feature[numFeatures]; for (int i = 0; i < numFeatures; i++) { features[i] = resultAnnotationType.getFeatureByBaseName(featureNames[i]); if (features[i] == null) { logger.logError(PARAM_FEATURE_LIST + "[" + i + "] '" + featureNames[i] + "' specified, but does not exist for type: " + resultAnnotationType.getName()); // System.err.println (PARAM_FEATURE_LIST + "[" + i + "] '" + // featureNames[i] + "' specified, but does not exist for type: // " + resultAnnotationType.getName()); throw new AnnotatorInitializationException(); } } try { tokenFilter.initTypes(typeSystem); } catch (UnknownTypeException e) { throw new AnnotatorInitializationException(e); } } /** * Perform the actual analysis. Iterate over the document content looking for any matching words * or phrases in the loaded dictionary and post an annotation for each match found. * * @param tcas * the current CAS to process. * @param aResultSpec * a specification of the result annotation that should be created by this annotator * * @see org.apache.uima.analysis_engine.annotator.TextAnnotator#process(CAS,ResultSpecification) */ public void process(CAS tcas, ResultSpecification aResultSpec) throws AnnotatorProcessException { // System.err.println ("ConceptMapper.process() begin"); AnnotationFS token; try { setJCas(tcas.getJCas()); // this is needed to get around an issue // where UIMA crashes if no JCas is // referenced // logger.setupDocument (getJCas ()); FSIndex dbIndex = tcas.getAnnotationIndex(spanFeatureStructureType); FSIterator spanIterator = dbIndex.iterator(); AnnotationIndex tokenIndex = (AnnotationIndex) tcas.getAnnotationIndex(tokenType); while (spanIterator.hasNext()) { ArrayList tokens = new ArrayList(2048); Annotation spanAnnotation = (Annotation) spanIterator.next(); FSIterator tokenIter = tokenIndex.subiterator(spanAnnotation); // System.err.println ("Tokens:"); // get all tokens for the specified block while (tokenIter.hasNext()) { token = (AnnotationFS) tokenIter.next(); // System.err.print ("--> token: '" + token.getCoveredText() // + "' "); if (tokenFilter.isOK_Token(token, tokenNormalizer)) { // System.err.println("--> ADDING token: " + // token.getCoveredText()); // debugWrite(tokenDebugFile, "--> ADDING token: " + // token.getCoveredText() + ", type: " + // token.getIntValue (tokenTypeFeature) + ", checkType: // " + checkTokenType (token)); tokens.add(token); } // else // { // System.err.println("-->NOT! ADDING token: " + // token.getCoveredText()); // debugWrite(tokenDebugFile, "-->NOT! ADDING token: " + // token.getCoveredText() + ", type: " + token.getIntValue // (tokenTypeFeature) + ", checkType: " + checkTokenType // (token)); // } } // System.err.println (); // logger.logInfo("Number of tokens: " + tokens.size()); switch (searchStrategy) { case SkipAnyMatch: case SkipAnyMatchAllowOverlap: processTokenListSkipAny(searchStrategy, findAllMatches, tcas, tokens, spanAnnotation); break; case ContiguousMatch: processTokenList(searchStrategy, findAllMatches, tcas, tokens, spanAnnotation); break; default: processTokenList(searchStrategy, findAllMatches, tcas, tokens, spanAnnotation); break; } } // logger.logFinest("Number of annotations in CAS: " + // (tcas.getAnnotationIndex().size() - 1)); // System.out.println("Number of annotations in CAS: " + // (tcas.getAnnotationIndex().size() - 1)); } catch (Exception e) { throw new AnnotatorProcessException(e); } // System.err.println ("ConceptMapper.process() end"); } private void setJCas(JCas jcas) { this.jcas = jcas; } private JCas getJCas() { return this.jcas; } private void processTokenListSkipAny(int searchStrategy, boolean findAllMatches, CAS tcas, ArrayList tokens, Annotation spanAnnotation) { AnnotationFS token; // iterate over vector of tokens ArrayList normalizedTokens = new ArrayList(); // iterate through all tokens within span and collect dict entries for each unique one for (int whichToken = 0; whichToken < tokens.size(); whichToken++) { token = tokens.get(whichToken); String tokenText = getTokenText(token); String word = tokenNormalizer.normalize(tokenText); normalizedTokens.add(word); // logger.logInfo("ENTRY SEARCH/ORIGINAL: " + word + " / " + // tokenText); // System.err.println("ENTRY SEARCH/ORIGINAL: " + word + " / " + // tokenText); } // System.err.println ("processTokenListSkipAny finding matches for " + // normalizedTokens.toString ()); findMatchesSkipAnyToken(searchStrategy, findAllMatches, tcas, tokens, normalizedTokens, findPotentialEntries(normalizedTokens, dict), spanAnnotation); } private Map> findPotentialEntries( ArrayList normalizedTokens, DictionaryResource dict) { HashMap> potentialEntries = new HashMap>(); Iterator tokenIter = normalizedTokens.iterator(); while (tokenIter.hasNext()) { String word = tokenIter.next(); Collection entries = potentialEntries.get(word); if (entries == null) { entries = new ArrayList(); } DictionaryResource.DictEntriesByLength entriesByLength = dict.getEntries(word); if (entriesByLength != null) { int shortest = entriesByLength.getShortest().intValue(); int longest = entriesByLength.getLongest().intValue(); for (int currentLength = longest; currentLength >= shortest; currentLength--) { DictionaryResource.DictEntries dictEntries = entriesByLength.getEntries(currentLength); if (dictEntries != null) { ArrayList entryItems = dictEntries.getEntries(); Iterator entryIter = entryItems.iterator(); while (entryIter.hasNext()) { DictionaryResource.DictEntry entry = (DictionaryResource.DictEntry) entryIter.next(); // System.err.println("entryIter = " + entryIter + // ", Entry: " + entry.getText ()); // debugWrite (potentialMatchDebugFile, "Entry: " + // entry.getText ()); if ((containsAll (normalizedTokens, entry.getElements())) && (!entries.contains(entry))) { entries.add(entry); // System.err.println ("Added potential match: " // + entry); // debugWrite (potentialMatchDebugFile, "Added // potential match: " + entry); } } } } } potentialEntries.put(word, entries); } return potentialEntries; } private boolean containsAll (List container, String[] contained) { for (String item : contained) { if (! container.contains (item)) { return false; } } return true; } /** * @param searchStrategy * @param tcas * @param tokens * list of token annotations * @param normalizedTokens * list of token annotations as strings * @param potentialEntries * list of possible matches from dictionary * @param spanAnnotation */ private void findMatchesSkipAnyToken(int searchStrategy, boolean findAllMatches, CAS tcas, ArrayList tokens, ArrayList normalizedTokens, Map> potentialEntries, Annotation spanAnnotation) { int whichToken = 0; // use index instead of iterator to simplify walking // through parallel arrays (tokens/normalizedTokens) while (whichToken < normalizedTokens.size()) { // System.err.println ("findMatchesSkipAnyToken(), whichToken = " + // whichToken + ", token: " + (String) normalizedTokens.get // (whichToken)); Collection entries = potentialEntries.get(normalizedTokens.get(whichToken)); if (entries == null) { whichToken += 1; } else { Iterator entryIter = entries.iterator(); boolean foundMatch = false; while ((entryIter.hasNext() && (!foundMatch))) { DictionaryResource.DictEntry entry = entryIter.next(); // System.err.println("entryIter = " + entryIter + ", Entry: // " + entry.getText ()); // debugWrite (findMatchDebugFile, "Entry: " + entry.getText // ()); // System.err.println("remainingTokens = " + // normalizedTokens.subList (whichToken, // normalizedTokens.size ()).toString ()); // debugWrite (findMatchDebugFile, "remainingTokens = " + // normalizedTokens.subList (whichToken, // normalizedTokens.size ()).toString ()); if (containsAll (normalizedTokens.subList(whichToken, normalizedTokens.size()), entry.getElements())) { int lengthOfMatch = processMatch(tcas, tokens, normalizedTokens, spanAnnotation, whichToken, entry); if (!findAllMatches) { foundMatch = true; if (searchStrategy == SkipAnyMatchAllowOverlap) { whichToken += 1; } else { whichToken += lengthOfMatch; } // System.err.println ("Processed match, whichToken // = " + whichToken); // debugWrite (findMatchDebugFile, "Processed match, // whichToken = " + whichToken); } } } if (!foundMatch) { whichToken += 1; } } } } /** * @param tcas * @param tokens * list of token annotations * @param normalizedTokens * list of token annotations as strings * @param spanAnnotation * @param whichToken * current token index (for tokens/normalizedTokens) * @param entry * matching dict entry * @return length of match (in tokens) */ private int processMatch(CAS tcas, ArrayList tokens, ArrayList normalizedTokens, Annotation spanAnnotation, int whichToken, DictionaryResource.DictEntry entry) { int startingPoint = whichToken; TreeMap entryOccurences = findEntryOccurences(entry.getElements(), whichToken); int begin = -1; int end = 0; StringBuilder matchedText = new StringBuilder(); // while there are still items to match against ArrayList matched = new ArrayList(); while ((!entryOccurences.isEmpty()) && (whichToken < normalizedTokens.size())) { String currentTokenText = normalizedTokens.get(whichToken); // System.err.println ("matchedText: '" + matchedText + "', // whichToken = " + whichToken + ", currentTokenText: " + // currentTokenText); // if the dict entry contains at least one more of the current // token, process it Integer count = entryOccurences.get(currentTokenText); if (count != null) { if (matchedText.length() != 0) { matchedText.append(' '); } matchedText.append(currentTokenText); // System.err.println ("matchedText: '" + matchedText + "'"); AnnotationFS realToken = tokens.get(whichToken); // System.err.println ("realToken: '" + realToken.getCoveredText // () + ", count.intValue () = " + count.intValue ()); begin = (begin == -1) ? realToken.getBegin() : Math.min(begin, realToken.getBegin()); end = Math.max(end, realToken.getEnd()); matched.add(realToken); // decrement count, or remove entry if none left if (count.intValue() == 1) { entryOccurences.remove(currentTokenText); } else { entryOccurences.put(currentTokenText, Integer.valueOf (count.intValue() - 1)); } } whichToken += 1; } if (entryOccurences.isEmpty()) { // System.err.println ("makeAnnotation, text: " + // matchedText.toString ()); makeAnnotation(tcas, begin, end, entry.getProperties(), spanAnnotation, matchedText .toString(), matched, logger); } // else // { // System.err.println ("whichToken = " + whichToken + ", // normalizedTokens.size = " + normalizedTokens.size ()); // } return whichToken - startingPoint; } // generate a map from tokens to number of occurences of that token private TreeMap findEntryOccurences(String[] normalizedTokens, int whichToken) { TreeMap result = new TreeMap(); for (String token : normalizedTokens) { Integer count = result.get(token); if (count == null) { count = Integer.valueOf (1); } else { count = Integer.valueOf (count.intValue() + 1); } result.put(token, count); } return result; } /** * @param searchStrategy * @param tcas * @param tokens * @param spanAnnotation */ protected void processTokenList(int searchStrategy, boolean findAllMatches, CAS tcas, ArrayList tokens, Annotation spanAnnotation) { AnnotationFS token; // iterate over vector of tokens int whichToken = 0; int entryLength = 0; while (whichToken < tokens.size()) { token = tokens.get(whichToken); String tokenText = getTokenText(token); entryLength = 0; String word = tokenNormalizer.normalize(tokenText); // logger.logInfo("ENTRY SEARCH/ORIGINAL: " + word + " / " + // tokenText); // System.err.println("ENTRY SEARCH/ORIGINAL: " + word + ", Token[" // + whichToken + "]: " + tokenText); DictionaryResource.DictEntriesByLength entriesByLength = dict.getEntries(word); if (entriesByLength != null) { entryLength = Math.min(entriesByLength.getLongest().intValue(), (tokens.size() - whichToken)); // logger.logInfo("ENTRY FOUND for: " + word + ", longest: " + // entryLength + ", shortest: " + minLength); // System.err.println("ENTRY FOUND for: " + word + ", longest: " // + entryLength + ", shortest: " + minLength); // System.err.println("ENTRY FOUND for: " + word + ", longest: " // + entryLength); entryLength = defaultMatcher(findAllMatches, tcas, tokens, spanAnnotation, whichToken, entryLength, token.getBegin(), entriesByLength, entriesByLength.getShortest() .intValue()); } whichToken += entryLength + 1; } } private int defaultMatcher(boolean findAllMatches, CAS tcas, ArrayList tokens, Annotation spanAnnotation, int whichToken, int entryLength, int start, DictionaryResource.DictEntriesByLength lengthEntries, int minLength) { boolean entryFound = false; // search through all entry lengths, as necessary while ((!entryFound) && (entryLength >= minLength)) { String [] tokensToMatch = buildTokensToMatchArray(tokens, whichToken, entryLength, sortElements); //System.err.print(">>> tokensToMatch: '"); //for (String token : tokensToMatch) { // System.err.print(token + " "); //} //System.err.println("'"); DictionaryResource.DictEntries entriesByLength = lengthEntries.getEntries(entryLength); // System.err.println(">>> entriesByLength = " + entriesByLength); if (entriesByLength != null) { ArrayList entries = entriesByLength.getEntries(); Collection resultEntries = findMatchingEntry(entries, tokensToMatch); Iterator resultEntriesIterator = resultEntries.iterator(); AnnotationFS endToken = tokens.get(whichToken + entryLength - 1); while (resultEntriesIterator.hasNext()) { DictionaryResource.DictEntry dictEntry = resultEntriesIterator.next (); // System.err.println("===> MATCH: '" + tokensToMatch + "'"); // System.err.println(">>>"+dictEntry.getUnsorted() ); makeAnnotation(tcas, start, endToken.getEnd(), dictEntry.getProperties(), spanAnnotation, dictEntry.getUnsorted(), tokens.subList(whichToken, whichToken + entryLength), logger); updateTokenAnnotations(tokens, whichToken, entryLength, dictEntry); if (!findAllMatches) { entryFound = true; } } } entryLength--; } if (!entryFound) { entryLength = 0; } return entryLength; } /** * update token annotations with value stored in dictionary for feature provided by * tokenClassFeatureName * * @param tokens * @param whichToken * @param entryLength * @param dictEntry */ private void updateTokenAnnotations(ArrayList tokens, int whichToken, int entryLength, DictEntry dictEntry) { if (tokenClassWriteBackFeatures != null) { for (int feature = 0; feature < tokenClassWriteBackFeatures.length; feature++) { if (tokenClassWriteBackFeatures[feature] != null) { String propVal = dictEntry.getProperties().getProperty( tokenClassWriteBackFeatureNames[feature], UNKNOWN_VALUE); // System.err.println ("propVal: " + ": " + propVal); for (int i = whichToken; i < whichToken + entryLength; i++) { AnnotationFS tokenToUpdate = tokens.get(i); // System.err.println ("Token: " + tokenToUpdate.getText // ()); tokenToUpdate.setStringValue(tokenClassWriteBackFeatures[feature], propVal); } } } } } /** * @param start * @param end * @param properties * @param matched */ protected void makeAnnotation(CAS tcas, int start, int end, EntryProperties properties, Annotation spanAnnotation, String matchedText, Collection matched, Logger log) { AnnotationFS annotation = tcas.createAnnotation(resultAnnotationType, start, end); if (resultEnclosingSpan != null) { annotation.setFeatureValue(resultEnclosingSpan, spanAnnotation); } if (resultMatchedTextFeature != null) { annotation.setStringValue(resultMatchedTextFeature, matchedText); } if (matchedTokensFeature != null) { FSArray matchedTokens = new FSArray(getJCas(), matched.size()); FeatureStructure[] featureStructArray = new FeatureStructure[matched.size()]; matched.toArray(featureStructArray); matchedTokens.copyFromArray(featureStructArray, 0, 0, featureStructArray.length); annotation.setFeatureValue(matchedTokensFeature, matchedTokens); /* * FSArray tmp = (FSArray) annotation.getFeatureValue (matchedTokensFeature); FeatureStructure [] * tmpfs = tmp.toArray (); System.err.println ("FSArray: begin"); for (int i = 0; i < * tmpfs.length; i++) { System.err.println (((Annotation) tmpfs[i]).getCoveredText ()); } * System.err.println ("FSArray: done"); */ } for (int featIndex = 0; featIndex < features.length; featIndex++) { if (features[featIndex] != null) { annotation.setStringValue(features[featIndex], properties.getProperty( attributeNames[featIndex], UNKNOWN_VALUE)); } else { // String message = "Feature '" + features[featIndex].getName() + "' not found in type '" + // resultAnnotationName + "'"; String message = "Feature '" + featIndex + "' not found in type '" + resultAnnotationName + "'"; // System.err.println(message); log.logWarning(message); } } tcas.getIndexRepository().addFS(annotation); } /** * @param entries * @param tokensToMatch * @return */ private Collection findMatchingEntry(ArrayList entries, String [] tokensToMatch) { //System.err.print("Searching for: '"); //for (String token : tokensToMatch) { // System.err.print(token + " "); //} //System.err.println("'"); Collection result = new ArrayList (); for (int i = 0; i < entries.size(); i++) { DictionaryResource.DictEntry dictEntry = entries.get(i); String[] entryText = dictEntry.getElements(); // System.err.println("--> trying: '" + entryText.toString() + "'"); if (entryText.length == tokensToMatch.length) { boolean match = true; int item = 0; for (String entryTextItem : entryText) { if (! entryTextItem.equals(tokensToMatch[item])) { match = false; break; } item += 1; } if (match) { result.add (dictEntry); } } } return result; } /** * @param tokens * @param length * @return */ private String[] buildTokensToMatchArray(ArrayList tokens, int startIndex, int length, boolean sortElements) { String[] elements = new String[length]; for (int i = startIndex; i < length + startIndex; i++) { AnnotationFS token = tokens.get(i); elements[i - startIndex] = tokenNormalizer.normalize(getTokenText(token)); } if (sortElements) { Arrays.sort(elements); } return elements; } private String getTokenText(AnnotationFS token) { if (tokenTextFeature == null) { return token.getCoveredText(); } else { return token.getStringValue(tokenTextFeature); } } } uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/0000755000175000017500000000000011625126462030272 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/stemmer/0000755000175000017500000000000011625126462031746 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/stemmer/Stemmer.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/stemmer/Stemmer.0000644000175000017500000000332211625126462033363 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.stemmer; import java.io.FileNotFoundException; import java.text.ParseException; /** * Interface for stemmer. Two methods are defined: * * {@link #stem stem()}, which takes a single token in as a String and returns the * stemmed token as a String. {@link #stem initialize ()}, which takes a dictionary * path as a String loads it. * * */ public interface Stemmer { /** * Take a single token in as a String, stem the token, and return the stemmed * token as a String. * * @param token * the input token to stem * @return the stemmed token */ public String stem(String token); /** * Initialize the stemmer with a dictionary */ public void initialize(String dictionary) throws FileNotFoundException, ParseException; } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/stemmer/JunkStemmer.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/stemmer/JunkStem0000644000175000017500000000235311625126462033434 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.stemmer; /* * Implements the Stemmer interface, but does nothing */ public class JunkStemmer implements Stemmer { /** * */ public JunkStemmer() { super(); } public String stem(String token) { System.err.println("Junk Stemming: " + token); return (token); } public void initialize(String dictionary) { // do nothing } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000755000175000017500000000000011625126464033562 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/EntryProperties.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000644000175000017500000000453611625126464033574 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.dictionaryResource; import java.io.Serializable; public class EntryProperties implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String [] properties; private EntryPropertiesRoot entryPropertiesRoot; /** * * @param root * @param maxNumberOfProperties * @throws NullPointerException * * should only be called by factory */ public EntryProperties (EntryPropertiesRoot root, int maxNumberOfProperties) throws NullPointerException { if (root == null) { throw new NullPointerException ("EntryPropertiesRoot cannot be null"); } entryPropertiesRoot = root; properties = new String [maxNumberOfProperties]; } public EntryProperties (EntryProperties toCopyFrom) { entryPropertiesRoot = toCopyFrom.entryPropertiesRoot; properties = toCopyFrom.properties.clone(); } public String getProperty(String propertyName) { return getProperty(propertyName, null); } public String getProperty(String propertyName, String defaultValue) { int propertyID = entryPropertiesRoot.getPropertyID (propertyName); if (propertyID < 0) { return defaultValue; } else { return properties[propertyID]; } } public void setProperty(String propertyName, String propertyValue) { int propertyID = entryPropertiesRoot.getPropertyID (propertyName); if (propertyID < 0) { // do nothing } else { properties[propertyID] = propertyValue; } } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/DictionaryLoaderException.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000644000175000017500000000256211625126464033571 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.dictionaryResource; public class DictionaryLoaderException extends Exception { /** * */ private static final long serialVersionUID = -8996670807380390034L; public DictionaryLoaderException() { super(); } public DictionaryLoaderException(String message) { super(message); } public DictionaryLoaderException(Throwable cause) { super(cause); } public DictionaryLoaderException(String message, Throwable cause) { super(message, cause); } } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/annotatorAdaptor/uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000755000175000017500000000000011625126462033560 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/annotatorAdaptor/AnnotatorAdaptor.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000644000175000017500000001275611625126462033575 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.dictionaryResource.annotatorAdaptor; import java.io.IOException; import java.net.MalformedURLException; import java.util.Vector; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.conceptMapper.Logger; import org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryLoaderException; import org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryToken; import org.apache.uima.conceptMapper.support.tokens.TokenFilter; import org.apache.uima.conceptMapper.support.tokens.UnknownTypeException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceManager; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.XMLInputSource; public class AnnotatorAdaptor { private ResourceSpecifier aeSpecifier; private AnalysisEngine ae; private CAS cas; private Vector result; private TokenFilter tokenFilter; private String tokenTypeName; private Type tokenType; private Feature tokenTypeFeature; private Feature tokenClassFeature; // private static Set tokenAnnotationSubTypes = null; private boolean typeSystemInitialized = false; private String langID; private Logger logger; public AnnotatorAdaptor(String analysisEngineDescriptorPath, Vector result, String tokenTypeName, TokenFilter tokenFilter, String langID, Logger logger) throws DictionaryLoaderException { super(); try { aeSpecifier = UIMAFramework.getXMLParser().parseResourceSpecifier( new XMLInputSource(analysisEngineDescriptorPath)); this.tokenTypeName = tokenTypeName; this.tokenTypeFeature = tokenFilter.getTokenTypeFeature(); this.tokenClassFeature = tokenFilter.getTokenClassFeature(); this.tokenFilter = tokenFilter; this.langID = langID; this.result = result; this.logger = logger; } catch (InvalidXMLException e) { throw new DictionaryLoaderException(e); } catch (IOException e) { throw new DictionaryLoaderException(e); } } public void initCPM() throws DictionaryLoaderException { try { ResourceManager resMgr = UIMAFramework.newDefaultResourceManager(); String dp = System.getProperty("uima.datapath"); if (null != dp) { resMgr.setDataPath(dp); } ae = UIMAFramework.produceAnalysisEngine(aeSpecifier); cas = ae.newCAS(); } catch (ResourceInitializationException e) { throw new DictionaryLoaderException(e); } catch (MalformedURLException e) { throw new DictionaryLoaderException(e); } } public void runCPM(String text) { cas.setDocumentText(text); cas.setDocumentLanguage(langID); try { ae.process(cas); } catch (AnalysisEngineProcessException e) { e.printStackTrace(); } processCAS(cas); cas.reset(); } private void processCAS(CAS cas) { if (cas == null) { } else { try { // System.err.println ("processCAS(), doc text: " + cas.getDocumentText()); result.clear(); if (!typeSystemInitialized) { TypeSystem typeSystem = cas.getTypeSystem(); tokenFilter.initTypes(typeSystem, false); tokenType = typeSystem.getType(tokenTypeName); typeSystemInitialized = true; } FSIterator tokenIter = cas.getIndexRepository().getAllIndexedFS(tokenType); // System.err.println ("any tokens found? " + tokenIter.hasNext ()); while (tokenIter.hasNext()) { AnnotationFS annotation = (AnnotationFS) tokenIter.next(); result.add(new DictionaryToken(annotation, tokenTypeFeature, tokenClassFeature)); } if (result.size () == 0) { // System.err.println ("Dictionary tokenization of: '" + cas.getDocumentText() + "' produced no tokens of type: '" + tokenType.getName () + "'"); logger.logWarning ("Dictionary tokenization of: '" + cas.getDocumentText() + "' produced no tokens of type: '" + tokenType.getName () + "'"); } } catch (UnknownTypeException e) { System.err.println(e.getMessage()); e.printStackTrace(); } } } } ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/DictionaryToken.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000644000175000017500000000525011625126464033566 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.dictionaryResource; import org.apache.uima.cas.Feature; import org.apache.uima.cas.text.AnnotationFS; public class DictionaryToken { private String text; private Integer type; private String tokenClass; private boolean tokenTypeFeatureDefined; private boolean tokenClassFeatureDefined; public DictionaryToken(AnnotationFS annotation, Feature tokenTypeFeature, Feature tokenClassFeature) { super(); if (tokenTypeFeature == null) { this.setTokenTypeFeatureDefined(false); } else { this.setTokenTypeFeatureDefined(true); this.setType(annotation.getIntValue(tokenTypeFeature)); } if (tokenClassFeature == null) { this.setTokenClassFeatureDefined(false); } else { this.setTokenClassFeatureDefined(true); this.setTokenClass(annotation.getStringValue(tokenClassFeature)); } this.setText(annotation.getCoveredText()); } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getTokenClass() { return tokenClass; } public void setTokenClass(String tokenClass) { this.tokenClass = tokenClass; } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public boolean isTokenTypeFeatureDefined() { return tokenTypeFeatureDefined; } public void setTokenTypeFeatureDefined(boolean tokenTypeFeatureDefined) { this.tokenTypeFeatureDefined = tokenTypeFeatureDefined; } public boolean isTokenClassFeatureDefined() { return tokenClassFeatureDefined; } public void setTokenClassFeatureDefined(boolean tokenClassFeatureDefined) { this.tokenClassFeatureDefined = tokenClassFeatureDefined; } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/DictionaryResource.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000644000175000017500000000774311625126464033577 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.dictionaryResource; import java.io.Serializable; import java.util.ArrayList; import java.util.Enumeration; import org.apache.uima.analysis_engine.annotator.AnnotatorContext; import org.apache.uima.conceptMapper.Logger; import org.apache.uima.resource.DataResource; import org.apache.uima.resource.ResourceInitializationException; /* * Interface for external UIMA dictionary resource */ public interface DictionaryResource { // shared resource loader public void load(DataResource data) throws ResourceInitializationException; public DictionaryResource newDictionaryResource(int initialSize); public EntryPropertiesRoot getEntryPropertiesRoot (); public interface DictEntriesByLength extends Serializable { public DictEntries getEntries(int length); void putEntry(int length, String[] elements, String unsorted, EntryProperties props); public Integer getLongest(); public Integer getShortest(); } public interface DictEntries extends Serializable { /** * @param elements * @param unsorted * @param props */ void putEntry(String[] elements, String unsorted, EntryProperties props); /** * @return list of dictionary entries */ ArrayList getEntries(); public String toString(); } public interface DictEntry extends Serializable { public void setElements(String[] elements); public String[] getElements(); public String getUnsorted(); public void setUnsorted(String text); public EntryProperties getProperties(); public void setProperties(EntryProperties props); public String toString(); } /** * return data structure containing a list of dictionary entries, sorted by number of tokens * * @param key * @return data structure containing a list of dictionary entries, sorted by number of tokens */ public DictEntriesByLength getEntries(String key); /** * @param key * the key to index on * @param tokens * array of tokens to be entered in the dictionary * @param unsortedEntry * String representation of tokens to be entered in the dictionary in sorted order, if * "entry" is sorted, otherwise null * @param length * Number of tokens in entry * @param props * the properties object for the dictionary entry */ public void putEntry(String key, String[] tokens, String unsortedEntry, int length, EntryProperties props); public Enumeration keys(); public String toString(); /** * @param context * @param logger * @param tokenAnnotationName * @param tokenTypeFeatureName * @param tokenClassFeatureName * @param tokenizerDescriptor * @throws ResourceInitializationException */ public void loadDictionaryContents(AnnotatorContext context, Logger logger, String tokenAnnotationName, String tokenTypeFeatureName, String tokenClassFeatureName, String tokenizerDescriptor) throws ResourceInitializationException; public boolean isLoaded(); } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/EntryPropertiesRoot.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000644000175000017500000000372711625126462033573 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.dictionaryResource; import java.io.Serializable; import java.util.Arrays; public class EntryPropertiesRoot implements Serializable { /** * */ private static final long serialVersionUID = -4158518283347402903L; private String [] propertyNames = null; public EntryPropertiesRoot (String [] thePropertyNames) { if (propertyNames == null) { propertyNames = new String [thePropertyNames.length]; int i = 0; for (String prop : thePropertyNames) { propertyNames[i] = prop; i += 1; } Arrays.sort(propertyNames); } } public String [] propertyNames () { return propertyNames; } public int getPropertyID(String propertyName) { return Arrays.binarySearch(propertyNames, propertyName); } public EntryProperties newEntryProperties () throws NullPointerException { if (propertyNames == null) { throw new NullPointerException ("EntryProperties not initialized via EntryProperties.init()"); } return new EntryProperties (this, propertyNames.length); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/CompiledDictionaryResource_impl.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000644000175000017500000000616511625126464033574 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.dictionaryResource; import java.io.IOException; import java.io.ObjectInputStream; import java.util.Enumeration; import java.util.Hashtable; import org.apache.uima.analysis_engine.annotator.AnnotatorContext; import org.apache.uima.conceptMapper.Logger; import org.apache.uima.resource.DataResource; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.SharedResourceObject; /** * Implementation of a UIMA DictionaryResource */ public class CompiledDictionaryResource_impl implements DictionaryResource, SharedResourceObject { /** * Hashtable of first words. Contains a DictEntries object keyed on word string for the first word * of every entry in the specified dictionary. */ protected Hashtable dictImpl; protected EntryPropertiesRoot entryPropertiesRoot; public DictionaryResource newDictionaryResource(int initialSize) { throw new UnsupportedOperationException(); } public DictEntriesByLength getEntries(String key) { return dictImpl.get(key); } public boolean isLoaded() { return true; } public Enumeration keys() { return dictImpl.keys(); } @SuppressWarnings("unchecked") public void load(DataResource data) throws ResourceInitializationException { try { ObjectInputStream ois = new ObjectInputStream(data.getInputStream()); entryPropertiesRoot = (EntryPropertiesRoot) ois.readObject(); dictImpl = (Hashtable) ois.readObject(); ois.close(); } catch (IOException e) { throw new ResourceInitializationException(e); } catch (ClassNotFoundException e) { throw new ResourceInitializationException(e); } } public void loadDictionaryContents(AnnotatorContext context, Logger logger, String tokenAnnotationName, String tokenTypeFeatureName, String tokenClassFeatureName, String tokenizerDescriptor) throws ResourceInitializationException { // nothing to do } public void putEntry(String key, String[] tokens, String unsortedEntry, int length, EntryProperties props) { throw new UnsupportedOperationException(); } public EntryPropertiesRoot getEntryPropertiesRoot() { return entryPropertiesRoot; } }././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResource/DictionaryResource_impl.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/dictionaryResour0000644000175000017500000010167011625126464033571 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.dictionaryResource; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.TreeMap; import java.util.Vector; import java.util.regex.Pattern; import org.apache.uima.analysis_engine.annotator.AnnotatorContext; import org.apache.uima.conceptMapper.Logger; import org.apache.uima.conceptMapper.support.dictionaryResource.annotatorAdaptor.AnnotatorAdaptor; import org.apache.uima.conceptMapper.support.tokens.TokenFilter; import org.apache.uima.conceptMapper.support.tokens.TokenNormalizer; import org.apache.uima.resource.DataResource; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.SharedResourceObject; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; /* * @version $Revision: 1.5 $ * * @author Michael Tanenblatt @author (c) Copyright 2005 IBM @author All Rights * Reserved */ /** * Implementation of a UIMA DictionaryResource */ public class DictionaryResource_impl implements DictionaryResource, SharedResourceObject { /** Dictionary file loader. Uses an XML parser. */ protected DictLoader dictLoader; /** * Hashtable of first words. Contains a DictEntries object keyed on word string for the first word * of every entry in the specified dictionary. */ protected Hashtable dictImpl; protected EntryPropertiesRoot entryPropertiesRoot; /** Initial size of dict */ protected static final int NumOfInitialDictEntries = 500000; boolean loaded; /** Patterns to for matcher to replace SGML &lt; entities */ private static final Pattern ltPattern = Pattern.compile("<"); /** Patterns to for matcher to replace SGML &gt; entities */ private static final Pattern gtPattern = Pattern.compile(">"); /** Patterns to for matcher to replace SGML &apos; entities */ private static final Pattern aposPattern = Pattern.compile("'"); /** Patterns to for matcher to replace SGML &quot; entities */ private static final Pattern quotPattern = Pattern.compile("""); /** Patterns to for matcher to replace SGML &amp; entities */ private static final Pattern ampPattern = Pattern.compile("&"); /** Configuration parameter key/label for the order independent lookup indicator */ public static final String PARAM_ORDERINDEPENDENTLOOKUP = "OrderIndependentLookup"; private boolean sortElements = false; /** Configuration parameter key/label to indicate whether dictionary should be printed upon load */ public static final String PARAM_DUMPDICT = "PrintDictionary"; private boolean dumpDict = false; /** Configuration parameter key/label for the case matching string */ public static final String PARAM_CASE_MATCH = "caseMatch"; /** Configuration parameter key/label for the stemmer class spec. If left out, no stemmer is used */ public static final String PARAM_STEMMER_CLASS = "Stemmer"; /** * Configuration parameter key/label for the stemmer dictionary, passed into the stemmer's * initialization method */ public static final String PARAM_STEMMER_DICT = "StemmerDictionary"; private static final String PARAM_LANGID = "LanguageID"; private static final String DEFAULT_LANGID = "en"; /** Configuration parameter key/label for the attribute list */ public static final String PARAM_ATTRIBUTE_LIST = "AttributeList"; public static final String PARAM_XML_PARSER = "XMLParserName"; private String XMLParserName = null; public int entryNum = 0; /** * */ public DictionaryResource_impl() { super(); dictImpl = new Hashtable(); loaded = false; } /** * @param initialDictEntries Number of initial dictionary entries * */ public DictionaryResource_impl(int initialDictEntries) { super(); dictImpl = new Hashtable(initialDictEntries); loaded = false; } /** * @return Returns the dictLoader. */ public DictLoader getDictLoader() { return dictLoader; } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.conceptMapper.support.DictionaryResource#getEntry(java.lang.String) */ public DictEntriesByLength getEntries(String key) { return dictImpl.get(key); } /** * Create a new dictionary entry. * * @param key * the key to index on * @param elements * the individual elements to be entered in the dictionary * @param unsorted * an unsorted string representation of the entry, if the contents of 'elements' has been sorted * @param length * the number of words in the phrase (>=1) * @param props * the EntryProperties object for the dictionary entry */ public void putEntry(String key, String[] elements, String unsorted, int length, EntryProperties props) { DictEntriesByLength entry = getEntries(key); if (entry == null) { entry = new DictEntriesByLength_impl(); // System.err.println ("DICT adding: " + key + ", " + text); dictImpl.put(key, entry); } // Iterator elemIter = elements.iterator (); // while (elemIter.hasNext ()) // { // System.err.println("ENTRY ELEMENT: " + elemIter.next ()); // } entry.putEntry(length, elements, unsorted, props); // System.err.println("ENTRY: '" + text + "', PROPS: "); // Enumeration propKeys = props.keys(); // while (propKeys.hasMoreElements()) // { // String propKey = (String) propKeys.nextElement(); // System.err.println ("\t" + propKey + ": " + props.getProperty(propKey)); // } } /* * (non-Javadoc) * * @see org.apache.uima.resource.SharedResourceObject#load(org.apache.uima.resource.DataResource) */ public void load(DataResource data) throws ResourceInitializationException { // InputStream dictStream = null; try { Logger logger = new Logger("Dictionary Resource Loader", data.getLogger()); dictLoader = new DictLoader(logger, this, data); /* * At least for now, while info from the AnnotatorContext is not available here, must delay * loading until able to access this info * * //open input stream to data dictStream = data.getInputStream (); * * dictLoader = new DictLoader (data.getLogger (), this); dictLoader.setDictionary * (dictStream, NumOfInitialDictEntries); */ } catch (Exception e) { throw new ResourceInitializationException(e); } /* * finally { if (dictStream != null) { try { dictStream.close (); } catch (IOException e) { } } } */ } public void loadDictionaryContents(AnnotatorContext aContext, Logger logger, String tokenAnnotationName, String tokenTypeFeatureName, String tokenClassFeatureName, String tokenizerDescriptor) throws ResourceInitializationException { InputStream dictStream = null; try { dictLoader.setLogger(logger); Boolean sortElementsParam = Boolean.valueOf (false); sortElementsParam = (Boolean) aContext.getConfigParameterValue(PARAM_ORDERINDEPENDENTLOOKUP); if (sortElementsParam == null) { sortElements = false; } else { sortElements = sortElementsParam.booleanValue(); } Boolean dumpDictParam = (Boolean) aContext.getConfigParameterValue(PARAM_DUMPDICT); if (dumpDictParam == null) { dumpDict = false; } else { dumpDict = dumpDictParam.booleanValue(); } TokenNormalizer tokenNormalizer = new TokenNormalizer(aContext, logger); // open input stream to data dictStream = dictLoader.getInputStream(); TokenFilter tokenFilter = new TokenFilter(tokenAnnotationName, tokenTypeFeatureName, tokenClassFeatureName, logger); tokenFilter.initConfig(aContext); String langID = (String) aContext.getConfigParameterValue(PARAM_LANGID); if ((langID == null) || (langID == "")) { langID = DEFAULT_LANGID; } XMLParserName = (String) aContext.getConfigParameterValue(PARAM_XML_PARSER); String [] entryPropertyNames = (String []) aContext.getConfigParameterValue(PARAM_ATTRIBUTE_LIST); entryPropertiesRoot = new EntryPropertiesRoot(entryPropertyNames); // System.out.print ("Loading Dictionary: '" + dictLoader.dataResource.getUri().toString() + // "'..."); // System.out.print ("Loading Dictionary..."); logger.logInfo("Loading Dictionary..."); dictLoader.setDictionary(dictStream, NumOfInitialDictEntries, tokenAnnotationName, tokenTypeFeatureName, tokenClassFeatureName, tokenizerDescriptor, tokenFilter, tokenNormalizer, langID, entryPropertiesRoot); logger.logInfo("...done"); // System.out.println ("done"); // System.err.println("NEW DICT:\n" + toString()); setLoaded(true); if (dumpDict) { System.err.println("BEGIN DUMPING DICTIONARY:"); System.err.println(toString()); System.err.println("DONE DUMPING DICTIONARY! "); } } catch (Exception e) { throw new ResourceInitializationException(e); } finally { if (dictStream != null) { try { dictStream.close(); } catch (IOException e) { } } } } /** * @return Returns the loaded. */ public boolean isLoaded() { return loaded; } /** * @param loaded * The loaded to set. */ public void setLoaded(boolean loaded) { this.loaded = loaded; } private static class DictEntriesByLength_impl implements DictEntriesByLength { private static final long serialVersionUID = -8150386021246495622L; private static class ReverseOrderIntegerComparator implements Comparator, Serializable { /** * */ private static final long serialVersionUID = -805437355806223406L; /* * (non-Javadoc) * * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public int compare(Integer left, Integer right) { // reverse the order of parameters, to reverse the sorting order return (right.compareTo(left)); } } TreeMap entries; public DictEntriesByLength_impl() { super(); entries = new TreeMap(new ReverseOrderIntegerComparator()); } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource.DictEntriesByLength#getEntries(int) */ public DictEntries getEntries(int length) { return entries.get(Integer.valueOf (length)); } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource.DictEntriesByLength#putEntry(int, * java.lang.String, java.util.Properties) */ public void putEntry(int length, String[] elements, String unsorted, EntryProperties props) { DictEntries entry = getEntries(length); if (entry == null) { entry = new DictEntriesImpl(); entries.put(Integer.valueOf (length), entry); } entry.putEntry(elements, unsorted, props); } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource.DictEntriesByLength#getLongest() */ public Integer getLongest() { return entries.firstKey(); } public Integer getShortest() { return entries.lastKey(); } public String toString() { StringBuilder result = new StringBuilder(); int i = getLongest().intValue(); int last = getShortest().intValue(); while (i >= last) { DictEntriesImpl entries = (DictEntriesImpl) getEntries(i); if (entries != null) { result.append("\n"); result.append(entries.toString()); result.append("\n"); } i--; } return result.toString(); } } /** * Private class for storing first words in the dict hashtable. */ public static class DictEntriesImpl extends ArrayList implements DictEntries { /** * */ private static final long serialVersionUID = 1L; /** * Create a new dictionary entry. */ public DictEntriesImpl() { } /** * Add a new phrase to an existing dictionary entry. * * @param elements * the text to be entered in the dictionary * @param props * the properties object for the phrase */ public void putEntry(String[] elements, String unsorted, EntryProperties props) { add(new DictEntryImpl(elements, unsorted, props)); } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource.DictEntries#getEntry(java.lang.String) */ public ArrayList getEntries() { return this; } public String toString() { StringBuilder result = new StringBuilder(""); for (int i = 0; i < size(); i++) { result.append(((DictEntryImpl) get(i)).toString()); } result.append(""); return result.toString(); } } public static class DictEntryImpl implements DictEntry { private static final long serialVersionUID = -7723934333674544157L; String[] elements; String unsorted; EntryProperties properties; /** * @param elements * @param unsorted * @param properties */ public DictEntryImpl(String[] elements, String unsorted, EntryProperties properties) { super(); this.properties = properties; this.unsorted = unsorted; this.elements = elements; } /** * @param properties * The properties to set. */ public void setProperties(EntryProperties properties) { this.properties = properties; } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource.DictEntry#getProperties() */ public EntryProperties getProperties() { return properties; } public String toString() { StringBuilder result = new StringBuilder(""); /* TODO for (String propertyName : entryPropertiesRoot.propertyNames()) { result.append(""); String item = getProperties().getProperty(propertyName); result.append(item); result.append("\n"); }*/ result.append("\n"); return result.toString(); } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource.DictEntry#getUnsorted() */ public String getUnsorted() { return unsorted; } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource.DictEntry#setUnsorted(java.lang.String) */ public void setUnsorted(String unsorted) { this.unsorted = unsorted; } public String[] getElements() { return elements; } public void setElements(String[] elements) { this.elements = elements; } } /** * Convert character entities in a string to the corresponding character. The set of entities * handled includes: *
    *
  • &amp; *
  • &lt; *
  • &gt; *
  • &apos; *
  • &quot; *
* * @param input * the string to process. * * @return the string with converted entities */ protected String convertEntities(String input) { String result = ltPattern.matcher(input).replaceAll("<"); result = gtPattern.matcher(result).replaceAll(">"); result = aposPattern.matcher(result).replaceAll("'"); result = quotPattern.matcher(result).replaceAll("\""); result = ampPattern.matcher(result).replaceAll("&"); return (result); } /** * Private class to load the dictionary file. Extends the org.xml.sax.helpers.DefaultHandler for * XML parsing. */ private class DictLoader extends DefaultHandler { /** Default parser name. */ //protected static final String DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.SAXParser"; /** Default name of element that contains dictionary records. */ protected static final String DEFAULT_TOKEN_ELEM = "token"; /** Default name of element that contains variant form */ protected static final String DEFAULT_VARIANT_ELEM = "variant"; /** * Default name of attribute in the token element that contains the key for the entry (i.e., the * surface or variant form that will be found in the document). */ protected static final String DEFAULT_KEY_ATTR = "base"; /** Default name of element that contains part of speech */ // protected static final String DEFAULT_POS_ATTR = "POS"; /** The XML parser that parses the dictionary file. */ private XMLReader parser = null; /** The name of the element that contains the dictionary records. */ private String token_elem = DEFAULT_TOKEN_ELEM; /** * The name of the element that contains a variant form for the current entry */ private String variant_elem = DEFAULT_VARIANT_ELEM; /** The name of the attribute that contains the key. */ private String key_attribute = DEFAULT_KEY_ATTR; /** The name of the attribute that contains the part of speech. */ // private String pos_attribute = DEFAULT_POS_ATTR; /** Count of number of dictionary entries loaded. */ private int term_cnt = 0; /** Reference to UIMA logger. */ private Logger logger; /** The hashtable built while parsing the dictionary file. */ private DictionaryResource dict; /** Properties for current canonical form */ private EntryProperties props; private AnnotatorAdaptor adaptor; private String tokenAnnotationName; private String tokenizerDescriptor; private TokenFilter tokenFilter; private TokenNormalizer tokenNormalizer; private EntryPropertiesRoot entryPropertiesRoot; /** * needed to access input stream, since cannot load external dict resource until TAE config * params are available to set up tokenizer correctly */ DataResource dataResource; private Vector result; /** * Create a dictionary loader. * * @param The * UIMA logger. * * @throws Exception * if XML parser cannot be created. */ public DictLoader(Logger log, DictionaryResource dict, DataResource data) throws Exception { this.setLogger(log); this.dict = dict; this.dataResource = data; // create parser try { if (XMLParserName != null) { parser = XMLReaderFactory.createXMLReader(XMLParserName); } else { parser = XMLReaderFactory.createXMLReader(); } } catch (Exception e) { log.logError("Unable to instantiate dictionary parser (" + ((XMLParserName==null) ? "default XML parser" : XMLParserName) + ")"); throw (e); } parser.setContentHandler(this); parser.setErrorHandler(this); } protected String getTokenAnnotationName() { return tokenAnnotationName; } protected void setTokenAnnotationName(String tokenAnnotationName) { this.tokenAnnotationName = tokenAnnotationName; } protected String getTokenizerDescriptor() { return tokenizerDescriptor; } protected void setTokenizerDescriptor(String tokenizerDescriptor) { this.tokenizerDescriptor = tokenizerDescriptor; } protected void setTokenFilter(TokenFilter tokenFilter) { this.tokenFilter = tokenFilter; } protected TokenFilter getTokenFilter() { return tokenFilter; } protected void setTokenNormalizer(TokenNormalizer tokenNormalizer) { this.tokenNormalizer = tokenNormalizer; } protected void setEntryPropertiesRoot (EntryPropertiesRoot entryPropertiesRoot) { this.entryPropertiesRoot = entryPropertiesRoot; } protected EntryPropertiesRoot getPropertiesRoot () { return entryPropertiesRoot; } protected TokenNormalizer getTokenNormalizer() { return tokenNormalizer; } /** * @return Returns the log. */ public Logger getLogger() { return logger; } /** * @param log * The log to set. */ public void setLogger(Logger logger) { this.logger = logger; } /** * Start element. This method does most of the work of building the hashtable. * */ public void startElement(String uri, String local, String raw, Attributes attrs) throws SAXException { DictionaryToken token = null; int length = 0; if (raw.equals(token_elem)) { // starting new token entry if (attrs != null) { props = getPropertiesRoot().newEntryProperties(); int attrCount = attrs.getLength(); for (int i = 0; i < attrCount; i++) { props.setProperty(attrs.getQName(i), convertEntities(attrs.getValue(i))); } } } else if (raw.equals(variant_elem)) { // variant for current token if (attrs != null) { int attrCount = attrs.getLength(); ArrayList tokens = new ArrayList(); // if this variant contains its own POS info, save token level POS info and set props to // contain variant's EntryProperties variantProperties = new EntryProperties(props); // logger.logInfo("" + entryNum++); // // System.err.println("" + entryNum++); for (int i = 0; i < attrCount; i++) { if (attrs.getQName(i).equals(key_attribute)) { // key attribute? adaptor.runCPM(convertEntities(attrs.getValue(i))); //if (dumpDict) //{ // System.err.println ("Adaptor done, result size: " + result.size() + "\nresult:\n"); // for (DictionaryToken resultItem : result) // { // System.err.println (" " + resultItem.getText()); // } //} Iterator tokenIter = result.iterator(); token = null; while (tokenIter.hasNext()) { token = (DictionaryToken) tokenIter.next(); //if (dumpDict) //{ // System.err.println ("TOKEN CLASS: '" + token.getTokenClass() + "', TOKEN TYPE: '" + token.getType() + "'"); //} if (tokenFilter.isOK_Token(token, tokenNormalizer)) { break; } } if (token == null) { return; } //if (dumpDict) //{ // System.err.println ("variant token key:" + key); //} tokens.add(tokenNormalizer.normalize(token.getText())); length = 1; while (tokenIter.hasNext()) { token = (DictionaryToken) tokenIter.next(); String tokenText = tokenNormalizer.normalize(token.getText()); if (tokenFilter.isOK_Token(token, tokenNormalizer)) { tokens.add(tokenText); length++; //if (dumpDict) //{ // System.err.println (" variant token aux:" + tokenText); //} } //else //{ // if (dumpDict) // { // System.err.println (" SKIPPING: variant token aux:" + tokenText); // } //} } } else { variantProperties.setProperty(attrs.getQName(i), convertEntities(attrs.getValue(i))); } } String[] elements = (String[]) tokens.toArray(new String[tokens.size()]); String unsorted = null; if (sortElements) { unsorted = stringTogetherTokens(elements); Arrays.sort(elements); } //String tokenString = stringTogetherTokens(elements); //if (dumpDict) //{ // System.err.println ("token string: " + tokenString); //} // add to dictionary if (sortElements) { for (int i = 0; i < tokens.size(); i++) { dict.putEntry((String) tokens.get(i), elements, unsorted, elements.length, variantProperties); // System.err.println ("adding props for:" + tokenString); // Enumeration propKeys = variantProperties.keys(); // while (propKeys.hasMoreElements()) // { // String propKey = (String) propKeys.nextElement(); // System.err.println ("\t" + propKey + ": " + // variantProperties.getProperty(propKey)); // } } } else { dict.putEntry((String) tokens.get(0), elements, unsorted, elements.length, variantProperties); } term_cnt++; if ((term_cnt % 10000) == 0) { getLogger().logInfo("processed " + term_cnt + " entries"); //System.err.println("processed " + term_cnt + " entries"); } } } } // // ErrorHandler methods // /** Warning. */ public void warning(SAXParseException ex) throws SAXException { getLogger().logWarning(errorString("Warning", ex)); } // warning(SAXParseException) /** * Error. public void error (SAXParseException ex) throws SAXException { getLogger ().log * (Level.SEVERE, errorString ("Error", ex)); } // error(SAXParseException) */ /** Fatal error. */ public void fatalError(SAXParseException ex) throws SAXException { getLogger().logError(errorString("Fatal Error", ex)); throw ex; } // fatalError(SAXParseException) /** Prints the error message. */ protected String errorString(String type, SAXParseException ex) { String errorMsg = "[" + type + "]"; if (ex == null) { return errorMsg + "!!!"; } String systemId = ex.getSystemId(); if (systemId != null) { int index = systemId.lastIndexOf('/'); if (index != -1) systemId = systemId.substring(index + 1); errorMsg += systemId; } errorMsg += ":" + ex.getLineNumber() + ":" + ex.getColumnNumber() + ": " + ex.getMessage(); return errorMsg; } /** * Use the tokenizer specified in 'tokenizerDescriptor' to load the specified dicitonary file. * The dictonary file must be in the format specified above. A new dict hashtable * is created with a DictEntries object for each unique first word in the base * fields in the dictionary file. The dict hashtable is keyed off of the first * word. The DictEntries for a first word contains a hashtable of * DictEntry objects for every phrase in the base fields of the dictionary file * started by the first word. The phrase hashtable is keyed off of the entire phrase. * * @param tokenizerDescriptor * @param tokenAnnotationName * @param tokenFilter * * @param dictFile * the fully specified filename of the dictionary file to load. * * @param NumOfInitialDictEntries * initial size of hashtable to create * * @exception java.io.IOException * if dictionary file cannot be loaded or some other initialization error occurs. */ public void setDictionary(InputStream dictStream, int initialDictEntries, String tokenAnnotationName, String tokenTypeFeatureName, String tokenClassFeatureName, String tokenizerDescriptor, TokenFilter tokenFilter, TokenNormalizer tokenNormalizer, String langID, EntryPropertiesRoot entryPropertiesRoot) throws DictionaryLoaderException { term_cnt = 0; setTokenAnnotationName(tokenAnnotationName); setTokenizerDescriptor(tokenizerDescriptor); setTokenFilter(tokenFilter); setTokenNormalizer(tokenNormalizer); result = new Vector(); setEntryPropertiesRoot (entryPropertiesRoot); getLogger().logInfo("Loading dictionary"); try { adaptor = new AnnotatorAdaptor(getTokenizerDescriptor(), result, tokenAnnotationName, tokenFilter, langID, getLogger()); adaptor.initCPM(); parser.parse(new InputSource(dictStream)); } catch (SAXException e) { getLogger().logError("Parse error occurred - " + e.getMessage()); throw new DictionaryLoaderException(e); } catch (IOException e) { throw new DictionaryLoaderException(e); } getLogger().logInfo("Finished loading " + term_cnt + " entries"); } public InputStream getInputStream() throws IOException { return dataResource.getInputStream(); } } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.DictionaryResource#NewDictionaryResource(int) */ public DictionaryResource newDictionaryResource(int initialDictEntries) { return new DictionaryResource_impl(initialDictEntries); } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.DictionaryResource#keys() */ public Enumeration keys() { return dictImpl.keys(); } public static String stringTogetherTokens(String[] elements) { StringBuilder tokenString = new StringBuilder(); for (int i = 0; i < elements.length; i++) { if (i > 0) { tokenString.append(" "); } tokenString.append(elements[i]); } return tokenString.toString(); } public String toString() { StringBuilder result = new StringBuilder(); Enumeration e = keys(); while (e.hasMoreElements()) { String key = e.nextElement(); result.append("\n"); DictEntriesByLength_impl item = (DictEntriesByLength_impl) getEntries(key); result.append(item.toString()); result.append("\n"); } return result.toString(); } public void serializeEntries(FileOutputStream output) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(output); oos.writeObject(this.entryPropertiesRoot); oos.writeObject(this.dictImpl); oos.close(); } public EntryPropertiesRoot getEntryPropertiesRoot() { return entryPropertiesRoot; } }uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokens/0000755000175000017500000000000011625126462031575 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokens/TokenFilter.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokens/TokenFilt0000644000175000017500000003363211625126462033426 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.tokens; import java.util.HashSet; import java.util.Set; import org.apache.uima.analysis_engine.annotator.AnnotatorConfigurationException; import org.apache.uima.analysis_engine.annotator.AnnotatorContext; import org.apache.uima.analysis_engine.annotator.AnnotatorContextException; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.conceptMapper.Logger; import org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryToken; public class TokenFilter { private String tokenClassFeatureName; private Feature tokenClassFeature = null; private String tokenTypeFeatureName; private Feature tokenTypeFeature = null; private Logger logger; /** Configuration parameter for list of token classes to include in lookups */ public static final String PARAM_INCLUDEDTOKENCLASSES = "IncludedTokenClasses"; // J5.0 protected Hashtable includedTokenClasses; protected HashSet includedTokenClasses; /** Configuration parameter for list of token classes to include in lookups */ public static final String PARAM_EXCLUDEDTOKENCLASSES = "ExcludedTokenClasses"; // J5.0 protected Hashtable excludedTokenClasses; protected HashSet excludedTokenClasses; /** Configuration parameter for list of token classes to include in lookups */ public static final String PARAM_INCLUDEDTOKENTYPES = "IncludedTokenTypes"; // J5.0 protected Hashtable includedTokenTypes; protected HashSet includedTokenTypes; /** Configuration parameter for list of token classes to include in lookups */ public static final String PARAM_EXCLUDEDTOKENTYPES = "ExcludedTokenTypes"; // J5.0 protected Hashtable excludedTokenTypes; protected HashSet excludedTokenTypes; public static final String PARAM_STOPWORDS = "StopWords"; private Set stopWords = null; /** Configuration parameter giving type of tokens */ public static final String PARAM_TOKENANNOTATION = "TokenAnnotation"; String tokenAnnotationName = null; public TokenFilter(String tokenAnnotationName, String tokenTypeFeatureName, String tokenClassFeatureName, Logger logger) { super(); this.tokenAnnotationName = tokenAnnotationName; this.tokenTypeFeatureName = tokenTypeFeatureName; this.tokenClassFeatureName = tokenClassFeatureName; this.logger = logger; } public String getTokenClassFeatureName() { return tokenClassFeatureName; } public void setTokenClassFeatureName(String tokenClassFeatureName) { this.tokenClassFeatureName = tokenClassFeatureName; } public Feature getTokenClassFeature() { return tokenClassFeature; } public void setTokenClassFeature(Feature tokenClassFeature) { this.tokenClassFeature = tokenClassFeature; } public String getTokenTypeFeatureName() { return tokenTypeFeatureName; } public void setTokenTypeFeatureName(String tokenTypeFeatureName) { this.tokenTypeFeatureName = tokenTypeFeatureName; } public Feature getTokenTypeFeature() { return tokenTypeFeature; } public void setTokenTypeFeature(Feature tokenTypeFeature) { this.tokenTypeFeature = tokenTypeFeature; } public String getTokenAnnotationName() { return tokenAnnotationName; } public void setTokenAnnotationName(String tokenAnnotationName) { this.tokenAnnotationName = tokenAnnotationName; } public void initConfig(AnnotatorContext annotatorContext) throws AnnotatorConfigurationException { String[] stopWordList = null; String[] includedTokenClassStrings = null; String[] excludedTokenClassStrings = null; Integer[] includedTokenTypeInts = null; Integer[] excludedTokenTypeInts = null; try { stopWordList = (String[]) annotatorContext.getConfigParameterValue(PARAM_STOPWORDS); includedTokenClassStrings = (String[]) annotatorContext .getConfigParameterValue(PARAM_INCLUDEDTOKENCLASSES); excludedTokenClassStrings = (String[]) annotatorContext .getConfigParameterValue(PARAM_EXCLUDEDTOKENCLASSES); includedTokenTypeInts = (Integer[]) annotatorContext .getConfigParameterValue(PARAM_INCLUDEDTOKENTYPES); excludedTokenTypeInts = (Integer[]) annotatorContext .getConfigParameterValue(PARAM_EXCLUDEDTOKENTYPES); if ((includedTokenClassStrings == null) || (includedTokenClassStrings.length == 0)) { includedTokenClasses = null; } else { includedTokenClasses = new HashSet(); for (int j = 0; j < includedTokenClassStrings.length; j++) { includedTokenClasses.add(includedTokenClassStrings[j]); } } if ((excludedTokenClassStrings == null) || (excludedTokenClassStrings.length == 0)) { excludedTokenClasses = null; } else { excludedTokenClasses = new HashSet(); for (int j = 0; j < excludedTokenClassStrings.length; j++) { excludedTokenClasses.add(excludedTokenClassStrings[j]); } } if ((includedTokenTypeInts == null) || (includedTokenTypeInts.length == 0)) { includedTokenTypes = null; } else { includedTokenTypes = new HashSet(); for (int j = 0; j < includedTokenTypeInts.length; j++) { includedTokenTypes.add(includedTokenTypeInts[j]); } } if ((excludedTokenTypeInts == null) || (excludedTokenTypeInts.length == 0)) { excludedTokenTypes = null; } else { excludedTokenTypes = new HashSet(); for (int j = 0; j < excludedTokenTypeInts.length; j++) { excludedTokenTypes.add(excludedTokenTypeInts[j]); } } if ((includedTokenClasses != null) || (excludedTokenClasses != null)) { if (tokenClassFeatureName == null) { throw new AnnotatorConfigurationException(); } } if ((includedTokenTypes != null) || (excludedTokenTypes != null)) { if (tokenTypeFeatureName == null) { throw new AnnotatorConfigurationException(); } } stopWords = initializeStopWordList(stopWordList); } catch (AnnotatorContextException ie) { throw new AnnotatorConfigurationException(ie); } } static public Set initializeStopWordList(String[] stopWordsStrings) throws AnnotatorContextException { Set retVal = new HashSet(); if (stopWordsStrings != null) { for (int i = 0; i < stopWordsStrings.length; i++) { // System.err.println("Adding stopword: '" + stopWordsStrings[i].toLowerCase ()); retVal.add(stopWordsStrings[i].toLowerCase()); } } return retVal; } /** * @param token * tokenClass to look up * @return true if in includedTokenClasses or if both includedTokenClasses and * excludedTokenClasses are unset, of if excludedTokenClasses does not contain an entry * for tokenClass parameter */ public boolean checkTokenClass(AnnotationFS token) { boolean returnValue = true; if (tokenClassFeature != null) { String tokenClass = token.getStringValue(tokenClassFeature); if (tokenClass != null) { returnValue = isOK_TokenClass(tokenClass); } } // System.err.println ("checkTokenClass, token = " + token.getCoveredText() + ", returnValue: " // + returnValue); return returnValue; } public boolean checkTokenClass(DictionaryToken token) { boolean returnValue = true; if (token.isTokenClassFeatureDefined()) { String tokenClass = token.getTokenClass(); if (tokenClass != null) { returnValue = isOK_TokenClass(tokenClass); } } // System.err.println ("checkTokenClass, token = " + token.getCoveredText() + ", returnValue: " // + returnValue); return returnValue; } private boolean isOK_TokenClass(String tokenClass) { boolean returnValue = true; if ((includedTokenClasses != null) && (excludedTokenClasses == null)) { returnValue = (includedTokenClasses.contains(tokenClass)); } else if (excludedTokenClasses != null) { returnValue = (!excludedTokenClasses.contains(tokenClass)); } return returnValue; } static public boolean isStopWord(Set stopWords, String tokenText) { // System.err.println("isStopWord, token = '" + tokenText + "', returns = " + ((stopWords != // null) && stopWords.contains (tokenText.toLowerCase ()))); return ((stopWords != null) && stopWords.contains(tokenText.toLowerCase())); } public boolean isStopWord(String tokenText) { // System.err.println("isStopWord, token = '" + tokenText + "', returns = " + ((stopWords != // null) && stopWords.contains (tokenText.toLowerCase ()))); return ((stopWords != null) && stopWords.contains(tokenText.toLowerCase())); } /** * @param token * @return false if tokenTypeFeature is set, and the token's tokenTypeFeature slot is set, but the value is not OK */ public boolean checkTokenType(AnnotationFS token) { boolean returnValue = true; if (tokenTypeFeature != null) { Integer tokenType = Integer.valueOf (token.getIntValue(tokenTypeFeature)); if (tokenType != null) { returnValue = isOK_TokenType(tokenType); } } // System.err.println ("checkTokenType, token = " + token.getCoveredText() + ", returnValue: " + // returnValue); return returnValue; } public boolean checkTokenType(DictionaryToken token) { boolean returnValue = true; if (token.isTokenTypeFeatureDefined()) { Integer tokenType = token.getType(); if (tokenType != null) { returnValue = isOK_TokenType(tokenType); } } // System.err.println ("checkTokenType, token = " + token.getCoveredText() + ", returnValue: " + // returnValue); return returnValue; } private boolean isOK_TokenType(Integer tokenType) { boolean returnValue = true; if ((includedTokenTypes != null) && (excludedTokenTypes == null)) { returnValue = (includedTokenTypes.contains(tokenType)); } else if (excludedTokenTypes != null) { returnValue = (!excludedTokenTypes.contains(tokenType)); } return returnValue; } public void initTypes(TypeSystem typeSystem) throws UnknownTypeException { initTypes(typeSystem, true); } /** * @param typeSystem * @param requireFeatureExistence - * if true, if the tokenType and/or tokenClass features of the tokenAnnotation are * specified, they must exist. This is to allow for the situation where these features * might not exist during dictionary loading, but are needed at annotator runtime * @throws UnknownTypeException */ public void initTypes(TypeSystem typeSystem, boolean requireFeatureExistence) throws UnknownTypeException { Type tokenType = typeSystem.getType(tokenAnnotationName); if (tokenType == null) { String message = "TokenFilter.initTypes(), Could not find type: " + tokenAnnotationName; System.err.println(message); throw new UnknownTypeException(message); } if ((tokenClassFeatureName == null) || (tokenClassFeatureName.equals(""))) { tokenClassFeature = null; } else { tokenClassFeature = tokenType.getFeatureByBaseName(tokenClassFeatureName); if ((tokenClassFeature == null) && (requireFeatureExistence)) { String message = "Token class feature name '" + tokenClassFeatureName + "' specified, but does not exist for type: " + tokenType.getName(); logger.logError(message); throw new UnknownTypeException(message); } } if ((tokenTypeFeatureName == null) || (tokenTypeFeatureName.equals(""))) { tokenTypeFeature = null; } else { tokenTypeFeature = tokenType.getFeatureByBaseName(tokenTypeFeatureName); if ((tokenTypeFeature == null) && (requireFeatureExistence)) { String message = "Token type feature name '" + tokenTypeFeatureName + "' specified, but does not exist for type: " + tokenType.getName(); logger.logError(message); throw new UnknownTypeException(message); } } } public boolean isOK_Token(AnnotationFS token, TokenNormalizer tokenNormalizer) { if (checkTokenClass(token) && checkTokenType(token) && (!isStopWord(tokenNormalizer.normalize(token.getCoveredText())))) { return true; } return false; } public boolean isOK_Token(DictionaryToken token, TokenNormalizer tokenNormalizer) { if (checkTokenClass(token) && checkTokenType(token) && (!isStopWord(tokenNormalizer.normalize(token.getText())))) { // System.err.println ("isOK_Token = true"); return true; } // System.err.println ("isOK_Token = false"); return false; } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokens/TokenNormalizer.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokens/TokenNorm0000644000175000017500000001520111625126462033433 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.tokens; import java.util.regex.Pattern; import org.apache.uima.analysis_engine.annotator.AnnotatorContext; import org.apache.uima.analysis_engine.annotator.AnnotatorContextException; import org.apache.uima.conceptMapper.Logger; import org.apache.uima.conceptMapper.support.stemmer.Stemmer; public class TokenNormalizer { private static Pattern CapPat = Pattern.compile("^[A-Z][a-z]+$"); private static Pattern HasDigit = Pattern.compile("[0-9]"); /** * replace instances of "," with the token "and" defaults to false */ private static final String PARAM_REPLACE_COMMA_WITH_AND = "ReplaceCommaWithAND"; /** Configuration parameter key/label for the case matching string */ public static final String PARAM_CASE_MATCH = "caseMatch"; /** Configuration parameter key/label for the stemmer class spec. If left out, no stemmer is used */ public static final String PARAM_STEMMER_CLASS = "Stemmer"; /** * Configuration parameter key/label for the stemmer dictionary, passed into the stemmer's * initialization method */ public static final String PARAM_STEMMER_DICT = "StemmerDictionary"; private boolean caseFoldAll; private boolean caseFoldInitCap; private boolean caseFoldDigit; private String CASE_INSENSITIVE = "insensitive"; private String CASE_FOLD_DIGITS = "digitfold"; private String CASE_IGNORE = "ignoreall"; /** The stemmer that will perform the stemming. */ private Stemmer stemmer = null; private boolean replaceCommaWithAND; /** * @param annotatorContext * @param logger * @throws AnnotatorContextException */ public TokenNormalizer(AnnotatorContext annotatorContext, Logger logger) throws AnnotatorContextException { super(); Boolean replaceCommaWithANDObj = (Boolean) annotatorContext .getConfigParameterValue(PARAM_REPLACE_COMMA_WITH_AND); boolean replaceCommaWithAND = false; if (replaceCommaWithANDObj != null) { replaceCommaWithAND = replaceCommaWithANDObj.booleanValue(); } String caseMatchParam = (String) annotatorContext.getConfigParameterValue(PARAM_CASE_MATCH); String stemmerParam = (String) annotatorContext.getConfigParameterValue(PARAM_STEMMER_CLASS); String stemmerDict = (String) annotatorContext.getConfigParameterValue(PARAM_STEMMER_DICT); this.replaceCommaWithAND = replaceCommaWithAND; this.setCaseFoldInitCap(false); this.setCaseFoldDigit(false); this.setCaseFoldAll(false); if (caseMatchParam != null) { if (caseMatchParam.equalsIgnoreCase(CASE_INSENSITIVE)) { this.setCaseFoldInitCap(true); } else if (caseMatchParam.equalsIgnoreCase(CASE_FOLD_DIGITS)) { this.setCaseFoldDigit(true); } else if (caseMatchParam.equalsIgnoreCase(CASE_IGNORE)) { this.setCaseFoldAll(true); } } if (stemmerParam != null) { try { Class stemmerClass = Class.forName(stemmerParam); setStemmer((Stemmer) stemmerClass.newInstance()); getStemmer().initialize(stemmerDict); } catch (Exception e) { logger.logError("Exception trying to instantiate stemmer class: '" + stemmerParam + "', original exception:" + e.getMessage()); e.printStackTrace(); } } } /** * @return Returns the stemmer. */ public Stemmer getStemmer() { return stemmer; } /** * @param stemmer * The stemmer to set. */ public void setStemmer(Stemmer stemmer) { this.stemmer = stemmer; } public boolean shouldStem() { return (getStemmer() != null); } /** * @return Returns the caseFoldAll. */ public boolean isCaseFoldAll() { return caseFoldAll; } /** * @param caseFoldAll * The caseFoldAll to set. */ public void setCaseFoldAll(boolean caseFoldAll) { this.caseFoldAll = caseFoldAll; } /** * @return Returns the caseFoldDigit. */ public boolean isCaseFoldDigit() { return caseFoldDigit; } /** * @param caseFoldDigit * The caseFoldDigit to set. */ public void setCaseFoldDigit(boolean caseFoldDigit) { this.caseFoldDigit = caseFoldDigit; } /** * @return Returns the caseFoldInitCap. */ public boolean isCaseFoldInitCap() { return caseFoldInitCap; } /** * @param caseFoldInitCap * The caseFoldInitCap to set. */ public void setCaseFoldInitCap(boolean caseFoldInitCap) { this.caseFoldInitCap = caseFoldInitCap; } public boolean shouldFoldCase(String token) { return (caseFoldAll || (caseFoldInitCap && CapPat.matcher(token).matches()) || (caseFoldDigit && HasDigit .matcher(token).find())); } /** * If one of the case folding flags is true and the input string matches the character pattern * corresponding to that flag, then convert all letters to lowercase. * * @param token * The string to case fold * * @return The case folded string */ public String foldCase(String token) { if (shouldFoldCase(token)) { return token.trim().toLowerCase(); } return token; } /** * If the stemming flag is true, then return the stemmed form of the supplied word using the * Porter stemmer. * * @param token * the word to stem * @return the original word if the stemming flag is false, otherwise the stemmed form of the word */ public String stem(String token) { if (shouldStem()) { return getStemmer().stem(token.trim()); } return token; } public String normalize(String token) { if (replaceCommaWithAND && token.equals(",")) { return stem(foldCase("and")); } return stem(foldCase(token)); } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokens/UnknownTypeException.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokens/UnknownTy0000644000175000017500000000224311625126462033475 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.tokens; public class UnknownTypeException extends Exception { private static final long serialVersionUID = 1L; private String message; public UnknownTypeException(String message) { super(); this.message = message; } public String getMessage() { return message; } } uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokenizer/0000755000175000017500000000000011625126462032304 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokenizer/TokenAnnotation_Type.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokenizer/TokenA0000644000175000017500000001134711625126462033416 0ustar drazzibdrazzib /* First created by JCasGen Tue Mar 25 16:39:54 EDT 2008 */ package org.apache.uima.conceptMapper.support.tokenizer; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; /** offset tokenizer functionality * Updated by JCasGen Tue Mar 25 16:39:54 EDT 2008 * @generated */ public class TokenAnnotation_Type extends uima.tt.TokenAnnotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (TokenAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = TokenAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new TokenAnnotation(addr, TokenAnnotation_Type.this); TokenAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new TokenAnnotation(addr, TokenAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = TokenAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); /** @generated */ final Feature casFeat_text; /** @generated */ final int casFeatCode_text; /** @generated */ public String getText(int addr) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_text); } /** @generated */ public void setText(int addr, String v) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_text, v);} /** @generated */ final Feature casFeat_tokenType; /** @generated */ final int casFeatCode_tokenType; /** @generated */ public int getTokenType(int addr) { if (featOkTst && casFeat_tokenType == null) jcas.throwFeatMissing("tokenType", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); return ll_cas.ll_getIntValue(addr, casFeatCode_tokenType); } /** @generated */ public void setTokenType(int addr, int v) { if (featOkTst && casFeat_tokenType == null) jcas.throwFeatMissing("tokenType", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); ll_cas.ll_setIntValue(addr, casFeatCode_tokenType, v);} /** @generated */ final Feature casFeat_tokenClass; /** @generated */ final int casFeatCode_tokenClass; /** @generated */ public String getTokenClass(int addr) { if (featOkTst && casFeat_tokenClass == null) jcas.throwFeatMissing("tokenClass", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_tokenClass); } /** @generated */ public void setTokenClass(int addr, String v) { if (featOkTst && casFeat_tokenClass == null) jcas.throwFeatMissing("tokenClass", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_tokenClass, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public TokenAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_text = jcas.getRequiredFeatureDE(casType, "text", "uima.cas.String", featOkTst); casFeatCode_text = (null == casFeat_text) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_text).getCode(); casFeat_tokenType = jcas.getRequiredFeatureDE(casType, "tokenType", "uima.cas.Integer", featOkTst); casFeatCode_tokenType = (null == casFeat_tokenType) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_tokenType).getCode(); casFeat_tokenClass = jcas.getRequiredFeatureDE(casType, "tokenClass", "uima.cas.String", featOkTst); casFeatCode_tokenClass = (null == casFeat_tokenClass) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_tokenClass).getCode(); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokenizer/OffsetTokenizer.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokenizer/Offset0000644000175000017500000003557011625126462033467 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.support.tokenizer; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import org.apache.uima.analysis_engine.ResultSpecification; import org.apache.uima.analysis_engine.annotator.AnnotatorConfigurationException; import org.apache.uima.analysis_engine.annotator.AnnotatorContext; import org.apache.uima.analysis_engine.annotator.AnnotatorInitializationException; import org.apache.uima.analysis_engine.annotator.AnnotatorProcessException; import org.apache.uima.analysis_engine.annotator.JTextAnnotator_ImplBase; import org.apache.uima.conceptMapper.support.stemmer.Stemmer; import org.apache.uima.jcas.JCas; /** * Simple class to tokenize a string (similar to java.util.StringTokenizer), except * that this tokenizer returns * {@link TokenAnnotation} objects, which, in * addition to the token text string, also contain the start and end offsets of the token in the * original string. *

* * The tokenizer will optionally perform stemming and case normalization on the tokens, and the set * of characters that delimit tokens may be specified. The default stemmer is the Snowball Porter * stemmer, but any stemmer may be supplied to the tokenizer as long as it implements the * {@link org.apache.uima.conceptMapper.support.stemmer.Stemmer Stemmer}interface. * */ public class OffsetTokenizer extends JTextAnnotator_ImplBase { /** The input text string being tokenized */ private String text; /** The stemmer that will perform the stemming. */ private Stemmer stemmer = null; //private Logger logger; /** Configuration parameter key/label for the case matching string */ public static final String PARAM_CASE_MATCH = "caseMatch"; /** Configuration parameter key/label for the stemmer class spec */ public static final String PARAM_STEMMER_CLASS = "Stemmer"; /** Configuration parameter key/label for the token delimiters string */ public static final String PARAM_TOKEN_DELIM = "tokenDelimiters"; /** The current offset into {@link TextToken.text} */ private int offset; /** The total length of {@link TextToken.text} */ private int length; /** Base whitespace token delimiters */ private String wsDelim = " \t\n\r\f"; /** * The extra specifiable delimiters used by the tokenizer to separate the input string into * individual tokens. */ private String extraDelim = ",-/();:"; /** * The delimiters used by the tokenizer to separate the input string into individual tokens. */ private String delim = wsDelim + extraDelim; /** Case folding flag for folding tokens with initial cap. */ private boolean caseFoldInitCap = false; /** Case folding flag for folding tokens with at least one digit character. */ private boolean caseFoldDigit = false; /** * Case folding flag for folding all tokens (subsumes {@link #caseFoldInitCap caseFoldInitCap}and * {@link #caseFoldDigit caseFoldDigit}). */ private boolean caseFoldAll = false; /** Stemming on/off flag. If true, tokens will be stemmed by the tokenizer. */ private boolean stemTokens = false; /** * regular expression pattern used to identify terms with an initial capital letter followed by * all lowercase letters. */ private Pattern capPat = null; /** * regular expression pattern used to identify terms with at least one digit character in them. */ private Pattern hasDigit = null; /** * Create a new OffsetTokenizer. Initializes the default stemmer and sets up the * regular expressions for the various case folding options. */ public OffsetTokenizer() { try { capPat = Pattern.compile("^[A-Z][a-z]+$"); hasDigit = Pattern.compile("[0-9]"); } catch (PatternSyntaxException e) { e.printStackTrace(); } } /** * @return Returns the text. */ public String getText() { return text; } /** * Set the text to tokenize. After this method is called, the next call to * {@link #nextToken(JCas) nextToken} will return the first token from the input string * as a TokenAnnotation; you can get the text by using * {@link TokenAnnotation#getText()} */ public void setText(String text) { this.text = text; offset = 0; length = getText().length(); } /** * @return Returns the stemmer. */ public Stemmer getStemmer() { return stemmer; } /** * @param stemmer * The stemmer to set. */ public void setStemmer(Stemmer stemmer) { this.stemmer = stemmer; } public TokenAnnotation newToken(JCas jcas) { return new TokenAnnotation(jcas); } public TokenAnnotation nextToken(JCas jcas) { StringBuilder token = new StringBuilder(); // System.out.println("in NextToken"); // skip any delimiters while ((offset < length) && (getDelim().indexOf(getText().charAt((offset))) >= 0)) { offset += 1; } if (offset < length) { int start = offset; while ((offset < length) && (getDelim().indexOf(getText().charAt((offset))) < 0)) { token.append(getText().charAt(offset)); offset += 1; } TokenAnnotation returnVal = newToken(jcas); // System.out.println("token = " + token.toString() + " fold = " + // foldCase(token.toString())); returnVal.setText(stem(foldCase(token.toString()))); returnVal.setBegin(start); returnVal.setEnd(offset); return returnVal; } return null; } /** * If one of the case folding flags is true and the input string matches the character pattern * corresponding to that flag, then convert all letters to lowercase. * * @param token * The string to case fold * * @return The case folded string */ protected String foldCase(String token) { if (shouldFoldCase(token)) { return doFoldCase(token); } return token; } public static String doFoldCase(String token) { return token.trim().toLowerCase(); } public boolean shouldFoldCase(String token) { return (caseFoldAll || (caseFoldInitCap && capPat.matcher(token).matches()) || (caseFoldDigit && hasDigit .matcher(token).find())); } public boolean shouldStem() { return stemTokens; } /** * Set the delimiters used to separate the input string into tokens. This adds the new delimiters * to the base whitespace delimiters " \t\n\r\f". * * @param delim * The new set of delimiters. */ protected void setDelim(String delim) { this.delim = wsDelim + delim; } /** * Set the delimiters used to separate the input string into tokens. This sets the delimiters to * exactly the given set. The base whitespace delimiters are not included. * * @param delim * The new set of delimiters. */ protected void overrideDelim(String delim) { this.delim = delim; } /** * Turn stemming on (true) or off (false). * * @param flag * true - turn stemming on, false - turn stemming off */ private void setStemming(boolean flag) { stemTokens = flag; } /** * Set case folding flag for folding tokens with initial cap. * * @param flag * true - turn on case folding, false - turn off case folding. */ private void setCaseFoldInitCap(boolean flag) { caseFoldInitCap = flag; } /** * Set case folding flag for folding tokens with at least one digit character. * * @param flag * true - turn on case folding, false - turn off case folding. */ private void setCaseFoldDigit(boolean flag) { caseFoldDigit = flag; } /** * Set case folding flag for folding all tokens (subsumes * {@link #setCaseFoldInitCap setCaseFoldInitCap}and {@link #setCaseFoldDigitsetCaseFoldDigit}). * * @param flag * true - turn on case folding, false - turn off case folding. */ private void setCaseFoldAll(boolean flag) { caseFoldAll = flag; } /** * Get the current list of delimiters used to separate the input string into tokens. * * @return The current list of delimiters used to separate the input string into tokens. */ protected String getDelim() { return delim; } /** * Get the current stemming flag. * * @return true if stemming is currently on, false otherwise */ protected boolean getStemming() { return stemTokens; } /** * Get case folding flag for folding tokens with initial cap. * * @return the current value of the flag */ protected boolean getCaseFoldInitCap() { return (caseFoldInitCap); } /** * Get the case folding flag for folding tokens with at least one digit character. * * @return the current value of the flag */ protected boolean getCaseFoldDigit() { return (caseFoldDigit); } /** * Get case folding flag for folding all tokens. * * @return the current value of the flag. */ protected boolean getCaseFoldAll() { return (caseFoldAll); } /** * Initialize the annotator, which includes compilation of regular expressions, fetching * configuration parameters from XML descriptor file, and loading of the dictionary file. */ public void initialize(AnnotatorContext annotatorContext) throws AnnotatorInitializationException, AnnotatorConfigurationException { super.initialize(annotatorContext); try { //logger = new Logger("TextTokenizer", annotatorContext.getLogger()); String[] configParameterNames = annotatorContext.getConfigParameterNames(); Object[] configParameters = new Object[configParameterNames.length]; for (int i = 0; i < configParameters.length; i++) { configParameters[i] = annotatorContext.getConfigParameterValue(configParameterNames[i]); } processAllConfigurationParameters(configParameterNames, configParameters); initTokenizer(configParameterNames, configParameters); } catch (Exception e) { throw new AnnotatorConfigurationException(e); } } public void processAllConfigurationParameters(String[] configParameterNames, Object[] configParameters) throws AnnotatorConfigurationException { for (int i = 0; i < configParameterNames.length; i++) { processConfigurationParameter(configParameterNames[i], configParameters[i]); } } /** * Perform the actual analysis. Iterate over the document content looking for tokens and post an * annotation for each match found. * * @param jcas * the current CAS to process. * @param aResultSpec * a specification of the result annotation that should be created by this annotator * * @see org.apache.uima.analysis_engine.annotator.JTextAnnotator#process(JCas, ResultSpecification) */ public void process(JCas jcas, ResultSpecification aResultSpec) throws AnnotatorProcessException { try { doTokenization(jcas, jcas.getDocumentText(), getDelim()); } catch (Exception e) { throw new AnnotatorProcessException(e); } } /* * (non-Javadoc) * * @see org.apache.uima.conceptMapper.support.tokenizer.TextTokenizer#initTokenizer(java.lang.String[], * java.lang.Object[]) */ public void initTokenizer(String[] paramNames, Object[] paramValues) throws Exception { // nothing to do here return; } /** * @param jcas * @param documentText * @param delimiters */ protected void doTokenization(JCas jcas, String documentText, String delimiters) { int numTokens = 0; TokenAnnotation annotation; // System.out.println("doTokenization = " + documentText); overrideDelim(delimiters); setText(documentText); while (null != (annotation = nextToken(jcas))) { annotation.addToIndexes(); numTokens++; } } /** * @param configParameterName * @param configParameterValue */ public void processConfigurationParameter(String configParameterName, Object configParameterValue) { if (configParameterName.equals(PARAM_CASE_MATCH)) { String caseSense = (String) configParameterValue; if (caseSense != null) { if (caseSense.equalsIgnoreCase("insensitive")) { this.setCaseFoldInitCap(true); } else if (caseSense.equalsIgnoreCase("digitfold")) { this.setCaseFoldDigit(true); } else if (caseSense.equalsIgnoreCase("ignoreall")) { // System.out.println("SETCASEFOLDALL"); this.setCaseFoldAll(true); } } } else if ((configParameterName.equals(PARAM_STEMMER_CLASS)) && (configParameterValue != null)) { try { // System.err.println ("Trying to instantiate stemmer class: '" + // (String) configParameters [i] + "'"); Class stemmerClass = Class.forName((String) configParameterValue); setStemmer((Stemmer) stemmerClass.newInstance()); setStemming(true); } catch (Exception e) { System.err.println("Exception trying to instantiate stemmer class: '" + (String) configParameterValue + "', original exception:" + e.getMessage()); e.printStackTrace(); } } else if (configParameterName.equals(PARAM_TOKEN_DELIM)) { String tokenDelimiters = (String) configParameterValue; if (tokenDelimiters != null) { this.setDelim(tokenDelimiters); } } } /** * If the stemming flag is true, then return the stemmed form of the supplied word using the * Porter stemmer. * * @param token * the word to stem * @return the original word if the stemming flag is false, otherwise the stemmed form of the word */ protected String stem(String token) { if (shouldStem()) { return doStemming(token, getStemmer()); } return token; } public static String doStemming(String token, Stemmer stemmer) { return stemmer.stem(token.trim()); } }././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokenizer/TokenAnnotation.xmluima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokenizer/TokenA0000644000175000017500000000373011625126462033413 0ustar drazzibdrazzib TokenAnnotation offset token type for CAS 1.0 uima.tt.TokenAnnotation uima.tcas.Annotation org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation offset tokenizer functionality uima.tt.TokenAnnotation text text of token uima.cas.String tokenType uima.cas.Integer tokenClass semantic class, or other such classification of this token uima.cas.String ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokenizer/TokenAnnotation.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/support/tokenizer/TokenA0000644000175000017500000001053611625126462033415 0ustar drazzibdrazzib /* First created by JCasGen Tue Mar 25 16:39:54 EDT 2008 */ package org.apache.uima.conceptMapper.support.tokenizer; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** offset tokenizer functionality * Updated by JCasGen Tue Mar 25 16:39:54 EDT 2008 * XML source: /OtherStuff/IBM/eclipse-apacheuima/conceptMapper/src/org/apache/uima/conceptMapper/support/tokenizer/TokenAnnotation.xml * @generated */ public class TokenAnnotation extends uima.tt.TokenAnnotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(TokenAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected TokenAnnotation() {} /** Internal - constructor used by generator * @generated */ public TokenAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public TokenAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public TokenAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: text /** getter for text - gets text of token * @generated */ public String getText() { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type)jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((TokenAnnotation_Type)jcasType).casFeatCode_text);} /** setter for text - sets text of token * @generated */ public void setText(String v) { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type)jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((TokenAnnotation_Type)jcasType).casFeatCode_text, v);} //*--------------* //* Feature: tokenType /** getter for tokenType - gets * @generated */ public int getTokenType() { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type)jcasType).casFeat_tokenType == null) jcasType.jcas.throwFeatMissing("tokenType", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); return jcasType.ll_cas.ll_getIntValue(addr, ((TokenAnnotation_Type)jcasType).casFeatCode_tokenType);} /** setter for tokenType - sets * @generated */ public void setTokenType(int v) { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type)jcasType).casFeat_tokenType == null) jcasType.jcas.throwFeatMissing("tokenType", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); jcasType.ll_cas.ll_setIntValue(addr, ((TokenAnnotation_Type)jcasType).casFeatCode_tokenType, v);} //*--------------* //* Feature: tokenClass /** getter for tokenClass - gets semantic class, or other such classification of this token * @generated */ public String getTokenClass() { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type)jcasType).casFeat_tokenClass == null) jcasType.jcas.throwFeatMissing("tokenClass", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((TokenAnnotation_Type)jcasType).casFeatCode_tokenClass);} /** setter for tokenClass - sets semantic class, or other such classification of this token * @generated */ public void setTokenClass(String v) { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type)jcasType).casFeat_tokenClass == null) jcasType.jcas.throwFeatMissing("tokenClass", "org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((TokenAnnotation_Type)jcasType).casFeatCode_tokenClass, v);} } uima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/dictionaryCompiler/0000755000175000017500000000000011625126462032416 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/dictionaryCompiler/CompileDictionary.javauima-addons-2.3.1/ConceptMapper/src/main/java/org/apache/uima/conceptMapper/dictionaryCompiler/Compi0000644000175000017500000000521711625126462033415 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.conceptMapper.dictionaryCompiler; import java.io.FileOutputStream; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource_impl; import org.apache.uima.util.XMLInputSource; public class CompileDictionary { private static final String DICTIONARY_RESOURCE_NAME = "/DictionaryFile"; public static void main(String[] args) throws Exception { String dictionaryResourceName = DICTIONARY_RESOURCE_NAME; if (args.length == 2) { // do nothing } else if (args.length == 3) { dictionaryResourceName = args[2]; } else { usage(); System.exit(17); } AnalysisEngineDescription conceptMapperDesc = UIMAFramework.getXMLParser() .parseAnalysisEngineDescription(new XMLInputSource(args[0])); AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(conceptMapperDesc); DictionaryResource_impl dict = (DictionaryResource_impl) ae.getResourceManager().getResource( dictionaryResourceName); FileOutputStream output = new FileOutputStream(args[1]); dict.serializeEntries(output); output.close(); ae.destroy(); // for some reason JVM won't exit normally, // probably because CPM threads are alive? System.exit(0); } public static class ClassNameFinder extends SecurityManager{ public String getClassName(){ return getClassContext()[1].getName(); } } public static String getCurClassName(){ return (new ClassNameFinder()).getClassName(); } public static void usage () { System.out.println("USAGE: " + getCurClassName() + ": []"); } } uima-addons-2.3.1/ConceptMapper/src/main/java/uima/0000755000175000017500000000000011625126464021750 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/java/uima/tt/0000755000175000017500000000000011625126464022377 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/main/java/uima/tt/TokenAnnotation_Type.java0000644000175000017500000000345611625126464027366 0ustar drazzibdrazzib /* First created by JCasGen Mon Jun 23 14:44:24 CEST 2008 */ package uima.tt; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Mon Jun 23 14:44:24 CEST 2008 * @generated */ public class TokenAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (TokenAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = TokenAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new TokenAnnotation(addr, TokenAnnotation_Type.this); TokenAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new TokenAnnotation(addr, TokenAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = TokenAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("uima.tt.TokenAnnotation"); /** initialize variables to correspond with Cas Type and Features * @generated */ public TokenAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/ConceptMapper/src/main/java/uima/tt/TokenAnnotation.java0000644000175000017500000000300511625126464026353 0ustar drazzibdrazzib /* First created by JCasGen Mon Jun 23 14:44:24 CEST 2008 */ package uima.tt; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Updated by JCasGen Mon Jun 23 14:44:24 CEST 2008 * XML source: D:/code/eclipse330/apache/ConceptMapper/desc/analysis_engine/primitive/OffsetTokenizer.xml * @generated */ public class TokenAnnotation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(TokenAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected TokenAnnotation() {} /** Internal - constructor used by generator * @generated */ public TokenAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public TokenAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public TokenAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/ConceptMapper/src/test/0000755000175000017500000000000011625126462020125 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/test/java/0000755000175000017500000000000011625126462021046 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/docbook/0000755000175000017500000000000011625126462020566 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/src/docbook/ConceptMapperAnnotatorUserGuide.xml0000644000175000017500000010006011625126462027550 0ustar drazzibdrazzib ]> Apache UIMA ConceptMapper Annotator Documentation Introduction ConceptMapper is a highly configurable, high performance dictionary lookup tool, implemented as a UIMA (Unstructured Information Management Architecture) component. Using one of several matching algorithms, it maps entries in a dictionary onto input documents, producing UIMA annotations. Using ConceptMapper ConceptMapper was designed to provide highly accurate mappings of text into controlled vocabularies, specified as dictionaries, including the association of any necessary properties from the controlled vocabulary as part of that mapping. Individual dictionary entries could contain multiple terms (tokens), and ConceptMapper can be configured to allow multi-term entries to be matched against non-contiguous text. It was also designed to perform fast, and has been easily able to provide real-time results even with multi-million entry dictionaries. Lookups are token-based, and are limited to applying within a specific context, usually a sentence, though this is configurable (e.g., a noun phrase, a paragraph or other NLP-based concept). Functionality There are many parameters to configure all aspects of ConceptMapper's functionality, in terms of: processing the dictionary the way input documents are processed the availability of multiple lookup strategies its various output options

Dictionaries The requirements on the design of the ConceptMapper dictionary were that it be easily extensible and that arbitrary properties could be associated with individual entries. Additionally, the set of properties could not be fixed, but rather customizable for any particular application. The structure of a ConceptMapper dictionary is quite flexible and is expressed using XML (see ). Specifically, it consists of a set of entries, specified by the <token> XML tag, each containing one or more variants (synonyms), the text of which is specified using by the "base" feature of the <variant> XML tag. Entries can have any number of associated properties, as needed. Individual variants (synonyms) inherit features from their parent token (i.e., the canonical form), but can override any or all of them, or even add additional features. In the following sample dictionary entry, there are 6 variants, and according to the rules described earlier, each inherits the all attributes from the canonical form (canonical, CodeType, CodeValue, and SemClass), though the variants “colonic†and “colic†override the value of the POS (part of speech) attribute: Sample dictionary entry <token canonical="colon, nos" CodeType="ICDO" CodeValue="C18.9" SemClass="Site" POS="NN"> <variant base=â€colon, nosâ€/> <variant base=â€colonâ€/> <variant base="colonic" POS="JJ" /> <variant base="colic" POS="JJ" /> <variant base="large intestine" /> <variant base="large bowel" /> </token> The result of running ConceptMapper are UIMA annotations, and there are two configuration parameters that are used to map the attributes from the dictionary (see ) to features of UIMA annotations (see ). The entire dictionary is loaded into memory, which, in conjunction with an efficient data structure, provides very fast lookups. As stated earlier, dictionaries with millions of entries have been used without any performance issues. The obvious drawback to storing the dictionary in memory is that large dictionaries require large amounts of memory; this is partially mitigated by the fact that the dictionary is implemented as a UIMA shared resource (see ). This means that multiple annotators, such as multiple instances of ConceptMapper that are set up using different parameters, can all access it without having to load it more than once. The dictionary loader is specified in the external resource section of the descriptor, and is expected to implement the interface org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource. Two implementations are included in the distribution, org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource_impl, the standard implementation, which loads an XML version of a dictionary, and org.apache.uima.conceptMapper.support.dictionaryResource.CompiledDictionaryResource_impl which loads a pre-compiled version, for faster loading. The compiler is supplied as org.apache.uima.conceptMapper.dictionaryCompiler.CompileDictionary, which takes two arguments, a ConceptMapper analysis engine descriptor that loads the dictionary using the standard dictionary loader, and the name of the output file into which to write the compiled dictionary.
Dictionary Entry Tokenization Input documents are processed on a token-by-token basis, so it is important that the dictionary entries are tokenized in the same way as the input documents. To accomplish this, ConceptMapper allows any UIMA analysis engine to be specified as the tokenizer for the dictionary entries. See parameter for details.
Input Document Processing As stated earlier, input documents are processed on a token-by-token basis. Tokens are processed one span (e.g., a sentence or a noun phrase) at a time. Token annotations are specified by the parameter , while span annotations are specified by the parameter . By default, all tokens within a span are considered, and it is the text associated with each token that is used for lookups. ConceptMapper can also be configured to consider tokens differently: Case sensitive or insensitive matching. See the parameter Stop words: ignore token during lookup if it appears in given stop word list. See the parameter Stemming: a stemmer can be specified to be applied to the text of the token. In practice, the stemmer could be a standard stemmer providing the root form of the token, or it could perform other functions, such as abbreviation expansion or spelling variant replacement. See the parameter Use a token feature instead of the token's text. This is useful for cases where, for example, spelling or case correction results need to be applied instead of the token’s original text. See the parameter skip tokens during lookups based on particular feature values, as described below The ability to skip tokens during lookups based on particular feature values makes it easy to skip, for example, all tokens with particular part of speech tags, or with some previously computed semantic class. For example, given the text below in : Sample Input Text Infiltrating mammary carcinoma Assume each word is a token that has a feature SemanticClass, and that feature for the token “mammary†contains the value “AnatomicalSiteâ€, while the tokens “Infiltrating†and “carcinoma†do not. It is then possible to configure ConceptMapper to indicate that tokens that have a particular feature, in this case SemanticClass, equal to one of a set of values, in this case “AnatomicalSiteâ€, should be excluded when performing dictionary lookups (see parameters and ). By doing this, for the purposes of dictionary lookup, the example text would effectively appear to be: Result of Token Skipping Infiltrating carcinoma In addition to the set of feature values that indicate their associated token are to be excluded during lookup, there are also configuration parameters that can be used to specify a set of feature values for inclusion (see parameters and ). The algorithm for selecting annotations to include during lookup is as follows: Token Selection Algorithm if there is an includeList but no excludeList include annotation if feature value in includeList else if there is an excludeList exclude annotation if feature value in excludeList else include annotation This provides a simple way to restrict the selection of pre-classified tokens, whether that pre-classification is done via previous instances of ConceptMapper or some altogether different annotator. See
Lookup Strategies The actual dictionary lookup algorithm is controlled by three parameters. One specifies token-order independent lookup (). For example, a dictionary entry that contained the variant: <variant base='carcinoma, infiltrating'/> would also match against any permutation of its tokens. In this case, assuming that punctuation was ignored, it would match against both “infiltrating carcinoma†and “carcinoma, infiltratingâ€. Clearly, this particular setting must be used with care to prevent incorrect matches from being found, but for some domains it enables the use of a more compact dictionary, as all permutations of a particular entry do not need to be enumerated. Another parameter that controls the dictionary lookup algorithm toggles between finding only the longest match vs. finding all possible matches (). For the text: ... carcinoma, infiltrating ... If there was a dictionary entry for “carcinoma†as well as the entry for “carcinoma, infiltratingâ€, this parameter would control whether only the latter was annotated as a result or both would be annotated. Using the setting that indicates all possible matches should be found is useful when subsequent disambiguation is required. The final parameter that controls the dictionary lookup algorithm specifies the search strategy (), of which there are three. The default search strategy only considers contiguous tokens (not including tokens from the stop word list or otherwise skipped tokens, as described above), and then begins the subsequent search after the longest match. The second strategy allows for ignoring non-matching tokens, allowing for disjoint matches, so that a dictionary entry of A C would match against the text A B C This can be used as alternative method for finding “infiltrating carcinoma†over the text “infiltrating mammary carcinomaâ€, as opposed to the method described above, wherein the token “mammary†had to have been have been somehow pre-marked with a feature and that feature listed as indicating the token should be skipped. On the other hand, this approach is less precise, potentially finding completely disjoint and unrelated tokens as a dictionary match. As with the default search strategy, the subsequent search begins after the longest match. The final search strategy is identical to the previous, except that subsequent searches begin one token ahead, instead of after the previous match. This enables overlapped matching. As with the setting that finds all matches instead of the longest match, using this setting is useful when subsequent disambiguation is required.
Output Options Output is in the form of new UIMA annotations. As previously discussed, the mapping from dictionary entry attributes to the result annotation features can also be specified. Given the fact that dictionary entries can have multiple variants, and that matches could contain non-contiguous sets of tokens, it can be useful to be able to be able to know exactly what was matched. There are two parameters that can be used to provide this information. One allows the specification of a feature in the output annotation that will be set to the string containing the matched text. The other can be used to indicate a feature to be filled with the list of tokens that were matched. Going back to the example in figure 2, where the token “mammary†was skipped, the matched string would be set to “Infiltrating carcinoma†and the matched tokens would be set to the list of tokens “Infiltrating†and “carcinomaâ€. Another output control AE descriptor parameter can be used to specify a feature of the resultant annotation to be set to contain the span annotation enclosing the matched token. Assuming, for example, that the spans being processed are sentences, this provides a convenient way to link the resultant annotation back to its enclosing sentence. It is also possible to indicate dictionary attributes to store back into each of the matched tokens. This provides the ability for tokens to be marked with information regarding what it was matched against. Going back to the example in figure 2, one way that the SemanticClass feature of the token “mammary†could have been labeled with the value “AnatomicalSite†was using this technique: a previous invocation of ConceptMapper had “mammary†as a dictionary entry, that entry had the SemanticClass feature with the value “AnatomicalSiteâ€, and SemanticClass was listed as an attribute to write back as a token feature. If, instead of “mammary†the match was against a multi-token entry, then each of the multiple tokens would have that feature set.
Configuration Parameters Detailed description of all configuration parameters: TokenizerDescriptorPath: [Required] String Path to tokenizer Analysis Engine descriptor, which is used to tokenize dictionary entries. LanguageID: [Required] String Language ID (ISO 639-2), for use by the tokenizer specified by . TokenAnnotation: [Required] String Type of feature structure representing tokens in the input CAS. SpanFeatureStructure: [Required] String Type of feature structure that corresponds to spans of data for processing (e.g. a sentence) in the input CAS. AttributeList: [Required] Array of Strings List of attribute names for XML dictionary entry record. Must correspond to parallel list . FeatureList: [Required] Array of Strings List of feature names for . Must correspond to parallel list . caseMatch: [Required] String Specifies the case folding mode. The following are the allowable values: ignoreall - fold everything to lowercase for matching insensitive - fold only tokens with initial caps to lowercase digitfold - fold all (and only) tokens with a digit sensitive - perform no case folding StopWords: [Optional] Array of Strings A list of words that are always to be ignored in dictionary lookups. Stemmer: [Optional] String Name of stemmer class to use before matching. Must implement the org.apache.uima.conceptMapper.support.stemmer interface and have a zero-parameter constructor. If not specified, no stemming will be performed. TokenTextFeatureName: [Optional] String Name of feature of token annotation that contains the token's text. If not specified, the token's covered text will be used. TokenClassFeatureName: [Optional] String Name of feature used when doing lookups against and . Values contained in this feature are of type String. This parameter is mandatory if either or are specified. See for a description of how these are used during lookup. TokenTypeFeatureName: [Optional] String Name of feature used when doing lookups against and . Values contained in this feature are of type Integer. This parameter is mandatory if either or are specified See for a description of how these are used during lookup. IncludedTokenTypes: [Optional] Array of Integers Type of tokens to include in lookups (if not supplied, then all types are included except those specifically mentioned in ) ExcludedTokenTypes: [Optional] Array of Integers Type of tokens to exclude from lookups (if not supplied, then all types are excluded except those specifically mentioned in , unless is not supplied, in which case none are excluded) IncludedTokenClasses: [Optional] Array of Strings Class of tokens to include in lookups (if not supplied, then all classes are included except those specifically mentioned in ) ExcludedTokenClasses: [Optional] Array of Strings Class of tokens to exclude from lookups (if not supplied, then all classes are excluded except those specifically mentioned in , unless is not supplied, in which case none are excluded). OrderIndependentLookup: [Optional] Boolean If "True", token (as specified by ) ordering within span (as specified by ) is ignored during lookup (i.e., "top box" would equal "box top"). Default is False. SearchStrategy: [Optional] String Specifies the dictionary lookup strategy. The following are the allowable values: ContiguousMatch - longest match of contiguous tokens (as specified by ) within enclosing span (as specified by ), taking into account included/excluded items (see , , and ). DEFAULT strategy SkipAnyMatch - longest match of not-necessarily contiguous tokens (as specified by ) within enclosing span (as specified by ), taking into account included/excluded items (see , , and ). Subsequent lookups begin in span after complete match. Implies order-independent lookup (see ). SkipAnyMatchAllowOverlap - longest match of not-necessarily contiguous tokens (as specified by ) within enclosing span, (as specified by ) taking into account included/excluded items (see , , and ). Subsequent lookups begin in span after next token. Implies order-independent lookup (see ). FindAllMatches: [Optional] Boolean If True, all dictionary matches are found within the span specified by , otherwise only the longest matches are found. ResultingAnnotationName: [Optional] String Name of the annotation type created by this TAE. ResultingEnclosingSpanName: [Optional] String Name of the feature in the that will be set to point to the span annotation that encloses it (i.e. its sentence) ResultingAnnotationMatchedTextFeature: [Optional] String Name of the feature in the that will be set to the string that was matched in the dictionary. This could be different that the annotation's covered text if there were any skipped tokens in the match. MatchedTokensFeatureName: [Optional] String Name of the FSArray feature in the that will set to the set of tokens matched. TokenClassWriteBackFeatureNames: [Optional] Array of Strings Names of features in the that should be written back to a token from the matching dictionary entry, such as a POS tag. PrintDictionary: [Optional] Boolean If True, print dictionary after loading. Default is False. DictionaryFile: [Dictionary Resource] Boolean Dictionary file resource specification. Specify class name for dictionary loader, then bind to name of file containing dictionary contents to be loaded. uima-addons-2.3.1/ConceptMapper/src/docbook/images/0000755000175000017500000000000011625126462022033 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/desc/0000755000175000017500000000000011625126464017277 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/desc/analysis_engine/0000755000175000017500000000000011625126464022447 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/desc/analysis_engine/aggregate/0000755000175000017500000000000011625126464024375 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/desc/analysis_engine/aggregate/OffsetTokenizerMatcher.xml0000644000175000017500000000442611625126464031552 0ustar drazzibdrazzib org.apache.uima.java false DictMatcher Tokenizer ConceptMapper uima.tt.TokenAnnotation uima.tt.SentenceAnnotation uima.tt.ParagraphAnnotation org.apache.uima.conceptMapper.DictTerm true true uima-addons-2.3.1/ConceptMapper/desc/analysis_engine/primitive/0000755000175000017500000000000011625126464024457 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/desc/analysis_engine/primitive/DictTerm.xml0000644000175000017500000000403211625126464026713 0ustar drazzibdrazzib DictTerm 1 IBM org.apache.uima.conceptMapper.DictTerm Annotation for dictionary lookup matches uima.tcas.Annotation DictCanon canonical form uima.cas.String enclosingSpan span that this NoTerm is contained within (i.e. its sentence) uima.tcas.Annotation matchedText uima.cas.String matchedTokens uima.cas.FSArray uima-addons-2.3.1/ConceptMapper/desc/analysis_engine/primitive/OffsetTokenizer.xml0000644000175000017500000000670411625126464030331 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.conceptMapper.support.tokenizer.OffsetTokenizer OffsetTokenenizer caseMatch matching case sensitive or case insensitive String false true tokenDelimiters String of characters that separate tokens String false false caseMatch ignoreall tokenDelimiters /-*&@(){}|[]><\'`":;,$%+.?! org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation uima.tt.TokenAnnotation text uima.cas.String uima.tt.TokenAnnotation uima.tcas.Annotation org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation uima.tt.TokenAnnotation uima.tcas.DocumentAnnotation true true false uima-addons-2.3.1/ConceptMapper/desc/analysis_engine/primitive/ConceptMapperOffsetTokenizer.xml0000644000175000017500000003762211625126464033015 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.conceptMapper.ConceptMapper ConceptMapper 1 caseMatch this parameter specifies the case folding mode: ignoreall - fold everything to lowercase for matching insensitive - fold only tokens with initial caps to lowercase digitfold - fold all (and only) tokens with a digit sensitive - perform no case folding String false true Stemmer Name of stemmer class to use before matching. MUST have a zero-parameter constructor! If not specified, no stemming will be performed. String false false ResultingAnnotationName Name of the annotation type created by this TAE, must match the typeSystemDescription entry String false true ResultingEnclosingSpanName Name of the feature in the resultingAnnotation to contain the span that encloses it (i.e. its sentence) String false false AttributeList List of attribute names for XML dictionary entry record - must correspond to FeatureList String true true FeatureList List of feature names for CAS annotation - must correspond to AttributeList String true true TokenAnnotation String false true TokenClassFeatureName Name of feature used when doing lookups against IncludedTokenClasses and ExcludedTokenClasses String false false TokenTextFeatureName String false false SpanFeatureStructure Type of annotation which corresponds to spans of data for processing (e.g. a Sentence) String false true OrderIndependentLookup True if should ignore element order during lookup (i.e., "top box" would equal "box top"). Default is False. Boolean false false TokenTypeFeatureName Name of feature used when doing lookups against IncludedTokenTypes and ExcludedTokenTypes String false false IncludedTokenTypes Type of tokens to include in lookups (if not supplied, then all types are included except those specifically mentioned in ExcludedTokenTypes) Integer true false ExcludedTokenTypes Integer true false ExcludedTokenClasses Class of tokens to exclude from lookups (if not supplied, then all classes are excluded except those specifically mentioned in IncludedTokenClasses, unless IncludedTokenClasses is not supplied, in which case none are excluded) String true false IncludedTokenClasses Class of tokens to include in lookups (if not supplied, then all classes are included except those specifically mentioned in ExcludedTokenClasses) String true false TokenClassWriteBackFeatureNames names of features that should be written back to a token, such as a POS tag String true false ResultingAnnotationMatchedTextFeature String false false PrintDictionary Boolean false false SearchStrategy Can be either "SkipAnyMatch", "SkipAnyMatchAllowOverlap" or "ContiguousMatch" ContiguousMatch: longest match of contiguous tokens within enclosing span(taking into account included/excluded items). DEFAULT strategy SkipAnyMatch: longest match of not-necessarily contiguous tokens within enclosing span (taking into account included/excluded items). Subsequent lookups begin in span after complete match. IMPLIES order-independent lookup SkipAnyMatchAllowOverlap: longest match of not-necessarily contiguous tokens within enclosing span (taking into account included/excluded items). Subsequent lookups begin in span after next token. IMPLIES order-independent lookup String false false StopWords String true false FindAllMatches Boolean false false MatchedTokensFeatureName String false false ReplaceCommaWithAND Boolean false false TokenizerDescriptorPath String false true LanguageID String false false caseMatch ignoreall AttributeList canonical FeatureList DictCanon TokenAnnotation uima.tt.TokenAnnotation ResultingAnnotationName org.apache.uima.conceptMapper.DictTerm SpanFeatureStructure uima.tcas.DocumentAnnotation OrderIndependentLookup false TokenClassWriteBackFeatureNames IncludedTokenClasses PrintDictionary false FindAllMatches false StopWords ReplaceCommaWithAND false TokenizerDescriptorPath /OtherStuff/IBM/eclipse-UIMAsandbox/ConceptMapper/desc/analysis_engine/primitive/OffsetTokenizer.xml ResultingEnclosingSpanName enclosingSpan MatchedTokensFeatureName matchedTokens ResultingAnnotationMatchedTextFeature matchedText SearchStrategy ContiguousMatch LanguageID en uima.tt.TokenAnnotation uima.tcas.Annotation SemClass semantic class of token uima.cas.String POS Part of SPeech of term to which this token is a part uima.cas.String frost_TokenType uima.cas.Integer uima.tt.TokenAnnotation uima.tt.TokenAnnotation org.apache.uima.conceptMapper.DictTerm uima.tt.TokenAnnotation org.apache.uima.conceptMapper.support.tokenizer.TokenAnnotation uima.tcas.DocumentAnnotation true true false DictionaryFile dictionary file loader. org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource false DictionaryFileName A file containing the dictionary. Modify this URL to use a different dictionary. file:dict/testDict.xml org.apache.uima.conceptMapper.support.dictionaryResource.DictionaryResource_impl DictionaryFile DictionaryFileName uima-addons-2.3.1/ConceptMapper/desc/collection_processing_engines/0000755000175000017500000000000011625126464025376 5ustar drazzibdrazzibuima-addons-2.3.1/ConceptMapper/desc/collection_processing_engines/TestConceptMapperCPE.xml0000644000175000017500000000577111625126464032062 0ustar drazzibdrazzib InputFile /data5/BlueJShared/BlueJ_01/questions/30001-30010.zip OutputFile /tmp/out.zip -1 immediate uima-addons-2.3.1/AlchemyAPIAnnotator/0000755000175000017500000000000011625126614017420 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/pom.xml0000644000175000017500000001361011625126502020732 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent AlchemyAPIAnnotator 2.3.1 UIMA Annotator: ${project.artifactId} A UIMA set of AEs that wrap Alchemy API services from Orchestr8 ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/TextRankedEntityExtractionAEDescriptor.xml AlchemyAPIAnnotatorUserGuide org.apache.uima uimaj-core ${uimaDependencyVersion} provided junit junit 4.8.2 test commons-lang commons-lang 2.6 commons-digester commons-digester 2.1 uima-an-alchemy org.codehaus.mojo javacc-maven-plugin 2.5 javacc javacc 2 false org.apache.maven.plugins maven-project-info-reports-plugin 2.3.1 org.apache.maven.plugins maven-jxr-plugin 2.2 org.codehaus.mojo cobertura-maven-plugin 2.4 org.codehaus.mojo jdepend-maven-plugin 2.0-beta-2 org.apache.maven.plugins maven-changelog-plugin 2.2 range 60 org.apache.maven.plugins maven-surefire-report-plugin 2.8 org.apache.maven.plugins maven-changes-plugin 2.4 %URL%/detail?id=%ISSUE% changes-report org.codehaus.mojo javancss-maven-plugin 2.0 uima-addons-2.3.1/AlchemyAPIAnnotator/LICENSE.txt0000644000175000017500000002644611625126502021253 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/AlchemyAPIAnnotator/README.txt0000644000175000017500000000000011625126502021100 0ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/marker-file-identifying-single-project0000644000175000017500000000000011625126502026755 0ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/marker-file-identifying-standard-pear0000644000175000017500000000000011625126502026555 0ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/marker-file-identifying-osgi-project0000644000175000017500000000000011625126502026435 0ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/NOTICE.txt0000644000175000017500000000030411625126502021133 0ustar drazzibdrazzibApache UIMA AlchemyAPI Annotator component Copyright 2010 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). uima-addons-2.3.1/AlchemyAPIAnnotator/src/0000755000175000017500000000000011625126470020207 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/0000755000175000017500000000000011625126502021127 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/javacc/0000755000175000017500000000000011625126502022356 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/javacc/JsonParser.jj0000644000175000017500000001410711625126502024774 0ustar drazzibdrazzibPARSER_BEGIN(JsonParser) /* * Copyright 2008-2009 The Digester Tools Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.uima.alchemy.digester.json; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; import java.util.Stack; /** * Json prser */ public final class JsonParser { private static final String ROOT = "$"; private static final String EMPTY_URI = ""; private static final AttributesImpl ATTRIBUTES = new AttributesImpl(); private final Stack objectStack = new Stack(); private String rootElementName = ROOT; private ContentHandler contentHandler; public void setRootElementName(String rootElementName) { this.rootElementName = rootElementName; } public void setContentHandler(ContentHandler contentHandler) { this.contentHandler = contentHandler; } private void startElement(final String name) throws SAXException { this.contentHandler.startElement(EMPTY_URI, name, name, ATTRIBUTES); } private void endElement(final String name) throws SAXException { this.contentHandler.endElement(EMPTY_URI, name, name); } private void text(final String text) throws SAXException { this.contentHandler.characters(text.toCharArray(), 0, text.length()); } } PARSER_END(JsonParser) SKIP : { <[" ","\t","\n","\r"]> } TOKEN : { | | : STRING_STATE } MORE : { "\\" : ESC_STATE } TOKEN : { > : DEFAULT | } TOKEN : { : STRING_STATE } MORE : { "u" : HEX_STATE } TOKEN : { <#HEX : ["a"-"f","A"-"F","0"-"9"]> | > : STRING_STATE } SPECIAL_TOKEN : { } MORE : { <"/**" ~["/"]> { input_stream.backup(1); } : IN_JAVA_DOC_COMMENT | <"/*"> : IN_MULTI_LINE_COMMENT } SPECIAL_TOKEN : { : DEFAULT } SPECIAL_TOKEN : { : DEFAULT } MORE : { < ~[] > } public void json() throws SAXException : { } { { this.contentHandler.startDocument(); this.objectStack.push(this.rootElementName); } ( object() | array() ) { this.contentHandler.endDocument(); } } /** * */ private void object() throws SAXException : { } { "{" { this.startElement(this.objectStack.peek()); } [ members() ] "}" { this.endElement(this.objectStack.peek()); } } /** * */ private void members() throws SAXException : { } { pair() [ "," members() ] } /** * */ private void pair() throws SAXException : { String property; } { property = jsonString() { this.objectStack.push(property); } ":" value() } /** * */ private void value() throws SAXException : { String text; } { ( { this.startElement(this.objectStack.peek()); } ( text = jsonString() | text = jsonNumber() | text = "true".image | text = "false".image ) { this.text(text); this.endElement(this.objectStack.pop()); } | array() | object() ) } /** * */ private void array() throws SAXException : { } { "[" [ elements() ] "]" { this.objectStack.pop(); } } /** * */ private void elements() throws SAXException : { } { value() [ "," elements() ] } /** * */ private String jsonString() : { StringBuilder buffer = new StringBuilder(); } { [ chars(buffer) ] { return buffer.toString(); } } /** * */ private void chars(final StringBuilder buffer) : { char c; } { c=character() [ chars(buffer) ] { buffer.insert(0, c); } } /** * */ private char character() : { Token t; } { ( t= | t= | t= ) { if (t.image.length() < 2) { return t.image.charAt(0); } if (t.image.length() < 6) { char c = t.image.charAt(1); switch(t.image.charAt(1)) { //control characters case 'b' : return (char) 8; break; case 'f' : return (char) 12; break; case 'n' : return (char) 10; break; case 'r' : return (char) 13; break; case 't' : return (char) 9; break; default : return c; //characters that represent themselves } } else { //hex escape code //create an integer from our hex values //and then cast into a char int i = Integer.valueOf(t.image.substring(2,6), 16).intValue(); return (char) i; } } } /** * */ private String jsonNumber() : { String intpart = "", fracpart = "", exppart = ""; } { intpart = jsonInt() [ fracpart = jsonFrac() ] [ exppart = jsonExp() ] { return intpart + fracpart + exppart; } } /** * */ private String jsonInt() : { String digits; boolean negative = false; } { ["-" { negative = true; } ] digits=digits() { if (negative) { return "-" + digits; } return digits; } } /** * */ private String jsonFrac() : { String digits; } { "." digits = digits() { return "." + digits; } } /** * */ private String jsonExp() : { Token t; String digits; } { t= digits=digits() { return t.image + digits; } } /** * */ private String digits() : { Token t; } { t= { return t.image; } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/0000755000175000017500000000000011625126470022054 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/0000755000175000017500000000000011625126470022643 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/0000755000175000017500000000000011625126470024064 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/0000755000175000017500000000000011625126470025017 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/0000755000175000017500000000000011625126474026445 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/utils/0000755000175000017500000000000011625126470027601 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/0000755000175000017500000000000011625126470027725 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/0000755000175000017500000000000011625126470031744 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/SentimentAnalysisProcessor.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/Sentime0000644000175000017500000000322211625126470033272 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.processor; import org.apache.uima.alchemy.digester.domain.DocumentSentiment; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.digester.domain.SentimentAnalysisResults; import org.apache.uima.alchemy.ts.sentiment.SentimentFS; import org.apache.uima.jcas.JCas; public class SentimentAnalysisProcessor implements AlchemyOutputProcessor { public void process(JCas cas, Results results) throws Exception { DocumentSentiment docSentiment = ((SentimentAnalysisResults) results).getDocSentiment(); if (docSentiment != null) { SentimentFS sentimentFS = new SentimentFS(cas); sentimentFS.setScore(docSentiment.getScore()); sentimentFS.setSentimentType(docSentiment.getType()); sentimentFS.addToIndexes(); } } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/ConceptTaggingProcessor.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/Concept0000644000175000017500000000611411625126470033264 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.processor; import java.util.List; import org.apache.uima.alchemy.digester.domain.Concept; import org.apache.uima.alchemy.digester.domain.ConceptResults; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.ts.concept.ConceptFS; import org.apache.uima.cas.Type; import org.apache.uima.jcas.JCas; public class ConceptTaggingProcessor implements AlchemyOutputProcessor { public void process(JCas cas, Results results) throws Exception { ConceptResults conceptResults = (ConceptResults) results; if (conceptResults.getConcepts() != null) { List concepts = conceptResults.getConcepts().getConcepts(); for (Concept concept : concepts) { ConceptFS conceptFS = new ConceptFS(cas); Type type = conceptFS.getType(); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("text"), concept.getText()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("relevance"), concept .getRelevance()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("website"), concept .getWebsite()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("geo"), concept.getGeo()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("dbpedia"), concept .getDbpedia()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("yago"), concept.getYago()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("opencyc"), concept .getOpencyc()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("ciaFactbook"), concept .getCiaFactbook()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("geonames"), concept .getGeonames()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("crunchbase"), concept .getCrunchbase()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("semanticCrunchbase"), concept.getSemanticCrunchbase()); conceptFS.setFeatureValueFromString(type.getFeatureByBaseName("musicBrainz"), concept .getMusicBrainz()); conceptFS.addToIndexes(); } } } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/CategorizationProcessor.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/Categor0000644000175000017500000000351511625126470033257 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.processor; import org.apache.uima.alchemy.digester.domain.CategorizationResults; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.mapper.exception.MappingException; import org.apache.uima.alchemy.ts.categorization.Category; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.jcas.JCas; public class CategorizationProcessor implements AlchemyOutputProcessor { public void process(JCas cas, Results results) throws Exception { try { FeatureStructure fs = new Category(cas); Type type = fs.getType(); fs.setFeatureValueFromString(type.getFeatureByBaseName("score"), ((CategorizationResults) results).getScore()); fs.setFeatureValueFromString(type.getFeatureByBaseName("text"), ((CategorizationResults) results).getCategory()); cas.addFsToIndexes(fs); } catch (Exception e) { e.printStackTrace(); throw new MappingException(e); } } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/MicroformatsProcessor.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/Microfo0000644000175000017500000000344211625126470033270 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.processor; import org.apache.uima.alchemy.digester.domain.Microformat; import org.apache.uima.alchemy.digester.domain.MicroformatsResults; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.ts.microformats.MicroformatFS; import org.apache.uima.cas.Type; import org.apache.uima.jcas.JCas; public class MicroformatsProcessor implements AlchemyOutputProcessor { public void process(JCas cas, Results results) throws Exception { for (Microformat microformat : ((MicroformatsResults) results).getMicroformats()) { MicroformatFS microformatFS = new MicroformatFS(cas); Type type = microformatFS.getType(); microformatFS.setFeatureValueFromString(type.getFeatureByBaseName("fieldName"), microformat .getFieldName()); microformatFS.setFeatureValueFromString(type.getFeatureByBaseName("fieldData"), microformat .getFieldData()); microformatFS.addToIndexes(); } } } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/AlchemyOutputProcessor.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/Alchemy0000644000175000017500000000231511625126470033252 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.processor; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.jcas.JCas; public interface AlchemyOutputProcessor { /** * process AlchemyAPI output results and populate {@link JCas} with the proper FeatureStructures * * @param cas * @param results */ public void process(JCas cas, Results results) throws Exception; } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/RankedEntitiesProcessor.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/RankedE0000644000175000017500000001627111625126470033207 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.processor; import org.apache.uima.UIMAFramework; import org.apache.uima.alchemy.digester.domain.EntitiesResults; import org.apache.uima.alchemy.digester.domain.Entity; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.ts.entity.AlchemyAnnotation; import org.apache.uima.alchemy.ts.entity.BaseEntity; import org.apache.uima.alchemy.ts.sentiment.SentimentFS; import org.apache.uima.cas.Type; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.NonEmptyFSList; import org.apache.uima.jcas.cas.StringArray; import org.apache.uima.util.Level; public class RankedEntitiesProcessor implements AlchemyOutputProcessor { private static final String ENTITY_PACKAGE_NAME = "org.apache.uima.alchemy.ts.entity."; public void process(JCas cas, Results results) throws Exception { for (Entity entity : ((EntitiesResults) results).getEntities().getEntities()) { // get feature structure for the entity BaseEntity fs = getFeatureStructure(entity.getType(), cas); if (fs != null) { Type type = fs.getType(); /* set each FS feature value */ fs.setFeatureValueFromString(type.getFeatureByBaseName("count"), entity.getCount()); // count fs.setFeatureValueFromString(type.getFeatureByBaseName("text"), entity.getText()); // text fs.setFeatureValueFromString(type.getFeatureByBaseName("relevance"), entity.getRelevance()); // relevance if (entity.getDisambiguated() != null) { fs.setFeatureValueFromString(type.getFeatureByBaseName("disambiguation"), entity .getDisambiguated().getName()); // disambiguation name fs.setFeatureValueFromString(type.getFeatureByBaseName("dbpedia"), entity .getDisambiguated().getDbpedia()); // dbpedia fs.setFeatureValueFromString(type.getFeatureByBaseName("website"), entity .getDisambiguated().getWebsite()); // website fs.setFeatureValueFromString(type.getFeatureByBaseName("subType"), entity .getDisambiguated().getSubType()); // subtype fs.setFeatureValueFromString(type.getFeatureByBaseName("geo"), entity.getDisambiguated() .getGeo()); // geo fs.setFeatureValueFromString(type.getFeatureByBaseName("opencyc"), entity .getDisambiguated().getOpencyc()); // opencyc fs.setFeatureValueFromString(type.getFeatureByBaseName("yago"), entity.getDisambiguated() .getYago()); // yago fs.setFeatureValueFromString(type.getFeatureByBaseName("umbel"), entity .getDisambiguated().getUmbel()); // umbel fs.setFeatureValueFromString(type.getFeatureByBaseName("freebase"), entity .getDisambiguated().getFreebase()); // freebase fs.setFeatureValueFromString(type.getFeatureByBaseName("ciaFactbook"), entity .getDisambiguated().getCiaFactbook()); // ciaFactbook fs.setFeatureValueFromString(type.getFeatureByBaseName("census"), entity .getDisambiguated().getCensus()); // census fs.setFeatureValueFromString(type.getFeatureByBaseName("geonames"), entity .getDisambiguated().getGeonames()); // geonames fs.setFeatureValueFromString(type.getFeatureByBaseName("musicBrainz"), entity .getDisambiguated().getMusicBrainz()); // musicBrainz } if (entity.getQuotations() != null && entity.getQuotations().getQuotations() != null && entity.getQuotations().getQuotations().size() > 0) { StringArray quotationsFeatureStructure = new StringArray(cas, entity.getQuotations() .getQuotations().size()); int i = 0; for (String quotation : entity.getQuotations().getQuotations()) { quotationsFeatureStructure.set(i, quotation); i++; } fs.setFeatureValue(type.getFeatureByBaseName("quotations"), quotationsFeatureStructure); } if (entity.getSentiment() != null) { SentimentFS sentimentFS = new SentimentFS(cas); sentimentFS.setScore(entity.getSentiment().getScore()); sentimentFS.setSentimentType(entity.getSentiment().getType()); sentimentFS.addToIndexes(); fs.setFeatureValue(type.getFeatureByBaseName("sentiment"), sentimentFS); } cas.addFsToIndexes(fs); /* build annotations on this fs */ buildAnnotations(cas, fs); } } } /* reverse build annotations from entities */ private void buildAnnotations(JCas cas, BaseEntity fs) { Type type = fs.getType(); String entityText = fs.getStringValue(type.getFeatureByBaseName("text")); int annotationStart = cas.getDocumentText().indexOf(entityText); if (annotationStart > 0) { // create annotation AlchemyAnnotation alchemyAnnotation = new AlchemyAnnotation(cas, annotationStart, annotationStart + entityText .length()); alchemyAnnotation.setAlchemyType(type.toString()); alchemyAnnotation.addToIndexes(); UIMAFramework.getLogger().log(Level.INFO, new StringBuilder("added AlchemyAnnotation for ").append(alchemyAnnotation.getCoveredText()).append(" of type ").append(type.toString()).toString()); // update entity occurrences NonEmptyFSList list = (NonEmptyFSList) fs.getOccurrences(); if (list != null) { NonEmptyFSList newTail = new NonEmptyFSList(cas); newTail.setHead(list.getHead()); newTail.setTail(list.getTail()); } else { list = new NonEmptyFSList(cas); } list.setHead(alchemyAnnotation); fs.setOccurrences(list); } } private BaseEntity getFeatureStructure(String type, JCas aJCas) { BaseEntity fsObject = null; String typeName = new StringBuilder(ENTITY_PACKAGE_NAME).append(type).toString(); Class typeClass = getClassFromName(typeName); if (typeClass != null) { try { /* use reflection to build a BaseEntity object */ fsObject = (BaseEntity) typeClass.getConstructor(JCas.class).newInstance(aJCas); } catch (Exception e) { // fsObject remains null } } return fsObject; } private Class getClassFromName(String typeName) { Class toReturn = null; try { toReturn = Class.forName(typeName); } catch (ClassNotFoundException cnfe) { // do nothing } return toReturn; } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/KeywordProcessor.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/Keyword0000644000175000017500000000330711625126470033316 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.processor; import org.apache.uima.alchemy.digester.domain.Keyword; import org.apache.uima.alchemy.digester.domain.KeywordResults; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.mapper.exception.MappingException; import org.apache.uima.alchemy.ts.keywords.KeywordFS; import org.apache.uima.cas.Type; import org.apache.uima.jcas.JCas; public class KeywordProcessor implements AlchemyOutputProcessor { public void process(JCas cas, Results results) throws Exception { for (Keyword k : ((KeywordResults) results).getKeywords()) { try { KeywordFS fs = new KeywordFS(cas); Type type = fs.getType(); fs.setFeatureValueFromString(type.getFeatureByBaseName("text"), k.getText()); // text fs.addToIndexes(); } catch (Exception e) { throw new MappingException(e); } } } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/LanguageProcessor.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/Languag0000644000175000017500000000456411625126470033256 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.processor; import org.apache.uima.alchemy.digester.domain.LanguageDetectionResults; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.ts.language.LanguageFS; import org.apache.uima.cas.Type; import org.apache.uima.jcas.JCas; public class LanguageProcessor implements AlchemyOutputProcessor { public void process(JCas cas, Results results) throws Exception { LanguageFS languageFS = new LanguageFS(cas); Type type = languageFS.getType(); LanguageDetectionResults languageDetectionResults = (LanguageDetectionResults) results; languageFS.setFeatureValueFromString(type.getFeatureByBaseName("language"), languageDetectionResults.getLanguage()); languageFS.setFeatureValueFromString(type.getFeatureByBaseName("iso6391"), languageDetectionResults.getIso6391()); languageFS.setFeatureValueFromString(type.getFeatureByBaseName("iso6392"), languageDetectionResults.getIso6392()); languageFS.setFeatureValueFromString(type.getFeatureByBaseName("iso6393"), languageDetectionResults.getIso6393()); languageFS.setFeatureValueFromString(type.getFeatureByBaseName("ethnologue"), languageDetectionResults.getEthnologue()); languageFS.setFeatureValueFromString(type.getFeatureByBaseName("nativeSpeakers"), languageDetectionResults.getNativeSpeakers()); languageFS.setFeatureValueFromString(type.getFeatureByBaseName("wikipedia"), languageDetectionResults.getWikipedia()); languageFS.addToIndexes(); } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/AnnotatedEntitiesProcessor.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/Annotat0000644000175000017500000000420511625126470033274 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.processor; import org.apache.commons.lang.StringUtils; import org.apache.uima.alchemy.digester.domain.AnnotatedResults; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.ts.entity.AlchemyAnnotation; import org.apache.uima.jcas.JCas; public class AnnotatedEntitiesProcessor implements AlchemyOutputProcessor { public void process(JCas cas, Results results) throws Exception { String annotatedText = ((AnnotatedResults) results).getAnnotatedText(); // find strings of pattern 'TYPE[TEXT' String[] ants = StringUtils.substringsBetween(annotatedText, "[", "]"); // map the ants to UIMA CAS for (String ant : ants) { if (ant.indexOf("[") > 0) { AlchemyAnnotation alchemyAnnotation = new AlchemyAnnotation(cas); int indexOfAnt = annotatedText.indexOf(ant); alchemyAnnotation.setBegin(indexOfAnt - 1); String antText = ant.substring(ant.indexOf("[") + 1); alchemyAnnotation.setEnd(indexOfAnt + antText.length() - 1); String antType = ant.substring(0, ant.indexOf("[")); alchemyAnnotation.setAlchemyType(antType); alchemyAnnotation.addToIndexes(); annotatedText = annotatedText.replaceFirst("\\[" + ant.replace("[", "\\[") + "\\]\\]", antText); } } } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/exception/0000755000175000017500000000000011625126470031723 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/exception/MappingException.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/exception/Mapping0000644000175000017500000000207511625126470033245 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper.exception; public class MappingException extends Exception { /** * */ private static final long serialVersionUID = 1L; public MappingException(Throwable e) { super(e); } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/Alchemy2TypeSystemMapper.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/Alchemy2TypeSyste0000644000175000017500000000721211625126470033210 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.mapper; import java.util.HashMap; import java.util.Map; import org.apache.uima.alchemy.digester.domain.AnnotatedResults; import org.apache.uima.alchemy.digester.domain.CategorizationResults; import org.apache.uima.alchemy.digester.domain.ConceptResults; import org.apache.uima.alchemy.digester.domain.EntitiesResults; import org.apache.uima.alchemy.digester.domain.KeywordResults; import org.apache.uima.alchemy.digester.domain.LanguageDetectionResults; import org.apache.uima.alchemy.digester.domain.MicroformatsResults; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.digester.domain.SentimentAnalysisResults; import org.apache.uima.alchemy.mapper.exception.MappingException; import org.apache.uima.alchemy.mapper.processor.AlchemyOutputProcessor; import org.apache.uima.alchemy.mapper.processor.AnnotatedEntitiesProcessor; import org.apache.uima.alchemy.mapper.processor.CategorizationProcessor; import org.apache.uima.alchemy.mapper.processor.ConceptTaggingProcessor; import org.apache.uima.alchemy.mapper.processor.KeywordProcessor; import org.apache.uima.alchemy.mapper.processor.LanguageProcessor; import org.apache.uima.alchemy.mapper.processor.MicroformatsProcessor; import org.apache.uima.alchemy.mapper.processor.RankedEntitiesProcessor; import org.apache.uima.alchemy.mapper.processor.SentimentAnalysisProcessor; import org.apache.uima.jcas.JCas; public class Alchemy2TypeSystemMapper { private static Map, AlchemyOutputProcessor> processors = new HashMap, AlchemyOutputProcessor>(); public static void mapResultsToTypeSystem(Results results, JCas aJCas) throws MappingException { try { setLanaguage(results, aJCas); if (processors.isEmpty()) initializeProcessors(); processors.get(results.getClass()).process(aJCas, results); } catch (Exception e) { throw new MappingException(e); } } private static void initializeProcessors() { processors.put(AnnotatedResults.class, new AnnotatedEntitiesProcessor()); processors.put(CategorizationResults.class, new CategorizationProcessor()); processors.put(ConceptResults.class, new ConceptTaggingProcessor()); processors.put(EntitiesResults.class, new RankedEntitiesProcessor()); processors.put(KeywordResults.class, new KeywordProcessor()); processors.put(LanguageDetectionResults.class, new LanguageProcessor()); processors.put(MicroformatsResults.class, new MicroformatsProcessor()); processors.put(SentimentAnalysisResults.class, new SentimentAnalysisProcessor()); } private static void setLanaguage(Results results, JCas aJCas) { String language = results.getLanguage(); if (language != null) aJCas.setDocumentLanguage(language); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/0000755000175000017500000000000011625126474027073 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/language/0000755000175000017500000000000011625126474030656 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/language/LanguageFS_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/language/LanguageFS_T0000644000175000017500000002215711625126474033047 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sun Jan 24 22:11:51 CET 2010 */ package org.apache.uima.alchemy.ts.language; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Sun Jan 24 22:11:51 CET 2010 * * @generated */ public class LanguageFS_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() { return fsGenerator; } /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (LanguageFS_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = LanguageFS_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new LanguageFS(addr, LanguageFS_Type.this); LanguageFS_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new LanguageFS(addr, LanguageFS_Type.this); } }; /** @generated */ public final static int typeIndexID = LanguageFS.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry .getFeatOkTst("org.apache.uima.alchemy.ts.language.LanguageFS"); /** @generated */ final Feature casFeat_language; /** @generated */ final int casFeatCode_language; /** @generated */ public String getLanguage(int addr) { if (featOkTst && casFeat_language == null) jcas.throwFeatMissing("language", "org.apache.uima.alchemy.ts.language.LanguageFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_language); } /** @generated */ public void setLanguage(int addr, String v) { if (featOkTst && casFeat_language == null) jcas.throwFeatMissing("language", "org.apache.uima.alchemy.ts.language.LanguageFS"); ll_cas.ll_setStringValue(addr, casFeatCode_language, v); } /** @generated */ final Feature casFeat_iso6391; /** @generated */ final int casFeatCode_iso6391; /** @generated */ public String getIso6391(int addr) { if (featOkTst && casFeat_iso6391 == null) jcas.throwFeatMissing("iso6391", "org.apache.uima.alchemy.ts.language.LanguageFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_iso6391); } /** @generated */ public void setIso6391(int addr, String v) { if (featOkTst && casFeat_iso6391 == null) jcas.throwFeatMissing("iso6391", "org.apache.uima.alchemy.ts.language.LanguageFS"); ll_cas.ll_setStringValue(addr, casFeatCode_iso6391, v); } /** @generated */ final Feature casFeat_iso6392; /** @generated */ final int casFeatCode_iso6392; /** @generated */ public String getIso6392(int addr) { if (featOkTst && casFeat_iso6392 == null) jcas.throwFeatMissing("iso6392", "org.apache.uima.alchemy.ts.language.LanguageFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_iso6392); } /** @generated */ public void setIso6392(int addr, String v) { if (featOkTst && casFeat_iso6392 == null) jcas.throwFeatMissing("iso6392", "org.apache.uima.alchemy.ts.language.LanguageFS"); ll_cas.ll_setStringValue(addr, casFeatCode_iso6392, v); } /** @generated */ final Feature casFeat_iso6393; /** @generated */ final int casFeatCode_iso6393; /** @generated */ public String getIso6393(int addr) { if (featOkTst && casFeat_iso6393 == null) jcas.throwFeatMissing("iso6393", "org.apache.uima.alchemy.ts.language.LanguageFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_iso6393); } /** @generated */ public void setIso6393(int addr, String v) { if (featOkTst && casFeat_iso6393 == null) jcas.throwFeatMissing("iso6393", "org.apache.uima.alchemy.ts.language.LanguageFS"); ll_cas.ll_setStringValue(addr, casFeatCode_iso6393, v); } /** @generated */ final Feature casFeat_ethnologue; /** @generated */ final int casFeatCode_ethnologue; /** @generated */ public String getEthnologue(int addr) { if (featOkTst && casFeat_ethnologue == null) jcas.throwFeatMissing("ethnologue", "org.apache.uima.alchemy.ts.language.LanguageFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_ethnologue); } /** @generated */ public void setEthnologue(int addr, String v) { if (featOkTst && casFeat_ethnologue == null) jcas.throwFeatMissing("ethnologue", "org.apache.uima.alchemy.ts.language.LanguageFS"); ll_cas.ll_setStringValue(addr, casFeatCode_ethnologue, v); } /** @generated */ final Feature casFeat_nativeSpeakers; /** @generated */ final int casFeatCode_nativeSpeakers; /** @generated */ public String getNativeSpeakers(int addr) { if (featOkTst && casFeat_nativeSpeakers == null) jcas.throwFeatMissing("nativeSpeakers", "org.apache.uima.alchemy.ts.language.LanguageFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_nativeSpeakers); } /** @generated */ public void setNativeSpeakers(int addr, String v) { if (featOkTst && casFeat_nativeSpeakers == null) jcas.throwFeatMissing("nativeSpeakers", "org.apache.uima.alchemy.ts.language.LanguageFS"); ll_cas.ll_setStringValue(addr, casFeatCode_nativeSpeakers, v); } /** @generated */ final Feature casFeat_wikipedia; /** @generated */ final int casFeatCode_wikipedia; /** @generated */ public String getWikipedia(int addr) { if (featOkTst && casFeat_wikipedia == null) jcas.throwFeatMissing("wikipedia", "org.apache.uima.alchemy.ts.language.LanguageFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_wikipedia); } /** @generated */ public void setWikipedia(int addr, String v) { if (featOkTst && casFeat_wikipedia == null) jcas.throwFeatMissing("wikipedia", "org.apache.uima.alchemy.ts.language.LanguageFS"); ll_cas.ll_setStringValue(addr, casFeatCode_wikipedia, v); } /** * initialize variables to correspond with Cas Type and Features * * @generated */ public LanguageFS_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl) this.casType, getFSGenerator()); casFeat_language = jcas.getRequiredFeatureDE(casType, "language", "uima.cas.String", featOkTst); casFeatCode_language = (null == casFeat_language) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_language).getCode(); casFeat_iso6391 = jcas.getRequiredFeatureDE(casType, "iso6391", "uima.cas.String", featOkTst); casFeatCode_iso6391 = (null == casFeat_iso6391) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_iso6391).getCode(); casFeat_iso6392 = jcas.getRequiredFeatureDE(casType, "iso6392", "uima.cas.String", featOkTst); casFeatCode_iso6392 = (null == casFeat_iso6392) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_iso6392).getCode(); casFeat_iso6393 = jcas.getRequiredFeatureDE(casType, "iso6393", "uima.cas.String", featOkTst); casFeatCode_iso6393 = (null == casFeat_iso6393) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_iso6393).getCode(); casFeat_ethnologue = jcas.getRequiredFeatureDE(casType, "ethnologue", "uima.cas.String", featOkTst); casFeatCode_ethnologue = (null == casFeat_ethnologue) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_ethnologue).getCode(); casFeat_nativeSpeakers = jcas.getRequiredFeatureDE(casType, "nativeSpeakers", "uima.cas.String", featOkTst); casFeatCode_nativeSpeakers = (null == casFeat_nativeSpeakers) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_nativeSpeakers).getCode(); casFeat_wikipedia = jcas.getRequiredFeatureDE(casType, "wikipedia", "uima.cas.String", featOkTst); casFeatCode_wikipedia = (null == casFeat_wikipedia) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_wikipedia).getCode(); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/language/LanguageFS.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/language/LanguageFS.j0000644000175000017500000002042311625126474033006 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sun Jan 24 22:11:51 CET 2010 */ package org.apache.uima.alchemy.ts.language; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.TOP; /** * Updated by JCasGen Sun Jan 24 22:11:51 CET 2010 XML source: * * @generated */ public class LanguageFS extends TOP { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(LanguageFS.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() { return typeIndexID; } /** * Never called. Disable default constructor * * @generated */ protected LanguageFS() { } /** * Internal - constructor used by generator * * @generated */ public LanguageFS(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public LanguageFS(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * * @generated modifiable */ private void readObject() { } // *--------------* // * Feature: language /** * getter for language - gets * * @generated */ public String getLanguage() { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_language == null) jcasType.jcas.throwFeatMissing("language", "org.apache.uima.alchemy.ts.language.LanguageFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_language); } /** * setter for language - sets * * @generated */ public void setLanguage(String v) { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_language == null) jcasType.jcas.throwFeatMissing("language", "org.apache.uima.alchemy.ts.language.LanguageFS"); jcasType.ll_cas.ll_setStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_language, v); } // *--------------* // * Feature: iso6391 /** * getter for iso6391 - gets * * @generated */ public String getIso6391() { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_iso6391 == null) jcasType.jcas.throwFeatMissing("iso6391", "org.apache.uima.alchemy.ts.language.LanguageFS"); return jcasType.ll_cas .ll_getStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_iso6391); } /** * setter for iso6391 - sets * * @generated */ public void setIso6391(String v) { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_iso6391 == null) jcasType.jcas.throwFeatMissing("iso6391", "org.apache.uima.alchemy.ts.language.LanguageFS"); jcasType.ll_cas.ll_setStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_iso6391, v); } // *--------------* // * Feature: iso6392 /** * getter for iso6392 - gets * * @generated */ public String getIso6392() { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_iso6392 == null) jcasType.jcas.throwFeatMissing("iso6392", "org.apache.uima.alchemy.ts.language.LanguageFS"); return jcasType.ll_cas .ll_getStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_iso6392); } /** * setter for iso6392 - sets * * @generated */ public void setIso6392(String v) { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_iso6392 == null) jcasType.jcas.throwFeatMissing("iso6392", "org.apache.uima.alchemy.ts.language.LanguageFS"); jcasType.ll_cas.ll_setStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_iso6392, v); } // *--------------* // * Feature: iso6393 /** * getter for iso6393 - gets * * @generated */ public String getIso6393() { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_iso6393 == null) jcasType.jcas.throwFeatMissing("iso6393", "org.apache.uima.alchemy.ts.language.LanguageFS"); return jcasType.ll_cas .ll_getStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_iso6393); } /** * setter for iso6393 - sets * * @generated */ public void setIso6393(String v) { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_iso6393 == null) jcasType.jcas.throwFeatMissing("iso6393", "org.apache.uima.alchemy.ts.language.LanguageFS"); jcasType.ll_cas.ll_setStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_iso6393, v); } // *--------------* // * Feature: ethnologue /** * getter for ethnologue - gets * * @generated */ public String getEthnologue() { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_ethnologue == null) jcasType.jcas .throwFeatMissing("ethnologue", "org.apache.uima.alchemy.ts.language.LanguageFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_ethnologue); } /** * setter for ethnologue - sets * * @generated */ public void setEthnologue(String v) { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_ethnologue == null) jcasType.jcas .throwFeatMissing("ethnologue", "org.apache.uima.alchemy.ts.language.LanguageFS"); jcasType.ll_cas.ll_setStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_ethnologue, v); } // *--------------* // * Feature: nativeSpeakers /** * getter for nativeSpeakers - gets * * @generated */ public String getNativeSpeakers() { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_nativeSpeakers == null) jcasType.jcas.throwFeatMissing("nativeSpeakers", "org.apache.uima.alchemy.ts.language.LanguageFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_nativeSpeakers); } /** * setter for nativeSpeakers - sets * * @generated */ public void setNativeSpeakers(String v) { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_nativeSpeakers == null) jcasType.jcas.throwFeatMissing("nativeSpeakers", "org.apache.uima.alchemy.ts.language.LanguageFS"); jcasType.ll_cas.ll_setStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_nativeSpeakers, v); } // *--------------* // * Feature: wikipedia /** * getter for wikipedia - gets * * @generated */ public String getWikipedia() { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_wikipedia == null) jcasType.jcas.throwFeatMissing("wikipedia", "org.apache.uima.alchemy.ts.language.LanguageFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_wikipedia); } /** * setter for wikipedia - sets * * @generated */ public void setWikipedia(String v) { if (LanguageFS_Type.featOkTst && ((LanguageFS_Type) jcasType).casFeat_wikipedia == null) jcasType.jcas.throwFeatMissing("wikipedia", "org.apache.uima.alchemy.ts.language.LanguageFS"); jcasType.ll_cas.ll_setStringValue(addr, ((LanguageFS_Type) jcasType).casFeatCode_wikipedia, v); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/keywords/0000755000175000017500000000000011625126474030742 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/keywords/KeywordFS_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/keywords/KeywordFS_Ty0000644000175000017500000000705711625126474033227 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jan 14 17:54:41 CET 2010 */ package org.apache.uima.alchemy.ts.keywords; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jan 14 17:54:41 CET 2010 * * @generated */ public class KeywordFS_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() { return fsGenerator; } /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (KeywordFS_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = KeywordFS_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new KeywordFS(addr, KeywordFS_Type.this); KeywordFS_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new KeywordFS(addr, KeywordFS_Type.this); } }; /** @generated */ public final static int typeIndexID = KeywordFS.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry .getFeatOkTst("org.apache.uima.alchemy.ts.keywords.KeywordFS"); /** @generated */ final Feature casFeat_text; /** @generated */ final int casFeatCode_text; /** @generated */ public String getText(int addr) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.keywords.KeywordFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_text); } /** @generated */ public void setText(int addr, String v) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.keywords.KeywordFS"); ll_cas.ll_setStringValue(addr, casFeatCode_text, v); } /** * initialize variables to correspond with Cas Type and Features * * @generated */ public KeywordFS_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl) this.casType, getFSGenerator()); casFeat_text = jcas.getRequiredFeatureDE(casType, "text", "uima.cas.String", featOkTst); casFeatCode_text = (null == casFeat_text) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_text).getCode(); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/keywords/KeywordFS.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/keywords/KeywordFS.ja0000644000175000017500000000560511625126474033141 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jan 14 17:54:41 CET 2010 */ package org.apache.uima.alchemy.ts.keywords; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.TOP; /** * Updated by JCasGen Thu Jan 14 17:54:41 CET 2010 XML source: * * @generated */ public class KeywordFS extends TOP { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(KeywordFS.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() { return typeIndexID; } /** * Never called. Disable default constructor * * @generated */ protected KeywordFS() { } /** * Internal - constructor used by generator * * @generated */ public KeywordFS(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public KeywordFS(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * * @generated modifiable */ private void readObject() { } // *--------------* // * Feature: text /** * getter for text - gets * * @generated */ public String getText() { if (KeywordFS_Type.featOkTst && ((KeywordFS_Type) jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.keywords.KeywordFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((KeywordFS_Type) jcasType).casFeatCode_text); } /** * setter for text - sets * * @generated */ public void setText(String v) { if (KeywordFS_Type.featOkTst && ((KeywordFS_Type) jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.keywords.KeywordFS"); jcasType.ll_cas.ll_setStringValue(addr, ((KeywordFS_Type) jcasType).casFeatCode_text, v); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/0000755000175000017500000000000011625126502030377 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Person_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Person_Type.ja0000644000175000017500000000504111625126502033162 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Person_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Person_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Person_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Person(addr, Person_Type.this); Person_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Person(addr, Person_Type.this); } }; /** @generated */ public final static int typeIndexID = Person.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Person"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Person_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/RadioStation_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/RadioStation_T0000644000175000017500000000512211625126502033205 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Jun 04 21:00:54 CEST 2010 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class RadioStation_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (RadioStation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = RadioStation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new RadioStation(addr, RadioStation_Type.this); RadioStation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new RadioStation(addr, RadioStation_Type.this); } }; /** @generated */ public final static int typeIndexID = RadioStation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.RadioStation"); /** initialize variables to correspond with Cas Type and Features * @generated */ public RadioStation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/NaturalDisaster.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/NaturalDisaste0000644000175000017500000000427711625126502033257 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class NaturalDisaster extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(NaturalDisaster.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected NaturalDisaster() {} /** * Internal - constructor used by generator * * @generated */ public NaturalDisaster(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public NaturalDisaster(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/TelevisionShow_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/TelevisionShow0000644000175000017500000000517111625126502033310 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class TelevisionShow_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (TelevisionShow_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = TelevisionShow_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new TelevisionShow(addr, TelevisionShow_Type.this); TelevisionShow_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new TelevisionShow(addr, TelevisionShow_Type.this); } }; /** @generated */ public final static int typeIndexID = TelevisionShow.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.TelevisionShow"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public TelevisionShow_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Technology_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Technology_Typ0000644000175000017500000000511511625126502033273 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Technology_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Technology_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Technology_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Technology(addr, Technology_Type.this); Technology_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Technology(addr, Technology_Type.this); } }; /** @generated */ public final static int typeIndexID = Technology.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Technology"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Technology_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Technology.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Technology.jav0000644000175000017500000000424611625126502033222 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Technology extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Technology.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Technology() {} /** * Internal - constructor used by generator * * @generated */ public Technology(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Technology(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Sport.java0000644000175000017500000000421511625126502032353 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Sport extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Sport.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Sport() {} /** * Internal - constructor used by generator * * @generated */ public Sport(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Sport(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/MusicGroup_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/MusicGroup_Typ0000644000175000017500000000511511625126502033255 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class MusicGroup_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (MusicGroup_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = MusicGroup_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new MusicGroup(addr, MusicGroup_Type.this); MusicGroup_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new MusicGroup(addr, MusicGroup_Type.this); } }; /** @generated */ public final static int typeIndexID = MusicGroup.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.MusicGroup"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public MusicGroup_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Company_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Company_Type.j0000644000175000017500000000505411625126502033165 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Company_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Company_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Company_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Company(addr, Company_Type.this); Company_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Company(addr, Company_Type.this); } }; /** @generated */ public final static int typeIndexID = Company.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Company"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Company_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/AlchemyAnnotation.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/AlchemyAnnotat0000644000175000017500000000653211625126502033237 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sat Jan 09 18:51:20 CET 2010 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Updated by JCasGen Fri Mar 11 17:40:06 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class AlchemyAnnotation extends Annotation { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(AlchemyAnnotation.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected AlchemyAnnotation() {} /** * Internal - constructor used by generator * * @generated */ public AlchemyAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public AlchemyAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public AlchemyAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } // *--------------* // * Feature: alchemyType /** * getter for alchemyType - gets * * @generated */ public String getAlchemyType() { if (AlchemyAnnotation_Type.featOkTst && ((AlchemyAnnotation_Type)jcasType).casFeat_alchemyType == null) jcasType.jcas.throwFeatMissing("alchemyType", "org.apache.uima.alchemy.ts.entity.AlchemyAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((AlchemyAnnotation_Type)jcasType).casFeatCode_alchemyType);} /** * setter for alchemyType - sets * * @generated */ public void setAlchemyType(String v) { if (AlchemyAnnotation_Type.featOkTst && ((AlchemyAnnotation_Type)jcasType).casFeat_alchemyType == null) jcasType.jcas.throwFeatMissing("alchemyType", "org.apache.uima.alchemy.ts.entity.AlchemyAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((AlchemyAnnotation_Type)jcasType).casFeatCode_alchemyType, v);} } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/HealthCondition.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/HealthConditio0000644000175000017500000000427711625126502033232 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class HealthCondition extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(HealthCondition.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected HealthCondition() {} /** * Internal - constructor used by generator * * @generated */ public HealthCondition(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public HealthCondition(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/SportingEvent_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/SportingEvent_0000644000175000017500000000516011625126502033272 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Wed Nov 11 17:11:04 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class SportingEvent_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (SportingEvent_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = SportingEvent_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new SportingEvent(addr, SportingEvent_Type.this); SportingEvent_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new SportingEvent(addr, SportingEvent_Type.this); } }; /** @generated */ public final static int typeIndexID = SportingEvent.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.SportingEvent"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public SportingEvent_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/PrintMedia_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/PrintMedia_Typ0000644000175000017500000000511511625126502033214 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class PrintMedia_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (PrintMedia_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = PrintMedia_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new PrintMedia(addr, PrintMedia_Type.this); PrintMedia_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new PrintMedia(addr, PrintMedia_Type.this); } }; /** @generated */ public final static int typeIndexID = PrintMedia.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.PrintMedia"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public PrintMedia_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/EntertainmentAward_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/EntertainmentA0000644000175000017500000000524511625126502033246 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class EntertainmentAward_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (EntertainmentAward_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = EntertainmentAward_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new EntertainmentAward(addr, EntertainmentAward_Type.this); EntertainmentAward_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new EntertainmentAward(addr, EntertainmentAward_Type.this); } }; /** @generated */ public final static int typeIndexID = EntertainmentAward.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.EntertainmentAward"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public EntertainmentAward_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/TelevisionStation.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/TelevisionStat0000644000175000017500000000431111625126502033276 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class TelevisionStation extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(TelevisionStation.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected TelevisionStation() {} /** * Internal - constructor used by generator * * @generated */ public TelevisionStation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public TelevisionStation(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/FieldTerminology_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/FieldTerminolo0000644000175000017500000000521711625126502033243 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class FieldTerminology_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (FieldTerminology_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = FieldTerminology_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new FieldTerminology(addr, FieldTerminology_Type.this); FieldTerminology_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new FieldTerminology(addr, FieldTerminology_Type.this); } }; /** @generated */ public final static int typeIndexID = FieldTerminology.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.FieldTerminology"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public FieldTerminology_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Facility.java0000644000175000017500000000423411625126502033011 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Facility extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Facility.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Facility() {} /** * Internal - constructor used by generator * * @generated */ public Facility(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Facility(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/OperatingSystem.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/OperatingSyste0000644000175000017500000000430111625126502033300 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Wed Nov 11 15:21:12 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class OperatingSystem extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(OperatingSystem.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected OperatingSystem() {} /** * Internal - constructor used by generator * * @generated */ public OperatingSystem(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public OperatingSystem(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/OperatingSystem_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/OperatingSyste0000644000175000017500000000520611625126502033305 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Wed Nov 11 15:21:12 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class OperatingSystem_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (OperatingSystem_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = OperatingSystem_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new OperatingSystem(addr, OperatingSystem_Type.this); OperatingSystem_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new OperatingSystem(addr, OperatingSystem_Type.this); } }; /** @generated */ public final static int typeIndexID = OperatingSystem.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.OperatingSystem"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public OperatingSystem_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Drug.java0000644000175000017500000000421211625126502032142 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sun Nov 15 23:15:42 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Drug extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Drug.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Drug() {} /** * Internal - constructor used by generator * * @generated */ public Drug(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Drug(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/TelevisionStation_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/TelevisionStat0000644000175000017500000000523211625126502033301 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class TelevisionStation_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (TelevisionStation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = TelevisionStation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new TelevisionStation(addr, TelevisionStation_Type.this); TelevisionStation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new TelevisionStation(addr, TelevisionStation_Type.this); } }; /** @generated */ public final static int typeIndexID = TelevisionStation.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.TelevisionStation"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public TelevisionStation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/RadioProgram_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/RadioProgram_T0000644000175000017500000000514311625126502033176 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class RadioProgram_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (RadioProgram_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = RadioProgram_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new RadioProgram(addr, RadioProgram_Type.this); RadioProgram_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new RadioProgram(addr, RadioProgram_Type.this); } }; /** @generated */ public final static int typeIndexID = RadioProgram.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.RadioProgram"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public RadioProgram_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/EntertainmentAward.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/EntertainmentA0000644000175000017500000000431611625126502033244 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class EntertainmentAward extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(EntertainmentAward.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected EntertainmentAward() {} /** * Internal - constructor used by generator * * @generated */ public EntertainmentAward(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public EntertainmentAward(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Movie.java0000644000175000017500000000421511625126502032323 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Movie extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Movie.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Movie() {} /** * Internal - constructor used by generator * * @generated */ public Movie(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Movie(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/GeographicFeature_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/GeographicFeat0000644000175000017500000000523211625126502033174 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class GeographicFeature_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (GeographicFeature_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = GeographicFeature_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new GeographicFeature(addr, GeographicFeature_Type.this); GeographicFeature_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new GeographicFeature(addr, GeographicFeature_Type.this); } }; /** @generated */ public final static int typeIndexID = GeographicFeature.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.GeographicFeature"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public GeographicFeature_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/FinancialMarketIndex.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/FinancialMarke0000644000175000017500000000433011625126502033166 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class FinancialMarketIndex extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(FinancialMarketIndex.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected FinancialMarketIndex() {} /** * Internal - constructor used by generator * * @generated */ public FinancialMarketIndex(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public FinancialMarketIndex(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Continent_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Continent_Type0000644000175000017500000000510211625126502033262 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Continent_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Continent_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Continent_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Continent(addr, Continent_Type.this); Continent_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Continent(addr, Continent_Type.this); } }; /** @generated */ public final static int typeIndexID = Continent.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Continent"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Continent_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Holiday.java0000644000175000017500000000422711625126502032640 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Holiday extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Holiday.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Holiday() {} /** * Internal - constructor used by generator * * @generated */ public Holiday(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Holiday(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/FieldTerminology.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/FieldTerminolo0000644000175000017500000000430411625126502033237 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class FieldTerminology extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(FieldTerminology.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected FieldTerminology() {} /** * Internal - constructor used by generator * * @generated */ public FieldTerminology(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public FieldTerminology(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Organization_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Organization_T0000644000175000017500000000514311625126502033254 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Organization_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Organization_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Organization_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Organization(addr, Organization_Type.this); Organization_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Organization(addr, Organization_Type.this); } }; /** @generated */ public final static int typeIndexID = Organization.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Organization"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Organization_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Automobile_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Automobile_Typ0000644000175000017500000000476711625126502033274 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sat Sep 04 10:54:35 CEST 2010 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Automobile_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Automobile_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Automobile_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Automobile(addr, Automobile_Type.this); Automobile_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Automobile(addr, Automobile_Type.this); } }; /** @generated */ public final static int typeIndexID = Automobile.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Automobile"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Automobile_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/TelevisionShow.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/TelevisionShow0000644000175000017500000000427211625126502033311 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class TelevisionShow extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(TelevisionShow.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected TelevisionShow() {} /** * Internal - constructor used by generator * * @generated */ public TelevisionShow(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public TelevisionShow(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Continent.java0000644000175000017500000000424111625126502033204 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Continent extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Continent.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Continent() {} /** * Internal - constructor used by generator * * @generated */ public Continent(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Continent(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Movie_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Movie_Type.jav0000644000175000017500000000502611625126502033164 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Movie_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Movie_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Movie_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Movie(addr, Movie_Type.this); Movie_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Movie(addr, Movie_Type.this); } }; /** @generated */ public final static int typeIndexID = Movie.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Movie"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Movie_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/StateOrCounty_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/StateOrCounty_0000644000175000017500000000515611625126502033253 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class StateOrCounty_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (StateOrCounty_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = StateOrCounty_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new StateOrCounty(addr, StateOrCounty_Type.this); StateOrCounty_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new StateOrCounty(addr, StateOrCounty_Type.this); } }; /** @generated */ public final static int typeIndexID = StateOrCounty.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.StateOrCounty"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public StateOrCounty_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Drug_Type.java0000644000175000017500000000501511625126502033145 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sun Nov 15 23:15:42 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Drug_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Drug_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Drug_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Drug(addr, Drug_Type.this); Drug_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Drug(addr, Drug_Type.this); } }; /** @generated */ public final static int typeIndexID = Drug.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Drug"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Drug_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/RadioStation.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/RadioStation.j0000644000175000017500000000425211625126502033155 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Jun 04 21:00:54 CEST 2010 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class RadioStation extends BaseEntity { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(RadioStation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected RadioStation() {} /** Internal - constructor used by generator * @generated */ public RadioStation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public RadioStation(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/PrintMedia.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/PrintMedia.jav0000644000175000017500000000424611625126502033143 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class PrintMedia extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(PrintMedia.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected PrintMedia() {} /** * Internal - constructor used by generator * * @generated */ public PrintMedia(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public PrintMedia(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Country_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Country_Type.j0000644000175000017500000000505411625126502033222 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Country_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Country_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Country_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Country(addr, Country_Type.this); Country_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Country(addr, Country_Type.this); } }; /** @generated */ public final static int typeIndexID = Country.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Country"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Country_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Person.java0000644000175000017500000000422211625126502032510 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Person extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Person.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Person() {} /** * Internal - constructor used by generator * * @generated */ public Person(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Person(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Anniversary.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Anniversary.ja0000644000175000017500000000425311625126502033220 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Anniversary extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Anniversary.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Anniversary() {} /** * Internal - constructor used by generator * * @generated */ public Anniversary(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Anniversary(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/RadioProgram.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/RadioProgram.j0000644000175000017500000000426011625126502033142 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class RadioProgram extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(RadioProgram.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected RadioProgram() {} /** * Internal - constructor used by generator * * @generated */ public RadioProgram(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public RadioProgram(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/NaturalDisaster_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/NaturalDisaste0000644000175000017500000000520411625126502033246 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class NaturalDisaster_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (NaturalDisaster_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = NaturalDisaster_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new NaturalDisaster(addr, NaturalDisaster_Type.this); NaturalDisaster_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new NaturalDisaster(addr, NaturalDisaster_Type.this); } }; /** @generated */ public final static int typeIndexID = NaturalDisaster.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.NaturalDisaster"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public NaturalDisaster_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/StateOrCounty.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/StateOrCounty.0000644000175000017500000000426511625126502033172 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class StateOrCounty extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(StateOrCounty.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected StateOrCounty() {} /** * Internal - constructor used by generator * * @generated */ public StateOrCounty(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public StateOrCounty(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/City_Type.java0000644000175000017500000000501311625126502033152 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class City_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (City_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = City_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new City(addr, City_Type.this); City_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new City(addr, City_Type.this); } }; /** @generated */ public final static int typeIndexID = City.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.City"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public City_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/GeographicFeature.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/GeographicFeat0000644000175000017500000000431111625126502033171 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class GeographicFeature extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(GeographicFeature.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected GeographicFeature() {} /** * Internal - constructor used by generator * * @generated */ public GeographicFeature(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public GeographicFeature(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Facility_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Facility_Type.0000644000175000017500000000506711625126502033155 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Facility_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Facility_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Facility_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Facility(addr, Facility_Type.this); Facility_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Facility(addr, Facility_Type.this); } }; /** @generated */ public final static int typeIndexID = Facility.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Facility"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Facility_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Region_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Region_Type.ja0000644000175000017500000000504111625126502033137 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Region_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Region_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Region_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Region(addr, Region_Type.this); Region_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Region(addr, Region_Type.this); } }; /** @generated */ public final static int typeIndexID = Region.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Region"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Region_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/HealthCondition_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/HealthConditio0000644000175000017500000000520411625126502033221 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class HealthCondition_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (HealthCondition_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = HealthCondition_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new HealthCondition(addr, HealthCondition_Type.this); HealthCondition_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new HealthCondition(addr, HealthCondition_Type.this); } }; /** @generated */ public final static int typeIndexID = HealthCondition.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.HealthCondition"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public HealthCondition_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Holiday_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Holiday_Type.j0000644000175000017500000000505411625126502033150 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Holiday_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Holiday_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Holiday_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Holiday(addr, Holiday_Type.this); Holiday_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Holiday(addr, Holiday_Type.this); } }; /** @generated */ public final static int typeIndexID = Holiday.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Holiday"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Holiday_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Organization.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Organization.j0000644000175000017500000000426011625126502033220 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Organization extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Organization.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Organization() {} /** * Internal - constructor used by generator * * @generated */ public Organization(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Organization(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Region.java0000644000175000017500000000422211625126502032465 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Region extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Region.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Region() {} /** * Internal - constructor used by generator * * @generated */ public Region(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Region(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Anniversary_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Anniversary_Ty0000644000175000017500000000513011625126502033276 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Anniversary_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Anniversary_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Anniversary_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Anniversary(addr, Anniversary_Type.this); Anniversary_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Anniversary(addr, Anniversary_Type.this); } }; /** @generated */ public final static int typeIndexID = Anniversary.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Anniversary"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Anniversary_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/FinancialMarketIndex_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/FinancialMarke0000644000175000017500000000527311625126502033175 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class FinancialMarketIndex_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (FinancialMarketIndex_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = FinancialMarketIndex_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new FinancialMarketIndex(addr, FinancialMarketIndex_Type.this); FinancialMarketIndex_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new FinancialMarketIndex(addr, FinancialMarketIndex_Type.this); } }; /** @generated */ public final static int typeIndexID = FinancialMarketIndex.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.FinancialMarketIndex"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public FinancialMarketIndex_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Country.java0000644000175000017500000000422711625126502032712 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Country extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Country.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Country() {} /** * Internal - constructor used by generator * * @generated */ public Country(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Country(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/SportingEvent.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/SportingEvent.0000644000175000017500000000426711625126502033220 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Wed Nov 11 17:11:04 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class SportingEvent extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(SportingEvent.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected SportingEvent() {} /** * Internal - constructor used by generator * * @generated */ public SportingEvent(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public SportingEvent(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/BaseEntity_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/BaseEntity_Typ0000644000175000017500000005034411625126502033233 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sat Sep 04 10:54:35 CEST 2010 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class BaseEntity_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (BaseEntity_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = BaseEntity_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new BaseEntity(addr, BaseEntity_Type.this); BaseEntity_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new BaseEntity(addr, BaseEntity_Type.this); } }; /** @generated */ public final static int typeIndexID = BaseEntity.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.BaseEntity"); /** @generated */ final Feature casFeat_text; /** @generated */ final int casFeatCode_text; /** @generated */ public String getText(int addr) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_text); } /** @generated */ public void setText(int addr, String v) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_text, v);} /** @generated */ final Feature casFeat_count; /** @generated */ final int casFeatCode_count; /** @generated */ public String getCount(int addr) { if (featOkTst && casFeat_count == null) jcas.throwFeatMissing("count", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_count); } /** @generated */ public void setCount(int addr, String v) { if (featOkTst && casFeat_count == null) jcas.throwFeatMissing("count", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_count, v);} /** @generated */ final Feature casFeat_relevance; /** @generated */ final int casFeatCode_relevance; /** @generated */ public String getRelevance(int addr) { if (featOkTst && casFeat_relevance == null) jcas.throwFeatMissing("relevance", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_relevance); } /** @generated */ public void setRelevance(int addr, String v) { if (featOkTst && casFeat_relevance == null) jcas.throwFeatMissing("relevance", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_relevance, v);} /** @generated */ final Feature casFeat_disambiguation; /** @generated */ final int casFeatCode_disambiguation; /** @generated */ public String getDisambiguation(int addr) { if (featOkTst && casFeat_disambiguation == null) jcas.throwFeatMissing("disambiguation", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_disambiguation); } /** @generated */ public void setDisambiguation(int addr, String v) { if (featOkTst && casFeat_disambiguation == null) jcas.throwFeatMissing("disambiguation", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_disambiguation, v);} /** @generated */ final Feature casFeat_subType; /** @generated */ final int casFeatCode_subType; /** @generated */ public String getSubType(int addr) { if (featOkTst && casFeat_subType == null) jcas.throwFeatMissing("subType", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_subType); } /** @generated */ public void setSubType(int addr, String v) { if (featOkTst && casFeat_subType == null) jcas.throwFeatMissing("subType", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_subType, v);} /** @generated */ final Feature casFeat_website; /** @generated */ final int casFeatCode_website; /** @generated */ public String getWebsite(int addr) { if (featOkTst && casFeat_website == null) jcas.throwFeatMissing("website", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_website); } /** @generated */ public void setWebsite(int addr, String v) { if (featOkTst && casFeat_website == null) jcas.throwFeatMissing("website", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_website, v);} /** @generated */ final Feature casFeat_geo; /** @generated */ final int casFeatCode_geo; /** @generated */ public String getGeo(int addr) { if (featOkTst && casFeat_geo == null) jcas.throwFeatMissing("geo", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_geo); } /** @generated */ public void setGeo(int addr, String v) { if (featOkTst && casFeat_geo == null) jcas.throwFeatMissing("geo", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_geo, v);} /** @generated */ final Feature casFeat_dbpedia; /** @generated */ final int casFeatCode_dbpedia; /** @generated */ public String getDbpedia(int addr) { if (featOkTst && casFeat_dbpedia == null) jcas.throwFeatMissing("dbpedia", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_dbpedia); } /** @generated */ public void setDbpedia(int addr, String v) { if (featOkTst && casFeat_dbpedia == null) jcas.throwFeatMissing("dbpedia", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_dbpedia, v);} /** @generated */ final Feature casFeat_yago; /** @generated */ final int casFeatCode_yago; /** @generated */ public String getYago(int addr) { if (featOkTst && casFeat_yago == null) jcas.throwFeatMissing("yago", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_yago); } /** @generated */ public void setYago(int addr, String v) { if (featOkTst && casFeat_yago == null) jcas.throwFeatMissing("yago", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_yago, v);} /** @generated */ final Feature casFeat_opencyc; /** @generated */ final int casFeatCode_opencyc; /** @generated */ public String getOpencyc(int addr) { if (featOkTst && casFeat_opencyc == null) jcas.throwFeatMissing("opencyc", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_opencyc); } /** @generated */ public void setOpencyc(int addr, String v) { if (featOkTst && casFeat_opencyc == null) jcas.throwFeatMissing("opencyc", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_opencyc, v);} /** @generated */ final Feature casFeat_umbel; /** @generated */ final int casFeatCode_umbel; /** @generated */ public String getUmbel(int addr) { if (featOkTst && casFeat_umbel == null) jcas.throwFeatMissing("umbel", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_umbel); } /** @generated */ public void setUmbel(int addr, String v) { if (featOkTst && casFeat_umbel == null) jcas.throwFeatMissing("umbel", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_umbel, v);} /** @generated */ final Feature casFeat_freebase; /** @generated */ final int casFeatCode_freebase; /** @generated */ public String getFreebase(int addr) { if (featOkTst && casFeat_freebase == null) jcas.throwFeatMissing("freebase", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_freebase); } /** @generated */ public void setFreebase(int addr, String v) { if (featOkTst && casFeat_freebase == null) jcas.throwFeatMissing("freebase", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_freebase, v);} /** @generated */ final Feature casFeat_ciaFactbook; /** @generated */ final int casFeatCode_ciaFactbook; /** @generated */ public String getCiaFactbook(int addr) { if (featOkTst && casFeat_ciaFactbook == null) jcas.throwFeatMissing("ciaFactbook", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_ciaFactbook); } /** @generated */ public void setCiaFactbook(int addr, String v) { if (featOkTst && casFeat_ciaFactbook == null) jcas.throwFeatMissing("ciaFactbook", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_ciaFactbook, v);} /** @generated */ final Feature casFeat_census; /** @generated */ final int casFeatCode_census; /** @generated */ public String getCensus(int addr) { if (featOkTst && casFeat_census == null) jcas.throwFeatMissing("census", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_census); } /** @generated */ public void setCensus(int addr, String v) { if (featOkTst && casFeat_census == null) jcas.throwFeatMissing("census", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_census, v);} /** @generated */ final Feature casFeat_geonames; /** @generated */ final int casFeatCode_geonames; /** @generated */ public String getGeonames(int addr) { if (featOkTst && casFeat_geonames == null) jcas.throwFeatMissing("geonames", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_geonames); } /** @generated */ public void setGeonames(int addr, String v) { if (featOkTst && casFeat_geonames == null) jcas.throwFeatMissing("geonames", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_geonames, v);} /** @generated */ final Feature casFeat_musicBrainz; /** @generated */ final int casFeatCode_musicBrainz; /** @generated */ public String getMusicBrainz(int addr) { if (featOkTst && casFeat_musicBrainz == null) jcas.throwFeatMissing("musicBrainz", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getStringValue(addr, casFeatCode_musicBrainz); } /** @generated */ public void setMusicBrainz(int addr, String v) { if (featOkTst && casFeat_musicBrainz == null) jcas.throwFeatMissing("musicBrainz", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setStringValue(addr, casFeatCode_musicBrainz, v);} /** @generated */ final Feature casFeat_quotations; /** @generated */ final int casFeatCode_quotations; /** @generated */ public int getQuotations(int addr) { if (featOkTst && casFeat_quotations == null) jcas.throwFeatMissing("quotations", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getRefValue(addr, casFeatCode_quotations); } /** @generated */ public void setQuotations(int addr, int v) { if (featOkTst && casFeat_quotations == null) jcas.throwFeatMissing("quotations", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setRefValue(addr, casFeatCode_quotations, v);} /** @generated */ public String getQuotations(int addr, int i) { if (featOkTst && casFeat_quotations == null) jcas.throwFeatMissing("quotations", "org.apache.uima.alchemy.ts.entity.BaseEntity"); if (lowLevelTypeChecks) return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_quotations), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_quotations), i); return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_quotations), i); } /** @generated */ public void setQuotations(int addr, int i, String v) { if (featOkTst && casFeat_quotations == null) jcas.throwFeatMissing("quotations", "org.apache.uima.alchemy.ts.entity.BaseEntity"); if (lowLevelTypeChecks) ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_quotations), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_quotations), i); ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_quotations), i, v); } /** @generated */ final Feature casFeat_occurrences; /** @generated */ final int casFeatCode_occurrences; /** @generated */ public int getOccurrences(int addr) { if (featOkTst && casFeat_occurrences == null) jcas.throwFeatMissing("occurrences", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getRefValue(addr, casFeatCode_occurrences); } /** @generated */ public void setOccurrences(int addr, int v) { if (featOkTst && casFeat_occurrences == null) jcas.throwFeatMissing("occurrences", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setRefValue(addr, casFeatCode_occurrences, v);} /** @generated */ final Feature casFeat_sentiment; /** @generated */ final int casFeatCode_sentiment; /** @generated */ public int getSentiment(int addr) { if (featOkTst && casFeat_sentiment == null) jcas.throwFeatMissing("sentiment", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return ll_cas.ll_getRefValue(addr, casFeatCode_sentiment); } /** @generated */ public void setSentiment(int addr, int v) { if (featOkTst && casFeat_sentiment == null) jcas.throwFeatMissing("sentiment", "org.apache.uima.alchemy.ts.entity.BaseEntity"); ll_cas.ll_setRefValue(addr, casFeatCode_sentiment, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public BaseEntity_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_text = jcas.getRequiredFeatureDE(casType, "text", "uima.cas.String", featOkTst); casFeatCode_text = (null == casFeat_text) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_text).getCode(); casFeat_count = jcas.getRequiredFeatureDE(casType, "count", "uima.cas.String", featOkTst); casFeatCode_count = (null == casFeat_count) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_count).getCode(); casFeat_relevance = jcas.getRequiredFeatureDE(casType, "relevance", "uima.cas.String", featOkTst); casFeatCode_relevance = (null == casFeat_relevance) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_relevance).getCode(); casFeat_disambiguation = jcas.getRequiredFeatureDE(casType, "disambiguation", "uima.cas.String", featOkTst); casFeatCode_disambiguation = (null == casFeat_disambiguation) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_disambiguation).getCode(); casFeat_subType = jcas.getRequiredFeatureDE(casType, "subType", "uima.cas.String", featOkTst); casFeatCode_subType = (null == casFeat_subType) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_subType).getCode(); casFeat_website = jcas.getRequiredFeatureDE(casType, "website", "uima.cas.String", featOkTst); casFeatCode_website = (null == casFeat_website) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_website).getCode(); casFeat_geo = jcas.getRequiredFeatureDE(casType, "geo", "uima.cas.String", featOkTst); casFeatCode_geo = (null == casFeat_geo) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_geo).getCode(); casFeat_dbpedia = jcas.getRequiredFeatureDE(casType, "dbpedia", "uima.cas.String", featOkTst); casFeatCode_dbpedia = (null == casFeat_dbpedia) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_dbpedia).getCode(); casFeat_yago = jcas.getRequiredFeatureDE(casType, "yago", "uima.cas.String", featOkTst); casFeatCode_yago = (null == casFeat_yago) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_yago).getCode(); casFeat_opencyc = jcas.getRequiredFeatureDE(casType, "opencyc", "uima.cas.String", featOkTst); casFeatCode_opencyc = (null == casFeat_opencyc) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_opencyc).getCode(); casFeat_umbel = jcas.getRequiredFeatureDE(casType, "umbel", "uima.cas.String", featOkTst); casFeatCode_umbel = (null == casFeat_umbel) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_umbel).getCode(); casFeat_freebase = jcas.getRequiredFeatureDE(casType, "freebase", "uima.cas.String", featOkTst); casFeatCode_freebase = (null == casFeat_freebase) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_freebase).getCode(); casFeat_ciaFactbook = jcas.getRequiredFeatureDE(casType, "ciaFactbook", "uima.cas.String", featOkTst); casFeatCode_ciaFactbook = (null == casFeat_ciaFactbook) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_ciaFactbook).getCode(); casFeat_census = jcas.getRequiredFeatureDE(casType, "census", "uima.cas.String", featOkTst); casFeatCode_census = (null == casFeat_census) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_census).getCode(); casFeat_geonames = jcas.getRequiredFeatureDE(casType, "geonames", "uima.cas.String", featOkTst); casFeatCode_geonames = (null == casFeat_geonames) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_geonames).getCode(); casFeat_musicBrainz = jcas.getRequiredFeatureDE(casType, "musicBrainz", "uima.cas.String", featOkTst); casFeatCode_musicBrainz = (null == casFeat_musicBrainz) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_musicBrainz).getCode(); casFeat_quotations = jcas.getRequiredFeatureDE(casType, "quotations", "uima.cas.StringArray", featOkTst); casFeatCode_quotations = (null == casFeat_quotations) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_quotations).getCode(); casFeat_occurrences = jcas.getRequiredFeatureDE(casType, "occurrences", "uima.cas.FSList", featOkTst); casFeatCode_occurrences = (null == casFeat_occurrences) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_occurrences).getCode(); casFeat_sentiment = jcas.getRequiredFeatureDE(casType, "sentiment", "org.apache.uima.alchemy.ts.sentiment.SentimentFS", featOkTst); casFeatCode_sentiment = (null == casFeat_sentiment) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_sentiment).getCode(); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Automobile.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Automobile.jav0000644000175000017500000000413511625126502033204 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sat Sep 04 10:54:35 CEST 2010 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Automobile extends BaseEntity { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Automobile.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Automobile() {} /** Internal - constructor used by generator * @generated */ public Automobile(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Automobile(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Company.java0000644000175000017500000000422711625126502032655 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class Company extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Company.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected Company() {} /** * Internal - constructor used by generator * * @generated */ public Company(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Company(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Sport_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/Sport_Type.jav0000644000175000017500000000502611625126502033214 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class Sport_Type extends BaseEntity_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Sport_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Sport_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Sport(addr, Sport_Type.this); Sport_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Sport(addr, Sport_Type.this); } }; /** @generated */ public final static int typeIndexID = Sport.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.Sport"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Sport_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/AlchemyAnnotation_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/AlchemyAnnotat0000644000175000017500000000736311625126502033242 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sat Jan 09 18:51:20 CET 2010 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class AlchemyAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (AlchemyAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = AlchemyAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new AlchemyAnnotation(addr, AlchemyAnnotation_Type.this); AlchemyAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new AlchemyAnnotation(addr, AlchemyAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = AlchemyAnnotation.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.entity.AlchemyAnnotation"); /** @generated */ final Feature casFeat_alchemyType; /** @generated */ final int casFeatCode_alchemyType; /** @generated */ public String getAlchemyType(int addr) { if (featOkTst && casFeat_alchemyType == null) jcas.throwFeatMissing("alchemyType", "org.apache.uima.alchemy.ts.entity.AlchemyAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_alchemyType); } /** @generated */ public void setAlchemyType(int addr, String v) { if (featOkTst && casFeat_alchemyType == null) jcas.throwFeatMissing("alchemyType", "org.apache.uima.alchemy.ts.entity.AlchemyAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_alchemyType, v);} /** * initialize variables to correspond with Cas Type and Features * * @generated */ public AlchemyAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_alchemyType = jcas.getRequiredFeatureDE(casType, "alchemyType", "uima.cas.String", featOkTst); casFeatCode_alchemyType = (null == casFeat_alchemyType) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_alchemyType).getCode(); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/BaseEntity.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/BaseEntity.jav0000644000175000017500000004562111625126502033160 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sat Sep 04 10:54:35 CEST 2010 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.FSList; import org.apache.uima.jcas.cas.StringArray; import org.apache.uima.jcas.cas.TOP; import org.apache.uima.alchemy.ts.sentiment.SentimentFS; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class BaseEntity extends TOP { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(BaseEntity.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected BaseEntity() {} /** Internal - constructor used by generator * @generated */ public BaseEntity(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public BaseEntity(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: text /** getter for text - gets * @generated */ public String getText() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_text);} /** setter for text - sets * @generated */ public void setText(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_text, v);} //*--------------* //* Feature: count /** getter for count - gets * @generated */ public String getCount() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_count == null) jcasType.jcas.throwFeatMissing("count", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_count);} /** setter for count - sets * @generated */ public void setCount(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_count == null) jcasType.jcas.throwFeatMissing("count", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_count, v);} //*--------------* //* Feature: relevance /** getter for relevance - gets * @generated */ public String getRelevance() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_relevance == null) jcasType.jcas.throwFeatMissing("relevance", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_relevance);} /** setter for relevance - sets * @generated */ public void setRelevance(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_relevance == null) jcasType.jcas.throwFeatMissing("relevance", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_relevance, v);} //*--------------* //* Feature: disambiguation /** getter for disambiguation - gets * @generated */ public String getDisambiguation() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_disambiguation == null) jcasType.jcas.throwFeatMissing("disambiguation", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_disambiguation);} /** setter for disambiguation - sets * @generated */ public void setDisambiguation(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_disambiguation == null) jcasType.jcas.throwFeatMissing("disambiguation", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_disambiguation, v);} //*--------------* //* Feature: subType /** getter for subType - gets * @generated */ public String getSubType() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_subType == null) jcasType.jcas.throwFeatMissing("subType", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_subType);} /** setter for subType - sets * @generated */ public void setSubType(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_subType == null) jcasType.jcas.throwFeatMissing("subType", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_subType, v);} //*--------------* //* Feature: website /** getter for website - gets * @generated */ public String getWebsite() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_website == null) jcasType.jcas.throwFeatMissing("website", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_website);} /** setter for website - sets * @generated */ public void setWebsite(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_website == null) jcasType.jcas.throwFeatMissing("website", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_website, v);} //*--------------* //* Feature: geo /** getter for geo - gets * @generated */ public String getGeo() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_geo == null) jcasType.jcas.throwFeatMissing("geo", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_geo);} /** setter for geo - sets * @generated */ public void setGeo(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_geo == null) jcasType.jcas.throwFeatMissing("geo", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_geo, v);} //*--------------* //* Feature: dbpedia /** getter for dbpedia - gets * @generated */ public String getDbpedia() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_dbpedia == null) jcasType.jcas.throwFeatMissing("dbpedia", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_dbpedia);} /** setter for dbpedia - sets * @generated */ public void setDbpedia(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_dbpedia == null) jcasType.jcas.throwFeatMissing("dbpedia", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_dbpedia, v);} //*--------------* //* Feature: yago /** getter for yago - gets * @generated */ public String getYago() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_yago == null) jcasType.jcas.throwFeatMissing("yago", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_yago);} /** setter for yago - sets * @generated */ public void setYago(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_yago == null) jcasType.jcas.throwFeatMissing("yago", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_yago, v);} //*--------------* //* Feature: opencyc /** getter for opencyc - gets * @generated */ public String getOpencyc() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_opencyc == null) jcasType.jcas.throwFeatMissing("opencyc", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_opencyc);} /** setter for opencyc - sets * @generated */ public void setOpencyc(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_opencyc == null) jcasType.jcas.throwFeatMissing("opencyc", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_opencyc, v);} //*--------------* //* Feature: umbel /** getter for umbel - gets * @generated */ public String getUmbel() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_umbel == null) jcasType.jcas.throwFeatMissing("umbel", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_umbel);} /** setter for umbel - sets * @generated */ public void setUmbel(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_umbel == null) jcasType.jcas.throwFeatMissing("umbel", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_umbel, v);} //*--------------* //* Feature: freebase /** getter for freebase - gets * @generated */ public String getFreebase() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_freebase == null) jcasType.jcas.throwFeatMissing("freebase", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_freebase);} /** setter for freebase - sets * @generated */ public void setFreebase(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_freebase == null) jcasType.jcas.throwFeatMissing("freebase", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_freebase, v);} //*--------------* //* Feature: ciaFactbook /** getter for ciaFactbook - gets * @generated */ public String getCiaFactbook() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_ciaFactbook == null) jcasType.jcas.throwFeatMissing("ciaFactbook", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_ciaFactbook);} /** setter for ciaFactbook - sets * @generated */ public void setCiaFactbook(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_ciaFactbook == null) jcasType.jcas.throwFeatMissing("ciaFactbook", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_ciaFactbook, v);} //*--------------* //* Feature: census /** getter for census - gets * @generated */ public String getCensus() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_census == null) jcasType.jcas.throwFeatMissing("census", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_census);} /** setter for census - sets * @generated */ public void setCensus(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_census == null) jcasType.jcas.throwFeatMissing("census", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_census, v);} //*--------------* //* Feature: geonames /** getter for geonames - gets * @generated */ public String getGeonames() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_geonames == null) jcasType.jcas.throwFeatMissing("geonames", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_geonames);} /** setter for geonames - sets * @generated */ public void setGeonames(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_geonames == null) jcasType.jcas.throwFeatMissing("geonames", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_geonames, v);} //*--------------* //* Feature: musicBrainz /** getter for musicBrainz - gets * @generated */ public String getMusicBrainz() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_musicBrainz == null) jcasType.jcas.throwFeatMissing("musicBrainz", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_musicBrainz);} /** setter for musicBrainz - sets * @generated */ public void setMusicBrainz(String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_musicBrainz == null) jcasType.jcas.throwFeatMissing("musicBrainz", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_musicBrainz, v);} //*--------------* //* Feature: quotations /** getter for quotations - gets * @generated */ public StringArray getQuotations() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_quotations == null) jcasType.jcas.throwFeatMissing("quotations", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return (StringArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_quotations)));} /** setter for quotations - sets * @generated */ public void setQuotations(StringArray v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_quotations == null) jcasType.jcas.throwFeatMissing("quotations", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_quotations, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for quotations - gets an indexed value - * @generated */ public String getQuotations(int i) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_quotations == null) jcasType.jcas.throwFeatMissing("quotations", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_quotations), i); return jcasType.ll_cas.ll_getStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_quotations), i);} /** indexed setter for quotations - sets an indexed value - * @generated */ public void setQuotations(int i, String v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_quotations == null) jcasType.jcas.throwFeatMissing("quotations", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_quotations), i); jcasType.ll_cas.ll_setStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_quotations), i, v);} //*--------------* //* Feature: occurrences /** getter for occurrences - gets A list of annotations annotating this entity * @generated */ public FSList getOccurrences() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_occurrences == null) jcasType.jcas.throwFeatMissing("occurrences", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return (FSList)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_occurrences)));} /** setter for occurrences - sets A list of annotations annotating this entity * @generated */ public void setOccurrences(FSList v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_occurrences == null) jcasType.jcas.throwFeatMissing("occurrences", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_occurrences, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: sentiment /** getter for sentiment - gets * @generated */ public SentimentFS getSentiment() { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_sentiment == null) jcasType.jcas.throwFeatMissing("sentiment", "org.apache.uima.alchemy.ts.entity.BaseEntity"); return (SentimentFS)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_sentiment)));} /** setter for sentiment - sets * @generated */ public void setSentiment(SentimentFS v) { if (BaseEntity_Type.featOkTst && ((BaseEntity_Type)jcasType).casFeat_sentiment == null) jcasType.jcas.throwFeatMissing("sentiment", "org.apache.uima.alchemy.ts.entity.BaseEntity"); jcasType.ll_cas.ll_setRefValue(addr, ((BaseEntity_Type)jcasType).casFeatCode_sentiment, jcasType.ll_cas.ll_getFSRef(v));} } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/City.java0000644000175000017500000000421011625126502032147 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class City extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(City.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected City() {} /** * Internal - constructor used by generator * * @generated */ public City(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public City(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/MusicGroup.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/entity/MusicGroup.jav0000644000175000017500000000424611625126502033204 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Nov 09 23:02:37 CET 2009 */ package org.apache.uima.alchemy.ts.entity; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class MusicGroup extends BaseEntity { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(MusicGroup.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** * Never called. Disable default constructor * * @generated */ protected MusicGroup() {} /** * Internal - constructor used by generator * * @generated */ public MusicGroup(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public MusicGroup(JCas jcas) { super(jcas); readObject(); } /** Write your own initialization here @generated modifiable */ private void readObject() { } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/concept/0000755000175000017500000000000011625126474030526 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/concept/ConceptFS.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/concept/ConceptFS.jav0000644000175000017500000003271211625126474033061 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sat Jul 10 16:08:15 CEST 2010 */ package org.apache.uima.alchemy.ts.concept; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.TOP; /** a concept tag * Updated by JCasGen Sat Jul 10 16:08:15 CEST 2010 * @generated */ public class ConceptFS extends TOP { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(ConceptFS.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected ConceptFS() {} /** Internal - constructor used by generator * @generated */ public ConceptFS(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public ConceptFS(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: text /** getter for text - gets * @generated */ public String getText() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_text);} /** setter for text - sets * @generated */ public void setText(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_text, v);} //*--------------* //* Feature: relevance /** getter for relevance - gets * @generated */ public String getRelevance() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_relevance == null) jcasType.jcas.throwFeatMissing("relevance", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_relevance);} /** setter for relevance - sets * @generated */ public void setRelevance(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_relevance == null) jcasType.jcas.throwFeatMissing("relevance", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_relevance, v);} //*--------------* //* Feature: website /** getter for website - gets * @generated */ public String getWebsite() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_website == null) jcasType.jcas.throwFeatMissing("website", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_website);} /** setter for website - sets * @generated */ public void setWebsite(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_website == null) jcasType.jcas.throwFeatMissing("website", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_website, v);} //*--------------* //* Feature: geo /** getter for geo - gets * @generated */ public String getGeo() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_geo == null) jcasType.jcas.throwFeatMissing("geo", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_geo);} /** setter for geo - sets * @generated */ public void setGeo(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_geo == null) jcasType.jcas.throwFeatMissing("geo", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_geo, v);} //*--------------* //* Feature: dbpedia /** getter for dbpedia - gets * @generated */ public String getDbpedia() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_dbpedia == null) jcasType.jcas.throwFeatMissing("dbpedia", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_dbpedia);} /** setter for dbpedia - sets * @generated */ public void setDbpedia(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_dbpedia == null) jcasType.jcas.throwFeatMissing("dbpedia", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_dbpedia, v);} //*--------------* //* Feature: yago /** getter for yago - gets * @generated */ public String getYago() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_yago == null) jcasType.jcas.throwFeatMissing("yago", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_yago);} /** setter for yago - sets * @generated */ public void setYago(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_yago == null) jcasType.jcas.throwFeatMissing("yago", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_yago, v);} //*--------------* //* Feature: opencyc /** getter for opencyc - gets * @generated */ public String getOpencyc() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_opencyc == null) jcasType.jcas.throwFeatMissing("opencyc", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_opencyc);} /** setter for opencyc - sets * @generated */ public void setOpencyc(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_opencyc == null) jcasType.jcas.throwFeatMissing("opencyc", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_opencyc, v);} //*--------------* //* Feature: freebase /** getter for freebase - gets * @generated */ public String getFreebase() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_freebase == null) jcasType.jcas.throwFeatMissing("freebase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_freebase);} /** setter for freebase - sets * @generated */ public void setFreebase(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_freebase == null) jcasType.jcas.throwFeatMissing("freebase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_freebase, v);} //*--------------* //* Feature: ciaFactbook /** getter for ciaFactbook - gets * @generated */ public String getCiaFactbook() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_ciaFactbook == null) jcasType.jcas.throwFeatMissing("ciaFactbook", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_ciaFactbook);} /** setter for ciaFactbook - sets * @generated */ public void setCiaFactbook(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_ciaFactbook == null) jcasType.jcas.throwFeatMissing("ciaFactbook", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_ciaFactbook, v);} //*--------------* //* Feature: census /** getter for census - gets * @generated */ public String getCensus() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_census == null) jcasType.jcas.throwFeatMissing("census", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_census);} /** setter for census - sets * @generated */ public void setCensus(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_census == null) jcasType.jcas.throwFeatMissing("census", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_census, v);} //*--------------* //* Feature: geonames /** getter for geonames - gets * @generated */ public String getGeonames() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_geonames == null) jcasType.jcas.throwFeatMissing("geonames", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_geonames);} /** setter for geonames - sets * @generated */ public void setGeonames(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_geonames == null) jcasType.jcas.throwFeatMissing("geonames", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_geonames, v);} //*--------------* //* Feature: musicBrainz /** getter for musicBrainz - gets * @generated */ public String getMusicBrainz() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_musicBrainz == null) jcasType.jcas.throwFeatMissing("musicBrainz", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_musicBrainz);} /** setter for musicBrainz - sets * @generated */ public void setMusicBrainz(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_musicBrainz == null) jcasType.jcas.throwFeatMissing("musicBrainz", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_musicBrainz, v);} //*--------------* //* Feature: crunchbase /** getter for crunchbase - gets * @generated */ public String getCrunchbase() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_crunchbase == null) jcasType.jcas.throwFeatMissing("crunchbase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_crunchbase);} /** setter for crunchbase - sets * @generated */ public void setCrunchbase(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_crunchbase == null) jcasType.jcas.throwFeatMissing("crunchbase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_crunchbase, v);} //*--------------* //* Feature: semanticCrunchbase /** getter for semanticCrunchbase - gets * @generated */ public String getSemanticCrunchbase() { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_semanticCrunchbase == null) jcasType.jcas.throwFeatMissing("semanticCrunchbase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_semanticCrunchbase);} /** setter for semanticCrunchbase - sets * @generated */ public void setSemanticCrunchbase(String v) { if (ConceptFS_Type.featOkTst && ((ConceptFS_Type)jcasType).casFeat_semanticCrunchbase == null) jcasType.jcas.throwFeatMissing("semanticCrunchbase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); jcasType.ll_cas.ll_setStringValue(addr, ((ConceptFS_Type)jcasType).casFeatCode_semanticCrunchbase, v);} } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/concept/ConceptFS_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/concept/ConceptFS_Typ0000644000175000017500000003642711625126474033145 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sat Jul 10 16:08:16 CEST 2010 */ package org.apache.uima.alchemy.ts.concept; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.cas.TOP_Type; /** a concept tag * Updated by JCasGen Sat Jul 10 16:08:16 CEST 2010 * @generated */ public class ConceptFS_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (ConceptFS_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = ConceptFS_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new ConceptFS(addr, ConceptFS_Type.this); ConceptFS_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new ConceptFS(addr, ConceptFS_Type.this); } }; /** @generated */ public final static int typeIndexID = ConceptFS.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.concept.ConceptFS"); /** @generated */ final Feature casFeat_text; /** @generated */ final int casFeatCode_text; /** @generated */ public String getText(int addr) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_text); } /** @generated */ public void setText(int addr, String v) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_text, v);} /** @generated */ final Feature casFeat_relevance; /** @generated */ final int casFeatCode_relevance; /** @generated */ public String getRelevance(int addr) { if (featOkTst && casFeat_relevance == null) jcas.throwFeatMissing("relevance", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_relevance); } /** @generated */ public void setRelevance(int addr, String v) { if (featOkTst && casFeat_relevance == null) jcas.throwFeatMissing("relevance", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_relevance, v);} /** @generated */ final Feature casFeat_website; /** @generated */ final int casFeatCode_website; /** @generated */ public String getWebsite(int addr) { if (featOkTst && casFeat_website == null) jcas.throwFeatMissing("website", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_website); } /** @generated */ public void setWebsite(int addr, String v) { if (featOkTst && casFeat_website == null) jcas.throwFeatMissing("website", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_website, v);} /** @generated */ final Feature casFeat_geo; /** @generated */ final int casFeatCode_geo; /** @generated */ public String getGeo(int addr) { if (featOkTst && casFeat_geo == null) jcas.throwFeatMissing("geo", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_geo); } /** @generated */ public void setGeo(int addr, String v) { if (featOkTst && casFeat_geo == null) jcas.throwFeatMissing("geo", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_geo, v);} /** @generated */ final Feature casFeat_dbpedia; /** @generated */ final int casFeatCode_dbpedia; /** @generated */ public String getDbpedia(int addr) { if (featOkTst && casFeat_dbpedia == null) jcas.throwFeatMissing("dbpedia", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_dbpedia); } /** @generated */ public void setDbpedia(int addr, String v) { if (featOkTst && casFeat_dbpedia == null) jcas.throwFeatMissing("dbpedia", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_dbpedia, v);} /** @generated */ final Feature casFeat_yago; /** @generated */ final int casFeatCode_yago; /** @generated */ public String getYago(int addr) { if (featOkTst && casFeat_yago == null) jcas.throwFeatMissing("yago", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_yago); } /** @generated */ public void setYago(int addr, String v) { if (featOkTst && casFeat_yago == null) jcas.throwFeatMissing("yago", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_yago, v);} /** @generated */ final Feature casFeat_opencyc; /** @generated */ final int casFeatCode_opencyc; /** @generated */ public String getOpencyc(int addr) { if (featOkTst && casFeat_opencyc == null) jcas.throwFeatMissing("opencyc", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_opencyc); } /** @generated */ public void setOpencyc(int addr, String v) { if (featOkTst && casFeat_opencyc == null) jcas.throwFeatMissing("opencyc", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_opencyc, v);} /** @generated */ final Feature casFeat_freebase; /** @generated */ final int casFeatCode_freebase; /** @generated */ public String getFreebase(int addr) { if (featOkTst && casFeat_freebase == null) jcas.throwFeatMissing("freebase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_freebase); } /** @generated */ public void setFreebase(int addr, String v) { if (featOkTst && casFeat_freebase == null) jcas.throwFeatMissing("freebase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_freebase, v);} /** @generated */ final Feature casFeat_ciaFactbook; /** @generated */ final int casFeatCode_ciaFactbook; /** @generated */ public String getCiaFactbook(int addr) { if (featOkTst && casFeat_ciaFactbook == null) jcas.throwFeatMissing("ciaFactbook", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_ciaFactbook); } /** @generated */ public void setCiaFactbook(int addr, String v) { if (featOkTst && casFeat_ciaFactbook == null) jcas.throwFeatMissing("ciaFactbook", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_ciaFactbook, v);} /** @generated */ final Feature casFeat_census; /** @generated */ final int casFeatCode_census; /** @generated */ public String getCensus(int addr) { if (featOkTst && casFeat_census == null) jcas.throwFeatMissing("census", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_census); } /** @generated */ public void setCensus(int addr, String v) { if (featOkTst && casFeat_census == null) jcas.throwFeatMissing("census", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_census, v);} /** @generated */ final Feature casFeat_geonames; /** @generated */ final int casFeatCode_geonames; /** @generated */ public String getGeonames(int addr) { if (featOkTst && casFeat_geonames == null) jcas.throwFeatMissing("geonames", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_geonames); } /** @generated */ public void setGeonames(int addr, String v) { if (featOkTst && casFeat_geonames == null) jcas.throwFeatMissing("geonames", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_geonames, v);} /** @generated */ final Feature casFeat_musicBrainz; /** @generated */ final int casFeatCode_musicBrainz; /** @generated */ public String getMusicBrainz(int addr) { if (featOkTst && casFeat_musicBrainz == null) jcas.throwFeatMissing("musicBrainz", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_musicBrainz); } /** @generated */ public void setMusicBrainz(int addr, String v) { if (featOkTst && casFeat_musicBrainz == null) jcas.throwFeatMissing("musicBrainz", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_musicBrainz, v);} /** @generated */ final Feature casFeat_crunchbase; /** @generated */ final int casFeatCode_crunchbase; /** @generated */ public String getCrunchbase(int addr) { if (featOkTst && casFeat_crunchbase == null) jcas.throwFeatMissing("crunchbase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_crunchbase); } /** @generated */ public void setCrunchbase(int addr, String v) { if (featOkTst && casFeat_crunchbase == null) jcas.throwFeatMissing("crunchbase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_crunchbase, v);} /** @generated */ final Feature casFeat_semanticCrunchbase; /** @generated */ final int casFeatCode_semanticCrunchbase; /** @generated */ public String getSemanticCrunchbase(int addr) { if (featOkTst && casFeat_semanticCrunchbase == null) jcas.throwFeatMissing("semanticCrunchbase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_semanticCrunchbase); } /** @generated */ public void setSemanticCrunchbase(int addr, String v) { if (featOkTst && casFeat_semanticCrunchbase == null) jcas.throwFeatMissing("semanticCrunchbase", "org.apache.uima.alchemy.ts.concept.ConceptFS"); ll_cas.ll_setStringValue(addr, casFeatCode_semanticCrunchbase, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public ConceptFS_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_text = jcas.getRequiredFeatureDE(casType, "text", "uima.cas.String", featOkTst); casFeatCode_text = (null == casFeat_text) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_text).getCode(); casFeat_relevance = jcas.getRequiredFeatureDE(casType, "relevance", "uima.cas.String", featOkTst); casFeatCode_relevance = (null == casFeat_relevance) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_relevance).getCode(); casFeat_website = jcas.getRequiredFeatureDE(casType, "website", "uima.cas.String", featOkTst); casFeatCode_website = (null == casFeat_website) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_website).getCode(); casFeat_geo = jcas.getRequiredFeatureDE(casType, "geo", "uima.cas.String", featOkTst); casFeatCode_geo = (null == casFeat_geo) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_geo).getCode(); casFeat_dbpedia = jcas.getRequiredFeatureDE(casType, "dbpedia", "uima.cas.String", featOkTst); casFeatCode_dbpedia = (null == casFeat_dbpedia) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_dbpedia).getCode(); casFeat_yago = jcas.getRequiredFeatureDE(casType, "yago", "uima.cas.String", featOkTst); casFeatCode_yago = (null == casFeat_yago) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_yago).getCode(); casFeat_opencyc = jcas.getRequiredFeatureDE(casType, "opencyc", "uima.cas.String", featOkTst); casFeatCode_opencyc = (null == casFeat_opencyc) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_opencyc).getCode(); casFeat_freebase = jcas.getRequiredFeatureDE(casType, "freebase", "uima.cas.String", featOkTst); casFeatCode_freebase = (null == casFeat_freebase) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_freebase).getCode(); casFeat_ciaFactbook = jcas.getRequiredFeatureDE(casType, "ciaFactbook", "uima.cas.String", featOkTst); casFeatCode_ciaFactbook = (null == casFeat_ciaFactbook) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_ciaFactbook).getCode(); casFeat_census = jcas.getRequiredFeatureDE(casType, "census", "uima.cas.String", featOkTst); casFeatCode_census = (null == casFeat_census) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_census).getCode(); casFeat_geonames = jcas.getRequiredFeatureDE(casType, "geonames", "uima.cas.String", featOkTst); casFeatCode_geonames = (null == casFeat_geonames) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_geonames).getCode(); casFeat_musicBrainz = jcas.getRequiredFeatureDE(casType, "musicBrainz", "uima.cas.String", featOkTst); casFeatCode_musicBrainz = (null == casFeat_musicBrainz) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_musicBrainz).getCode(); casFeat_crunchbase = jcas.getRequiredFeatureDE(casType, "crunchbase", "uima.cas.String", featOkTst); casFeatCode_crunchbase = (null == casFeat_crunchbase) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_crunchbase).getCode(); casFeat_semanticCrunchbase = jcas.getRequiredFeatureDE(casType, "semanticCrunchbase", "uima.cas.String", featOkTst); casFeatCode_semanticCrunchbase = (null == casFeat_semanticCrunchbase) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_semanticCrunchbase).getCode(); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/categorization/0000755000175000017500000000000011625126474032115 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/categorization/Category.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/categorization/Catego0000644000175000017500000000731011625126474033243 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Wed Nov 04 23:56:01 CET 2009 */ package org.apache.uima.alchemy.ts.categorization; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Wed Nov 04 23:56:24 CET 2009 XML source: * * @generated */ public class Category extends TOP { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Category.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() { return typeIndexID; } /** * Never called. Disable default constructor * * @generated */ protected Category() { } /** * Internal - constructor used by generator * * @generated */ public Category(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Category(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * * @generated modifiable */ private void readObject() { } // *--------------* // * Feature: score /** * getter for score - gets * * @generated */ public String getScore() { if (Category_Type.featOkTst && ((Category_Type) jcasType).casFeat_score == null) jcasType.jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.categorization.Category"); return jcasType.ll_cas.ll_getStringValue(addr, ((Category_Type) jcasType).casFeatCode_score); } /** * setter for score - sets * * @generated */ public void setScore(String v) { if (Category_Type.featOkTst && ((Category_Type) jcasType).casFeat_score == null) jcasType.jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.categorization.Category"); jcasType.ll_cas.ll_setStringValue(addr, ((Category_Type) jcasType).casFeatCode_score, v); } // *--------------* // * Feature: text /** * getter for text - gets * * @generated */ public String getText() { if (Category_Type.featOkTst && ((Category_Type) jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.categorization.Category"); return jcasType.ll_cas.ll_getStringValue(addr, ((Category_Type) jcasType).casFeatCode_text); } /** * setter for text - sets * * @generated */ public void setText(String v) { if (Category_Type.featOkTst && ((Category_Type) jcasType).casFeat_text == null) jcasType.jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.categorization.Category"); jcasType.ll_cas.ll_setStringValue(addr, ((Category_Type) jcasType).casFeatCode_text, v); } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/categorization/Category_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/categorization/Catego0000644000175000017500000001064711625126474033252 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Wed Nov 04 23:56:01 CET 2009 */ package org.apache.uima.alchemy.ts.categorization; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Wed Nov 04 23:56:24 CET 2009 * * @generated */ public class Category_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() { return fsGenerator; } /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Category_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Category_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Category(addr, Category_Type.this); Category_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Category(addr, Category_Type.this); } }; /** @generated */ public final static int typeIndexID = Category.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry .getFeatOkTst("org.apache.uima.alchemy.ts.categorization.Category"); /** @generated */ final Feature casFeat_score; /** @generated */ final int casFeatCode_score; /** @generated */ public String getScore(int addr) { if (featOkTst && casFeat_score == null) jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.categorization.Category"); return ll_cas.ll_getStringValue(addr, casFeatCode_score); } /** @generated */ public void setScore(int addr, String v) { if (featOkTst && casFeat_score == null) jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.categorization.Category"); ll_cas.ll_setStringValue(addr, casFeatCode_score, v); } /** @generated */ final Feature casFeat_text; /** @generated */ final int casFeatCode_text; /** @generated */ public String getText(int addr) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.categorization.Category"); return ll_cas.ll_getStringValue(addr, casFeatCode_text); } /** @generated */ public void setText(int addr, String v) { if (featOkTst && casFeat_text == null) jcas.throwFeatMissing("text", "org.apache.uima.alchemy.ts.categorization.Category"); ll_cas.ll_setStringValue(addr, casFeatCode_text, v); } /** * initialize variables to correspond with Cas Type and Features * * @generated */ public Category_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl) this.casType, getFSGenerator()); casFeat_score = jcas.getRequiredFeatureDE(casType, "score", "uima.cas.String", featOkTst); casFeatCode_score = (null == casFeat_score) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_score).getCode(); casFeat_text = jcas.getRequiredFeatureDE(casType, "text", "uima.cas.String", featOkTst); casFeatCode_text = (null == casFeat_text) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_text).getCode(); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/microformats/0000755000175000017500000000000011625126474031600 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/microformats/MicroformatFS_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/microformats/Microfor0000644000175000017500000001120711625126474033304 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sun Jan 24 22:12:30 CET 2010 */ package org.apache.uima.alchemy.ts.microformats; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Sun Jan 24 22:12:30 CET 2010 * * @generated */ public class MicroformatFS_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() { return fsGenerator; } /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (MicroformatFS_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = MicroformatFS_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new MicroformatFS(addr, MicroformatFS_Type.this); MicroformatFS_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new MicroformatFS(addr, MicroformatFS_Type.this); } }; /** @generated */ public final static int typeIndexID = MicroformatFS.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry .getFeatOkTst("org.apache.uima.alchemy.ts.microformats.MicroformatFS"); /** @generated */ final Feature casFeat_fieldName; /** @generated */ final int casFeatCode_fieldName; /** @generated */ public String getFieldName(int addr) { if (featOkTst && casFeat_fieldName == null) jcas.throwFeatMissing("fieldName", "org.apache.uima.alchemy.ts.microformats.MicroformatFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_fieldName); } /** @generated */ public void setFieldName(int addr, String v) { if (featOkTst && casFeat_fieldName == null) jcas.throwFeatMissing("fieldName", "org.apache.uima.alchemy.ts.microformats.MicroformatFS"); ll_cas.ll_setStringValue(addr, casFeatCode_fieldName, v); } /** @generated */ final Feature casFeat_fieldData; /** @generated */ final int casFeatCode_fieldData; /** @generated */ public String getFieldData(int addr) { if (featOkTst && casFeat_fieldData == null) jcas.throwFeatMissing("fieldData", "org.apache.uima.alchemy.ts.microformats.MicroformatFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_fieldData); } /** @generated */ public void setFieldData(int addr, String v) { if (featOkTst && casFeat_fieldData == null) jcas.throwFeatMissing("fieldData", "org.apache.uima.alchemy.ts.microformats.MicroformatFS"); ll_cas.ll_setStringValue(addr, casFeatCode_fieldData, v); } /** * initialize variables to correspond with Cas Type and Features * * @generated */ public MicroformatFS_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl) this.casType, getFSGenerator()); casFeat_fieldName = jcas.getRequiredFeatureDE(casType, "fieldName", "uima.cas.String", featOkTst); casFeatCode_fieldName = (null == casFeat_fieldName) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_fieldName).getCode(); casFeat_fieldData = jcas.getRequiredFeatureDE(casType, "fieldData", "uima.cas.String", featOkTst); casFeatCode_fieldData = (null == casFeat_fieldData) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_fieldData).getCode(); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/microformats/MicroformatFS.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/microformats/Microfor0000644000175000017500000000777611625126474033324 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Sun Jan 24 22:12:30 CET 2010 */ package org.apache.uima.alchemy.ts.microformats; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.TOP; /** * Updated by JCasGen Sun Jan 24 22:12:30 CET 2010 XML source: * * @generated */ public class MicroformatFS extends TOP { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(MicroformatFS.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() { return typeIndexID; } /** * Never called. Disable default constructor * * @generated */ protected MicroformatFS() { } /** * Internal - constructor used by generator * * @generated */ public MicroformatFS(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public MicroformatFS(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * * @generated modifiable */ private void readObject() { } // *--------------* // * Feature: fieldName /** * getter for fieldName - gets * * @generated */ public String getFieldName() { if (MicroformatFS_Type.featOkTst && ((MicroformatFS_Type) jcasType).casFeat_fieldName == null) jcasType.jcas.throwFeatMissing("fieldName", "org.apache.uima.alchemy.ts.microformats.MicroformatFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((MicroformatFS_Type) jcasType).casFeatCode_fieldName); } /** * setter for fieldName - sets * * @generated */ public void setFieldName(String v) { if (MicroformatFS_Type.featOkTst && ((MicroformatFS_Type) jcasType).casFeat_fieldName == null) jcasType.jcas.throwFeatMissing("fieldName", "org.apache.uima.alchemy.ts.microformats.MicroformatFS"); jcasType.ll_cas.ll_setStringValue(addr, ((MicroformatFS_Type) jcasType).casFeatCode_fieldName, v); } // *--------------* // * Feature: fieldData /** * getter for fieldData - gets * * @generated */ public String getFieldData() { if (MicroformatFS_Type.featOkTst && ((MicroformatFS_Type) jcasType).casFeat_fieldData == null) jcasType.jcas.throwFeatMissing("fieldData", "org.apache.uima.alchemy.ts.microformats.MicroformatFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((MicroformatFS_Type) jcasType).casFeatCode_fieldData); } /** * setter for fieldData - sets * * @generated */ public void setFieldData(String v) { if (MicroformatFS_Type.featOkTst && ((MicroformatFS_Type) jcasType).casFeat_fieldData == null) jcasType.jcas.throwFeatMissing("fieldData", "org.apache.uima.alchemy.ts.microformats.MicroformatFS"); jcasType.ll_cas.ll_setStringValue(addr, ((MicroformatFS_Type) jcasType).casFeatCode_fieldData, v); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/0000755000175000017500000000000011625126474031101 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS_Type.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS0000644000175000017500000001106211625126474033223 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Feb 28 10:31:26 CET 2011 */ package org.apache.uima.alchemy.ts.sentiment; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * @generated */ public class SentimentFS_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (SentimentFS_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = SentimentFS_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new SentimentFS(addr, SentimentFS_Type.this); SentimentFS_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new SentimentFS(addr, SentimentFS_Type.this); } }; /** @generated */ public final static int typeIndexID = SentimentFS.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.sentiment.SentimentFS"); /** @generated */ final Feature casFeat_sentimentType; /** @generated */ final int casFeatCode_sentimentType; /** @generated */ public String getSentimentType(int addr) { if (featOkTst && casFeat_sentimentType == null) jcas.throwFeatMissing("sentimentType", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_sentimentType); } /** @generated */ public void setSentimentType(int addr, String v) { if (featOkTst && casFeat_sentimentType == null) jcas.throwFeatMissing("sentimentType", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); ll_cas.ll_setStringValue(addr, casFeatCode_sentimentType, v);} /** @generated */ final Feature casFeat_score; /** @generated */ final int casFeatCode_score; /** @generated */ public String getScore(int addr) { if (featOkTst && casFeat_score == null) jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_score); } /** @generated */ public void setScore(int addr, String v) { if (featOkTst && casFeat_score == null) jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); ll_cas.ll_setStringValue(addr, casFeatCode_score, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public SentimentFS_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_sentimentType = jcas.getRequiredFeatureDE(casType, "sentimentType", "uima.cas.String", featOkTst); casFeatCode_sentimentType = (null == casFeat_sentimentType) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_sentimentType).getCode(); casFeat_score = jcas.getRequiredFeatureDE(casType, "score", "uima.cas.String", featOkTst); casFeatCode_score = (null == casFeat_score) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_score).getCode(); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS0000644000175000017500000001007511625126474033226 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Mon Feb 28 10:31:26 CET 2011 */ package org.apache.uima.alchemy.ts.sentiment; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Updated by JCasGen Fri Mar 11 17:40:07 CET 2011 * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml * @generated */ public class SentimentFS extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(SentimentFS.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected SentimentFS() {} /** Internal - constructor used by generator * @generated */ public SentimentFS(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public SentimentFS(JCas jcas) { super(jcas); readObject(); } /** @generated */ public SentimentFS(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: sentimentType /** getter for sentimentType - gets * @generated */ public String getSentimentType() { if (SentimentFS_Type.featOkTst && ((SentimentFS_Type)jcasType).casFeat_sentimentType == null) jcasType.jcas.throwFeatMissing("sentimentType", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((SentimentFS_Type)jcasType).casFeatCode_sentimentType);} /** setter for sentimentType - sets * @generated */ public void setSentimentType(String v) { if (SentimentFS_Type.featOkTst && ((SentimentFS_Type)jcasType).casFeat_sentimentType == null) jcasType.jcas.throwFeatMissing("sentimentType", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); jcasType.ll_cas.ll_setStringValue(addr, ((SentimentFS_Type)jcasType).casFeatCode_sentimentType, v);} //*--------------* //* Feature: score /** getter for score - gets * @generated */ public String getScore() { if (SentimentFS_Type.featOkTst && ((SentimentFS_Type)jcasType).casFeat_score == null) jcasType.jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((SentimentFS_Type)jcasType).casFeatCode_score);} /** setter for score - sets * @generated */ public void setScore(String v) { if (SentimentFS_Type.featOkTst && ((SentimentFS_Type)jcasType).casFeat_score == null) jcasType.jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); jcasType.ll_cas.ll_setStringValue(addr, ((SentimentFS_Type)jcasType).casFeatCode_score, v);} } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/0000755000175000017500000000000011625126472030450 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentA0000644000175000017500000000365511625126472033320 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.sentiment.SentimentAnalysisDigesterProvider; import org.apache.uima.jcas.JCas; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; public class TextSentimentAnalysisAnnotator extends AbstractAlchemyAnnotator { protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/text/TextGetTextSentiment").toURL(); } protected String[] getServiceParameters() { return new String[] { "outputMode", "url" }; } protected DigesterProvider createDigester() { return new SentimentAnalysisDigesterProvider(); } protected void initializeRuntimeParameters(JCas aJCas) { // create parameters string StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&text="); String modifiedText = cleanText(aJCas); serviceParamsBuf.append(modifiedText); this.serviceParams += (serviceParamsBuf.toString()); } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextAnnotatedNamedEntityExtractionAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextAnnotatedN0000644000175000017500000000417511625126472033302 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.entity.annotated.AnnotatedEntityDigesterProvider; import org.apache.uima.jcas.JCas; /** * * This functionality has been disabled for free API keys * */ @Deprecated public class TextAnnotatedNamedEntityExtractionAnnotator extends AbstractAlchemyAnnotator { protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/text/TextGetAnnotatedNamedEntityText") .toURL(); } protected String[] getServiceParameters() { return new String[] { "outputMode", "baseUrl", "disambiguate", "quotations", "showSourceText", "coreference" }; } protected DigesterProvider createDigester() { return new AnnotatedEntityDigesterProvider(); } protected void initializeRuntimeParameters(JCas aJCas) { // create parameters string StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&text="); String modifiedText = cleanText(aJCas); serviceParamsBuf.append(modifiedText); this.serviceParams += (serviceParamsBuf.toString()); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextConceptTaggingAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextConceptTag0000644000175000017500000000411711625126472033272 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.concept.ConceptTaggingDigesterProvider; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; public class TextConceptTaggingAnnotator extends AbstractAlchemyAnnotator { @Override protected DigesterProvider createDigester() { return new ConceptTaggingDigesterProvider(); } @Override protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/text/TextGetRankedConcepts").toURL(); } @Override protected String[] getServiceParameters() { return new String[] { "url", "maxRetrieve", "outputMode", "linkedData", "showSourceText" }; } @Override protected void initializeRuntimeParameters(JCas aJCas) throws AnalysisEngineProcessException { StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&text="); String modifiedText = cleanText(aJCas); serviceParamsBuf.append(modifiedText); this.serviceParams += (serviceParamsBuf.toString()); } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/HtmlMicroformatsAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/HtmlMicroforma0000644000175000017500000000431711625126472033323 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.net.URLEncoder; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.microformats.MicroformatsDigesterProvider; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; public class HtmlMicroformatsAnnotator extends AbstractAlchemyAnnotator { protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/html/HTMLGetMicroformatData").toURL(); } protected String[] getServiceParameters() { return new String[] { "outputMode", "url" }; } protected DigesterProvider createDigester() { return new MicroformatsDigesterProvider(); } protected void initializeRuntimeParameters(JCas aJCas) throws AnalysisEngineProcessException { try { // fill html parameter StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&html="); serviceParamsBuf.append(URLEncoder.encode(aJCas.getDocumentText(), "UTF-8")); this.serviceParams += (serviceParamsBuf.toString()); } catch (UnsupportedEncodingException e) { throw new AnalysisEngineProcessException(e); } } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextCategorizationAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextCategoriza0000644000175000017500000000365711625126472033343 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.categorization.CategorizationDigesterProvider; import org.apache.uima.jcas.JCas; public class TextCategorizationAnnotator extends AbstractAlchemyAnnotator { protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/text/TextGetCategory").toURL(); } protected String[] getServiceParameters() { return new String[] { "outputMode", "baseUrl", "url" }; } protected DigesterProvider createDigester() { return new CategorizationDigesterProvider(); } protected void initializeRuntimeParameters(JCas aJCas) { // create parameters string StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&text="); String modifiedText = cleanText(aJCas); serviceParamsBuf.append(modifiedText); this.serviceParams += (serviceParamsBuf.toString()); } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/AbstractAlchemyAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/AbstractAlchem0000644000175000017500000001452711625126472033261 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.commons.lang.Validate; import org.apache.uima.UimaContext; import org.apache.uima.alchemy.annotator.exception.AlchemyCallFailedException; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.digester.exception.ResultDigestingException; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; import org.apache.uima.alchemy.mapper.Alchemy2TypeSystemMapper; import org.apache.uima.alchemy.mapper.exception.MappingException; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; /** * Base class for annotators which wrap AlchemyAPI web services */ public abstract class AbstractAlchemyAnnotator extends JCasAnnotator_ImplBase { private static final String STATUS_OK = "OK"; private URL alchemyService; protected String serviceParams; private final String[] charsToReplace = { "<", ">", "\"", "'", "&" }; private OutputDigester digester; private DigesterProvider digesterProvider; @Override public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); digesterProvider = createDigester(); try { Object configParameterValue = aContext.getConfigParameterValue("outputMode"); this.digester = digesterProvider.getDigester(String.valueOf(configParameterValue)); } catch (UnsupportedResultFormatException e1) { throw new ResourceInitializationException(e1); } try { this.alchemyService = createServiceURI(); } catch (Exception e) { throw new ResourceInitializationException(e); } StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&apikey="); serviceParamsBuf.append(aContext.getConfigParameterValue("apikey")); for (String param : this.getServiceParameters()) { serviceParamsBuf.append("&").append(param).append("="); serviceParamsBuf.append(aContext.getConfigParameterValue(param)); } this.serviceParams = serviceParamsBuf.toString(); } protected String cleanText(JCas aJCas) { String modifiedText = aJCas.getDocumentText(); for (int i = 0; i < this.charsToReplace.length; i++) { modifiedText = modifiedText.replaceAll(this.charsToReplace[i], ""); } modifiedText = modifiedText.replaceAll("\n", " "); modifiedText = modifiedText.replaceAll("\r", " "); return modifiedText; } public void process(JCas aJCas) throws AnalysisEngineProcessException { // initialize service parameters initializeRuntimeParameters(aJCas); URLConnection connection = null; try { // open connection and send data connection = this.alchemyService.openConnection(); if (connection instanceof HttpURLConnection) { connection.setDoOutput(true); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection .getOutputStream(), "UTF-8")); writer.write(this.serviceParams); writer.flush(); writer.close(); } connection.connect(); InputStream bufByteIn = parseOutput(connection); // map alchemy api results to UIMA type system try { Results results = this.digester.parseAlchemyXML(bufByteIn); Validate.notNull(results); Validate.notNull(results.getStatus()); if (this.getContext().getLogger().isLoggable(Level.FINER)) this.getContext().getLogger().log(Level.FINER, results.toString()); if (results.getStatus().equalsIgnoreCase(STATUS_OK)) { mapResultsToTypeSystem(results, aJCas); } else { throw new AlchemyCallFailedException(new StringBuilder(results.getStatus()).append(" - "). append(results.getStatusInfo()).toString()); } } catch (Exception e) { throw new ResultDigestingException(e); } finally { bufByteIn.close(); } } catch (Exception e) { throw new AnalysisEngineProcessException(e); } finally { if (connection != null && connection instanceof HttpURLConnection) { ((HttpURLConnection) connection).disconnect(); } } } private InputStream parseOutput(URLConnection connection) throws IOException { return new BufferedInputStream(connection.getInputStream()); } private void mapResultsToTypeSystem(Results results, JCas aJCas) throws MappingException { Alchemy2TypeSystemMapper.mapResultsToTypeSystem(results, aJCas); } public void setDigesterProvider(DigesterProvider digesterProvider) { this.digesterProvider = digesterProvider; } public DigesterProvider getDigesterProvider() { return digesterProvider; } protected abstract DigesterProvider createDigester(); protected abstract URL createServiceURI() throws MalformedURLException; protected abstract String[] getServiceParameters(); protected abstract void initializeRuntimeParameters(JCas aJCas) throws AnalysisEngineProcessException; } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextLanguageDetectionAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextLanguageDe0000644000175000017500000000364711625126472033246 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.language.LanguageDetectionDigesterProvider; import org.apache.uima.jcas.JCas; public class TextLanguageDetectionAnnotator extends AbstractAlchemyAnnotator { protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/text/TextGetLanguage").toURL(); } protected String[] getServiceParameters() { return new String[] { "outputMode", "url" }; } protected DigesterProvider createDigester() { return new LanguageDetectionDigesterProvider(); } protected void initializeRuntimeParameters(JCas aJCas) { // create parameters string StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&text="); String modifiedText = cleanText(aJCas); serviceParamsBuf.append(modifiedText); this.serviceParams += (serviceParamsBuf.toString()); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/URLConceptTaggingAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/URLConceptTagg0000644000175000017500000000441311625126472033156 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.concept.ConceptTaggingDigesterProvider; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.net.URLEncoder; public class URLConceptTaggingAnnotator extends AbstractAlchemyAnnotator { @Override protected DigesterProvider createDigester() { return new ConceptTaggingDigesterProvider(); } @Override protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/url/URLGetRankedConcepts").toURL(); } @Override protected String[] getServiceParameters() { return new String[]{"url", "maxRetrieve", "outputMode", "linkedData", "showSourceText"}; } @Override protected void initializeRuntimeParameters(JCas aJCas) throws AnalysisEngineProcessException { try { StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&url="); serviceParamsBuf.append(URLEncoder.encode(aJCas.getDocumentText(), "UTF-8")); this.serviceParams += (serviceParamsBuf.toString()); this.serviceParams += (serviceParamsBuf.toString()); } catch (UnsupportedEncodingException e) { throw new AnalysisEngineProcessException(e); } } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/exception/0000755000175000017500000000000011625126472032446 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/exception/AlchemyCallFailedException.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/exception/Alch0000644000175000017500000000213311625126472033237 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator.exception; public class AlchemyCallFailedException extends Exception { /** * */ private static final long serialVersionUID = 1L; public AlchemyCallFailedException(String status) { super(status); } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/URLMicroformatsAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/URLMicroformat0000644000175000017500000000430311625126472033240 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.net.URLEncoder; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.microformats.MicroformatsDigesterProvider; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; public class URLMicroformatsAnnotator extends AbstractAlchemyAnnotator { protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/url/URLGetMicroformatData").toURL(); } protected String[] getServiceParameters() { return new String[] { "outputMode" }; } protected DigesterProvider createDigester() { return new MicroformatsDigesterProvider(); } protected void initializeRuntimeParameters(JCas aJCas) throws AnalysisEngineProcessException { try { // fill url parameter StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&url="); serviceParamsBuf.append(URLEncoder.encode(aJCas.getDocumentText(), "UTF-8")); this.serviceParams += (serviceParamsBuf.toString()); } catch (UnsupportedEncodingException e) { throw new AnalysisEngineProcessException(e); } } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextKeywordExtractionAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextKeywordExt0000644000175000017500000000367411625126472033357 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.keyword.KeywordDigesterProvider; import org.apache.uima.jcas.JCas; public class TextKeywordExtractionAnnotator extends AbstractAlchemyAnnotator { protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/text/TextGetKeywords").toURL(); } protected String[] getServiceParameters() { return new String[] { "outputMode", "baseUrl", "url", "maxRetrieve", "showSourceText" }; } protected DigesterProvider createDigester() { return new KeywordDigesterProvider(); } protected void initializeRuntimeParameters(JCas aJCas) { // create parameters string StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&text="); String modifiedText = cleanText(aJCas); serviceParamsBuf.append(modifiedText); this.serviceParams += (serviceParamsBuf.toString()); } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextRankedNamedEntityExtractionAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextRankedName0000644000175000017500000000403411625126472033246 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.entity.ranked.RankedEntityDigesterProvider; import org.apache.uima.jcas.JCas; public class TextRankedNamedEntityExtractionAnnotator extends AbstractAlchemyAnnotator { protected URL createServiceURI() throws MalformedURLException { return URI.create("http://access.alchemyapi.com/calls/text/TextGetRankedNamedEntities").toURL(); } protected String[] getServiceParameters() { return new String[] { "outputMode", "baseUrl", "disambiguate", "linkedData", "showSourceText", "quotations", "coreference", "sentiment" }; } protected DigesterProvider createDigester() { return new RankedEntityDigesterProvider(); } protected void initializeRuntimeParameters(JCas aJCas) { // create parameters string StringBuffer serviceParamsBuf = new StringBuffer(); serviceParamsBuf.append("&text="); String modifiedText = cleanText(aJCas); serviceParamsBuf.append(modifiedText); this.serviceParams += (serviceParamsBuf.toString()); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/0000755000175000017500000000000011625126474030253 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/0000755000175000017500000000000011625126474031522 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/MicroformatsResults.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Microfor0000644000175000017500000000254011625126474033226 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; import java.util.ArrayList; import java.util.List; public class MicroformatsResults extends Results { private List microformats = new ArrayList(); public void setMicroformats(List microformats) { this.microformats = microformats; } public List getMicroformats() { return microformats; } public void addMicroformat(Microformat microformat) { this.microformats.add(microformat); } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/SentimentAnalysisResults.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Sentimen0000644000175000017500000000234211625126474033230 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; /** * The result of a sentiment analysis service call */ public class SentimentAnalysisResults extends Results { private DocumentSentiment docSentiment; public DocumentSentiment getDocSentiment() { return docSentiment; } public void setDocSentiment(DocumentSentiment docSentiment) { this.docSentiment = docSentiment; } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Microformat.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Microfor0000644000175000017500000000241211625126474033224 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class Microformat { private String fieldName; private String fieldData; public void setFieldName(String fieldName) { this.fieldName = fieldName; } public String getFieldName() { return fieldName; } public void setFieldData(String fieldData) { this.fieldData = fieldData; } public String getFieldData() { return fieldData; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Concept.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Concept.0000644000175000017500000000644311625126474033125 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class Concept { private String text; private String relevance; private String website; private String geo; private String dbpedia; private String yago; private String opencyc; private String freebase; private String ciaFactbook; private String census; private String geonames; private String crunchbase; private String semanticCrunchbase; public String getMusicBrainz() { return musicBrainz; } public void setMusicBrainz(String musicBrainz) { this.musicBrainz = musicBrainz; } private String musicBrainz; public String getText() { return text; } public void setText(String text) { this.text = text; } public String getRelevance() { return relevance; } public void setRelevance(String relevance) { this.relevance = relevance; } public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } public String getGeo() { return geo; } public void setGeo(String geo) { this.geo = geo; } public String getDbpedia() { return dbpedia; } public void setDbpedia(String dbpedia) { this.dbpedia = dbpedia; } public String getYago() { return yago; } public void setYago(String yago) { this.yago = yago; } public String getOpencyc() { return opencyc; } public void setOpencyc(String opencyc) { this.opencyc = opencyc; } public String getFreebase() { return freebase; } public void setFreebase(String freebase) { this.freebase = freebase; } public String getCiaFactbook() { return ciaFactbook; } public void setCiaFactbook(String ciaFactbook) { this.ciaFactbook = ciaFactbook; } public String getCensus() { return census; } public void setCensus(String census) { this.census = census; } public String getGeonames() { return geonames; } public void setGeonames(String geonames) { this.geonames = geonames; } public String getCrunchbase() { return crunchbase; } public void setCrunchbase(String crunchbase) { this.crunchbase = crunchbase; } public String getSemanticCrunchbase() { return semanticCrunchbase; } public void setSemanticCrunchbase(String semanticCrunchbase) { this.semanticCrunchbase = semanticCrunchbase; } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/LanguageDetectionResults.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Language0000644000175000017500000000400311625126472033163 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class LanguageDetectionResults extends Results { private String iso6391; private String iso6392; private String iso6393; private String ethnologue; private String nativeSpeakers; private String wikipedia; public String getIso6391() { return iso6391; } public void setIso6391(String iso6391) { this.iso6391 = iso6391; } public String getIso6392() { return iso6392; } public void setIso6392(String iso6392) { this.iso6392 = iso6392; } public String getIso6393() { return iso6393; } public void setIso6393(String iso6393) { this.iso6393 = iso6393; } public String getEthnologue() { return ethnologue; } public void setEthnologue(String ethnologue) { this.ethnologue = ethnologue; } public String getNativeSpeakers() { return nativeSpeakers; } public void setNativeSpeakers(String nativeSpeakers) { this.nativeSpeakers = nativeSpeakers; } public String getWikipedia() { return wikipedia; } public void setWikipedia(String wikipedia) { this.wikipedia = wikipedia; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Results.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Results.0000644000175000017500000000366311625126472033172 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class Results { private String status; private String statusInfo; private String language; private String url; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getStatusInfo() { return statusInfo; } public void setStatusInfo(String statusInfo) { this.statusInfo = statusInfo; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("status: ").append(status).append("\n"); builder.append("statusInfo: ").append(statusInfo).append("\n"); builder.append("language: ").append(language).append("\n"); builder.append("url: ").append(url).append("\n"); return builder.toString(); } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/EntitiesResults.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Entities0000644000175000017500000000721011625126472033227 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class EntitiesResults extends Results { private Entities entities = new Entities(); public Entities getEntities() { return entities; } public void setEntities(Entities entities) { this.entities = entities; } public void addEntity(Entity entity) { this.getEntities().addEntity(entity); } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(super.toString()); if (entities != null && entities.getEntities() != null && !entities.getEntities().isEmpty()) { for (Entity entity : entities.getEntities()) { builder.append("count : ").append(entity.getCount()).append("\n"); builder.append("relevance : ").append(entity.getRelevance()).append("\n"); builder.append("text : ").append(entity.getText()).append("\n"); builder.append("type : ").append(entity.getType()).append("\n"); if (entity.getDisambiguated() != null) { builder.append("disambiguated - census : ").append(entity.getDisambiguated().getCensus()) .append("\n"); builder.append("disambiguated - ciaFactbook : ").append( entity.getDisambiguated().getCiaFactbook()).append("\n"); builder.append("disambiguated - dbpedia : ").append( entity.getDisambiguated().getDbpedia()).append("\n"); builder.append("disambiguated - freebase : ").append( entity.getDisambiguated().getFreebase()).append("\n"); builder.append("disambiguated - geo : ").append(entity.getDisambiguated().getGeo()) .append("\n"); builder.append("disambiguated - geonames : ").append( entity.getDisambiguated().getGeonames()).append("\n"); builder.append("disambiguated - musicbrainz : ").append( entity.getDisambiguated().getMusicBrainz()).append("\n"); builder.append("disambiguated - name : ").append(entity.getDisambiguated().getName()) .append("\n"); builder.append("disambiguated - opencyc : ").append( entity.getDisambiguated().getOpencyc()).append("\n"); builder.append("disambiguated - subtype : ").append( entity.getDisambiguated().getSubType()).append("\n"); builder.append("disambiguated - umbel : ").append(entity.getDisambiguated().getUmbel()) .append("\n"); builder.append("disambiguated - website : ").append( entity.getDisambiguated().getWebsite()).append("\n"); builder.append("disambiguated - yago : ").append(entity.getDisambiguated().getYago()) .append("\n"); } } } return builder.toString(); } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/KeywordResults.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/KeywordR0000644000175000017500000000247511625126472033221 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; import java.util.ArrayList; import java.util.List; public class KeywordResults extends Results { private List keywords; public KeywordResults() { keywords = new ArrayList(); } public void setKeywords(List keywords) { this.keywords = keywords; } public List getKeywords() { return keywords; } public void addKeyword(Keyword k) { keywords.add(k); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Entity.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Entity.j0000644000175000017500000000423311625126474033153 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class Entity { private String type; private String relevance; private String count; private String text; private Disambiguated disambiguated; private Quotations quotations; private DocumentSentiment sentiment; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getRelevance() { return relevance; } public void setRelevance(String relevance) { this.relevance = relevance; } public String getCount() { return count; } public void setCount(String count) { this.count = count; } public String getText() { return text; } public void setText(String text) { this.text = text; } public void setDisambiguated(Disambiguated disambiguated) { this.disambiguated = disambiguated; } public Disambiguated getDisambiguated() { return disambiguated; } public void setQuotations(Quotations quotations) { this.quotations = quotations; } public Quotations getQuotations() { return quotations; } public void setSentiment(DocumentSentiment sentiment) { this.sentiment = sentiment; } public DocumentSentiment getSentiment() { return sentiment; } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/ConceptResults.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/ConceptR0000644000175000017500000000227311625126474033166 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class ConceptResults extends Results { private Concepts concepts; public Concepts getConcepts() { return concepts; } public void setConcepts(Concepts concepts) { this.concepts = concepts; } public void addConcept(Concept concept) { this.getConcepts().add(concept); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/CategorizationResults.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Categori0000644000175000017500000000261611625126472033205 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class CategorizationResults extends Results { private String category; private String score; private String url; public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public void setUrl(String url) { this.url = url; } public String getUrl() { return url; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Keyword.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Keyword.0000644000175000017500000000205411625126474033150 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class Keyword { private String text; public void setText(String text) { this.text = text; } public String getText() { return text; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Concepts.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Concepts0000644000175000017500000000237411625126474033231 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; import java.util.ArrayList; import java.util.List; public class Concepts { private List concepts = new ArrayList(); public List getConcepts() { return concepts; } public void setConcepts(List concepts) { this.concepts = concepts; } public void add(Concept concept) { this.concepts.add(concept); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Entities.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Entities0000644000175000017500000000245711625126474033241 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; import java.util.ArrayList; import java.util.List; public class Entities { private List entities; public Entities() { this.entities = new ArrayList(); } public void setEntities(List entities) { this.entities = entities; } public List getEntities() { return entities; } public void addEntity(Entity entity) { this.entities.add(entity); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Quotations.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Quotatio0000644000175000017500000000243011625126474033251 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; import java.util.ArrayList; import java.util.List; public class Quotations { private List quotations = new ArrayList(); public void setQuotations(List quotations) { this.quotations = quotations; } public List getQuotations() { return quotations; } public void setQuotation(String quotation) { this.quotations.add(quotation); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/DocumentSentiment.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Document0000644000175000017500000000237611625126472033231 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; /** * The document sentiment information */ public class DocumentSentiment { private String type; private String score; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Disambiguated.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Disambig0000644000175000017500000000603611625126472033167 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class Disambiguated { private String name; private String subType; private String website; private String geo; private String dbpedia; private String yago; private String opencyc; private String umbel; private String freebase; private String ciaFactbook; private String census; private String geonames; private String musicBrainz; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSubType() { return subType; } public void setSubType(String subType) { this.subType = subType; } public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } public String getGeo() { return geo; } public void setGeo(String geo) { this.geo = geo; } public String getDbpedia() { return dbpedia; } public void setDbpedia(String dbpedia) { this.dbpedia = dbpedia; } public String getYago() { return yago; } public void setYago(String yago) { this.yago = yago; } public String getOpencyc() { return opencyc; } public void setOpencyc(String opencyc) { this.opencyc = opencyc; } public String getUmbel() { return umbel; } public void setUmbel(String umbel) { this.umbel = umbel; } public String getFreebase() { return freebase; } public void setFreebase(String freebase) { this.freebase = freebase; } public String getCiaFactbook() { return ciaFactbook; } public void setCiaFactbook(String ciaFactbook) { this.ciaFactbook = ciaFactbook; } public String getCensus() { return census; } public void setCensus(String census) { this.census = census; } public String getGeonames() { return geonames; } public void setGeonames(String geonames) { this.geonames = geonames; } public String getMusicBrainz() { return musicBrainz; } public void setMusicBrainz(String musicBrainz) { this.musicBrainz = musicBrainz; } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/AnnotatedResults.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/Annotate0000644000175000017500000000243011625126472033213 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.domain; public class AnnotatedResults extends Results { private String text; private String annotatedText; public String getText() { return text; } public void setText(String text) { this.text = text; } public String getAnnotatedText() { return annotatedText; } public void setAnnotatedText(String annotatedText) { this.annotatedText = annotatedText; } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/language/0000755000175000017500000000000011625126472032034 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/language/XMLLanguageDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/language/XMLLan0000644000175000017500000000450011625126472033051 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.language; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.LanguageDetectionResults; import org.apache.uima.alchemy.digester.domain.Results; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class XMLLanguageDigester implements OutputDigester { public Results parseAlchemyXML(InputStream responseStream) throws IOException, SAXException, URISyntaxException { Digester digester = new Digester(); digester.setValidating(false); digester.addObjectCreate("results", LanguageDetectionResults.class); digester.addBeanPropertySetter("results/status", "status"); digester.addBeanPropertySetter("results/statusInfo", "statusInfo"); digester.addBeanPropertySetter("results/url", "url"); digester.addBeanPropertySetter("results/language", "language"); digester.addBeanPropertySetter("results/iso-639-1", "iso6391"); digester.addBeanPropertySetter("results/iso-639-2", "iso6392"); digester.addBeanPropertySetter("results/iso-639-3", "iso6393"); digester.addBeanPropertySetter("results/ethnologue", "ethnologue"); digester.addBeanPropertySetter("results/native-speakers", "nativeSpeakers"); digester.addBeanPropertySetter("results/wikipedia", "wikipedia"); return (Results) digester.parse(responseStream); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/language/LanguageDetectionDigesterProvider.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/language/Langua0000644000175000017500000000302211625126472033163 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.language; import org.apache.commons.lang.Validate; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; public class LanguageDetectionDigesterProvider implements DigesterProvider { public OutputDigester getDigester(String type) throws UnsupportedResultFormatException { Validate.notEmpty(type); OutputDigester digester = null; if (type.equals("xml")) { digester = new XMLLanguageDigester(); } else throw new UnsupportedResultFormatException(type); return digester; } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/0000755000175000017500000000000011625126474031567 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/ranked/0000755000175000017500000000000011625126474033033 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/ranked/XMLRankedEntityExtractionDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/ranked/X0000644000175000017500000001064011625126474033166 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.entity.ranked; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.*; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class XMLRankedEntityExtractionDigester implements OutputDigester { public Results parseAlchemyXML(InputStream stream) throws IOException, SAXException, URISyntaxException { Digester digester = new Digester(); digester.setValidating(false); digester.addObjectCreate("results", EntitiesResults.class); digester.addBeanPropertySetter("results/status", "status"); digester.addBeanPropertySetter("results/statusInfo", "statusInfo"); digester.addBeanPropertySetter("results/language", "language"); digester.addBeanPropertySetter("results/url", "url"); digester.addObjectCreate("results/entities", Entities.class); digester.addObjectCreate("results/entities/entity", Entity.class); digester.addBeanPropertySetter("results/entities/entity/type", "type"); digester.addBeanPropertySetter("results/entities/entity/relevance", "relevance"); digester.addBeanPropertySetter("results/entities/entity/count", "count"); digester.addBeanPropertySetter("results/entities/entity/text", "text"); digester.addObjectCreate("results/entities/entity/disambiguated", Disambiguated.class); digester.addBeanPropertySetter("results/entities/entity/disambiguated/name", "name"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/subType", "subType"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/website", "website"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/geo", "geo"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/dbpedia", "dbpedia"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/yago", "yago"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/opencyc", "opencyc"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/umbel", "umbel"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/freebase", "freebase"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/ciaFactbook", "ciaFactbook"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/census", "census"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/geonames", "geonames"); digester.addBeanPropertySetter("results/entities/entity/disambiguated/musicBrainz", "musicBrainz"); digester.addSetNext("results/entities/entity/disambiguated", "setDisambiguated"); digester.addObjectCreate("results/entities/entity/quotations", Quotations.class); digester.addBeanPropertySetter("results/entities/entity/quotations/quotation", "quotation"); digester.addSetNext("results/entities/entity/quotations", "setQuotations"); digester.addObjectCreate("results/entities/entity/sentiment", DocumentSentiment.class); digester.addBeanPropertySetter("results/entities/entity/sentiment/type", "type"); digester.addBeanPropertySetter("results/entities/entity/sentiment/score", "score"); digester.addSetNext("results/entities/entity/sentiment", "setSentiment"); digester.addSetNext("results/entities/entity", "addEntity"); digester.addSetNext("results/entities", "setEntities"); return (Results) digester.parse(stream); } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/ranked/JsonTextRankedEntityExtractionDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/ranked/J0000644000175000017500000000712411625126474033153 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.entity.ranked; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.*; import org.apache.uima.alchemy.digester.json.JsonDigester; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class JsonTextRankedEntityExtractionDigester implements OutputDigester { public Results parseAlchemyXML(InputStream stream) throws IOException, SAXException, URISyntaxException { Digester digester = new JsonDigester(); digester.setValidating(false); digester.addObjectCreate("$", EntitiesResults.class); digester.addBeanPropertySetter("$/status"); digester.addBeanPropertySetter("$/statusInfo", "statusInfo"); digester.addBeanPropertySetter("$/url"); digester.addBeanPropertySetter("$/language"); digester.addObjectCreate("$/entities", Entity.class); digester.addBeanPropertySetter("$/entities/type"); digester.addBeanPropertySetter("$/entities/relevance"); digester.addBeanPropertySetter("$/entities/count"); digester.addBeanPropertySetter("$/entities/text"); digester.addObjectCreate("$/entities/disambiguated", Disambiguated.class); digester.addBeanPropertySetter("$/entities/disambiguated/name", "name"); digester.addBeanPropertySetter("$/entities/disambiguated/subType", "subType"); digester.addBeanPropertySetter("$/entities/disambiguated/website", "website"); digester.addBeanPropertySetter("$/entities/disambiguated/geo", "geo"); digester.addBeanPropertySetter("$/entities/disambiguated/dbpedia", "dbpedia"); digester.addBeanPropertySetter("$/entities/disambiguated/yago", "yago"); digester.addBeanPropertySetter("$/entities/disambiguated/opencyc", "opencyc"); digester.addBeanPropertySetter("$/entities/disambiguated/umbel", "umbel"); digester.addBeanPropertySetter("$/entities/disambiguated/freebase", "freebase"); digester.addBeanPropertySetter("$/entities/disambiguated/ciaFactbook", "ciaFactbook"); digester.addBeanPropertySetter("$/entities/disambiguated/census", "census"); digester.addBeanPropertySetter("$/entities/disambiguated/geonames", "geonames"); digester.addBeanPropertySetter("$/entities/disambiguated/musicBrainz", "musicBrainz"); digester.addSetNext("$/entities/disambiguated", "setDisambiguated"); digester.addObjectCreate("$/entities/quotations", Quotations.class); digester.addBeanPropertySetter("$/entities/quotations/quotation", "quotation"); digester.addSetNext("$/entities/quotations", "setQuotations"); digester.addSetNext("$/entities", "addEntity"); return (Results) digester.parse(stream); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/ranked/RankedEntityDigesterProvider.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/ranked/R0000644000175000017500000000304011625126474033154 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.entity.ranked; import org.apache.commons.lang.Validate; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; public class RankedEntityDigesterProvider implements DigesterProvider { public OutputDigester getDigester(String type) throws UnsupportedResultFormatException { Validate.notEmpty(type); OutputDigester digester = null; if (type.equals("xml")) { digester = new XMLRankedEntityExtractionDigester(); } else throw new UnsupportedResultFormatException(type); return digester; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/annotated/uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/annotate0000755000175000017500000000000011625126474033321 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/annotated/XMLAnnotatedEntityExtractionDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/annotate0000644000175000017500000000402411625126474033323 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.entity.annotated; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.AnnotatedResults; import org.apache.uima.alchemy.digester.domain.Results; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class XMLAnnotatedEntityExtractionDigester implements OutputDigester { public Results parseAlchemyXML(InputStream stream) throws IOException, SAXException, URISyntaxException { Digester digester = new Digester(); digester.setValidating(false); digester.addObjectCreate("results", AnnotatedResults.class); digester.addBeanPropertySetter("results/status", "status"); digester.addBeanPropertySetter("results/statusInfo", "statusInfo"); digester.addBeanPropertySetter("results/language", "language"); digester.addBeanPropertySetter("results/text", "text"); digester.addBeanPropertySetter("results/url", "url"); digester.addBeanPropertySetter("results/annotatedText", "annotatedText"); return (Results) digester.parse(stream); } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/annotated/AnnotatedEntityDigesterProvider.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/entity/annotate0000644000175000017500000000305111625126474033322 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.entity.annotated; import org.apache.commons.lang.Validate; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; public class AnnotatedEntityDigesterProvider implements DigesterProvider { public OutputDigester getDigester(String type) throws UnsupportedResultFormatException { Validate.notEmpty(type); OutputDigester digester = null; if (type.equals("xml")) { digester = new XMLAnnotatedEntityExtractionDigester(); } else throw new UnsupportedResultFormatException(type); return digester; } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/keyword/0000755000175000017500000000000011625126472031735 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/keyword/XMLTextKeywordExctractionDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/keyword/XMLText0000644000175000017500000000421611625126472033170 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.keyword; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.Keyword; import org.apache.uima.alchemy.digester.domain.KeywordResults; import org.apache.uima.alchemy.digester.domain.Results; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class XMLTextKeywordExctractionDigester implements OutputDigester { public Results parseAlchemyXML(InputStream xmlReader) throws IOException, SAXException, URISyntaxException { Digester digester = new Digester(); digester.setValidating(false); digester.addObjectCreate("results", KeywordResults.class); digester.addBeanPropertySetter("results/status", "status"); digester.addBeanPropertySetter("results/statusInfo", "statusInfo"); digester.addBeanPropertySetter("results/url", "url"); digester.addBeanPropertySetter("results/language", "language"); digester.addObjectCreate("results/keywords/keyword", Keyword.class); digester.addBeanPropertySetter("results/keywords/keyword", "text"); digester.addSetNext("results/keywords/keyword", "addKeyword"); return (Results) digester.parse(xmlReader); } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/keyword/KeywordDigesterProvider.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/keyword/Keyword0000644000175000017500000000302511625126472033304 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.keyword; import org.apache.commons.lang.Validate; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; public class KeywordDigesterProvider implements DigesterProvider { public OutputDigester getDigester(String type) throws UnsupportedResultFormatException { Validate.notEmpty(type); OutputDigester digester = null; if (type.equals("xml")) { digester = new XMLTextKeywordExctractionDigester(); } else throw new UnsupportedResultFormatException(type); return digester; } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/concept/0000755000175000017500000000000011625126474031706 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/concept/ConceptTaggingDigesterProvider.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/concept/Concept0000644000175000017500000000314511625126474033227 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.concept; import org.apache.commons.lang.Validate; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; public class ConceptTaggingDigesterProvider implements DigesterProvider { public OutputDigester getDigester(String type) throws UnsupportedResultFormatException { Validate.notEmpty(type); OutputDigester digester = null; if (type.equals("json")) { digester = new JsonTextConceptDigester(); } else if (type.equals("xml")) { digester = new XMLTextConceptDigester(); } else throw new UnsupportedResultFormatException(type); return digester; } } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/concept/XMLTextConceptDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/concept/XMLText0000644000175000017500000000666011625126474033146 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.concept; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.Concept; import org.apache.uima.alchemy.digester.domain.ConceptResults; import org.apache.uima.alchemy.digester.domain.Concepts; import org.apache.uima.alchemy.digester.domain.Results; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class XMLTextConceptDigester implements OutputDigester { public Results parseAlchemyXML(InputStream xmlReader) throws IOException, SAXException, URISyntaxException { Digester digester = new Digester(); digester.setValidating(false); digester.addObjectCreate("results", ConceptResults.class); digester.addBeanPropertySetter("results/status", "status"); digester.addBeanPropertySetter("results/statusInfo", "statusInfo"); digester.addBeanPropertySetter("results/url", "url"); digester.addBeanPropertySetter("results/language", "language"); digester.addObjectCreate("results/concepts", Concepts.class); digester.addObjectCreate("results/concepts/concept", Concept.class); digester.addBeanPropertySetter("results/concepts/concept/text", "text"); digester.addBeanPropertySetter("results/concepts/concept/relevance", "relevance"); digester.addBeanPropertySetter("results/concepts/concept/website", "website"); digester.addBeanPropertySetter("results/concepts/concept/geo", "geo"); digester.addBeanPropertySetter("results/concepts/concept/dbpedia", "dbpedia"); digester.addBeanPropertySetter("results/concepts/concept/yago", "yago"); digester.addBeanPropertySetter("results/concepts/concept/musicBrainz", "musicBrainz"); digester.addBeanPropertySetter("results/concepts/concept/opencyc", "opencyc"); digester.addBeanPropertySetter("results/concepts/concept/freebase", "freebase"); digester.addBeanPropertySetter("results/concepts/concept/ciaFactbook", "ciaFactbook"); digester.addBeanPropertySetter("results/concepts/concept/census", "census"); digester.addBeanPropertySetter("results/concepts/concept/geonames", "geonames"); digester.addBeanPropertySetter("results/concepts/concept/crunchbase", "crunchbase"); digester.addBeanPropertySetter("results/concepts/concept/semanticCrunchbase", "semanticCrunchbase"); digester.addSetNext("results/concepts/concept", "add"); digester.addSetNext("results/concepts", "setConcepts"); return (Results) digester.parse(xmlReader); } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/concept/JsonTextConceptDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/concept/JsonTex0000644000175000017500000000625111625126474033227 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.concept; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.Concept; import org.apache.uima.alchemy.digester.domain.ConceptResults; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.digester.json.JsonDigester; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class JsonTextConceptDigester implements OutputDigester { public Results parseAlchemyXML(InputStream xmlReader) throws IOException, SAXException, URISyntaxException { Digester digester = new JsonDigester(); digester.setValidating(false); digester.addObjectCreate("$", ConceptResults.class); digester.addBeanPropertySetter("$/status", "status"); digester.addBeanPropertySetter("$/statusInfo", "statusInfo"); digester.addBeanPropertySetter("$/url", "url"); digester.addBeanPropertySetter("$/language", "language"); digester.addObjectCreate("$/concepts/concept", Concept.class); digester.addBeanPropertySetter("$/concepts/concept/text", "text"); digester.addBeanPropertySetter("$/concepts/concept/relevance", "relevance"); digester.addBeanPropertySetter("$/concepts/concept/website", "website"); digester.addBeanPropertySetter("$/concepts/concept/geo", "geo"); digester.addBeanPropertySetter("$/concepts/concept/dbpedia", "dbpedia"); digester.addBeanPropertySetter("$/concepts/concept/yago", "yago"); digester.addBeanPropertySetter("$/concepts/concept/musicBrainz", "musicBrainz"); digester.addBeanPropertySetter("$/concepts/concept/opencyc", "opencyc"); digester.addBeanPropertySetter("$/concepts/concept/freebase", "freebase"); digester.addBeanPropertySetter("$/concepts/concept/ciaFactbook", "ciaFactbook"); digester.addBeanPropertySetter("$/concepts/concept/census", "census"); digester.addBeanPropertySetter("$/concepts/concept/geonames", "geonames"); digester.addBeanPropertySetter("$/concepts/concept/crunchbase", "crunchbase"); digester.addBeanPropertySetter("$/concepts/concept/semanticCrunchbase", "semanticCrunchbase"); digester.addSetNext("$/concepts", "addConcept"); return (Results) digester.parse(xmlReader); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/categorization/0000755000175000017500000000000011625126472033273 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/categorization/XMLTextCategorizationDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/categorization/0000644000175000017500000000371011625126472033276 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.categorization; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.CategorizationResults; import org.apache.uima.alchemy.digester.domain.Results; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class XMLTextCategorizationDigester implements OutputDigester { public Results parseAlchemyXML(InputStream stream) throws IOException, SAXException, URISyntaxException { Digester digester = new Digester(); digester.setValidating(false); digester.addObjectCreate("results", CategorizationResults.class); digester.addBeanPropertySetter("results/status", "status"); digester.addBeanPropertySetter("results/statusInfo", "statusInfo"); digester.addBeanPropertySetter("results/url", "url"); digester.addBeanPropertySetter("results/category", "category"); digester.addBeanPropertySetter("results/score", "score"); return (Results) digester.parse(stream); } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/categorization/CategorizationDigesterProvider.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/categorization/0000644000175000017500000000317611625126472033304 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.categorization; import org.apache.commons.lang.Validate; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; public class CategorizationDigesterProvider implements DigesterProvider { public OutputDigester getDigester(String type) throws UnsupportedResultFormatException { Validate.notEmpty(type); OutputDigester digester = null; if (type.equals("json")) { digester = new JsonTextCategorizationDigester(); } else if (type.equals("xml")) { digester = new XMLTextCategorizationDigester(); } else throw new UnsupportedResultFormatException(type); return digester; } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/categorization/JsonTextCategorizationDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/categorization/0000644000175000017500000000404411625126472033277 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.categorization; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.CategorizationResults; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.digester.json.JsonDigester; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class JsonTextCategorizationDigester implements OutputDigester { public Results parseAlchemyXML(InputStream stream) throws IOException, SAXException, URISyntaxException { Digester digester = new JsonDigester(); digester.setValidating(false); digester.addObjectCreate("$", CategorizationResults.class); digester.addBeanPropertySetter("$/status", "status"); digester.addBeanPropertySetter("$/statusInfo", "statusInfo"); digester.addBeanPropertySetter("$/url", "url"); digester.addBeanPropertySetter("$/language", "language"); digester.addBeanPropertySetter("$/category", "category"); digester.addBeanPropertySetter("$/score", "score"); return (Results) digester.parse(stream); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/microformats/0000755000175000017500000000000011625126472032756 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/microformats/MicroformatsDigesterProvider.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/microformats/Mi0000644000175000017500000000302511625126472033246 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.microformats; import org.apache.commons.lang.Validate; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; public class MicroformatsDigesterProvider implements DigesterProvider { public OutputDigester getDigester(String type) throws UnsupportedResultFormatException { Validate.notEmpty(type); OutputDigester digester = null; if (type.equals("xml")) { digester = new XMLMicroformatsDigester(); } else throw new UnsupportedResultFormatException(type); return digester; } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/microformats/XMLMicroformatsDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/microformats/XM0000644000175000017500000000434411625126472033232 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.microformats; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.Microformat; import org.apache.uima.alchemy.digester.domain.MicroformatsResults; import org.apache.uima.alchemy.digester.domain.Results; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; public class XMLMicroformatsDigester implements OutputDigester { public Results parseAlchemyXML(InputStream responseStream) throws IOException, SAXException, URISyntaxException { Digester digester = new Digester(); digester.setValidating(false); digester.addObjectCreate("results", MicroformatsResults.class); digester.addBeanPropertySetter("results/status", "status"); digester.addBeanPropertySetter("results/statusInfo", "statusInfo"); digester.addBeanPropertySetter("results/url", "url"); digester.addObjectCreate("results/microformats/microformat", Microformat.class); digester.addBeanPropertySetter("results/microformats/microformat/field", "fieldName"); digester.addBeanPropertySetter("results/microformats/microformat/data", "fieldData"); digester.addSetNext("results/microformats/microformat", "addMicroformat"); return (Results) digester.parse(responseStream); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/DigesterProvider.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/DigesterProvide0000644000175000017500000000212211625126474033272 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; public interface DigesterProvider { public OutputDigester getDigester(String type) throws UnsupportedResultFormatException; } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/OutputDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/OutputDigester.0000644000175000017500000000232611625126474033246 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; import org.apache.uima.alchemy.digester.domain.Results; import org.xml.sax.SAXException; public interface OutputDigester { public Results parseAlchemyXML(InputStream xmlReader) throws IOException, SAXException, URISyntaxException; } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/0000755000175000017500000000000011625126472032257 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/SentimentAnalysisDigesterProvider.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/Senti0000644000175000017500000000312411625126472033264 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.sentiment; import org.apache.commons.lang.Validate; import org.apache.uima.alchemy.digester.DigesterProvider; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; /** * Provider for sentiment analysis output parser */ public class SentimentAnalysisDigesterProvider implements DigesterProvider { public OutputDigester getDigester(String type) throws UnsupportedResultFormatException { Validate.notEmpty(type); OutputDigester digester = null; if (type.equals("xml")) { digester = new XMLSentimentAnalysisDigester(); } else throw new UnsupportedResultFormatException(type); return digester; } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSentimentAnalysisDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSe0000644000175000017500000000451111625126472033133 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.sentiment; import org.apache.commons.digester.Digester; import org.apache.uima.alchemy.digester.OutputDigester; import org.apache.uima.alchemy.digester.domain.DocumentSentiment; import org.apache.uima.alchemy.digester.domain.Results; import org.apache.uima.alchemy.digester.domain.SentimentAnalysisResults; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; /** * Digester for XML output of sentiment analysis service */ public class XMLSentimentAnalysisDigester implements OutputDigester { public Results parseAlchemyXML(InputStream responseStream) throws IOException, SAXException, URISyntaxException { Digester digester = new Digester(); digester.setValidating(false); digester.addObjectCreate("results", SentimentAnalysisResults.class); digester.addBeanPropertySetter("results/status", "status"); digester.addBeanPropertySetter("results/statusInfo", "statusInfo"); digester.addBeanPropertySetter("results/url", "url"); digester.addBeanPropertySetter("results/language", "language"); digester.addObjectCreate("results/docSentiment", DocumentSentiment.class); digester.addBeanPropertySetter("results/docSentiment/type", "type"); digester.addBeanPropertySetter("results/docSentiment/score", "score"); digester.addSetNext("results/docSentiment", "setDocSentiment"); return (Results) digester.parse(responseStream); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/exception/0000755000175000017500000000000011625126474032251 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/exception/ResultDigestingException.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/exception/Resul0000644000175000017500000000211711625126474033267 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.exception; public class ResultDigestingException extends Exception { /** * */ private static final long serialVersionUID = 1L; public ResultDigestingException(Exception e) { super(e); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/exception/UnsupportedResultFormatException.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/exception/Unsup0000644000175000017500000000231611625126474033310 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.exception; public class UnsupportedResultFormatException extends Exception { /** * */ private static final long serialVersionUID = 1L; public UnsupportedResultFormatException(Throwable e) { super(e); } public UnsupportedResultFormatException(String type) { super(type + " outputs not suppoted"); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/json/0000755000175000017500000000000011625126474031224 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/json/package-info.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/json/package-in0000644000175000017500000000170011625126474033144 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * This package contains the JSON support for digester. * */ package org.apache.uima.alchemy.digester.json; ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/json/JsonDigester.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/json/JsonDigest0000644000175000017500000000231511625126474033221 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.json; import org.apache.commons.digester.Digester; /** * A proper Digester to parse JSON documents. * */ public final class JsonDigester extends Digester { public JsonDigester() { this(null); } public JsonDigester(final String customRootElementName) { super(new JsonXMLReader(customRootElementName)); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/json/JsonXMLReader.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/json/JsonXMLRea0000644000175000017500000000773511625126474033105 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester.json; import java.io.IOException; import org.xml.sax.ContentHandler; import org.xml.sax.DTDHandler; import org.xml.sax.EntityResolver; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXNotRecognizedException; import org.xml.sax.SAXNotSupportedException; import org.xml.sax.XMLReader; /** * JSON parser that throws XML events. * */ final class JsonXMLReader implements XMLReader { private final String customRootElementName; private ContentHandler contentHandler; public ContentHandler getContentHandler() { return contentHandler; } public void setContentHandler(ContentHandler contentHandler) { this.contentHandler = contentHandler; } public EntityResolver getEntityResolver() { return entityResolver; } public void setEntityResolver(EntityResolver entityResolver) { this.entityResolver = entityResolver; } public ErrorHandler getErrorHandler() { return errorHandler; } public void setErrorHandler(ErrorHandler errorHandler) { this.errorHandler = errorHandler; } private EntityResolver entityResolver; private ErrorHandler errorHandler; private DTDHandler dtdHandler; public JsonXMLReader(final String customRootElementName) { this.customRootElementName = customRootElementName; } /** * {@inheritDoc} */ public boolean getFeature(final String name) throws SAXNotRecognizedException, SAXNotSupportedException { throw new SAXNotSupportedException(); } /** * {@inheritDoc} */ public Object getProperty(final String name) throws SAXNotRecognizedException, SAXNotSupportedException { throw new SAXNotSupportedException(); } /** * {@inheritDoc} */ public DTDHandler getDTDHandler() { return this.dtdHandler; } /** * {@inheritDoc} */ public void setDTDHandler(DTDHandler handler) { this.dtdHandler = handler; } /** * {@inheritDoc} */ public void parse(final InputSource input) throws IOException, SAXException { JsonParser jsonParser = new JsonParser(input.getByteStream()); if (this.customRootElementName != null && this.customRootElementName.length() > 0) { jsonParser.setRootElementName(this.customRootElementName); } jsonParser.setContentHandler(this.contentHandler); try { jsonParser.json(); } catch (ParseException e) { throw new SAXException("An error occurred while parsing JSON", e); } } /** * {@inheritDoc} */ public void parse(final String systemId) throws IOException, SAXException { // not used } /** * {@inheritDoc} */ public void setFeature(final String name, final boolean value) throws SAXNotRecognizedException, SAXNotSupportedException { throw new SAXNotSupportedException(); } /** * {@inheritDoc} */ public void setProperty(final String name, final Object value) throws SAXNotRecognizedException, SAXNotSupportedException { throw new SAXNotSupportedException(); } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/0000755000175000017500000000000011625126470021166 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/0000755000175000017500000000000011625126470023200 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/conceptTaggingResult.xml0000644000175000017500000000314611625126470030061 0ustar drazzibdrazzib OK niente it Non e' bello cio' che e' bello ma invero e' bello cio' che piace bello 0.6 WEBSITE LATITUDE LONGITUDE LINKED_DATA_DBPEDIA LINKED_DATA_YAGO LINKED_DATA_OPENCYC LINKED_DATA_FREEBASE LINKED_DATA_FACTBOOK LINKED_DATA_CENSUS LINKED_DATA_GEONAMES CRUNCHBASE_WEB_LINK LINKED_DATA_CRUNCHBASE uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/notSyncRankedEntityExtractionResult.xml0000644000175000017500000000400111625126470033134 0ustar drazzibdrazzib OK it http://www.someurl.com Francesco Totti is the best player in the world and will ever be. Player 1.0 1 Francesco Totti Afghanistan Country ENTITY_SUBTYPE http://www.afghangovernment.com/ LATITUDE LONGITUDE http://dbpedia.org/page/Afghanistan LINKED_DATA_YAGO LINKED_DATA_OPENCYC LINKED_DATA_UMBEL LINKED_DATA_FREEBASE LINKED_DATA_FACTBOOK LINKED_DATA_CENSUS LINKED_DATA_GEONAMES LINKED_DATA_MUSICBRAINZ CRUNCHBASE_WEB_LINK LINKED_DATA_CRUNCHBASE ENTITY_QUOTATION uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/jsonTextRankedEntityResult.js0000644000175000017500000000326011625126470031076 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ { "status": "OK", "url": "", "language": "english", "entities": [ { "type": "Country", "relevance": "0.33", "count": "1", "text": "Afghanistan" }, { "type": "Country", "relevance": "0.33", "count": "1", "text": "US", "disambiguated": { "name": "United States", "geo": "38.8833333333 -77.0166666667", "dbpedia": "http://dbpedia.org/resource/United_States", "freebase": "http://rdf.freebase.com/ns/guid.9202a8c04000641f8000000000959f60", "ciaFactbook": "http://www4.wiwiss.fu-berlin.de/factbook/resource/United_States", "yago": "http://mpii.de/yago/resource/United_States" } } ] } uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/rankedTestText.txt0000644000175000017500000000513411625126470026715 0ustar drazzibdrazzib Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Media UK publishes all the audience figures for every radio station - here's Radio 1's audience figures for example. You'll find audience figures published on the Media UK website, linked-to from most radio station pages. The figures below, however, also include radio station brands: we're treating "Heart" or "Kiss" as one station here, rather than each individual local radio service. This gives a clearer view of the popularity of "Heart" or "Magic", for example. These figures are based on RAJAR ending March 2010. The top 10 radio stations with the most listeners Normally, when people ask for the most popular radio station, they mean the one with the most amount of listeners. This will always give national or London stations as a result, and ignore smaller, local radio stations - even though, in many areas, the most popular station is a local one. 1. BBC Radio 2 (14.6m) 2. BBC Radio 1 (11.7m) 3. BBC Radio 4 (10.0m) 4. Heart (7.4m) 5. BBC Radio 5 live (6.5m) 6. Classic FM (5.5m) 7. Galaxy (4.0m) 8. Magic (3.8m) 9. Kiss (3.4m) 10. Smooth Radio (2.6m) The top 10 radio owners with the most listeners 1. BBC national radio (34.9m) 2. Global Radio (18.6m) 3. Bauer Media (12.3m) 4. BBC local/regional radio (10.0m) 5. GMG Radio (4.7m) 6. UTV Radio (3.6m) 7. TIML Radio (1.8m) 8. BBC World Service (1.3m) 9. Orion Media (1.2m) 10. Planet Rock (0.7m) The top 10 radio stations with the highest amount of listeners in their area If you want to look at popularity based on how many people listen in their area (and thus, take on board local radio stations as well as national), then the 'reach percent' is the best figure to examine. This shows you people who've listened for at least five minutes a week, and takes no account of whether they listen any longer than that. uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/languageDetectionResult.xml0000644000175000017500000000222511625126470030544 0ustar drazzibdrazzib OK http://url.language.com en ISO_639_3_CODE http://www.ethnologue.com/show_country_bibl.asp?name=GB 321321 http://en.wikipedia.org/wiki/English_language uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/microformatsResult.xml0000644000175000017500000000224011625126470027624 0ustar drazzibdrazzib OK http://www.foo.bar.org firstField firstValue secondField secondValue uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/keywordExtractionResult.xml0000644000175000017500000000367711625126470030663 0ustar drazzibdrazzib OK http://some.url.com en In an effort to centralize developer resources and help newcomers to open source, the Apache Software Foundation recently launched the Community Developer project. So far, the project includes plans for a mentoring program, a "Newbie FAQ", and resources for educators. To find out how the project started and where it's going, DZone conducted an exclusive interview with Bertrand Delacretaz, an Apache member who has been with the project since the beginning. He says some of the major goals for the project include mentoring for student developers and an entry point to the foundation at-large. FAQ 0.3 Community 0.5 open source 0.6 Bertrand Delacretaz 0.6 uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/categorizationResult.xml0000644000175000017500000000170011625126470030141 0ustar drazzibdrazzib OK http://www.bar.foo.co.uk politics 0.9 uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/rankedEntityExtractionResult.xml0000644000175000017500000000415311625126470031626 0ustar drazzibdrazzib OK it http://www.someurl.com Eight US soldiers die in attacks in south Afghanistan, making October the deadliest month for the US in the war there Country 0.5 1 Afghanistan Afghanistan Country ENTITY_SUBTYPE http://www.afghangovernment.com/ LATITUDE LONGITUDE http://dbpedia.org/page/Afghanistan LINKED_DATA_YAGO LINKED_DATA_OPENCYC LINKED_DATA_UMBEL LINKED_DATA_FREEBASE LINKED_DATA_FACTBOOK LINKED_DATA_CENSUS LINKED_DATA_GEONAMES LINKED_DATA_MUSICBRAINZ CRUNCHBASE_WEB_LINK LINKED_DATA_CRUNCHBASE ENTITY_QUOTATION uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/resources/jsonCategorizationResult.js0000644000175000017500000000167311625126470030620 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ { "status": "OK", "url": "", "language": "english", "category": "unknown", "score": "1" } uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/0000755000175000017500000000000011625126466022114 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/0000755000175000017500000000000011625126466022703 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/0000755000175000017500000000000011625126466024124 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/0000755000175000017500000000000011625126466025057 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/0000755000175000017500000000000011625126470026474 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/utils/0000755000175000017500000000000011625126466027641 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/utils/TestUtils.java0000644000175000017500000001270711625126466032453 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.utils; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.ProcessTrace; import org.apache.uima.util.ProcessTraceEvent; import org.apache.uima.util.XMLInputSource; import org.junit.Ignore; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; @Ignore public class TestUtils { /** * get an AE from a path of the descriptor * * @param filePath * @return * @throws IOException * @throws InvalidXMLException * @throws ResourceInitializationException * */ public static AnalysisEngine getAE(String filePath) throws IOException, InvalidXMLException, ResourceInitializationException { AnalysisEngine ae = null; // get Resource Specifier from XML file XMLInputSource in = new XMLInputSource(filePath); ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in); // create AE here ae = UIMAFramework.produceAnalysisEngine(specifier); return ae; } /** * get an analysis engine give path and runtime configuration parameters * @param xmlPath * @param parameterSettings * @return * @throws ResourceInitializationException */ public static AnalysisEngine getAE(String xmlPath, Map parameterSettings) throws ResourceInitializationException { AnalysisEngine ae = null; try { XMLInputSource in = new XMLInputSource(xmlPath); // override descriptor's configuration parameters AnalysisEngineDescription desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(in); for (String parameter : parameterSettings.keySet()) { desc.getAnalysisEngineMetaData().getConfigurationParameterSettings().setParameterValue(parameter, parameterSettings.get(parameter)); } // create AE here ae = UIMAFramework.produceAnalysisEngine(desc); } catch (Exception e) { throw new ResourceInitializationException(e); } return ae; } /** * get an analysis engine given a path and a mocked implementation name to override the annotator class * @param xmlPath * @param implementationName * @return * @throws ResourceInitializationException */ public static AnalysisEngine getAEWithMockedImplementation(String xmlPath, String implementationName) throws ResourceInitializationException { AnalysisEngine ae = null; try { XMLInputSource in = new XMLInputSource(xmlPath); AnalysisEngineDescription desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(in); desc.setAnnotatorImplementationName(implementationName); // create AE here ae = UIMAFramework.produceAnalysisEngine(desc); } catch (Exception e) { throw new ResourceInitializationException(e); } return ae; } /** * executes an AE on a document * * @param ae * @param docText * @return * @throws AnalysisEngineProcessException * @throws ResourceInitializationException * */ public static JCas executeAE(AnalysisEngine ae, String docText) throws AnalysisEngineProcessException, ResourceInitializationException { // create a JCas, given an Analysis Engine (ae) JCas jcas = ae.newJCas(); // analyze a document jcas.setDocumentText(docText); ProcessTrace pt = ae.process(jcas); // analyze results for (ProcessTraceEvent e : pt.getEvents()) { if (e != null && e.getResultMessage() != null && e.getResultMessage().contains("error")) { throw new AnalysisEngineProcessException(); } } return jcas; } /** * get all FeatureStructures of a type from the CAS * * @param type * @param cas * @return */ public static List getAllFSofType(int type, JCas cas) { List featureStructures = new ArrayList(); for (FSIterator it = cas.getFSIndexRepository().getAllIndexedFS(cas.getCasType(type)); it.hasNext();) { featureStructures.add(it.next()); } return featureStructures; } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/0000755000175000017500000000000011625126470030501 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextLanguageDetectionAnnotatorTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextLanguageDe0000644000175000017500000000542211625126470033270 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.annotator.mocked.MockedTextLanguageDetectionAnnotator; import org.apache.uima.alchemy.ts.language.LanguageFS; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.jcas.JCas; import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class TextLanguageDetectionAnnotatorTest { private static final String DOC = "Eight US soldiers die in attacks in south Afghanistan, making October the deadliest month for the US in the war there"; private static final String XML_PATH = "desc/TextLanguageDetectionAEDescriptor.xml"; @SuppressWarnings("unchecked") @Test public void annotatorIntegrationTest() { try { Map parameterSettings = new HashMap(); parameterSettings.put("apikey","04490000a72fe7ec5cb3497f14e77f338c86f2fe"); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAE(XML_PATH,parameterSettings), DOC); List language = (List) TestUtils.getAllFSofType(LanguageFS.type, resultingCAS); assertTrue(language!=null); assertTrue(language.size()==1); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } @SuppressWarnings("unchecked") @Test public void mockedAnnotatorTest() { try { String mockedAnnotatorName = MockedTextLanguageDetectionAnnotator.class.getName(); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAEWithMockedImplementation(XML_PATH,mockedAnnotatorName), DOC); List language = (List) TestUtils.getAllFSofType(LanguageFS.type, resultingCAS); assertTrue(language!=null); assertTrue(language.size()==1); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/URLMicroformatsAnnotatorTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/URLMicroformat0000644000175000017500000000570111625126470033274 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.annotator.mocked.MockedMicroformatsAnnotator; import org.apache.uima.alchemy.ts.microformats.MicroformatFS; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.jcas.JCas; import org.junit.Test; import java.net.URI; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class URLMicroformatsAnnotatorTest { private static final String URL = "http://microformats.org/wiki/hcard"; private static final String XML_PATH = "desc/URLMicroformatsAEDescriptor.xml"; @SuppressWarnings("unchecked") @Test public void annotatorIntegrationTest() { try { if (isURLreachable()) { Map parameterSettings = new HashMap(); parameterSettings.put("apikey","04490000a72fe7ec5cb3497f14e77f338c86f2fe"); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAE(XML_PATH,parameterSettings), URL); List microformats = (List) TestUtils.getAllFSofType(MicroformatFS.type, resultingCAS); assertTrue(microformats!=null); assertTrue(microformats.size()==7); } } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } private boolean isURLreachable() { try { return new URI(URL).toURL().getContent() != null; } catch (Exception e) { return false; } } @SuppressWarnings("unchecked") @Test public void mockedAnnotatorTest() { try { String mockedAnnotatorName = MockedMicroformatsAnnotator.class.getName(); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAEWithMockedImplementation(XML_PATH,mockedAnnotatorName), URL); List microformats = (List) TestUtils.getAllFSofType(MicroformatFS.type, resultingCAS); assertTrue(microformats!=null); assertTrue(microformats.size()==2); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotatorTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentA0000644000175000017500000000470211625126470033343 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.uima.alchemy.ts.sentiment.SentimentFS; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.jcas.JCas; import org.junit.Test; /** * SentimentAnalysis service test */ public class TextSentimentAnalysisAnnotatorTest { @SuppressWarnings("unchecked") @Test public void annotatorIntegrationTest() { String doc = "The BBC's Jim Muir says the Tunisians have been struggling to cope with the deluge of refugees"; String xmlPath = "desc/TextSentimentAnalysisAEDescriptor.xml"; try { Map parameterSettings = new HashMap(); parameterSettings.put("apikey", "04490000a72fe7ec5cb3497f14e77f338c86f2fe"); JCas sentimentJCas = TestUtils.executeAE(TestUtils.getAE(xmlPath, parameterSettings), doc); List sentimentList = (List) TestUtils.getAllFSofType( SentimentFS.type, sentimentJCas); assertTrue(sentimentList != null); assertTrue(sentimentList.size() == 1); SentimentFS sentimentFS = sentimentList.get(0); assertTrue(sentimentFS != null); assertTrue(sentimentFS.getSentimentType() != null && "negative".equals(sentimentFS.getSentimentType())); assertTrue(sentimentFS.getScore() != null && Double.valueOf(sentimentFS.getScore()) < 0); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextRankedEntityExtractionAnnotatorTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextRankedEnti0000644000175000017500000000717311625126470033325 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.annotator.mocked.MockedNotSyncTextRankedEntityAnnotator; import org.apache.uima.alchemy.annotator.mocked.MockedTextRankedEntityAnnotator; import org.apache.uima.alchemy.ts.entity.Country; import org.apache.uima.alchemy.ts.entity.TelevisionStation; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.jcas.JCas; import org.apache.uima.util.FileUtils; import org.junit.Test; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class TextRankedEntityExtractionAnnotatorTest { private static final String DOC = "Eight US soldiers die in attacks in south Afghanistan, making October the deadliest month for the US in the war there"; private static final String DOCPATH = "src/test/resources/rankedTestText.txt"; private static final String XML_PATH = "desc/TextRankedEntityExtractionAEDescriptor.xml"; @SuppressWarnings("unchecked") @Test public void annotatorIntegrationTest() { try { Map parameterSettings = new HashMap(); parameterSettings.put("apikey", "04490000a72fe7ec5cb3497f14e77f338c86f2fe"); String documentText = FileUtils.file2String(new File(DOCPATH)); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAE(XML_PATH, parameterSettings), documentText); List entities = (List) TestUtils.getAllFSofType( TelevisionStation.type, resultingCAS); assertTrue(entities != null); assertTrue(entities.size() == 1); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } @SuppressWarnings("unchecked") @Test public void mockedAnnotatorTest() { try { String mockedAnnotatorName = MockedTextRankedEntityAnnotator.class.getName(); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAEWithMockedImplementation(XML_PATH, mockedAnnotatorName), DOC); List entities = (List) TestUtils.getAllFSofType(Country.type, resultingCAS); assertTrue(entities != null); assertTrue(entities.size() == 1); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } @Test public void mockedNotSyncAnnotatorTest() { try { String mockedAnnotatorName = MockedNotSyncTextRankedEntityAnnotator.class.getName(); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAEWithMockedImplementation(XML_PATH, mockedAnnotatorName), DOC); assertTrue(resultingCAS != null); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/SimpleTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/SimpleTest.jav0000644000175000017500000000472511625126470033304 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.junit.Test; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; /** * Test case for simple actions */ public class SimpleTest { /** * test reconfiguration of an existing AE */ @Test public void reconfigureTest() { try { AnalysisEngine ae = TestUtils.getAE("desc/TextCategorizationAEDescriptor.xml"); ae.reconfigure(); } catch (Exception e) { e.printStackTrace(); fail(e.getLocalizedMessage()); } } @Test public void testAnalysisEngineError() { try { Map parameterSettings = new HashMap(); parameterSettings.put("apikey", "asdasdas12131"); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAE("desc/TextCategorizationAEDescriptor.xml", parameterSettings), "the big brown fox jumped on the table"); fail("it should've failed with AnalysisEngineProcessException but it worked flawlessly"); } catch (ResourceInitializationException e) { fail("it should've failed with AnalysisEngineProcessException - "+e.getLocalizedMessage()); } catch (AnalysisEngineProcessException e) { assertEquals("org.apache.uima.alchemy.annotator.exception.AlchemyCallFailedException: ERROR - invalid-api-key", e.getCause().getLocalizedMessage()); } } } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/HtmlMicroformatsAnnotatorTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/HtmlMicroforma0000644000175000017500000000634011625126470033352 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.annotator.mocked.MockedMicroformatsAnnotator; import org.apache.uima.alchemy.ts.microformats.MicroformatFS; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.jcas.JCas; import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class HtmlMicroformatsAnnotatorTest { private static final String DOC = "" + "
Dan McCreary
Syntactica
" + "
Semantic Solutions Architect
" + "7400 Metro Boulevard, Suite 350
Minneapolis , MN" + "55439
(952) 921-9368
/div> "; private static final String XML_PATH = "desc/HtmlMicroformatsAEDescriptor.xml"; @SuppressWarnings("unchecked") @Test public void annotatorIntegrationTest() { try { Map parameterSettings = new HashMap(); parameterSettings.put("apikey","04490000a72fe7ec5cb3497f14e77f338c86f2fe"); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAE(XML_PATH,parameterSettings), DOC); List microformatsList = (List) TestUtils.getAllFSofType(MicroformatFS.type, resultingCAS); assertTrue(microformatsList.size()>0); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } @SuppressWarnings("unchecked") @Test public void mockedAnnotatorTest() { try { String mockedAnnotatorName = MockedMicroformatsAnnotator.class.getName(); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAEWithMockedImplementation(XML_PATH,mockedAnnotatorName), DOC); List microformatsList = (List) TestUtils.getAllFSofType(MicroformatFS.type, resultingCAS); assertTrue(microformatsList.size()>0); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/0000755000175000017500000000000011625126466031750 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedTextLanguageDetectionAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedT0000644000175000017500000000264511625126466033230 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator.mocked; import org.apache.uima.alchemy.annotator.TextLanguageDetectionAnnotator; import java.net.MalformedURLException; import java.net.URL; /** * Mocking class for TextLanguageDetectionAnnotator to test AlchemyAPI calls' results */ public class MockedTextLanguageDetectionAnnotator extends TextLanguageDetectionAnnotator { private static final String path = "/languageDetectionResult.xml"; @Override protected URL createServiceURI() throws MalformedURLException { return this.getClass().getResource(path); } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedTextKeywordExtractionAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedT0000644000175000017500000000264511625126466033230 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator.mocked; import org.apache.uima.alchemy.annotator.TextKeywordExtractionAnnotator; import java.net.MalformedURLException; import java.net.URL; /** * Mocking class for TextKeywordExtractionAnnotator to test AlchemyAPI calls' results */ public class MockedTextKeywordExtractionAnnotator extends TextKeywordExtractionAnnotator { private static final String path = "/keywordExtractionResult.xml"; @Override protected URL createServiceURI() throws MalformedURLException { return this.getClass().getResource(path); } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedTextCategorizationAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedT0000644000175000017500000000263011625126466033222 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator.mocked; import org.apache.uima.alchemy.annotator.TextCategorizationAnnotator; import java.net.MalformedURLException; import java.net.URL; /** * Mocking class for TextCategorizationAnnotator to test AlchemyAPI calls' results */ public class MockedTextCategorizationAnnotator extends TextCategorizationAnnotator { private static final String path = "/categorizationResult.xml"; @Override protected URL createServiceURI() throws MalformedURLException { return this.getClass().getResource(path); } }././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedTextRankedEntityAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedT0000644000175000017500000000270111625126466033221 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator.mocked; import org.apache.uima.alchemy.annotator.TextRankedNamedEntityExtractionAnnotator; import java.net.MalformedURLException; import java.net.URL; /** * Mocking class for TextRankedNamedEntityExtractionAnnotator to test AlchemyAPI calls' results */ public class MockedTextRankedEntityAnnotator extends TextRankedNamedEntityExtractionAnnotator { private static final String path = "/rankedEntityExtractionResult.xml"; @Override protected URL createServiceURI() throws MalformedURLException { return this.getClass().getResource(path); } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedTextConceptTaggingAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedT0000644000175000017500000000245111625126466033223 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator.mocked; import java.net.MalformedURLException; import java.net.URL; import org.apache.uima.alchemy.annotator.TextConceptTaggingAnnotator; public class MockedTextConceptTaggingAnnotator extends TextConceptTaggingAnnotator { private static final String path = "/conceptTaggingResult.xml"; @Override protected URL createServiceURI() throws MalformedURLException { return this.getClass().getResource(path); } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedNotSyncTextRankedEntityAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedN0000644000175000017500000000265211625126466033220 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator.mocked; import org.apache.uima.alchemy.annotator.TextRankedNamedEntityExtractionAnnotator; import java.net.MalformedURLException; import java.net.URL; /** * Mocking class for TextRankedNamedEntityExtractionAnnotator to test AlchemyAPI calls' results */ public class MockedNotSyncTextRankedEntityAnnotator extends TextRankedNamedEntityExtractionAnnotator { private static final String path = "/notSyncRankedEntityExtractionResult.xml"; @Override protected URL createServiceURI() throws MalformedURLException { return this.getClass().getResource(path); } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedMicroformatsAnnotator.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/mocked/MockedM0000644000175000017500000000266411625126466033222 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator.mocked; import org.apache.uima.alchemy.annotator.HtmlMicroformatsAnnotator; import java.net.MalformedURLException; import java.net.URL; /** * Mocking class for HtmlMicroformatsAnnotator and URLMicroformatsAnnotator to test AlchemyAPI calls' results */ public class MockedMicroformatsAnnotator extends HtmlMicroformatsAnnotator { private static final String path = "/microformatsResult.xml"; @Override protected URL createServiceURI() throws MalformedURLException { return this.getClass().getResource(path); } }././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextConceptTaggingAnnotatorTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextConceptTag0000644000175000017500000000604311625126470033323 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.uima.alchemy.annotator.mocked.MockedTextConceptTaggingAnnotator; import org.apache.uima.alchemy.ts.concept.ConceptFS; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.jcas.JCas; import org.apache.uima.util.FileUtils; import org.junit.Test; public class TextConceptTaggingAnnotatorTest { private static final String DOC = "Eight US soldiers die in attacks in south Afghanistan, making October the deadliest month for the US in the war there"; private static final String DOCPATH = "src/test/resources/rankedTestText.txt"; private static final String XML_PATH = "desc/TextConceptTaggingAEDescriptor.xml"; @SuppressWarnings("unchecked") @Test public void annotatorIntegrationTest() { try { Map parameterSettings = new HashMap(); parameterSettings.put("apikey", "04490000a72fe7ec5cb3497f14e77f338c86f2fe"); String documentText = FileUtils.file2String(new File(DOCPATH)); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAE(XML_PATH, parameterSettings), documentText); List concepts = (List) TestUtils.getAllFSofType(ConceptFS.type, resultingCAS); assertTrue(concepts != null); assertTrue(concepts.size() == 8); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } @SuppressWarnings("unchecked") @Test public void mockedAnnotatorTest() { try { String mockedAnnotatorName = MockedTextConceptTaggingAnnotator.class.getName(); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAEWithMockedImplementation(XML_PATH, mockedAnnotatorName), DOC); List concepts = (List) TestUtils.getAllFSofType(ConceptFS.type, resultingCAS); assertTrue(concepts != null); assertTrue(concepts.size() == 1); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } } ././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextCategorizationAnnotatorTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextCategoriza0000644000175000017500000000541211625126470033363 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.annotator.mocked.MockedTextCategorizationAnnotator; import org.apache.uima.alchemy.ts.categorization.Category; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.jcas.JCas; import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class TextCategorizationAnnotatorTest { private static final String XML_PATH = "desc/TextCategorizationAEDescriptor.xml"; private static final String DOC = "Eight US soldiers die in attacks in south Afghanistan, making October the deadliest month for the US in the war there"; @SuppressWarnings("unchecked") @Test public void annotatorIntegrationTest() { try { Map parameterSettings = new HashMap(); parameterSettings.put("apikey","04490000a72fe7ec5cb3497f14e77f338c86f2fe"); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAE(XML_PATH,parameterSettings), DOC); List categories = (List) TestUtils.getAllFSofType(Category.type, resultingCAS); assertTrue(categories!=null); assertTrue(categories.size()==1); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } @SuppressWarnings("unchecked") @Test public void mockedAnnotatorTest() { try { String mockedAnnotatorName = MockedTextCategorizationAnnotator.class.getName(); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAEWithMockedImplementation(XML_PATH,mockedAnnotatorName), DOC); List categories = (List) TestUtils.getAllFSofType(Category.type, resultingCAS); assertTrue(categories!=null); assertTrue(categories.size()==1); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextAnnotatedEntityExtractionAnnotatorTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextAnnotatedE0000644000175000017500000000433311625126470033316 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.ts.entity.AlchemyAnnotation; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.cas.text.AnnotationIndex; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.junit.Ignore; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** * * This test is skipped since the functionality is not supported anymore at the moment * */ @Ignore public class TextAnnotatedEntityExtractionAnnotatorTest { public void annotatorIntegrationTest() { String doc = "Eight US soldiers die in attacks in south Afghanistan [this quad parentesis], making October the deadliest month for the US in the war there"; String xmlPath = "desc/TextAnnotatedEntityExtractionAEDescriptor.xml"; try { Map parameterSettings = new HashMap(); parameterSettings.put("apikey","04490000a72fe7ec5cb3497f14e77f338c86f2fe"); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAE(xmlPath,parameterSettings), doc); AnnotationIndex annotations = resultingCAS.getAnnotationIndex(AlchemyAnnotation.type); assertTrue(annotations.size()>0); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextKeywordExtractionAnnotatorTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextKeywordExt0000644000175000017500000000631411625126470033402 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.annotator; import org.apache.uima.alchemy.annotator.mocked.MockedTextKeywordExtractionAnnotator; import org.apache.uima.alchemy.ts.keywords.KeywordFS; import org.apache.uima.alchemy.utils.TestUtils; import org.apache.uima.jcas.JCas; import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class TextKeywordExtractionAnnotatorTest { private static final String XML_PATH = "desc/TextKeywordExtractionAEDescriptor.xml"; private static final String DOC = "In an effort to centralize developer resources and help newcomers to open source, the Apache Software Foundation recently launched the Community Developer project. So far, the project includes plans for a mentoring program, a \"Newbie FAQ\", and resources for educators. To find out how the project started and where it's going, DZone conducted an exclusive interview with Bertrand Delacretaz, an Apache member who has been with the project since the beginning. He says some of the major goals for the project include mentoring for student developers and an entry point to the foundation at-large."; @SuppressWarnings("unchecked") @Test public void annotatorIntegrationTest() { try { Map parameterSettings = new HashMap(); parameterSettings.put("apikey","04490000a72fe7ec5cb3497f14e77f338c86f2fe"); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAE(XML_PATH,parameterSettings), DOC); List keywords = (List) TestUtils.getAllFSofType(KeywordFS.type, resultingCAS); assertTrue(keywords.size()>0); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } @SuppressWarnings("unchecked") @Test public void mockedAnnotatorTest() { try { String mockedAnnotatorName = MockedTextKeywordExtractionAnnotator.class.getName(); JCas resultingCAS = TestUtils.executeAE(TestUtils.getAEWithMockedImplementation(XML_PATH,mockedAnnotatorName), DOC); List keywords = (List) TestUtils.getAllFSofType(KeywordFS.type, resultingCAS); assertTrue(keywords!=null); assertTrue(keywords.size()==4); } catch (Exception e) { e.printStackTrace(); fail(e.toString()); } } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/digester/0000755000175000017500000000000011625126470030302 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/digester/KeywordXMLDigesterTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/digester/KeywordXMLDiges0000644000175000017500000000354411625126470033214 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester; import java.io.ByteArrayInputStream; import junit.framework.TestCase; import org.apache.uima.alchemy.digester.domain.KeywordResults; import org.apache.uima.alchemy.digester.keyword.XMLTextKeywordExctractionDigester; public class KeywordXMLDigesterTest extends TestCase { public void testParseAlchemyXML() { try { String xmlString = "OKenglishplutopippo"; XMLTextKeywordExctractionDigester digester = new XMLTextKeywordExctractionDigester(); KeywordResults results = (KeywordResults) digester.parseAlchemyXML(new ByteArrayInputStream( xmlString.getBytes())); assertTrue(results != null); assertTrue(results.getLanguage() != null); assertTrue(results.getStatus() != null); assertTrue(results.getKeywords().size() == 2); } catch (Exception e) { e.printStackTrace(); fail(); } } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/digester/RankedEntityXMLDigesterTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/digester/RankedEntityXML0000644000175000017500000000573611625126470033222 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester; import java.io.ByteArrayInputStream; import junit.framework.TestCase; import org.apache.uima.alchemy.digester.domain.EntitiesResults; import org.apache.uima.alchemy.digester.entity.ranked.XMLRankedEntityExtractionDigester; public class RankedEntityXMLDigesterTest extends TestCase { public void testParseAlchemyXML() { try { String xmlString = "REQUEST_STATUSDOCUMENT_LANGUAGE" + "REQUESTED_URLDOCUMENT_TEXTDETECTED_TYPE" + "DETECTED_RELEVANCEDETECTED_COUNTDETECTED_ENTITY" + "DISAMBIGUATED_ENTITYENTITY_SUBTYPEWEBSITE" + "LATITUDE LONGITUDELINKED_DATA_DBPEDIALINKED_DATA_YAGO" + "LINKED_DATA_OPENCYCLINKED_DATA_UMBELLINKED_DATA_FREEBASE" + "LINKED_DATA_FACTBOOKLINKED_DATA_CENSUSLINKED_DATA_GEONAMES" + "LINKED_DATA_MUSICBRAINZENTITY_QUOTATION" + ""; XMLRankedEntityExtractionDigester digester = new XMLRankedEntityExtractionDigester(); EntitiesResults results = (EntitiesResults) digester .parseAlchemyXML(new ByteArrayInputStream(xmlString.getBytes())); assertTrue(results != null); assertTrue(results.getLanguage() != null); assertTrue(results.getStatus() != null); assertTrue(results.getUrl() != null); assertTrue(results.getEntities() != null); assertTrue(results.getEntities().getEntities() != null); assertTrue(results.getEntities().getEntities().size() > 0); assertTrue(results.getEntities().getEntities().size() == 1); } catch (Exception e) { e.printStackTrace(); fail(); } } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/digester/RankedEntityJsonDigesterTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/digester/RankedEntityJso0000644000175000017500000000427411625126470033311 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester; import junit.framework.TestCase; import org.apache.uima.alchemy.digester.domain.EntitiesResults; import org.apache.uima.alchemy.digester.entity.ranked.JsonTextRankedEntityExtractionDigester; public class RankedEntityJsonDigesterTest extends TestCase { public void testParseAlchemyJson() { try { JsonTextRankedEntityExtractionDigester digester = new JsonTextRankedEntityExtractionDigester(); EntitiesResults results = (EntitiesResults) digester.parseAlchemyXML(this.getClass() .getResourceAsStream("/jsonTextRankedEntityResult.js")); assertTrue(results != null); assertTrue(results.getLanguage() != null); assertTrue(results.getStatus() != null); assertTrue(results.getUrl() != null); assertTrue(results.getEntities() != null); assertTrue(results.getEntities().getEntities() != null); assertTrue(results.getEntities().getEntities().size() > 0); assertTrue(results.getEntities().getEntities().size() == 2); assertTrue(results.getEntities().getEntities().get(1).getDisambiguated() != null); assertTrue(results.getEntities().getEntities().get(1).getDisambiguated().getDbpedia().equals( "http://dbpedia.org/resource/United_States")); } catch (Exception e) { e.printStackTrace(); fail(); } } } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/digester/CategorizationJsonDigesterTest.javauima-addons-2.3.1/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/digester/CategorizationJ0000644000175000017500000000277311625126470033332 0ustar drazzibdrazzib/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.alchemy.digester; import junit.framework.TestCase; import org.apache.uima.alchemy.digester.categorization.JsonTextCategorizationDigester; import org.apache.uima.alchemy.digester.domain.Results; public class CategorizationJsonDigesterTest extends TestCase { public void testParseAlchemyXML() { try { JsonTextCategorizationDigester digester = new JsonTextCategorizationDigester(); Results results = digester.parseAlchemyXML(this.getClass().getResourceAsStream( "/jsonCategorizationResult.js")); assertTrue(results != null); } catch (Exception e) { e.printStackTrace(); fail(); } } } uima-addons-2.3.1/AlchemyAPIAnnotator/src/docbook/0000755000175000017500000000000011625126470021627 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/src/docbook/AlchemyAPIAnnotatorUserGuide.xml0000644000175000017500000004752311625126470030003 0ustar drazzibdrazzib Apache UIMA AlchemyAPI Annotator Documentation Introduction The AlchemyAPI Annotator is a set of annotators that wrap the AlchemyAPI ( http://www.alchemyapi.com) services provided by Orchestr8 ( http://www.orchestr8.net ). To use AlchemyAPI Annotator, choose which service you want to put inside your UIMA pipeline, then find the corresponding AE descriptor, put your API Key as value of the 'apikey' parameter, eventually modify the parameters' defaults and you're done. Wrapped services This chapter describes the AlchemyAPI services wrapped inside AlchemyAPI Annotator.
Categorization AlchemyAPI's Categorization service can be used to categorize text, HTML, or web-based content, assigning the most likely topic category (news, sports, business, etc.)
Category Types
Arts and Entertainment Arts (Drawing, Sculpting, etc.) and Entertainment (Movies, Music, etc.) News and Discussion.
Business Business and Finance News, SEC filings, etc.
Computers and Internet Information Technology (Computers, Internet, Mobile Phones, etc.) News and Discussion.
Culture and Politics Political News and Discussion, and Culture / Society-related issues.
Gaming Gaming (Computer Games, Video Games, Board Games) News and Discussion.
Health Health (Medications, Treatments, Diseases, etc.) News.
Law and Crime Legal and Crime-related News and Discussion.
Religion Religious News and Discussion.
Recreation Recreational Activities (Boating, etc.)
Science and Technology Science (Physics, Astronomy, etc.) News and Discussion.
Sports Sports News and Commentary.
Weather Weather News and Discussion.
Supported languages are: English, French, German, Italian, Portuguese, Russian, Spanish, Swedish .
The information extracted on the category of (for example) the passed text document is stored inside a FeatureStructure of type org.apache.uima.alchemy.ts.categorization.Category, with text and score.
Keyword Extraction AlchemyAPI's Keyword Extraction service can be used to extract topic keywords from HTML, text, or web-based contents. Supported languages are: English, French, German, Italian, Portuguese, Russian, Spanish, Swedish Each keyword is put inside a org.apache.uima.alchemy.ts.keywords.KeywordFS Feature Structure with the extracted keyword as text feature.
Language Detection AlchemyAPI's Language Detection service can be used to extract language from a text, HTML, or web-based content. AlchemyAPI identifies more of 95 languages. Supported languages: Afrikaans ISO-639-3: afr Albanian ISO-639-3: sqi Amharic ISO-639-3: amh Amuzgo Guerrero ISO-639-3: amu Arabic ISO-639-3: ara Armenian ISO-639-3: hye Azerbaijani ISO-639-3: aze Basque ISO-639-3: eus Breton ISO-639-3: bre Bulgarian ISO-639-3: bul Catalan ISO-639-3: cat Cebuano ISO-639-3: ceb Central K'iche' ISO-639-3: qut Central Mam ISO-639-3: mvc Chamorro ISO-639-3: cha Cherokee ISO-639-3: chr Chinese ISO-639-3: zho Comaltepec Chinantec ISO-639-3: cco Comaltepec Chinantec ISO-639-3: cco Croatian ISO-639-3: hrv Cubulco Achi' ISO-639-3: acc Czech ISO-639-3: ces Dakota ISO-639-3: dak Danish ISO-639-3: dan Dutch ISO-639-3: nld English ISO-639-3: eng Esperanto ISO-639-3: epo Estonian ISO-639-3: est Faroese ISO-639-3: fao Fijian ISO-639-3: fij Finnish ISO-639-3: fin French ISO-639-3: fra Fulfulde Adamawa ISO-639-3: fub Georgian ISO-639-3: kat German ISO-639-3: deu Greek ISO-639-3: ell Guerrero Nahuatl ISO-639-3: ngu Gujarti ISO-639-3: guj Haitian Creole ISO-639-3: hat Hausa ISO-639-3: hau Hawaiian ISO-639-3: haw Hebrew ISO-639-3: heb Hiligaynon ISO-639-3: hil Hindi ISO-639-3: hin Hungarian ISO-639-3: hun Icelandic ISO-639-3: isl Indonesian ISO-639-3: ind Irish ISO-639-3: gle Italian ISO-639-3: ita Jacalteco ISO-639-3: jac Japanese ISO-639-3: jpn Kabyle ISO-639-3: kab Kaqchikel ISO-639-3: cak Kirghiz ISO-639-3: kir Kisongye ISO-639-3: sop Korean ISO-639-3: kor Latin ISO-639-3: lat Latvian ISO-639-3: lav Lithuanian ISO-639-3: lit Low Saxon ISO-639-3: nds Macedonian ISO-639-3: mkd Malay ISO-639-3: msa Maltese ISO-639-3: mlt Maori ISO-639-3: mri Micmac ISO-639-3: mic Mòoré ISO-639-3: mos Ndebele ISO-639-3: nde Nepali ISO-639-3: nep Norwegian ISO-639-3: nor Ojibwa ISO-639-3: oji Pashto ISO-639-3: pus Persian ISO-639-3: fas Polish ISO-639-3: pol Portuguese ISO-639-3: por Q'eqchi' ISO-639-3: kek Romanian ISO-639-3: ron Romani ISO-639-3: rom Russian ISO-639-3: rus Serbian ISO-639-3: srp Shona ISO-639-3: sna Shuar ISO-639-3: jiv Slovak ISO-639-3: slk Slovenian ISO-639-3: slv Spanish ISO-639-3: spa Swahili ISO-639-3: swa Swedish ISO-639-3: swe Tagalog ISO-639-3: tgl Thai ISO-639-3: tha Todos Santos Cuchumatan Mám ISO-639-3: mvj Turkish ISO-639-3: tur Ukrainian ISO-639-3: ukr Urdu ISO-639-3: urd Uspanteco ISO-639-3: usp Vietnamese ISO-639-3: vie Welsh ISO-639-3: cym Wolof ISO-639-3: wol Xhosa ISO-639-3: xho Zarma ISO-639-3: ssa
Ranked Entities Extraction AlchemyAPI's Ranked Entities Extraction service can be exploited for identifying people, companies, organizations, cities, geographic features, and other typed entities within your HTML, text, or web-based content. To see the complete list of supported entity types see here: http://www.alchemyapi.com/api/entity/types.html This service also expose 'entity disambiguation' mechanism to resolve detected companies, locations, and people to a unique "instance". Such thing is stored inside the 'disambiguation' feature of all the FeatureStructures inside the package org.apache.uima.alchemy.ts.entity, except for AlchemyAnnotation. This service also provides comprehensive support for RDF and Linked Data. This is done filling some features like 'dbpedia', 'geonames' and other linked data nodes' information. In the end also advanced quotations extraction is integrated into all named entity extraction API calls, enabling the identification of utterances ("quotations") within unstructured text, this will be stored inside 'quotations' feature.
Microformats Extraction This AlchemyAPI's service handles Microformats data standards and is capable of extracting hCard, adr, geo, and rel-* formatted content from web pages. The information is stored inside a Feature Structure called MicroformatFS under org.apache.uima.alchemy.ts.microformats package.
Annotated Entities Extraction This service is somehow an enhancement of the Ranked Entities Extraction service, with annotation of piece of text relating to extracted entities. Annotator and descriptor still live but the service underneath is not available for free API keys.
Configuring parameters This chapter describes how to configure AlchemyAPI Annotator analysis engines' parameters.
Common Parameters apikey : this parameter contains the (free or not) API key string needed to be able to call AlchemyAPI services. output : this parameter contains one of xml,json,rdf,rel-tag respectively to specify the desired output in XML, JSON, RDF or MicroFormat formats. Beware that each AE wrapping an AlchemyAPI service has a set of supported output formats that is a subset of the previous list.
Service Specific Parameters Entity Extraction Text : see here Text Categorization : see here Text Keyword/Term Extraction : see here HTML Micrformats Extraction : see here URL Micrformats Extraction : see here
uima-addons-2.3.1/AlchemyAPIAnnotator/src/docbook/images/0000755000175000017500000000000011625126470023074 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/desc/0000755000175000017500000000000011625126502020332 5ustar drazzibdrazzibuima-addons-2.3.1/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml0000644000175000017500000000720711625126502027646 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.alchemy.annotator.TextSentimentAnalysisAnnotator TextSentimentAnalysisAEDescriptor 1.0 apikey String false true outputMode String false true url String false false outputMode xml apikey org.apache.uima.alchemy.ts.sentiment.SentimentFS uima.tcas.Annotation sentimentType uima.cas.String score uima.cas.String org.apache.uima.alchemy.ts.sentiment.SentimentFS true true false uima-addons-2.3.1/AlchemyAPIAnnotator/desc/TextKeywordExtractionAEDescriptor.xml0000644000175000017500000001041011625126502027647 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.alchemy.annotator.TextKeywordExtractionAnnotator TextKeywordExtractionAEDescriptor 1.0 apikey String false true outputMode String false true baseUrl String false false url String false false maxRetrieve Integer false false showSourceText Integer false false outputMode xml apikey maxRetrieve 10 showSourceText 0 org.apache.uima.alchemy.ts.keywords.KeywordFS uima.cas.TOP text uima.cas.String true true false uima-addons-2.3.1/AlchemyAPIAnnotator/desc/URLMicroformatsAEDescriptor.xml0000644000175000017500000000705211625126502026355 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.alchemy.annotator.URLMicroformatsAnnotator URLMicroformatsAEDescriptor 1.0 apikey String false true outputMode String false true url String false false outputMode xml apikey org.apache.uima.alchemy.ts.microformats.MicroformatFS uima.cas.TOP fieldName uima.cas.String fieldData uima.cas.String true true false uima-addons-2.3.1/AlchemyAPIAnnotator/desc/TextAnnotatedEntityExtractionAEDescriptor.xml0000644000175000017500000001175311625126502031350 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.alchemy.annotator.TextAnnotatedNamedEntityExtractionAnnotator TextAnnotatedEntityExtractionAEDescriptor 1.0 apikey String false true outputMode String false true disambiguate Integer false true showSourceText Integer false true url String false false quotations String false false coreference String false false template String false false outputMode xml disambiguate 1 showSourceText 1 apikey quotations 0 coreference 1 org.apache.uima.alchemy.ts.entity.AlchemyAnnotation uima.tcas.Annotation alchemyType uima.cas.String true true false uima-addons-2.3.1/AlchemyAPIAnnotator/desc/TextCategorizationAEDescriptor.xml0000644000175000017500000000705011625126502027152 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.alchemy.annotator.TextCategorizationAnnotator TextCategorizationAEDescriptor 1.0 apikey String false true outputMode String false true baseUrl String false false outputMode xml apikey org.apache.uima.alchemy.ts.categorization.Category uima.cas.TOP score uima.cas.String text uima.cas.String true true false uima-addons-2.3.1/AlchemyAPIAnnotator/desc/TextConceptTaggingAEDescriptor.xml0000644000175000017500000001562211625126502027070 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.alchemy.annotator.TextConceptTaggingAnnotator TextConceptTaggingAEDescriptor 1.0 apikey String false true outputMode String false true linkedData String false false showSourceText Integer false true maxRetrieve String false false url String false false apikey outputMode xml linkedData 1 showSourceText 0 maxRetrieve 8 org.apache.uima.alchemy.ts.concept.ConceptFS a concept tag uima.cas.TOP text uima.cas.String relevance uima.cas.String website uima.cas.String geo uima.cas.String dbpedia uima.cas.String yago uima.cas.String opencyc uima.cas.String freebase uima.cas.String ciaFactbook uima.cas.String census uima.cas.String geonames uima.cas.String musicBrainz uima.cas.String crunchbase uima.cas.String semanticCrunchbase uima.cas.String true true false uima-addons-2.3.1/AlchemyAPIAnnotator/desc/TextRankedEntityExtractionAEDescriptor.xml0000644000175000017500000004202011625126502030626 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.alchemy.annotator.TextRankedNamedEntityExtractionAnnotator TextRankedEntityExtractionAEDescriptor 1.0 apikey String false true outputMode String false true disambiguate Integer false true linkedData String false false showSourceText Integer false true baseUrl String false false url String false false coreference String false false quotations String false false sentiment String false false apikey outputMode xml disambiguate 1 linkedData 1 coreference 1 showSourceText 0 quotations 1 sentiment 1 org.apache.uima.alchemy.ts.entity.Anniversary org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Automobile org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.City org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Company org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Continent org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Country org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.EntertainmentAward org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Facility org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.FieldTerminology org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.FinancialMarketIndex org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.GeographicFeature org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.HealthCondition org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Holiday org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Movie org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.MusicGroup org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.NaturalDisaster org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Organization org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Person org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.PrintMedia org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.RadioProgram org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.RadioStation org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Region org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Sport org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.StateOrCounty org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Technology org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.TelevisionShow org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.TelevisionStation org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.OperatingSystem org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.SportingEvent org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.Drug org.apache.uima.alchemy.ts.entity.BaseEntity org.apache.uima.alchemy.ts.entity.BaseEntity uima.cas.TOP text uima.cas.String count uima.cas.String relevance uima.cas.String disambiguation uima.cas.String subType uima.cas.String website uima.cas.String geo uima.cas.String dbpedia uima.cas.String yago uima.cas.String opencyc uima.cas.String umbel uima.cas.String freebase uima.cas.String ciaFactbook uima.cas.String census uima.cas.String geonames uima.cas.String musicBrainz uima.cas.String quotations uima.cas.StringArray true occurrences A list of annotations annotating this entity uima.cas.FSList uima.tcas.Annotation sentiment org.apache.uima.alchemy.ts.sentiment.SentimentFS org.apache.uima.alchemy.ts.sentiment.SentimentFS uima.tcas.Annotation sentimentType uima.cas.String score uima.cas.String true true false uima-addons-2.3.1/AlchemyAPIAnnotator/desc/TextLanguageDetectionAEDescriptor.xml0000644000175000017500000001102111625126502027543 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.alchemy.annotator.TextLanguageDetectionAnnotator TextLanguageDetectionAEDescriptor 1.0 apikey String false true outputMode String false true url String false false outputMode xml apikey org.apache.uima.alchemy.ts.language.LanguageFS uima.cas.TOP language uima.cas.String iso6391 uima.cas.String iso6392 uima.cas.String iso6393 uima.cas.String ethnologue uima.cas.String nativeSpeakers uima.cas.String wikipedia uima.cas.String true true false uima-addons-2.3.1/AlchemyAPIAnnotator/desc/baseAlchemyTypeSystemDescriptor.xml0000644000175000017500000000300511625126502027375 0ustar drazzibdrazzib baseAlchemyTypeSystemDescriptor 1.0 org.apache.uima.alchemy.ts.entity.AlchemyAnnotation uima.tcas.Annotation alchemyType alchemyAPI type uima.cas.String uima-addons-2.3.1/AlchemyAPIAnnotator/desc/HtmlMicroformatsAEDescriptor.xml0000644000175000017500000000707111625126502026620 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.alchemy.annotator.HtmlMicroformatsAnnotator HtmlMicroformatsAEDescriptorAEDescriptor 1.0 apikey String false true outputMode String false true html String false false outputMode xml apikey org.apache.uima.alchemy.ts.microformats.MicroformatFS uima.cas.TOP fieldName uima.cas.String fieldData uima.cas.String true true false uima-addons-2.3.1/WhitespaceTokenizer/0000755000175000017500000000000011625127670017610 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/pom.xml0000644000175000017500000001100711625126452021121 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent WhitespaceTokenizer jar 2.3.1 UIMA Annotator: ${project.artifactId} A simple white-space annotator to identify Tokens in text using whitespace as the delimiters ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/${project.artifactId}.xml org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.uima uimaj-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test uima-an-wst org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/test/resources/tabs*.txt src/test/resources/testdoc*.txt uima-addons-2.3.1/WhitespaceTokenizer/LICENSE.txt0000644000175000017500000002644611625126452021444 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/WhitespaceTokenizer/marker-file-identifying-single-project0000644000175000017500000000000011625126452027146 0ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/marker-file-identifying-standard-pear0000644000175000017500000000000011625126452026746 0ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/marker-file-identifying-osgi-project0000644000175000017500000000000011625126452026626 0ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/NOTICE.txt0000644000175000017500000000033311625126452021326 0ustar drazzibdrazzibApache UIMA WhitespaceTokenizer annotator software component Copyright 2006-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). uima-addons-2.3.1/WhitespaceTokenizer/src/0000755000175000017500000000000011625126452020374 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/0000755000175000017500000000000011625126452021320 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/resources/0000755000175000017500000000000011625126452023332 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/resources/org/0000755000175000017500000000000011625126452024121 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/resources/org/apache/0000755000175000017500000000000011625126452025342 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/resources/org/apache/uima/0000755000175000017500000000000011625126452026275 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/resources/org/apache/uima/annotator/0000755000175000017500000000000011625126452030302 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/WhitespaceTokenizer/src/main/resources/org/apache/uima/annotator/whitespaceTokenizerMessages.propertiesuima-addons-2.3.1/WhitespaceTokenizer/src/main/resources/org/apache/uima/annotator/whitespaceTokeniz0000644000175000017500000000251011625126452033723 0ustar drazzibdrazzib# *************************************************************** # * Licensed to the Apache Software Foundation (ASF) under one # * or more contributor license agreements. See the NOTICE file # * distributed with this work for additional information # * regarding copyright ownership. The ASF licenses this file # * to you under the Apache License, Version 2.0 (the # * "License"); you may not use this file except in compliance # * with the License. You may obtain a copy of the License at # * # * http://www.apache.org/licenses/LICENSE-2.0 # * # * Unless required by applicable law or agreed to in writing, # * software distributed under the License is distributed on an # * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # * KIND, either express or implied. See the License for the # * specific language governing permissions and limitations # * under the License. # *************************************************************** whitespace_tokenizer_info_start_processing = "Whitespace tokenizer starts processing" whitespace_tokenizer_info_stop_processing = "Whitespace tokenizer finished processing" whitespace_tokenizer_info_initialized = "Whitespace tokenizer successfully initialized" whitespace_tokenizer_info_typesystem_initialized = "Whitespace tokenizer typesystem initialized" uima-addons-2.3.1/WhitespaceTokenizer/src/main/java/0000755000175000017500000000000011625126452022241 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/java/org/0000755000175000017500000000000011625126452023030 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/java/org/apache/0000755000175000017500000000000011625126452024251 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/java/org/apache/uima/0000755000175000017500000000000011625126452025204 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/main/java/org/apache/uima/annotator/0000755000175000017500000000000011625126452027211 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/WhitespaceTokenizer/src/main/java/org/apache/uima/annotator/WhitespaceTokenizer.javauima-addons-2.3.1/WhitespaceTokenizer/src/main/java/org/apache/uima/annotator/WhitespaceTokenizer.ja0000644000175000017500000002735411625126452033527 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; public class WhitespaceTokenizer extends CasAnnotator_ImplBase { private static final int CH_SPECIAL = 0; private static final int CH_NUMBER = 1; private static final int CH_LETTER = 2; private static final int CH_WHITESPACE = 4; private static final int CH_PUNCTUATION = 5; private static final int CH_NEWLINE = 6; private static final int UNDEFINED = -1; private static final int INVALID_CHAR = 0; public static final String TOKEN_ANNOTATION_NAME = "org.apache.uima.TokenAnnotation"; public static final String SENTENCE_ANNOTATION_NAME = "org.apache.uima.SentenceAnnotation"; public static final String TOKEN_TYPE_FEATURE_NAME = "tokenType"; private Type tokenType; private Type sentenceType; private CAS cas = null; private Logger logger; private String[] sofaNames; private static List punctuations = Arrays.asList(new String[] { ".", "!", "?" }); public static final String MESSAGE_BUNDLE = "org.apache.uima.annotator.whitespaceTokenizerMessages"; /* (non-Javadoc) * @see org.apache.uima.analysis_component.CasAnnotator_ImplBase#process(org.apache.uima.cas.CAS) */ public void process(CAS aCas) throws AnalysisEngineProcessException { this.logger.logrb(Level.INFO, "WhitespaceTokenizer", "process", MESSAGE_BUNDLE, "whitespace_tokenizer_info_start_processing"); ArrayList casList = new ArrayList(); // check if sofa names are available if (this.sofaNames != null && this.sofaNames.length > 0) { // get sofa names for (int i = 0; i < this.sofaNames.length; i++) { Iterator it = aCas.getViewIterator(this.sofaNames[i]); while (it.hasNext()) { // add sofas to the cas List to process casList.add((CAS) it.next()); } } } else { // use default sofa for the processing casList.add(aCas); } for (int x = 0; x < casList.size(); x++) { this.cas = casList.get(x); // get text content from the CAS char[] textContent = this.cas.getDocumentText().toCharArray(); int tokenStart = UNDEFINED; int currentCharPos = 0; int sentenceStart = 0; int nextCharType = UNDEFINED; char nextChar = INVALID_CHAR; while (currentCharPos < textContent.length) { char currentChar = textContent[currentCharPos]; int currentCharType = getCharacterType(currentChar); // get character class for current and next character if ((currentCharPos + 1) < textContent.length) { nextChar = textContent[currentCharPos + 1]; nextCharType = getCharacterType(nextChar); } else { nextCharType = UNDEFINED; nextChar = INVALID_CHAR; } // check if current character is a letter or number if (currentCharType == CH_LETTER || currentCharType == CH_NUMBER) { // check if it is the first letter of a token if (tokenStart == UNDEFINED) { // start new token here tokenStart = currentCharPos; } } // check if current character is a whitespace character else if (currentCharType == CH_WHITESPACE) { // terminate current token if (tokenStart != UNDEFINED) { // end of current word createAnnotation(this.tokenType, tokenStart, currentCharPos); tokenStart = UNDEFINED; } } // check if current character is a special character else if (currentCharType == CH_SPECIAL) { // terminate current token if (tokenStart != UNDEFINED) { // end of current word createAnnotation(this.tokenType, tokenStart, currentCharPos); tokenStart = UNDEFINED; } // create token for special character createAnnotation(this.tokenType, currentCharPos, currentCharPos + 1); } // check if current character is new line character else if (currentCharType == CH_NEWLINE) { // terminate current token if (tokenStart != UNDEFINED) { // end of current word createAnnotation(this.tokenType, tokenStart, currentCharPos); tokenStart = UNDEFINED; } } // check if current character is new punctuation character else if (currentCharType == CH_PUNCTUATION) { // terminates the current token if (tokenStart != UNDEFINED) { createAnnotation(this.tokenType, tokenStart, currentCharPos); tokenStart = UNDEFINED; } // check next token type so see if we have a sentence end if (((nextCharType == CH_WHITESPACE) || (nextCharType == CH_NEWLINE)) && (punctuations.contains(new String( new char[] { currentChar })))) { // terminate sentence createAnnotation(this.sentenceType, sentenceStart, currentCharPos + 1); sentenceStart = currentCharPos + 1; } // create token for punctuation character createAnnotation(this.tokenType, currentCharPos, currentCharPos + 1); } // go to the next token currentCharPos++; } // end of character loop // we are at the end of the text terminate open token annotations if (tokenStart != UNDEFINED) { // end of current word createAnnotation(this.tokenType, tokenStart, currentCharPos); tokenStart = UNDEFINED; } // we are at the end of the text terminate open sentence annotations if (sentenceStart != UNDEFINED) { // end of current word createAnnotation(this.sentenceType, sentenceStart, currentCharPos); sentenceStart = UNDEFINED; } } this.logger.logrb(Level.INFO, "WhitespaceTokenizer", "process", MESSAGE_BUNDLE, "whitespace_tokenizer_info_stop_processing"); } /** * create an annotation of the given type in the CAS using startPos and * endPos. * * @param annotationType * annotation type * @param startPos * annotation start position * @param endPos * annotation end position */ private void createAnnotation(Type annotationType, int startPos, int endPos) { AnnotationFS annot = this.cas.createAnnotation(annotationType, startPos, endPos); this.cas.addFsToIndexes(annot); } /** * returns the character type of the given character. Possible character * classes are: CH_LETTER for all letters CH_NUMBER for all numbers * CH_WHITESPACE for all whitespace characters CH_PUNCTUATUATION for all * punctuation characters CH_NEWLINE for all new line characters CH_SPECIAL * for all other characters that are not in any of the groups above * * @param character * aCharacter * * @return returns the character type of the given character */ private static int getCharacterType(char character) { switch (Character.getType(character)) { // letter characters case Character.UPPERCASE_LETTER: case Character.LOWERCASE_LETTER: case Character.TITLECASE_LETTER: case Character.MODIFIER_LETTER: case Character.OTHER_LETTER: case Character.NON_SPACING_MARK: case Character.ENCLOSING_MARK: case Character.COMBINING_SPACING_MARK: case Character.PRIVATE_USE: case Character.SURROGATE: case Character.MODIFIER_SYMBOL: return CH_LETTER; // number characters case Character.DECIMAL_DIGIT_NUMBER: case Character.LETTER_NUMBER: case Character.OTHER_NUMBER: return CH_NUMBER; // whitespace characters case Character.SPACE_SEPARATOR: // case Character.CONNECTOR_PUNCTUATION: return CH_WHITESPACE; case Character.DASH_PUNCTUATION: case Character.START_PUNCTUATION: case Character.END_PUNCTUATION: case Character.OTHER_PUNCTUATION: return CH_PUNCTUATION; case Character.LINE_SEPARATOR: case Character.PARAGRAPH_SEPARATOR: return CH_NEWLINE; case Character.CONTROL: if (character == '\n' || character == '\r') { return CH_NEWLINE; } else { // tab is in the char category CONTROL if (Character.isWhitespace(character)) { return CH_WHITESPACE; } return CH_SPECIAL; } default: // the isWhitespace test is slightly more expensive than the above switch, // so it is placed here to avoid performance impact. // Also, calling code has explicit tests for CH_NEWLINE, and this test should not swallow those if (Character.isWhitespace(character)) { return CH_WHITESPACE; } return CH_SPECIAL; } } @Override public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { super.typeSystemInit(typeSystem); // initialize cas token type this.tokenType = typeSystem.getType(TOKEN_ANNOTATION_NAME); this.sentenceType = typeSystem.getType(SENTENCE_ANNOTATION_NAME); this.logger.logrb(Level.INFO, "WhitespaceTokenizer", "typeSystemInit", MESSAGE_BUNDLE, "whitespace_tokenizer_info_typesystem_initialized"); } @Override public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); this.sofaNames = (String[]) getContext().getConfigParameterValue( "SofaNames"); this.logger = context.getLogger(); this.logger.logrb(Level.INFO, "WhitespaceTokenizer", "initialize", MESSAGE_BUNDLE, "whitespace_tokenizer_info_initialized"); } } uima-addons-2.3.1/WhitespaceTokenizer/src/test/0000755000175000017500000000000011625126452021353 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/test/resources/0000755000175000017500000000000011625126452023365 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/test/resources/perfTestFiles/0000755000175000017500000000000011625126452026144 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/test/resources/perfTestFiles/en.txt0000644000175000017500000002641611625126452027320 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.uima-addons-2.3.1/WhitespaceTokenizer/src/test/resources/testdocRef.txt0000644000175000017500000004647011625126452026243 0ustar drazzibdrazzibSentenceAnnotation(0,139): "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. TokenAnnotation(0,1): " TokenAnnotation(1,8): License TokenAnnotation(8,9): " TokenAnnotation(10,15): shall TokenAnnotation(16,20): mean TokenAnnotation(21,24): the TokenAnnotation(25,30): terms TokenAnnotation(31,34): and TokenAnnotation(35,45): conditions TokenAnnotation(46,49): for TokenAnnotation(50,53): use TokenAnnotation(53,54): , TokenAnnotation(55,67): reproduction TokenAnnotation(67,68): , TokenAnnotation(70,73): and TokenAnnotation(74,86): distribution TokenAnnotation(87,89): as TokenAnnotation(90,97): defined TokenAnnotation(98,100): by TokenAnnotation(101,109): Sections TokenAnnotation(110,111): 1 TokenAnnotation(112,119): through TokenAnnotation(120,121): 9 TokenAnnotation(122,124): of TokenAnnotation(125,129): this TokenAnnotation(130,138): document TokenAnnotation(138,139): . SentenceAnnotation(139,257): "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. TokenAnnotation(141,142): " TokenAnnotation(142,150): Licensor TokenAnnotation(150,151): " TokenAnnotation(152,157): shall TokenAnnotation(158,162): mean TokenAnnotation(163,166): the TokenAnnotation(167,176): copyright TokenAnnotation(177,182): owner TokenAnnotation(183,185): or TokenAnnotation(186,192): entity TokenAnnotation(193,203): authorized TokenAnnotation(204,206): by TokenAnnotation(208,211): the TokenAnnotation(212,221): copyright TokenAnnotation(222,227): owner TokenAnnotation(228,232): that TokenAnnotation(233,235): is TokenAnnotation(236,244): granting TokenAnnotation(245,248): the TokenAnnotation(249,256): License TokenAnnotation(256,257): . SentenceAnnotation(257,419): "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. TokenAnnotation(259,260): " TokenAnnotation(260,265): Legal TokenAnnotation(266,272): Entity TokenAnnotation(272,273): " TokenAnnotation(274,279): shall TokenAnnotation(280,284): mean TokenAnnotation(285,288): the TokenAnnotation(289,294): union TokenAnnotation(295,297): of TokenAnnotation(298,301): the TokenAnnotation(302,308): acting TokenAnnotation(309,315): entity TokenAnnotation(316,319): and TokenAnnotation(320,323): all TokenAnnotation(325,330): other TokenAnnotation(331,339): entities TokenAnnotation(340,344): that TokenAnnotation(345,352): control TokenAnnotation(352,353): , TokenAnnotation(354,357): are TokenAnnotation(358,368): controlled TokenAnnotation(369,371): by TokenAnnotation(371,372): , TokenAnnotation(373,375): or TokenAnnotation(376,379): are TokenAnnotation(380,385): under TokenAnnotation(386,392): common TokenAnnotation(394,401): control TokenAnnotation(402,406): with TokenAnnotation(407,411): that TokenAnnotation(412,418): entity TokenAnnotation(418,419): . SentenceAnnotation(419,720): For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. TokenAnnotation(420,423): For TokenAnnotation(424,427): the TokenAnnotation(428,436): purposes TokenAnnotation(437,439): of TokenAnnotation(440,444): this TokenAnnotation(445,455): definition TokenAnnotation(455,456): , TokenAnnotation(458,459): " TokenAnnotation(459,466): control TokenAnnotation(466,467): " TokenAnnotation(468,473): means TokenAnnotation(474,475): ( TokenAnnotation(475,476): i TokenAnnotation(476,477): ) TokenAnnotation(478,481): the TokenAnnotation(482,487): power TokenAnnotation(487,488): , TokenAnnotation(489,495): direct TokenAnnotation(496,498): or TokenAnnotation(499,507): indirect TokenAnnotation(507,508): , TokenAnnotation(509,511): to TokenAnnotation(512,517): cause TokenAnnotation(518,521): the TokenAnnotation(523,532): direction TokenAnnotation(533,535): or TokenAnnotation(536,546): management TokenAnnotation(547,549): of TokenAnnotation(550,554): such TokenAnnotation(555,561): entity TokenAnnotation(561,562): , TokenAnnotation(563,570): whether TokenAnnotation(571,573): by TokenAnnotation(574,582): contract TokenAnnotation(583,585): or TokenAnnotation(587,596): otherwise TokenAnnotation(596,597): , TokenAnnotation(598,600): or TokenAnnotation(601,602): ( TokenAnnotation(602,604): ii TokenAnnotation(604,605): ) TokenAnnotation(606,615): ownership TokenAnnotation(616,618): of TokenAnnotation(619,624): fifty TokenAnnotation(625,632): percent TokenAnnotation(633,634): ( TokenAnnotation(634,636): 50 TokenAnnotation(636,637): % TokenAnnotation(637,638): ) TokenAnnotation(639,641): or TokenAnnotation(642,646): more TokenAnnotation(647,649): of TokenAnnotation(650,653): the TokenAnnotation(655,666): outstanding TokenAnnotation(667,673): shares TokenAnnotation(673,674): , TokenAnnotation(675,677): or TokenAnnotation(678,679): ( TokenAnnotation(679,682): iii TokenAnnotation(682,683): ) TokenAnnotation(684,694): beneficial TokenAnnotation(695,704): ownership TokenAnnotation(705,707): of TokenAnnotation(708,712): such TokenAnnotation(713,719): entity TokenAnnotation(719,720): . SentenceAnnotation(720,1114): email addresses: foo@bar.de foo.bar@foo.de foo-bar@foo.bar.com foo_bar@foo-bar_de.com foo@bar URLs and URIs www.incubator.apache.org/uima/index.html http://192.168.200.1:80/login.jsp http://myserver.location.com:8080/MyApplication \\apache.people.com\SharedDocs \\192.168.200.1\shared file:/foo/bar d:\Folder\myfile.txt file:///d:/folder/file-name.html c:\Folder\subFolder. TokenAnnotation(724,729): email TokenAnnotation(730,739): addresses TokenAnnotation(739,740): : TokenAnnotation(742,745): foo TokenAnnotation(745,746): @ TokenAnnotation(746,749): bar TokenAnnotation(749,750): . TokenAnnotation(750,752): de TokenAnnotation(754,757): foo TokenAnnotation(757,758): . TokenAnnotation(758,761): bar TokenAnnotation(761,762): @ TokenAnnotation(762,765): foo TokenAnnotation(765,766): . TokenAnnotation(766,768): de TokenAnnotation(770,773): foo TokenAnnotation(773,774): - TokenAnnotation(774,777): bar TokenAnnotation(777,778): @ TokenAnnotation(778,781): foo TokenAnnotation(781,782): . TokenAnnotation(782,785): bar TokenAnnotation(785,786): . TokenAnnotation(786,789): com TokenAnnotation(791,794): foo TokenAnnotation(794,795): _ TokenAnnotation(795,798): bar TokenAnnotation(798,799): @ TokenAnnotation(799,802): foo TokenAnnotation(802,803): - TokenAnnotation(803,806): bar TokenAnnotation(806,807): _ TokenAnnotation(807,809): de TokenAnnotation(809,810): . TokenAnnotation(810,813): com TokenAnnotation(815,818): foo TokenAnnotation(818,819): @ TokenAnnotation(819,822): bar TokenAnnotation(826,830): URLs TokenAnnotation(831,834): and TokenAnnotation(835,839): URIs TokenAnnotation(841,844): www TokenAnnotation(844,845): . TokenAnnotation(845,854): incubator TokenAnnotation(854,855): . TokenAnnotation(855,861): apache TokenAnnotation(861,862): . TokenAnnotation(862,865): org TokenAnnotation(865,866): / TokenAnnotation(866,870): uima TokenAnnotation(870,871): / TokenAnnotation(871,876): index TokenAnnotation(876,877): . TokenAnnotation(877,881): html TokenAnnotation(883,887): http TokenAnnotation(887,888): : TokenAnnotation(888,889): / TokenAnnotation(889,890): / TokenAnnotation(890,893): 192 TokenAnnotation(893,894): . TokenAnnotation(894,897): 168 TokenAnnotation(897,898): . TokenAnnotation(898,901): 200 TokenAnnotation(901,902): . TokenAnnotation(902,903): 1 TokenAnnotation(903,904): : TokenAnnotation(904,906): 80 TokenAnnotation(906,907): / TokenAnnotation(907,912): login TokenAnnotation(912,913): . TokenAnnotation(913,916): jsp TokenAnnotation(918,922): http TokenAnnotation(922,923): : TokenAnnotation(923,924): / TokenAnnotation(924,925): / TokenAnnotation(925,933): myserver TokenAnnotation(933,934): . TokenAnnotation(934,942): location TokenAnnotation(942,943): . TokenAnnotation(943,946): com TokenAnnotation(946,947): : TokenAnnotation(947,951): 8080 TokenAnnotation(951,952): / TokenAnnotation(952,965): MyApplication TokenAnnotation(967,968): \ TokenAnnotation(968,969): \ TokenAnnotation(969,975): apache TokenAnnotation(975,976): . TokenAnnotation(976,982): people TokenAnnotation(982,983): . TokenAnnotation(983,986): com TokenAnnotation(986,987): \ TokenAnnotation(987,997): SharedDocs TokenAnnotation(999,1000): \ TokenAnnotation(1000,1001): \ TokenAnnotation(1001,1004): 192 TokenAnnotation(1004,1005): . TokenAnnotation(1005,1008): 168 TokenAnnotation(1008,1009): . TokenAnnotation(1009,1012): 200 TokenAnnotation(1012,1013): . TokenAnnotation(1013,1014): 1 TokenAnnotation(1014,1015): \ TokenAnnotation(1015,1021): shared TokenAnnotation(1023,1027): file TokenAnnotation(1027,1028): : TokenAnnotation(1028,1029): / TokenAnnotation(1029,1032): foo TokenAnnotation(1032,1033): / TokenAnnotation(1033,1036): bar TokenAnnotation(1038,1039): d TokenAnnotation(1039,1040): : TokenAnnotation(1040,1041): \ TokenAnnotation(1041,1047): Folder TokenAnnotation(1047,1048): \ TokenAnnotation(1048,1054): myfile TokenAnnotation(1054,1055): . TokenAnnotation(1055,1058): txt TokenAnnotation(1060,1064): file TokenAnnotation(1064,1065): : TokenAnnotation(1065,1066): / TokenAnnotation(1066,1067): / TokenAnnotation(1067,1068): / TokenAnnotation(1068,1069): d TokenAnnotation(1069,1070): : TokenAnnotation(1070,1071): / TokenAnnotation(1071,1077): folder TokenAnnotation(1077,1078): / TokenAnnotation(1078,1082): file TokenAnnotation(1082,1083): - TokenAnnotation(1083,1087): name TokenAnnotation(1087,1088): . TokenAnnotation(1088,1092): html TokenAnnotation(1094,1095): c TokenAnnotation(1095,1096): : TokenAnnotation(1096,1097): \ TokenAnnotation(1097,1103): Folder TokenAnnotation(1103,1104): \ TokenAnnotation(1104,1113): subFolder TokenAnnotation(1113,1114): . SentenceAnnotation(1114,1177): 192.168.200.6 myfile.txt Abbreviations and numbers: e.g. TokenAnnotation(1116,1119): 192 TokenAnnotation(1119,1120): . TokenAnnotation(1120,1123): 168 TokenAnnotation(1123,1124): . TokenAnnotation(1124,1127): 200 TokenAnnotation(1127,1128): . TokenAnnotation(1128,1129): 6 TokenAnnotation(1131,1137): myfile TokenAnnotation(1137,1138): . TokenAnnotation(1138,1141): txt TokenAnnotation(1145,1158): Abbreviations TokenAnnotation(1159,1162): and TokenAnnotation(1163,1170): numbers TokenAnnotation(1170,1171): : TokenAnnotation(1173,1174): e TokenAnnotation(1174,1175): . TokenAnnotation(1175,1176): g TokenAnnotation(1176,1177): . SentenceAnnotation(1177,1181): Dr. TokenAnnotation(1178,1180): Dr TokenAnnotation(1180,1181): . SentenceAnnotation(1181,1204): Marc Rainbow is great. TokenAnnotation(1182,1186): Marc TokenAnnotation(1187,1194): Rainbow TokenAnnotation(1195,1197): is TokenAnnotation(1198,1203): great TokenAnnotation(1203,1204): . SentenceAnnotation(1204,1254): Germany:England (9:3) 1/2 is better than -5 A. TokenAnnotation(1206,1213): Germany TokenAnnotation(1213,1214): : TokenAnnotation(1214,1221): England TokenAnnotation(1222,1223): ( TokenAnnotation(1223,1224): 9 TokenAnnotation(1224,1225): : TokenAnnotation(1225,1226): 3 TokenAnnotation(1226,1227): ) TokenAnnotation(1229,1230): 1 TokenAnnotation(1230,1231): / TokenAnnotation(1231,1232): 2 TokenAnnotation(1233,1235): is TokenAnnotation(1236,1242): better TokenAnnotation(1243,1247): than TokenAnnotation(1248,1249): - TokenAnnotation(1249,1250): 5 TokenAnnotation(1252,1253): A TokenAnnotation(1253,1254): . SentenceAnnotation(1254,1289): Donald 0.12 ...12 Next steps... TokenAnnotation(1255,1261): Donald TokenAnnotation(1263,1264): 0 TokenAnnotation(1264,1265): . TokenAnnotation(1265,1267): 12 TokenAnnotation(1269,1270): . TokenAnnotation(1270,1271): . TokenAnnotation(1271,1272): . TokenAnnotation(1272,1274): 12 TokenAnnotation(1276,1280): Next TokenAnnotation(1281,1286): steps TokenAnnotation(1286,1287): . TokenAnnotation(1287,1288): . TokenAnnotation(1288,1289): . SentenceAnnotation(1289,1305): Next steps ... TokenAnnotation(1291,1295): Next TokenAnnotation(1296,1301): steps TokenAnnotation(1302,1303): . TokenAnnotation(1303,1304): . TokenAnnotation(1304,1305): . SentenceAnnotation(1305,1313): Next.. TokenAnnotation(1307,1311): Next TokenAnnotation(1311,1312): . TokenAnnotation(1312,1313): . SentenceAnnotation(1313,1334): .Net 6-5=1 F.B.I. TokenAnnotation(1315,1316): . TokenAnnotation(1316,1319): Net TokenAnnotation(1321,1322): 6 TokenAnnotation(1322,1323): - TokenAnnotation(1323,1324): 5 TokenAnnotation(1324,1325): = TokenAnnotation(1325,1326): 1 TokenAnnotation(1328,1329): F TokenAnnotation(1329,1330): . TokenAnnotation(1330,1331): B TokenAnnotation(1331,1332): . TokenAnnotation(1332,1333): I TokenAnnotation(1333,1334): . SentenceAnnotation(1334,1902): Apache 2.0.40 Red Hat Linux Phone numbers and dates: +1 023 555-5355 1-555-555-0037 (029) 555 2554 03/20/2006 20.03.2006 11/2006 02-03-2005 0,12 12,0 ,,, 1,000 1, 0 12% 12$ $12 12€ €12 12£ £12 12Â¥ Â¥12 Hyphen segmentation: house-house umghts-alskdjf house-lkajsdf laksjdf-house-mice-isdf 2132-123 a12-b13 12a-13b -12a-13b- -13b -13- --------- aa----bb i-- --i ;-) unicodeâ€hyphen non‑breaking‑hyphen my-address 002D myâ€address 2010 my‑address 2011 my−address 2212 my‒address 2012 my–address 2013 my—address 2014 TokenAnnotation(1337,1343): Apache TokenAnnotation(1344,1345): 2 TokenAnnotation(1345,1346): . TokenAnnotation(1346,1347): 0 TokenAnnotation(1347,1348): . TokenAnnotation(1348,1350): 40 TokenAnnotation(1351,1354): Red TokenAnnotation(1355,1358): Hat TokenAnnotation(1359,1364): Linux TokenAnnotation(1368,1373): Phone TokenAnnotation(1374,1381): numbers TokenAnnotation(1382,1385): and TokenAnnotation(1386,1391): dates TokenAnnotation(1391,1392): : TokenAnnotation(1394,1395): + TokenAnnotation(1395,1396): 1 TokenAnnotation(1397,1400): 023 TokenAnnotation(1401,1404): 555 TokenAnnotation(1404,1405): - TokenAnnotation(1405,1409): 5355 TokenAnnotation(1411,1412): 1 TokenAnnotation(1412,1413): - TokenAnnotation(1413,1416): 555 TokenAnnotation(1416,1417): - TokenAnnotation(1417,1420): 555 TokenAnnotation(1420,1421): - TokenAnnotation(1421,1425): 0037 TokenAnnotation(1427,1428): ( TokenAnnotation(1428,1431): 029 TokenAnnotation(1431,1432): ) TokenAnnotation(1433,1436): 555 TokenAnnotation(1437,1441): 2554 TokenAnnotation(1444,1446): 03 TokenAnnotation(1446,1447): / TokenAnnotation(1447,1449): 20 TokenAnnotation(1449,1450): / TokenAnnotation(1450,1454): 2006 TokenAnnotation(1456,1458): 20 TokenAnnotation(1458,1459): . TokenAnnotation(1459,1461): 03 TokenAnnotation(1461,1462): . TokenAnnotation(1462,1466): 2006 TokenAnnotation(1468,1470): 11 TokenAnnotation(1470,1471): / TokenAnnotation(1471,1475): 2006 TokenAnnotation(1477,1479): 02 TokenAnnotation(1479,1480): - TokenAnnotation(1480,1482): 03 TokenAnnotation(1482,1483): - TokenAnnotation(1483,1487): 2005 TokenAnnotation(1489,1490): 0 TokenAnnotation(1490,1491): , TokenAnnotation(1491,1493): 12 TokenAnnotation(1495,1497): 12 TokenAnnotation(1497,1498): , TokenAnnotation(1498,1499): 0 TokenAnnotation(1501,1502): , TokenAnnotation(1502,1503): , TokenAnnotation(1503,1504): , TokenAnnotation(1506,1507): 1 TokenAnnotation(1507,1508): , TokenAnnotation(1508,1511): 000 TokenAnnotation(1512,1513): 1 TokenAnnotation(1513,1514): , TokenAnnotation(1515,1516): 0 TokenAnnotation(1518,1520): 12 TokenAnnotation(1520,1521): % TokenAnnotation(1523,1525): 12 TokenAnnotation(1525,1526): $ TokenAnnotation(1528,1529): $ TokenAnnotation(1529,1531): 12 TokenAnnotation(1533,1535): 12 TokenAnnotation(1535,1536): € TokenAnnotation(1538,1539): € TokenAnnotation(1539,1541): 12 TokenAnnotation(1543,1545): 12 TokenAnnotation(1545,1546): £ TokenAnnotation(1548,1549): £ TokenAnnotation(1549,1551): 12 TokenAnnotation(1553,1555): 12 TokenAnnotation(1555,1556): Â¥ TokenAnnotation(1558,1559): Â¥ TokenAnnotation(1559,1561): 12 TokenAnnotation(1567,1573): Hyphen TokenAnnotation(1574,1586): segmentation TokenAnnotation(1586,1587): : TokenAnnotation(1589,1594): house TokenAnnotation(1594,1595): - TokenAnnotation(1595,1600): house TokenAnnotation(1602,1608): umghts TokenAnnotation(1608,1609): - TokenAnnotation(1609,1616): alskdjf TokenAnnotation(1618,1623): house TokenAnnotation(1623,1624): - TokenAnnotation(1624,1631): lkajsdf TokenAnnotation(1633,1640): laksjdf TokenAnnotation(1640,1641): - TokenAnnotation(1641,1646): house TokenAnnotation(1646,1647): - TokenAnnotation(1647,1651): mice TokenAnnotation(1651,1652): - TokenAnnotation(1652,1656): isdf TokenAnnotation(1658,1662): 2132 TokenAnnotation(1662,1663): - TokenAnnotation(1663,1666): 123 TokenAnnotation(1668,1671): a12 TokenAnnotation(1671,1672): - TokenAnnotation(1672,1675): b13 TokenAnnotation(1677,1680): 12a TokenAnnotation(1680,1681): - TokenAnnotation(1681,1684): 13b TokenAnnotation(1686,1687): - TokenAnnotation(1687,1690): 12a TokenAnnotation(1690,1691): - TokenAnnotation(1691,1694): 13b TokenAnnotation(1694,1695): - TokenAnnotation(1697,1698): - TokenAnnotation(1698,1701): 13b TokenAnnotation(1702,1703): - TokenAnnotation(1703,1705): 13 TokenAnnotation(1705,1706): - TokenAnnotation(1708,1709): - TokenAnnotation(1709,1710): - TokenAnnotation(1710,1711): - TokenAnnotation(1711,1712): - TokenAnnotation(1712,1713): - TokenAnnotation(1713,1714): - TokenAnnotation(1714,1715): - TokenAnnotation(1715,1716): - TokenAnnotation(1716,1717): - TokenAnnotation(1719,1721): aa TokenAnnotation(1721,1722): - TokenAnnotation(1722,1723): - TokenAnnotation(1723,1724): - TokenAnnotation(1724,1725): - TokenAnnotation(1725,1727): bb TokenAnnotation(1729,1730): i TokenAnnotation(1730,1731): - TokenAnnotation(1731,1732): - TokenAnnotation(1734,1735): - TokenAnnotation(1735,1736): - TokenAnnotation(1736,1737): i TokenAnnotation(1739,1740): ; TokenAnnotation(1740,1741): - TokenAnnotation(1741,1742): ) TokenAnnotation(1744,1751): unicode TokenAnnotation(1751,1752): †TokenAnnotation(1752,1758): hyphen TokenAnnotation(1760,1763): non TokenAnnotation(1763,1764): ‑ TokenAnnotation(1764,1772): breaking TokenAnnotation(1772,1773): ‑ TokenAnnotation(1773,1779): hyphen TokenAnnotation(1781,1783): my TokenAnnotation(1783,1784): - TokenAnnotation(1784,1791): address TokenAnnotation(1792,1796): 002D TokenAnnotation(1798,1800): my TokenAnnotation(1800,1801): †TokenAnnotation(1801,1808): address TokenAnnotation(1809,1813): 2010 TokenAnnotation(1815,1817): my TokenAnnotation(1817,1818): ‑ TokenAnnotation(1818,1825): address TokenAnnotation(1826,1830): 2011 TokenAnnotation(1832,1834): my TokenAnnotation(1834,1835): − TokenAnnotation(1835,1842): address TokenAnnotation(1843,1847): 2212 TokenAnnotation(1849,1851): my TokenAnnotation(1851,1852): ‒ TokenAnnotation(1852,1859): address TokenAnnotation(1860,1864): 2012 TokenAnnotation(1866,1868): my TokenAnnotation(1868,1869): – TokenAnnotation(1869,1876): address TokenAnnotation(1877,1881): 2013 TokenAnnotation(1883,1885): my TokenAnnotation(1885,1886): — TokenAnnotation(1886,1893): address TokenAnnotation(1894,1898): 2014 uima-addons-2.3.1/WhitespaceTokenizer/src/test/resources/testdoc.txt0000644000175000017500000000361011625126452025573 0ustar drazzibdrazzib"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. email addresses: foo@bar.de foo.bar@foo.de foo-bar@foo.bar.com foo_bar@foo-bar_de.com foo@bar URLs and URIs www.incubator.apache.org/uima/index.html http://192.168.200.1:80/login.jsp http://myserver.location.com:8080/MyApplication \\apache.people.com\SharedDocs \\192.168.200.1\shared file:/foo/bar d:\Folder\myfile.txt file:///d:/folder/file-name.html c:\Folder\subFolder. 192.168.200.6 myfile.txt Abbreviations and numbers: e.g. Dr. Marc Rainbow is great. Germany:England (9:3) 1/2 is better than -5 A. Donald 0.12 ...12 Next steps... Next steps ... Next.. .Net 6-5=1 F.B.I. Apache 2.0.40 Red Hat Linux Phone numbers and dates: +1 023 555-5355 1-555-555-0037 (029) 555 2554 03/20/2006 20.03.2006 11/2006 02-03-2005 0,12 12,0 ,,, 1,000 1, 0 12% 12$ $12 12€ €12 12£ £12 12Â¥ Â¥12 Hyphen segmentation: house-house umghts-alskdjf house-lkajsdf laksjdf-house-mice-isdf 2132-123 a12-b13 12a-13b -12a-13b- -13b -13- --------- aa----bb i-- --i ;-) unicodeâ€hyphen non‑breaking‑hyphen my-address 002D myâ€address 2010 my‑address 2011 my−address 2212 my‒address 2012 my–address 2013 my—address 2014 uima-addons-2.3.1/WhitespaceTokenizer/src/test/resources/english.txt0000644000175000017500000002641611625126452025570 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.uima-addons-2.3.1/WhitespaceTokenizer/src/test/resources/tabs.txt0000644000175000017500000000006311625126452025056 0ustar drazzibdrazzibTab space-tab 2tabs tabFollowedByNL textAfterNLuima-addons-2.3.1/WhitespaceTokenizer/src/test/resources/tabsRef.txt0000644000175000017500000000045111625126452025514 0ustar drazzibdrazzibSentenceAnnotation(0,51): Tab space-tab 2tabs tabFollowedByNL textAfterNL TokenAnnotation(0,3): Tab TokenAnnotation(4,9): space TokenAnnotation(9,10): - TokenAnnotation(10,13): tab TokenAnnotation(15,20): 2tabs TokenAnnotation(22,37): tabFollowedByNL TokenAnnotation(40,51): textAfterNLuima-addons-2.3.1/WhitespaceTokenizer/src/test/resources/englishRef.txt0000644000175000017500000023437511625126452026232 0ustar drazzibdrazzibSentenceAnnotation(0,212): Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. TokenAnnotation(11,17): Apache TokenAnnotation(18,25): License TokenAnnotation(54,61): Version TokenAnnotation(62,63): 2 TokenAnnotation(63,64): . TokenAnnotation(64,65): 0 TokenAnnotation(65,66): , TokenAnnotation(67,74): January TokenAnnotation(75,79): 2004 TokenAnnotation(105,109): http TokenAnnotation(109,110): : TokenAnnotation(110,111): / TokenAnnotation(111,112): / TokenAnnotation(112,115): www TokenAnnotation(115,116): . TokenAnnotation(116,122): apache TokenAnnotation(122,123): . TokenAnnotation(123,126): org TokenAnnotation(126,127): / TokenAnnotation(127,135): licenses TokenAnnotation(135,136): / TokenAnnotation(143,148): TERMS TokenAnnotation(149,152): AND TokenAnnotation(153,163): CONDITIONS TokenAnnotation(164,167): FOR TokenAnnotation(168,171): USE TokenAnnotation(171,172): , TokenAnnotation(173,185): REPRODUCTION TokenAnnotation(185,186): , TokenAnnotation(187,190): AND TokenAnnotation(191,203): DISTRIBUTION TokenAnnotation(210,211): 1 TokenAnnotation(211,212): . SentenceAnnotation(212,225): Definitions. TokenAnnotation(213,224): Definitions TokenAnnotation(224,225): . SentenceAnnotation(225,380): "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. TokenAnnotation(235,236): " TokenAnnotation(236,243): License TokenAnnotation(243,244): " TokenAnnotation(245,250): shall TokenAnnotation(251,255): mean TokenAnnotation(256,259): the TokenAnnotation(260,265): terms TokenAnnotation(266,269): and TokenAnnotation(270,280): conditions TokenAnnotation(281,284): for TokenAnnotation(285,288): use TokenAnnotation(288,289): , TokenAnnotation(290,302): reproduction TokenAnnotation(302,303): , TokenAnnotation(311,314): and TokenAnnotation(315,327): distribution TokenAnnotation(328,330): as TokenAnnotation(331,338): defined TokenAnnotation(339,341): by TokenAnnotation(342,350): Sections TokenAnnotation(351,352): 1 TokenAnnotation(353,360): through TokenAnnotation(361,362): 9 TokenAnnotation(363,365): of TokenAnnotation(366,370): this TokenAnnotation(371,379): document TokenAnnotation(379,380): . SentenceAnnotation(380,512): "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. TokenAnnotation(390,391): " TokenAnnotation(391,399): Licensor TokenAnnotation(399,400): " TokenAnnotation(401,406): shall TokenAnnotation(407,411): mean TokenAnnotation(412,415): the TokenAnnotation(416,425): copyright TokenAnnotation(426,431): owner TokenAnnotation(432,434): or TokenAnnotation(435,441): entity TokenAnnotation(442,452): authorized TokenAnnotation(453,455): by TokenAnnotation(463,466): the TokenAnnotation(467,476): copyright TokenAnnotation(477,482): owner TokenAnnotation(483,487): that TokenAnnotation(488,490): is TokenAnnotation(491,499): granting TokenAnnotation(500,503): the TokenAnnotation(504,511): License TokenAnnotation(511,512): . SentenceAnnotation(512,694): "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. TokenAnnotation(522,523): " TokenAnnotation(523,528): Legal TokenAnnotation(529,535): Entity TokenAnnotation(535,536): " TokenAnnotation(537,542): shall TokenAnnotation(543,547): mean TokenAnnotation(548,551): the TokenAnnotation(552,557): union TokenAnnotation(558,560): of TokenAnnotation(561,564): the TokenAnnotation(565,571): acting TokenAnnotation(572,578): entity TokenAnnotation(579,582): and TokenAnnotation(583,586): all TokenAnnotation(594,599): other TokenAnnotation(600,608): entities TokenAnnotation(609,613): that TokenAnnotation(614,621): control TokenAnnotation(621,622): , TokenAnnotation(623,626): are TokenAnnotation(627,637): controlled TokenAnnotation(638,640): by TokenAnnotation(640,641): , TokenAnnotation(642,644): or TokenAnnotation(645,648): are TokenAnnotation(649,654): under TokenAnnotation(655,661): common TokenAnnotation(669,676): control TokenAnnotation(677,681): with TokenAnnotation(682,686): that TokenAnnotation(687,693): entity TokenAnnotation(693,694): . SentenceAnnotation(694,1019): For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. TokenAnnotation(695,698): For TokenAnnotation(699,702): the TokenAnnotation(703,711): purposes TokenAnnotation(712,714): of TokenAnnotation(715,719): this TokenAnnotation(720,730): definition TokenAnnotation(730,731): , TokenAnnotation(739,740): " TokenAnnotation(740,747): control TokenAnnotation(747,748): " TokenAnnotation(749,754): means TokenAnnotation(755,756): ( TokenAnnotation(756,757): i TokenAnnotation(757,758): ) TokenAnnotation(759,762): the TokenAnnotation(763,768): power TokenAnnotation(768,769): , TokenAnnotation(770,776): direct TokenAnnotation(777,779): or TokenAnnotation(780,788): indirect TokenAnnotation(788,789): , TokenAnnotation(790,792): to TokenAnnotation(793,798): cause TokenAnnotation(799,802): the TokenAnnotation(810,819): direction TokenAnnotation(820,822): or TokenAnnotation(823,833): management TokenAnnotation(834,836): of TokenAnnotation(837,841): such TokenAnnotation(842,848): entity TokenAnnotation(848,849): , TokenAnnotation(850,857): whether TokenAnnotation(858,860): by TokenAnnotation(861,869): contract TokenAnnotation(870,872): or TokenAnnotation(880,889): otherwise TokenAnnotation(889,890): , TokenAnnotation(891,893): or TokenAnnotation(894,895): ( TokenAnnotation(895,897): ii TokenAnnotation(897,898): ) TokenAnnotation(899,908): ownership TokenAnnotation(909,911): of TokenAnnotation(912,917): fifty TokenAnnotation(918,925): percent TokenAnnotation(926,927): ( TokenAnnotation(927,929): 50 TokenAnnotation(929,930): % TokenAnnotation(930,931): ) TokenAnnotation(932,934): or TokenAnnotation(935,939): more TokenAnnotation(940,942): of TokenAnnotation(943,946): the TokenAnnotation(954,965): outstanding TokenAnnotation(966,972): shares TokenAnnotation(972,973): , TokenAnnotation(974,976): or TokenAnnotation(977,978): ( TokenAnnotation(978,981): iii TokenAnnotation(981,982): ) TokenAnnotation(983,993): beneficial TokenAnnotation(994,1003): ownership TokenAnnotation(1004,1006): of TokenAnnotation(1007,1011): such TokenAnnotation(1012,1018): entity TokenAnnotation(1018,1019): . SentenceAnnotation(1019,1142): "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. TokenAnnotation(1029,1030): " TokenAnnotation(1030,1033): You TokenAnnotation(1033,1034): " TokenAnnotation(1035,1036): ( TokenAnnotation(1036,1038): or TokenAnnotation(1039,1040): " TokenAnnotation(1040,1044): Your TokenAnnotation(1044,1045): " TokenAnnotation(1045,1046): ) TokenAnnotation(1047,1052): shall TokenAnnotation(1053,1057): mean TokenAnnotation(1058,1060): an TokenAnnotation(1061,1071): individual TokenAnnotation(1072,1074): or TokenAnnotation(1075,1080): Legal TokenAnnotation(1081,1087): Entity TokenAnnotation(1095,1105): exercising TokenAnnotation(1106,1117): permissions TokenAnnotation(1118,1125): granted TokenAnnotation(1126,1128): by TokenAnnotation(1129,1133): this TokenAnnotation(1134,1141): License TokenAnnotation(1141,1142): . SentenceAnnotation(1142,1333): "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. TokenAnnotation(1152,1153): " TokenAnnotation(1153,1159): Source TokenAnnotation(1159,1160): " TokenAnnotation(1161,1165): form TokenAnnotation(1166,1171): shall TokenAnnotation(1172,1176): mean TokenAnnotation(1177,1180): the TokenAnnotation(1181,1190): preferred TokenAnnotation(1191,1195): form TokenAnnotation(1196,1199): for TokenAnnotation(1200,1206): making TokenAnnotation(1207,1220): modifications TokenAnnotation(1220,1221): , TokenAnnotation(1229,1238): including TokenAnnotation(1239,1242): but TokenAnnotation(1243,1246): not TokenAnnotation(1247,1254): limited TokenAnnotation(1255,1257): to TokenAnnotation(1258,1266): software TokenAnnotation(1267,1273): source TokenAnnotation(1274,1278): code TokenAnnotation(1278,1279): , TokenAnnotation(1280,1293): documentation TokenAnnotation(1301,1307): source TokenAnnotation(1307,1308): , TokenAnnotation(1309,1312): and TokenAnnotation(1313,1326): configuration TokenAnnotation(1327,1332): files TokenAnnotation(1332,1333): . SentenceAnnotation(1333,1585): "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. TokenAnnotation(1343,1344): " TokenAnnotation(1344,1350): Object TokenAnnotation(1350,1351): " TokenAnnotation(1352,1356): form TokenAnnotation(1357,1362): shall TokenAnnotation(1363,1367): mean TokenAnnotation(1368,1371): any TokenAnnotation(1372,1376): form TokenAnnotation(1377,1386): resulting TokenAnnotation(1387,1391): from TokenAnnotation(1392,1402): mechanical TokenAnnotation(1410,1424): transformation TokenAnnotation(1425,1427): or TokenAnnotation(1428,1439): translation TokenAnnotation(1440,1442): of TokenAnnotation(1443,1444): a TokenAnnotation(1445,1451): Source TokenAnnotation(1452,1456): form TokenAnnotation(1456,1457): , TokenAnnotation(1458,1467): including TokenAnnotation(1468,1471): but TokenAnnotation(1479,1482): not TokenAnnotation(1483,1490): limited TokenAnnotation(1491,1493): to TokenAnnotation(1494,1502): compiled TokenAnnotation(1503,1509): object TokenAnnotation(1510,1514): code TokenAnnotation(1514,1515): , TokenAnnotation(1516,1525): generated TokenAnnotation(1526,1539): documentation TokenAnnotation(1539,1540): , TokenAnnotation(1548,1551): and TokenAnnotation(1552,1563): conversions TokenAnnotation(1564,1566): to TokenAnnotation(1567,1572): other TokenAnnotation(1573,1578): media TokenAnnotation(1579,1584): types TokenAnnotation(1584,1585): . SentenceAnnotation(1585,1852): "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). TokenAnnotation(1595,1596): " TokenAnnotation(1596,1600): Work TokenAnnotation(1600,1601): " TokenAnnotation(1602,1607): shall TokenAnnotation(1608,1612): mean TokenAnnotation(1613,1616): the TokenAnnotation(1617,1621): work TokenAnnotation(1622,1624): of TokenAnnotation(1625,1635): authorship TokenAnnotation(1635,1636): , TokenAnnotation(1637,1644): whether TokenAnnotation(1645,1647): in TokenAnnotation(1648,1654): Source TokenAnnotation(1655,1657): or TokenAnnotation(1665,1671): Object TokenAnnotation(1672,1676): form TokenAnnotation(1676,1677): , TokenAnnotation(1678,1682): made TokenAnnotation(1683,1692): available TokenAnnotation(1693,1698): under TokenAnnotation(1699,1702): the TokenAnnotation(1703,1710): License TokenAnnotation(1710,1711): , TokenAnnotation(1712,1714): as TokenAnnotation(1715,1724): indicated TokenAnnotation(1725,1727): by TokenAnnotation(1728,1729): a TokenAnnotation(1737,1746): copyright TokenAnnotation(1747,1753): notice TokenAnnotation(1754,1758): that TokenAnnotation(1759,1761): is TokenAnnotation(1762,1770): included TokenAnnotation(1771,1773): in TokenAnnotation(1774,1776): or TokenAnnotation(1777,1785): attached TokenAnnotation(1786,1788): to TokenAnnotation(1789,1792): the TokenAnnotation(1793,1797): work TokenAnnotation(1805,1806): ( TokenAnnotation(1806,1808): an TokenAnnotation(1809,1816): example TokenAnnotation(1817,1819): is TokenAnnotation(1820,1828): provided TokenAnnotation(1829,1831): in TokenAnnotation(1832,1835): the TokenAnnotation(1836,1844): Appendix TokenAnnotation(1845,1850): below TokenAnnotation(1850,1851): ) TokenAnnotation(1851,1852): . SentenceAnnotation(1852,2144): "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. TokenAnnotation(1862,1863): " TokenAnnotation(1863,1873): Derivative TokenAnnotation(1874,1879): Works TokenAnnotation(1879,1880): " TokenAnnotation(1881,1886): shall TokenAnnotation(1887,1891): mean TokenAnnotation(1892,1895): any TokenAnnotation(1896,1900): work TokenAnnotation(1900,1901): , TokenAnnotation(1902,1909): whether TokenAnnotation(1910,1912): in TokenAnnotation(1913,1919): Source TokenAnnotation(1920,1922): or TokenAnnotation(1923,1929): Object TokenAnnotation(1937,1941): form TokenAnnotation(1941,1942): , TokenAnnotation(1943,1947): that TokenAnnotation(1948,1950): is TokenAnnotation(1951,1956): based TokenAnnotation(1957,1959): on TokenAnnotation(1960,1961): ( TokenAnnotation(1961,1963): or TokenAnnotation(1964,1971): derived TokenAnnotation(1972,1976): from TokenAnnotation(1976,1977): ) TokenAnnotation(1978,1981): the TokenAnnotation(1982,1986): Work TokenAnnotation(1987,1990): and TokenAnnotation(1991,1994): for TokenAnnotation(1995,2000): which TokenAnnotation(2001,2004): the TokenAnnotation(2012,2021): editorial TokenAnnotation(2022,2031): revisions TokenAnnotation(2031,2032): , TokenAnnotation(2033,2044): annotations TokenAnnotation(2044,2045): , TokenAnnotation(2046,2058): elaborations TokenAnnotation(2058,2059): , TokenAnnotation(2060,2062): or TokenAnnotation(2063,2068): other TokenAnnotation(2069,2082): modifications TokenAnnotation(2090,2099): represent TokenAnnotation(2099,2100): , TokenAnnotation(2101,2103): as TokenAnnotation(2104,2105): a TokenAnnotation(2106,2111): whole TokenAnnotation(2111,2112): , TokenAnnotation(2113,2115): an TokenAnnotation(2116,2124): original TokenAnnotation(2125,2129): work TokenAnnotation(2130,2132): of TokenAnnotation(2133,2143): authorship TokenAnnotation(2143,2144): . SentenceAnnotation(2144,2362): For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. TokenAnnotation(2145,2148): For TokenAnnotation(2149,2152): the TokenAnnotation(2153,2161): purposes TokenAnnotation(2169,2171): of TokenAnnotation(2172,2176): this TokenAnnotation(2177,2184): License TokenAnnotation(2184,2185): , TokenAnnotation(2186,2196): Derivative TokenAnnotation(2197,2202): Works TokenAnnotation(2203,2208): shall TokenAnnotation(2209,2212): not TokenAnnotation(2213,2220): include TokenAnnotation(2221,2226): works TokenAnnotation(2227,2231): that TokenAnnotation(2232,2238): remain TokenAnnotation(2246,2255): separable TokenAnnotation(2256,2260): from TokenAnnotation(2260,2261): , TokenAnnotation(2262,2264): or TokenAnnotation(2265,2271): merely TokenAnnotation(2272,2276): link TokenAnnotation(2277,2278): ( TokenAnnotation(2278,2280): or TokenAnnotation(2281,2285): bind TokenAnnotation(2286,2288): by TokenAnnotation(2289,2293): name TokenAnnotation(2293,2294): ) TokenAnnotation(2295,2297): to TokenAnnotation(2298,2301): the TokenAnnotation(2302,2312): interfaces TokenAnnotation(2313,2315): of TokenAnnotation(2315,2316): , TokenAnnotation(2324,2327): the TokenAnnotation(2328,2332): Work TokenAnnotation(2333,2336): and TokenAnnotation(2337,2347): Derivative TokenAnnotation(2348,2353): Works TokenAnnotation(2354,2361): thereof TokenAnnotation(2361,2362): . SentenceAnnotation(2362,2760): "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. TokenAnnotation(2372,2373): " TokenAnnotation(2373,2385): Contribution TokenAnnotation(2385,2386): " TokenAnnotation(2387,2392): shall TokenAnnotation(2393,2397): mean TokenAnnotation(2398,2401): any TokenAnnotation(2402,2406): work TokenAnnotation(2407,2409): of TokenAnnotation(2410,2420): authorship TokenAnnotation(2420,2421): , TokenAnnotation(2422,2431): including TokenAnnotation(2439,2442): the TokenAnnotation(2443,2451): original TokenAnnotation(2452,2459): version TokenAnnotation(2460,2462): of TokenAnnotation(2463,2466): the TokenAnnotation(2467,2471): Work TokenAnnotation(2472,2475): and TokenAnnotation(2476,2479): any TokenAnnotation(2480,2493): modifications TokenAnnotation(2494,2496): or TokenAnnotation(2497,2506): additions TokenAnnotation(2514,2516): to TokenAnnotation(2517,2521): that TokenAnnotation(2522,2526): Work TokenAnnotation(2527,2529): or TokenAnnotation(2530,2540): Derivative TokenAnnotation(2541,2546): Works TokenAnnotation(2547,2554): thereof TokenAnnotation(2554,2555): , TokenAnnotation(2556,2560): that TokenAnnotation(2561,2563): is TokenAnnotation(2564,2577): intentionally TokenAnnotation(2585,2594): submitted TokenAnnotation(2595,2597): to TokenAnnotation(2598,2606): Licensor TokenAnnotation(2607,2610): for TokenAnnotation(2611,2620): inclusion TokenAnnotation(2621,2623): in TokenAnnotation(2624,2627): the TokenAnnotation(2628,2632): Work TokenAnnotation(2633,2635): by TokenAnnotation(2636,2639): the TokenAnnotation(2640,2649): copyright TokenAnnotation(2650,2655): owner TokenAnnotation(2663,2665): or TokenAnnotation(2666,2668): by TokenAnnotation(2669,2671): an TokenAnnotation(2672,2682): individual TokenAnnotation(2683,2685): or TokenAnnotation(2686,2691): Legal TokenAnnotation(2692,2698): Entity TokenAnnotation(2699,2709): authorized TokenAnnotation(2710,2712): to TokenAnnotation(2713,2719): submit TokenAnnotation(2720,2722): on TokenAnnotation(2723,2729): behalf TokenAnnotation(2730,2732): of TokenAnnotation(2740,2743): the TokenAnnotation(2744,2753): copyright TokenAnnotation(2754,2759): owner TokenAnnotation(2759,2760): . SentenceAnnotation(2760,3541): For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. TokenAnnotation(2761,2764): For TokenAnnotation(2765,2768): the TokenAnnotation(2769,2777): purposes TokenAnnotation(2778,2780): of TokenAnnotation(2781,2785): this TokenAnnotation(2786,2796): definition TokenAnnotation(2796,2797): , TokenAnnotation(2798,2799): " TokenAnnotation(2799,2808): submitted TokenAnnotation(2808,2809): " TokenAnnotation(2817,2822): means TokenAnnotation(2823,2826): any TokenAnnotation(2827,2831): form TokenAnnotation(2832,2834): of TokenAnnotation(2835,2845): electronic TokenAnnotation(2845,2846): , TokenAnnotation(2847,2853): verbal TokenAnnotation(2853,2854): , TokenAnnotation(2855,2857): or TokenAnnotation(2858,2865): written TokenAnnotation(2866,2879): communication TokenAnnotation(2880,2884): sent TokenAnnotation(2892,2894): to TokenAnnotation(2895,2898): the TokenAnnotation(2899,2907): Licensor TokenAnnotation(2908,2910): or TokenAnnotation(2911,2914): its TokenAnnotation(2915,2930): representatives TokenAnnotation(2930,2931): , TokenAnnotation(2932,2941): including TokenAnnotation(2942,2945): but TokenAnnotation(2946,2949): not TokenAnnotation(2950,2957): limited TokenAnnotation(2958,2960): to TokenAnnotation(2968,2981): communication TokenAnnotation(2982,2984): on TokenAnnotation(2985,2995): electronic TokenAnnotation(2996,3003): mailing TokenAnnotation(3004,3009): lists TokenAnnotation(3009,3010): , TokenAnnotation(3011,3017): source TokenAnnotation(3018,3022): code TokenAnnotation(3023,3030): control TokenAnnotation(3031,3038): systems TokenAnnotation(3038,3039): , TokenAnnotation(3047,3050): and TokenAnnotation(3051,3056): issue TokenAnnotation(3057,3065): tracking TokenAnnotation(3066,3073): systems TokenAnnotation(3074,3078): that TokenAnnotation(3079,3082): are TokenAnnotation(3083,3090): managed TokenAnnotation(3091,3093): by TokenAnnotation(3093,3094): , TokenAnnotation(3095,3097): or TokenAnnotation(3098,3100): on TokenAnnotation(3101,3107): behalf TokenAnnotation(3108,3110): of TokenAnnotation(3110,3111): , TokenAnnotation(3112,3115): the TokenAnnotation(3123,3131): Licensor TokenAnnotation(3132,3135): for TokenAnnotation(3136,3139): the TokenAnnotation(3140,3147): purpose TokenAnnotation(3148,3150): of TokenAnnotation(3151,3161): discussing TokenAnnotation(3162,3165): and TokenAnnotation(3166,3175): improving TokenAnnotation(3176,3179): the TokenAnnotation(3180,3184): Work TokenAnnotation(3184,3185): , TokenAnnotation(3186,3189): but TokenAnnotation(3197,3206): excluding TokenAnnotation(3207,3220): communication TokenAnnotation(3221,3225): that TokenAnnotation(3226,3228): is TokenAnnotation(3229,3242): conspicuously TokenAnnotation(3243,3249): marked TokenAnnotation(3250,3252): or TokenAnnotation(3253,3262): otherwise TokenAnnotation(3270,3280): designated TokenAnnotation(3281,3283): in TokenAnnotation(3284,3291): writing TokenAnnotation(3292,3294): by TokenAnnotation(3295,3298): the TokenAnnotation(3299,3308): copyright TokenAnnotation(3309,3314): owner TokenAnnotation(3315,3317): as TokenAnnotation(3318,3319): " TokenAnnotation(3319,3322): Not TokenAnnotation(3323,3324): a TokenAnnotation(3325,3337): Contribution TokenAnnotation(3337,3338): . TokenAnnotation(3338,3339): " TokenAnnotation(3349,3350): " TokenAnnotation(3350,3361): Contributor TokenAnnotation(3361,3362): " TokenAnnotation(3363,3368): shall TokenAnnotation(3369,3373): mean TokenAnnotation(3374,3382): Licensor TokenAnnotation(3383,3386): and TokenAnnotation(3387,3390): any TokenAnnotation(3391,3401): individual TokenAnnotation(3402,3404): or TokenAnnotation(3405,3410): Legal TokenAnnotation(3411,3417): Entity TokenAnnotation(3425,3427): on TokenAnnotation(3428,3434): behalf TokenAnnotation(3435,3437): of TokenAnnotation(3438,3442): whom TokenAnnotation(3443,3444): a TokenAnnotation(3445,3457): Contribution TokenAnnotation(3458,3461): has TokenAnnotation(3462,3466): been TokenAnnotation(3467,3475): received TokenAnnotation(3476,3478): by TokenAnnotation(3479,3487): Licensor TokenAnnotation(3488,3491): and TokenAnnotation(3499,3511): subsequently TokenAnnotation(3512,3524): incorporated TokenAnnotation(3525,3531): within TokenAnnotation(3532,3535): the TokenAnnotation(3536,3540): Work TokenAnnotation(3540,3541): . SentenceAnnotation(3541,3550): 2. TokenAnnotation(3548,3549): 2 TokenAnnotation(3549,3550): . SentenceAnnotation(3550,3578): Grant of Copyright License. TokenAnnotation(3551,3556): Grant TokenAnnotation(3557,3559): of TokenAnnotation(3560,3569): Copyright TokenAnnotation(3570,3577): License TokenAnnotation(3577,3578): . SentenceAnnotation(3578,3965): Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. TokenAnnotation(3579,3586): Subject TokenAnnotation(3587,3589): to TokenAnnotation(3590,3593): the TokenAnnotation(3594,3599): terms TokenAnnotation(3600,3603): and TokenAnnotation(3604,3614): conditions TokenAnnotation(3615,3617): of TokenAnnotation(3625,3629): this TokenAnnotation(3630,3637): License TokenAnnotation(3637,3638): , TokenAnnotation(3639,3643): each TokenAnnotation(3644,3655): Contributor TokenAnnotation(3656,3662): hereby TokenAnnotation(3663,3669): grants TokenAnnotation(3670,3672): to TokenAnnotation(3673,3676): You TokenAnnotation(3677,3678): a TokenAnnotation(3679,3688): perpetual TokenAnnotation(3688,3689): , TokenAnnotation(3697,3706): worldwide TokenAnnotation(3706,3707): , TokenAnnotation(3708,3711): non TokenAnnotation(3711,3712): - TokenAnnotation(3712,3721): exclusive TokenAnnotation(3721,3722): , TokenAnnotation(3723,3725): no TokenAnnotation(3725,3726): - TokenAnnotation(3726,3732): charge TokenAnnotation(3732,3733): , TokenAnnotation(3734,3741): royalty TokenAnnotation(3741,3742): - TokenAnnotation(3742,3746): free TokenAnnotation(3746,3747): , TokenAnnotation(3748,3759): irrevocable TokenAnnotation(3767,3776): copyright TokenAnnotation(3777,3784): license TokenAnnotation(3785,3787): to TokenAnnotation(3788,3797): reproduce TokenAnnotation(3797,3798): , TokenAnnotation(3799,3806): prepare TokenAnnotation(3807,3817): Derivative TokenAnnotation(3818,3823): Works TokenAnnotation(3824,3826): of TokenAnnotation(3826,3827): , TokenAnnotation(3835,3843): publicly TokenAnnotation(3844,3851): display TokenAnnotation(3851,3852): , TokenAnnotation(3853,3861): publicly TokenAnnotation(3862,3869): perform TokenAnnotation(3869,3870): , TokenAnnotation(3871,3881): sublicense TokenAnnotation(3881,3882): , TokenAnnotation(3883,3886): and TokenAnnotation(3887,3897): distribute TokenAnnotation(3898,3901): the TokenAnnotation(3909,3913): Work TokenAnnotation(3914,3917): and TokenAnnotation(3918,3922): such TokenAnnotation(3923,3933): Derivative TokenAnnotation(3934,3939): Works TokenAnnotation(3940,3942): in TokenAnnotation(3943,3949): Source TokenAnnotation(3950,3952): or TokenAnnotation(3953,3959): Object TokenAnnotation(3960,3964): form TokenAnnotation(3964,3965): . SentenceAnnotation(3965,3974): 3. TokenAnnotation(3972,3973): 3 TokenAnnotation(3973,3974): . SentenceAnnotation(3974,3999): Grant of Patent License. TokenAnnotation(3975,3980): Grant TokenAnnotation(3981,3983): of TokenAnnotation(3984,3990): Patent TokenAnnotation(3991,3998): License TokenAnnotation(3998,3999): . SentenceAnnotation(3999,4609): Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. TokenAnnotation(4000,4007): Subject TokenAnnotation(4008,4010): to TokenAnnotation(4011,4014): the TokenAnnotation(4015,4020): terms TokenAnnotation(4021,4024): and TokenAnnotation(4025,4035): conditions TokenAnnotation(4036,4038): of TokenAnnotation(4046,4050): this TokenAnnotation(4051,4058): License TokenAnnotation(4058,4059): , TokenAnnotation(4060,4064): each TokenAnnotation(4065,4076): Contributor TokenAnnotation(4077,4083): hereby TokenAnnotation(4084,4090): grants TokenAnnotation(4091,4093): to TokenAnnotation(4094,4097): You TokenAnnotation(4098,4099): a TokenAnnotation(4100,4109): perpetual TokenAnnotation(4109,4110): , TokenAnnotation(4118,4127): worldwide TokenAnnotation(4127,4128): , TokenAnnotation(4129,4132): non TokenAnnotation(4132,4133): - TokenAnnotation(4133,4142): exclusive TokenAnnotation(4142,4143): , TokenAnnotation(4144,4146): no TokenAnnotation(4146,4147): - TokenAnnotation(4147,4153): charge TokenAnnotation(4153,4154): , TokenAnnotation(4155,4162): royalty TokenAnnotation(4162,4163): - TokenAnnotation(4163,4167): free TokenAnnotation(4167,4168): , TokenAnnotation(4169,4180): irrevocable TokenAnnotation(4188,4189): ( TokenAnnotation(4189,4195): except TokenAnnotation(4196,4198): as TokenAnnotation(4199,4205): stated TokenAnnotation(4206,4208): in TokenAnnotation(4209,4213): this TokenAnnotation(4214,4221): section TokenAnnotation(4221,4222): ) TokenAnnotation(4223,4229): patent TokenAnnotation(4230,4237): license TokenAnnotation(4238,4240): to TokenAnnotation(4241,4245): make TokenAnnotation(4245,4246): , TokenAnnotation(4247,4251): have TokenAnnotation(4252,4256): made TokenAnnotation(4256,4257): , TokenAnnotation(4265,4268): use TokenAnnotation(4268,4269): , TokenAnnotation(4270,4275): offer TokenAnnotation(4276,4278): to TokenAnnotation(4279,4283): sell TokenAnnotation(4283,4284): , TokenAnnotation(4285,4289): sell TokenAnnotation(4289,4290): , TokenAnnotation(4291,4297): import TokenAnnotation(4297,4298): , TokenAnnotation(4299,4302): and TokenAnnotation(4303,4312): otherwise TokenAnnotation(4313,4321): transfer TokenAnnotation(4322,4325): the TokenAnnotation(4326,4330): Work TokenAnnotation(4330,4331): , TokenAnnotation(4339,4344): where TokenAnnotation(4345,4349): such TokenAnnotation(4350,4357): license TokenAnnotation(4358,4365): applies TokenAnnotation(4366,4370): only TokenAnnotation(4371,4373): to TokenAnnotation(4374,4379): those TokenAnnotation(4380,4386): patent TokenAnnotation(4387,4393): claims TokenAnnotation(4394,4404): licensable TokenAnnotation(4412,4414): by TokenAnnotation(4415,4419): such TokenAnnotation(4420,4431): Contributor TokenAnnotation(4432,4436): that TokenAnnotation(4437,4440): are TokenAnnotation(4441,4452): necessarily TokenAnnotation(4453,4462): infringed TokenAnnotation(4463,4465): by TokenAnnotation(4466,4471): their TokenAnnotation(4479,4491): Contribution TokenAnnotation(4491,4492): ( TokenAnnotation(4492,4493): s TokenAnnotation(4493,4494): ) TokenAnnotation(4495,4500): alone TokenAnnotation(4501,4503): or TokenAnnotation(4504,4506): by TokenAnnotation(4507,4518): combination TokenAnnotation(4519,4521): of TokenAnnotation(4522,4527): their TokenAnnotation(4528,4540): Contribution TokenAnnotation(4540,4541): ( TokenAnnotation(4541,4542): s TokenAnnotation(4542,4543): ) TokenAnnotation(4551,4555): with TokenAnnotation(4556,4559): the TokenAnnotation(4560,4564): Work TokenAnnotation(4565,4567): to TokenAnnotation(4568,4573): which TokenAnnotation(4574,4578): such TokenAnnotation(4579,4591): Contribution TokenAnnotation(4591,4592): ( TokenAnnotation(4592,4593): s TokenAnnotation(4593,4594): ) TokenAnnotation(4595,4598): was TokenAnnotation(4599,4608): submitted TokenAnnotation(4608,4609): . SentenceAnnotation(4609,5016): If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. TokenAnnotation(4610,4612): If TokenAnnotation(4613,4616): You TokenAnnotation(4624,4633): institute TokenAnnotation(4634,4640): patent TokenAnnotation(4641,4651): litigation TokenAnnotation(4652,4659): against TokenAnnotation(4660,4663): any TokenAnnotation(4664,4670): entity TokenAnnotation(4671,4672): ( TokenAnnotation(4672,4681): including TokenAnnotation(4682,4683): a TokenAnnotation(4691,4696): cross TokenAnnotation(4696,4697): - TokenAnnotation(4697,4702): claim TokenAnnotation(4703,4705): or TokenAnnotation(4706,4718): counterclaim TokenAnnotation(4719,4721): in TokenAnnotation(4722,4723): a TokenAnnotation(4724,4731): lawsuit TokenAnnotation(4731,4732): ) TokenAnnotation(4733,4741): alleging TokenAnnotation(4742,4746): that TokenAnnotation(4747,4750): the TokenAnnotation(4751,4755): Work TokenAnnotation(4763,4765): or TokenAnnotation(4766,4767): a TokenAnnotation(4768,4780): Contribution TokenAnnotation(4781,4793): incorporated TokenAnnotation(4794,4800): within TokenAnnotation(4801,4804): the TokenAnnotation(4805,4809): Work TokenAnnotation(4810,4821): constitutes TokenAnnotation(4822,4828): direct TokenAnnotation(4836,4838): or TokenAnnotation(4839,4851): contributory TokenAnnotation(4852,4858): patent TokenAnnotation(4859,4871): infringement TokenAnnotation(4871,4872): , TokenAnnotation(4873,4877): then TokenAnnotation(4878,4881): any TokenAnnotation(4882,4888): patent TokenAnnotation(4889,4897): licenses TokenAnnotation(4905,4912): granted TokenAnnotation(4913,4915): to TokenAnnotation(4916,4919): You TokenAnnotation(4920,4925): under TokenAnnotation(4926,4930): this TokenAnnotation(4931,4938): License TokenAnnotation(4939,4942): for TokenAnnotation(4943,4947): that TokenAnnotation(4948,4952): Work TokenAnnotation(4953,4958): shall TokenAnnotation(4959,4968): terminate TokenAnnotation(4976,4978): as TokenAnnotation(4979,4981): of TokenAnnotation(4982,4985): the TokenAnnotation(4986,4990): date TokenAnnotation(4991,4995): such TokenAnnotation(4996,5006): litigation TokenAnnotation(5007,5009): is TokenAnnotation(5010,5015): filed TokenAnnotation(5015,5016): . SentenceAnnotation(5016,5025): 4. TokenAnnotation(5023,5024): 4 TokenAnnotation(5024,5025): . SentenceAnnotation(5025,5041): Redistribution. TokenAnnotation(5026,5040): Redistribution TokenAnnotation(5040,5041): . SentenceAnnotation(5041,6539): You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. TokenAnnotation(5042,5045): You TokenAnnotation(5046,5049): may TokenAnnotation(5050,5059): reproduce TokenAnnotation(5060,5063): and TokenAnnotation(5064,5074): distribute TokenAnnotation(5075,5081): copies TokenAnnotation(5082,5084): of TokenAnnotation(5085,5088): the TokenAnnotation(5096,5100): Work TokenAnnotation(5101,5103): or TokenAnnotation(5104,5114): Derivative TokenAnnotation(5115,5120): Works TokenAnnotation(5121,5128): thereof TokenAnnotation(5129,5131): in TokenAnnotation(5132,5135): any TokenAnnotation(5136,5142): medium TokenAnnotation(5142,5143): , TokenAnnotation(5144,5148): with TokenAnnotation(5149,5151): or TokenAnnotation(5152,5159): without TokenAnnotation(5167,5180): modifications TokenAnnotation(5180,5181): , TokenAnnotation(5182,5185): and TokenAnnotation(5186,5188): in TokenAnnotation(5189,5195): Source TokenAnnotation(5196,5198): or TokenAnnotation(5199,5205): Object TokenAnnotation(5206,5210): form TokenAnnotation(5210,5211): , TokenAnnotation(5212,5220): provided TokenAnnotation(5221,5225): that TokenAnnotation(5226,5229): You TokenAnnotation(5237,5241): meet TokenAnnotation(5242,5245): the TokenAnnotation(5246,5255): following TokenAnnotation(5256,5266): conditions TokenAnnotation(5266,5267): : TokenAnnotation(5277,5278): ( TokenAnnotation(5278,5279): a TokenAnnotation(5279,5280): ) TokenAnnotation(5281,5284): You TokenAnnotation(5285,5289): must TokenAnnotation(5290,5294): give TokenAnnotation(5295,5298): any TokenAnnotation(5299,5304): other TokenAnnotation(5305,5315): recipients TokenAnnotation(5316,5318): of TokenAnnotation(5319,5322): the TokenAnnotation(5323,5327): Work TokenAnnotation(5328,5330): or TokenAnnotation(5342,5352): Derivative TokenAnnotation(5353,5358): Works TokenAnnotation(5359,5360): a TokenAnnotation(5361,5365): copy TokenAnnotation(5366,5368): of TokenAnnotation(5369,5373): this TokenAnnotation(5374,5381): License TokenAnnotation(5381,5382): ; TokenAnnotation(5383,5386): and TokenAnnotation(5396,5397): ( TokenAnnotation(5397,5398): b TokenAnnotation(5398,5399): ) TokenAnnotation(5400,5403): You TokenAnnotation(5404,5408): must TokenAnnotation(5409,5414): cause TokenAnnotation(5415,5418): any TokenAnnotation(5419,5427): modified TokenAnnotation(5428,5433): files TokenAnnotation(5434,5436): to TokenAnnotation(5437,5442): carry TokenAnnotation(5443,5452): prominent TokenAnnotation(5453,5460): notices TokenAnnotation(5472,5479): stating TokenAnnotation(5480,5484): that TokenAnnotation(5485,5488): You TokenAnnotation(5489,5496): changed TokenAnnotation(5497,5500): the TokenAnnotation(5501,5506): files TokenAnnotation(5506,5507): ; TokenAnnotation(5508,5511): and TokenAnnotation(5521,5522): ( TokenAnnotation(5522,5523): c TokenAnnotation(5523,5524): ) TokenAnnotation(5525,5528): You TokenAnnotation(5529,5533): must TokenAnnotation(5534,5540): retain TokenAnnotation(5540,5541): , TokenAnnotation(5542,5544): in TokenAnnotation(5545,5548): the TokenAnnotation(5549,5555): Source TokenAnnotation(5556,5560): form TokenAnnotation(5561,5563): of TokenAnnotation(5564,5567): any TokenAnnotation(5568,5578): Derivative TokenAnnotation(5579,5584): Works TokenAnnotation(5596,5600): that TokenAnnotation(5601,5604): You TokenAnnotation(5605,5615): distribute TokenAnnotation(5615,5616): , TokenAnnotation(5617,5620): all TokenAnnotation(5621,5630): copyright TokenAnnotation(5630,5631): , TokenAnnotation(5632,5638): patent TokenAnnotation(5638,5639): , TokenAnnotation(5640,5649): trademark TokenAnnotation(5649,5650): , TokenAnnotation(5651,5654): and TokenAnnotation(5666,5677): attribution TokenAnnotation(5678,5685): notices TokenAnnotation(5686,5690): from TokenAnnotation(5691,5694): the TokenAnnotation(5695,5701): Source TokenAnnotation(5702,5706): form TokenAnnotation(5707,5709): of TokenAnnotation(5710,5713): the TokenAnnotation(5714,5718): Work TokenAnnotation(5718,5719): , TokenAnnotation(5731,5740): excluding TokenAnnotation(5741,5746): those TokenAnnotation(5747,5754): notices TokenAnnotation(5755,5759): that TokenAnnotation(5760,5762): do TokenAnnotation(5763,5766): not TokenAnnotation(5767,5774): pertain TokenAnnotation(5775,5777): to TokenAnnotation(5778,5781): any TokenAnnotation(5782,5786): part TokenAnnotation(5787,5789): of TokenAnnotation(5801,5804): the TokenAnnotation(5805,5815): Derivative TokenAnnotation(5816,5821): Works TokenAnnotation(5821,5822): ; TokenAnnotation(5823,5826): and TokenAnnotation(5836,5837): ( TokenAnnotation(5837,5838): d TokenAnnotation(5838,5839): ) TokenAnnotation(5840,5842): If TokenAnnotation(5843,5846): the TokenAnnotation(5847,5851): Work TokenAnnotation(5852,5860): includes TokenAnnotation(5861,5862): a TokenAnnotation(5863,5864): " TokenAnnotation(5864,5870): NOTICE TokenAnnotation(5870,5871): " TokenAnnotation(5872,5876): text TokenAnnotation(5877,5881): file TokenAnnotation(5882,5884): as TokenAnnotation(5885,5889): part TokenAnnotation(5890,5892): of TokenAnnotation(5893,5896): its TokenAnnotation(5908,5920): distribution TokenAnnotation(5920,5921): , TokenAnnotation(5922,5926): then TokenAnnotation(5927,5930): any TokenAnnotation(5931,5941): Derivative TokenAnnotation(5942,5947): Works TokenAnnotation(5948,5952): that TokenAnnotation(5953,5956): You TokenAnnotation(5957,5967): distribute TokenAnnotation(5968,5972): must TokenAnnotation(5984,5991): include TokenAnnotation(5992,5993): a TokenAnnotation(5994,6002): readable TokenAnnotation(6003,6007): copy TokenAnnotation(6008,6010): of TokenAnnotation(6011,6014): the TokenAnnotation(6015,6026): attribution TokenAnnotation(6027,6034): notices TokenAnnotation(6035,6044): contained TokenAnnotation(6056,6062): within TokenAnnotation(6063,6067): such TokenAnnotation(6068,6074): NOTICE TokenAnnotation(6075,6079): file TokenAnnotation(6079,6080): , TokenAnnotation(6081,6090): excluding TokenAnnotation(6091,6096): those TokenAnnotation(6097,6104): notices TokenAnnotation(6105,6109): that TokenAnnotation(6110,6112): do TokenAnnotation(6113,6116): not TokenAnnotation(6128,6135): pertain TokenAnnotation(6136,6138): to TokenAnnotation(6139,6142): any TokenAnnotation(6143,6147): part TokenAnnotation(6148,6150): of TokenAnnotation(6151,6154): the TokenAnnotation(6155,6165): Derivative TokenAnnotation(6166,6171): Works TokenAnnotation(6171,6172): , TokenAnnotation(6173,6175): in TokenAnnotation(6176,6178): at TokenAnnotation(6179,6184): least TokenAnnotation(6185,6188): one TokenAnnotation(6200,6202): of TokenAnnotation(6203,6206): the TokenAnnotation(6207,6216): following TokenAnnotation(6217,6223): places TokenAnnotation(6223,6224): : TokenAnnotation(6225,6231): within TokenAnnotation(6232,6233): a TokenAnnotation(6234,6240): NOTICE TokenAnnotation(6241,6245): text TokenAnnotation(6246,6250): file TokenAnnotation(6251,6262): distributed TokenAnnotation(6274,6276): as TokenAnnotation(6277,6281): part TokenAnnotation(6282,6284): of TokenAnnotation(6285,6288): the TokenAnnotation(6289,6299): Derivative TokenAnnotation(6300,6305): Works TokenAnnotation(6305,6306): ; TokenAnnotation(6307,6313): within TokenAnnotation(6314,6317): the TokenAnnotation(6318,6324): Source TokenAnnotation(6325,6329): form TokenAnnotation(6330,6332): or TokenAnnotation(6344,6357): documentation TokenAnnotation(6357,6358): , TokenAnnotation(6359,6361): if TokenAnnotation(6362,6370): provided TokenAnnotation(6371,6376): along TokenAnnotation(6377,6381): with TokenAnnotation(6382,6385): the TokenAnnotation(6386,6396): Derivative TokenAnnotation(6397,6402): Works TokenAnnotation(6402,6403): ; TokenAnnotation(6404,6406): or TokenAnnotation(6406,6407): , TokenAnnotation(6419,6425): within TokenAnnotation(6426,6427): a TokenAnnotation(6428,6435): display TokenAnnotation(6436,6445): generated TokenAnnotation(6446,6448): by TokenAnnotation(6449,6452): the TokenAnnotation(6453,6463): Derivative TokenAnnotation(6464,6469): Works TokenAnnotation(6469,6470): , TokenAnnotation(6471,6473): if TokenAnnotation(6474,6477): and TokenAnnotation(6489,6497): wherever TokenAnnotation(6498,6502): such TokenAnnotation(6503,6508): third TokenAnnotation(6508,6509): - TokenAnnotation(6509,6514): party TokenAnnotation(6515,6522): notices TokenAnnotation(6523,6531): normally TokenAnnotation(6532,6538): appear TokenAnnotation(6538,6539): . SentenceAnnotation(6539,6660): The contents of the NOTICE file are for informational purposes only and do not modify the License. TokenAnnotation(6540,6543): The TokenAnnotation(6544,6552): contents TokenAnnotation(6564,6566): of TokenAnnotation(6567,6570): the TokenAnnotation(6571,6577): NOTICE TokenAnnotation(6578,6582): file TokenAnnotation(6583,6586): are TokenAnnotation(6587,6590): for TokenAnnotation(6591,6604): informational TokenAnnotation(6605,6613): purposes TokenAnnotation(6614,6618): only TokenAnnotation(6619,6622): and TokenAnnotation(6634,6636): do TokenAnnotation(6637,6640): not TokenAnnotation(6641,6647): modify TokenAnnotation(6648,6651): the TokenAnnotation(6652,6659): License TokenAnnotation(6659,6660): . SentenceAnnotation(6660,6948): You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. TokenAnnotation(6661,6664): You TokenAnnotation(6665,6668): may TokenAnnotation(6669,6672): add TokenAnnotation(6673,6677): Your TokenAnnotation(6678,6681): own TokenAnnotation(6682,6693): attribution TokenAnnotation(6705,6712): notices TokenAnnotation(6713,6719): within TokenAnnotation(6720,6730): Derivative TokenAnnotation(6731,6736): Works TokenAnnotation(6737,6741): that TokenAnnotation(6742,6745): You TokenAnnotation(6746,6756): distribute TokenAnnotation(6756,6757): , TokenAnnotation(6758,6767): alongside TokenAnnotation(6779,6781): or TokenAnnotation(6782,6784): as TokenAnnotation(6785,6787): an TokenAnnotation(6788,6796): addendum TokenAnnotation(6797,6799): to TokenAnnotation(6800,6803): the TokenAnnotation(6804,6810): NOTICE TokenAnnotation(6811,6815): text TokenAnnotation(6816,6820): from TokenAnnotation(6821,6824): the TokenAnnotation(6825,6829): Work TokenAnnotation(6829,6830): , TokenAnnotation(6831,6839): provided TokenAnnotation(6851,6855): that TokenAnnotation(6856,6860): such TokenAnnotation(6861,6871): additional TokenAnnotation(6872,6883): attribution TokenAnnotation(6884,6891): notices TokenAnnotation(6892,6898): cannot TokenAnnotation(6899,6901): be TokenAnnotation(6902,6911): construed TokenAnnotation(6923,6925): as TokenAnnotation(6926,6935): modifying TokenAnnotation(6936,6939): the TokenAnnotation(6940,6947): License TokenAnnotation(6947,6948): . SentenceAnnotation(6948,7356): You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. TokenAnnotation(6958,6961): You TokenAnnotation(6962,6965): may TokenAnnotation(6966,6969): add TokenAnnotation(6970,6974): Your TokenAnnotation(6975,6978): own TokenAnnotation(6979,6988): copyright TokenAnnotation(6989,6998): statement TokenAnnotation(6999,7001): to TokenAnnotation(7002,7006): Your TokenAnnotation(7007,7020): modifications TokenAnnotation(7021,7024): and TokenAnnotation(7032,7035): may TokenAnnotation(7036,7043): provide TokenAnnotation(7044,7054): additional TokenAnnotation(7055,7057): or TokenAnnotation(7058,7067): different TokenAnnotation(7068,7075): license TokenAnnotation(7076,7081): terms TokenAnnotation(7082,7085): and TokenAnnotation(7086,7096): conditions TokenAnnotation(7104,7107): for TokenAnnotation(7108,7111): use TokenAnnotation(7111,7112): , TokenAnnotation(7113,7125): reproduction TokenAnnotation(7125,7126): , TokenAnnotation(7127,7129): or TokenAnnotation(7130,7142): distribution TokenAnnotation(7143,7145): of TokenAnnotation(7146,7150): Your TokenAnnotation(7151,7164): modifications TokenAnnotation(7164,7165): , TokenAnnotation(7166,7168): or TokenAnnotation(7176,7179): for TokenAnnotation(7180,7183): any TokenAnnotation(7184,7188): such TokenAnnotation(7189,7199): Derivative TokenAnnotation(7200,7205): Works TokenAnnotation(7206,7208): as TokenAnnotation(7209,7210): a TokenAnnotation(7211,7216): whole TokenAnnotation(7216,7217): , TokenAnnotation(7218,7226): provided TokenAnnotation(7227,7231): Your TokenAnnotation(7232,7235): use TokenAnnotation(7235,7236): , TokenAnnotation(7244,7256): reproduction TokenAnnotation(7256,7257): , TokenAnnotation(7258,7261): and TokenAnnotation(7262,7274): distribution TokenAnnotation(7275,7277): of TokenAnnotation(7278,7281): the TokenAnnotation(7282,7286): Work TokenAnnotation(7287,7296): otherwise TokenAnnotation(7297,7305): complies TokenAnnotation(7306,7310): with TokenAnnotation(7318,7321): the TokenAnnotation(7322,7332): conditions TokenAnnotation(7333,7339): stated TokenAnnotation(7340,7342): in TokenAnnotation(7343,7347): this TokenAnnotation(7348,7355): License TokenAnnotation(7355,7356): . SentenceAnnotation(7356,7365): 5. TokenAnnotation(7363,7364): 5 TokenAnnotation(7364,7365): . SentenceAnnotation(7365,7394): Submission of Contributions. TokenAnnotation(7366,7376): Submission TokenAnnotation(7377,7379): of TokenAnnotation(7380,7393): Contributions TokenAnnotation(7393,7394): . SentenceAnnotation(7394,7645): Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. TokenAnnotation(7395,7401): Unless TokenAnnotation(7402,7405): You TokenAnnotation(7406,7416): explicitly TokenAnnotation(7417,7422): state TokenAnnotation(7423,7432): otherwise TokenAnnotation(7432,7433): , TokenAnnotation(7441,7444): any TokenAnnotation(7445,7457): Contribution TokenAnnotation(7458,7471): intentionally TokenAnnotation(7472,7481): submitted TokenAnnotation(7482,7485): for TokenAnnotation(7486,7495): inclusion TokenAnnotation(7496,7498): in TokenAnnotation(7499,7502): the TokenAnnotation(7503,7507): Work TokenAnnotation(7515,7517): by TokenAnnotation(7518,7521): You TokenAnnotation(7522,7524): to TokenAnnotation(7525,7528): the TokenAnnotation(7529,7537): Licensor TokenAnnotation(7538,7543): shall TokenAnnotation(7544,7546): be TokenAnnotation(7547,7552): under TokenAnnotation(7553,7556): the TokenAnnotation(7557,7562): terms TokenAnnotation(7563,7566): and TokenAnnotation(7567,7577): conditions TokenAnnotation(7578,7580): of TokenAnnotation(7588,7592): this TokenAnnotation(7593,7600): License TokenAnnotation(7600,7601): , TokenAnnotation(7602,7609): without TokenAnnotation(7610,7613): any TokenAnnotation(7614,7624): additional TokenAnnotation(7625,7630): terms TokenAnnotation(7631,7633): or TokenAnnotation(7634,7644): conditions TokenAnnotation(7644,7645): . SentenceAnnotation(7645,7844): Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. TokenAnnotation(7653,7668): Notwithstanding TokenAnnotation(7669,7672): the TokenAnnotation(7673,7678): above TokenAnnotation(7678,7679): , TokenAnnotation(7680,7687): nothing TokenAnnotation(7688,7694): herein TokenAnnotation(7695,7700): shall TokenAnnotation(7701,7710): supersede TokenAnnotation(7711,7713): or TokenAnnotation(7714,7720): modify TokenAnnotation(7728,7731): the TokenAnnotation(7732,7737): terms TokenAnnotation(7738,7740): of TokenAnnotation(7741,7744): any TokenAnnotation(7745,7753): separate TokenAnnotation(7754,7761): license TokenAnnotation(7762,7771): agreement TokenAnnotation(7772,7775): you TokenAnnotation(7776,7779): may TokenAnnotation(7780,7784): have TokenAnnotation(7785,7793): executed TokenAnnotation(7801,7805): with TokenAnnotation(7806,7814): Licensor TokenAnnotation(7815,7824): regarding TokenAnnotation(7825,7829): such TokenAnnotation(7830,7843): Contributions TokenAnnotation(7843,7844): . SentenceAnnotation(7844,7853): 6. TokenAnnotation(7851,7852): 6 TokenAnnotation(7852,7853): . SentenceAnnotation(7853,7865): Trademarks. TokenAnnotation(7854,7864): Trademarks TokenAnnotation(7864,7865): . SentenceAnnotation(7865,8147): This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. TokenAnnotation(7866,7870): This TokenAnnotation(7871,7878): License TokenAnnotation(7879,7883): does TokenAnnotation(7884,7887): not TokenAnnotation(7888,7893): grant TokenAnnotation(7894,7904): permission TokenAnnotation(7905,7907): to TokenAnnotation(7908,7911): use TokenAnnotation(7912,7915): the TokenAnnotation(7916,7921): trade TokenAnnotation(7929,7934): names TokenAnnotation(7934,7935): , TokenAnnotation(7936,7946): trademarks TokenAnnotation(7946,7947): , TokenAnnotation(7948,7955): service TokenAnnotation(7956,7961): marks TokenAnnotation(7961,7962): , TokenAnnotation(7963,7965): or TokenAnnotation(7966,7973): product TokenAnnotation(7974,7979): names TokenAnnotation(7980,7982): of TokenAnnotation(7983,7986): the TokenAnnotation(7987,7995): Licensor TokenAnnotation(7995,7996): , TokenAnnotation(8004,8010): except TokenAnnotation(8011,8013): as TokenAnnotation(8014,8022): required TokenAnnotation(8023,8026): for TokenAnnotation(8027,8037): reasonable TokenAnnotation(8038,8041): and TokenAnnotation(8042,8051): customary TokenAnnotation(8052,8055): use TokenAnnotation(8056,8058): in TokenAnnotation(8059,8069): describing TokenAnnotation(8070,8073): the TokenAnnotation(8081,8087): origin TokenAnnotation(8088,8090): of TokenAnnotation(8091,8094): the TokenAnnotation(8095,8099): Work TokenAnnotation(8100,8103): and TokenAnnotation(8104,8115): reproducing TokenAnnotation(8116,8119): the TokenAnnotation(8120,8127): content TokenAnnotation(8128,8130): of TokenAnnotation(8131,8134): the TokenAnnotation(8135,8141): NOTICE TokenAnnotation(8142,8146): file TokenAnnotation(8146,8147): . SentenceAnnotation(8147,8156): 7. TokenAnnotation(8154,8155): 7 TokenAnnotation(8155,8156): . SentenceAnnotation(8156,8180): Disclaimer of Warranty. TokenAnnotation(8157,8167): Disclaimer TokenAnnotation(8168,8170): of TokenAnnotation(8171,8179): Warranty TokenAnnotation(8179,8180): . SentenceAnnotation(8180,8594): Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. TokenAnnotation(8181,8187): Unless TokenAnnotation(8188,8196): required TokenAnnotation(8197,8199): by TokenAnnotation(8200,8210): applicable TokenAnnotation(8211,8214): law TokenAnnotation(8215,8217): or TokenAnnotation(8225,8231): agreed TokenAnnotation(8232,8234): to TokenAnnotation(8235,8237): in TokenAnnotation(8238,8245): writing TokenAnnotation(8245,8246): , TokenAnnotation(8247,8255): Licensor TokenAnnotation(8256,8264): provides TokenAnnotation(8265,8268): the TokenAnnotation(8269,8273): Work TokenAnnotation(8274,8275): ( TokenAnnotation(8275,8278): and TokenAnnotation(8279,8283): each TokenAnnotation(8291,8302): Contributor TokenAnnotation(8303,8311): provides TokenAnnotation(8312,8315): its TokenAnnotation(8316,8329): Contributions TokenAnnotation(8329,8330): ) TokenAnnotation(8331,8333): on TokenAnnotation(8334,8336): an TokenAnnotation(8337,8338): " TokenAnnotation(8338,8340): AS TokenAnnotation(8341,8343): IS TokenAnnotation(8343,8344): " TokenAnnotation(8345,8350): BASIS TokenAnnotation(8350,8351): , TokenAnnotation(8359,8366): WITHOUT TokenAnnotation(8367,8377): WARRANTIES TokenAnnotation(8378,8380): OR TokenAnnotation(8381,8391): CONDITIONS TokenAnnotation(8392,8394): OF TokenAnnotation(8395,8398): ANY TokenAnnotation(8399,8403): KIND TokenAnnotation(8403,8404): , TokenAnnotation(8405,8411): either TokenAnnotation(8412,8419): express TokenAnnotation(8420,8422): or TokenAnnotation(8430,8437): implied TokenAnnotation(8437,8438): , TokenAnnotation(8439,8448): including TokenAnnotation(8448,8449): , TokenAnnotation(8450,8457): without TokenAnnotation(8458,8468): limitation TokenAnnotation(8468,8469): , TokenAnnotation(8470,8473): any TokenAnnotation(8474,8484): warranties TokenAnnotation(8485,8487): or TokenAnnotation(8488,8498): conditions TokenAnnotation(8506,8508): of TokenAnnotation(8509,8514): TITLE TokenAnnotation(8514,8515): , TokenAnnotation(8516,8519): NON TokenAnnotation(8519,8520): - TokenAnnotation(8520,8532): INFRINGEMENT TokenAnnotation(8532,8533): , TokenAnnotation(8534,8549): MERCHANTABILITY TokenAnnotation(8549,8550): , TokenAnnotation(8551,8553): or TokenAnnotation(8554,8561): FITNESS TokenAnnotation(8562,8565): FOR TokenAnnotation(8566,8567): A TokenAnnotation(8575,8585): PARTICULAR TokenAnnotation(8586,8593): PURPOSE TokenAnnotation(8593,8594): . SentenceAnnotation(8594,8793): You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. TokenAnnotation(8595,8598): You TokenAnnotation(8599,8602): are TokenAnnotation(8603,8609): solely TokenAnnotation(8610,8621): responsible TokenAnnotation(8622,8625): for TokenAnnotation(8626,8637): determining TokenAnnotation(8638,8641): the TokenAnnotation(8649,8664): appropriateness TokenAnnotation(8665,8667): of TokenAnnotation(8668,8673): using TokenAnnotation(8674,8676): or TokenAnnotation(8677,8691): redistributing TokenAnnotation(8692,8695): the TokenAnnotation(8696,8700): Work TokenAnnotation(8701,8704): and TokenAnnotation(8705,8711): assume TokenAnnotation(8712,8715): any TokenAnnotation(8723,8728): risks TokenAnnotation(8729,8739): associated TokenAnnotation(8740,8744): with TokenAnnotation(8745,8749): Your TokenAnnotation(8750,8758): exercise TokenAnnotation(8759,8761): of TokenAnnotation(8762,8773): permissions TokenAnnotation(8774,8779): under TokenAnnotation(8780,8784): this TokenAnnotation(8785,8792): License TokenAnnotation(8792,8793): . SentenceAnnotation(8793,8802): 8. TokenAnnotation(8800,8801): 8 TokenAnnotation(8801,8802): . SentenceAnnotation(8802,8827): Limitation of Liability. TokenAnnotation(8803,8813): Limitation TokenAnnotation(8814,8816): of TokenAnnotation(8817,8826): Liability TokenAnnotation(8826,8827): . SentenceAnnotation(8827,9575): In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. TokenAnnotation(8828,8830): In TokenAnnotation(8831,8833): no TokenAnnotation(8834,8839): event TokenAnnotation(8840,8843): and TokenAnnotation(8844,8849): under TokenAnnotation(8850,8852): no TokenAnnotation(8853,8858): legal TokenAnnotation(8859,8865): theory TokenAnnotation(8865,8866): , TokenAnnotation(8874,8881): whether TokenAnnotation(8882,8884): in TokenAnnotation(8885,8889): tort TokenAnnotation(8890,8891): ( TokenAnnotation(8891,8900): including TokenAnnotation(8901,8911): negligence TokenAnnotation(8911,8912): ) TokenAnnotation(8912,8913): , TokenAnnotation(8914,8922): contract TokenAnnotation(8922,8923): , TokenAnnotation(8924,8926): or TokenAnnotation(8927,8936): otherwise TokenAnnotation(8936,8937): , TokenAnnotation(8945,8951): unless TokenAnnotation(8952,8960): required TokenAnnotation(8961,8963): by TokenAnnotation(8964,8974): applicable TokenAnnotation(8975,8978): law TokenAnnotation(8979,8980): ( TokenAnnotation(8980,8984): such TokenAnnotation(8985,8987): as TokenAnnotation(8988,8998): deliberate TokenAnnotation(8999,9002): and TokenAnnotation(9003,9010): grossly TokenAnnotation(9018,9027): negligent TokenAnnotation(9028,9032): acts TokenAnnotation(9032,9033): ) TokenAnnotation(9034,9036): or TokenAnnotation(9037,9043): agreed TokenAnnotation(9044,9046): to TokenAnnotation(9047,9049): in TokenAnnotation(9050,9057): writing TokenAnnotation(9057,9058): , TokenAnnotation(9059,9064): shall TokenAnnotation(9065,9068): any TokenAnnotation(9069,9080): Contributor TokenAnnotation(9081,9083): be TokenAnnotation(9091,9097): liable TokenAnnotation(9098,9100): to TokenAnnotation(9101,9104): You TokenAnnotation(9105,9108): for TokenAnnotation(9109,9116): damages TokenAnnotation(9116,9117): , TokenAnnotation(9118,9127): including TokenAnnotation(9128,9131): any TokenAnnotation(9132,9138): direct TokenAnnotation(9138,9139): , TokenAnnotation(9140,9148): indirect TokenAnnotation(9148,9149): , TokenAnnotation(9150,9157): special TokenAnnotation(9157,9158): , TokenAnnotation(9166,9176): incidental TokenAnnotation(9176,9177): , TokenAnnotation(9178,9180): or TokenAnnotation(9181,9194): consequential TokenAnnotation(9195,9202): damages TokenAnnotation(9203,9205): of TokenAnnotation(9206,9209): any TokenAnnotation(9210,9219): character TokenAnnotation(9220,9227): arising TokenAnnotation(9228,9230): as TokenAnnotation(9231,9232): a TokenAnnotation(9240,9246): result TokenAnnotation(9247,9249): of TokenAnnotation(9250,9254): this TokenAnnotation(9255,9262): License TokenAnnotation(9263,9265): or TokenAnnotation(9266,9269): out TokenAnnotation(9270,9272): of TokenAnnotation(9273,9276): the TokenAnnotation(9277,9280): use TokenAnnotation(9281,9283): or TokenAnnotation(9284,9293): inability TokenAnnotation(9294,9296): to TokenAnnotation(9297,9300): use TokenAnnotation(9301,9304): the TokenAnnotation(9312,9316): Work TokenAnnotation(9317,9318): ( TokenAnnotation(9318,9327): including TokenAnnotation(9328,9331): but TokenAnnotation(9332,9335): not TokenAnnotation(9336,9343): limited TokenAnnotation(9344,9346): to TokenAnnotation(9347,9354): damages TokenAnnotation(9355,9358): for TokenAnnotation(9359,9363): loss TokenAnnotation(9364,9366): of TokenAnnotation(9367,9375): goodwill TokenAnnotation(9375,9376): , TokenAnnotation(9384,9388): work TokenAnnotation(9389,9397): stoppage TokenAnnotation(9397,9398): , TokenAnnotation(9399,9407): computer TokenAnnotation(9408,9415): failure TokenAnnotation(9416,9418): or TokenAnnotation(9419,9430): malfunction TokenAnnotation(9430,9431): , TokenAnnotation(9432,9434): or TokenAnnotation(9435,9438): any TokenAnnotation(9439,9442): and TokenAnnotation(9443,9446): all TokenAnnotation(9454,9459): other TokenAnnotation(9460,9470): commercial TokenAnnotation(9471,9478): damages TokenAnnotation(9479,9481): or TokenAnnotation(9482,9488): losses TokenAnnotation(9488,9489): ) TokenAnnotation(9489,9490): , TokenAnnotation(9491,9495): even TokenAnnotation(9496,9498): if TokenAnnotation(9499,9503): such TokenAnnotation(9504,9515): Contributor TokenAnnotation(9523,9526): has TokenAnnotation(9527,9531): been TokenAnnotation(9532,9539): advised TokenAnnotation(9540,9542): of TokenAnnotation(9543,9546): the TokenAnnotation(9547,9558): possibility TokenAnnotation(9559,9561): of TokenAnnotation(9562,9566): such TokenAnnotation(9567,9574): damages TokenAnnotation(9574,9575): . SentenceAnnotation(9575,9584): 9. TokenAnnotation(9582,9583): 9 TokenAnnotation(9583,9584): . SentenceAnnotation(9584,9628): Accepting Warranty or Additional Liability. TokenAnnotation(9585,9594): Accepting TokenAnnotation(9595,9603): Warranty TokenAnnotation(9604,9606): or TokenAnnotation(9607,9617): Additional TokenAnnotation(9618,9627): Liability TokenAnnotation(9627,9628): . SentenceAnnotation(9628,9881): While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. TokenAnnotation(9629,9634): While TokenAnnotation(9635,9649): redistributing TokenAnnotation(9657,9660): the TokenAnnotation(9661,9665): Work TokenAnnotation(9666,9668): or TokenAnnotation(9669,9679): Derivative TokenAnnotation(9680,9685): Works TokenAnnotation(9686,9693): thereof TokenAnnotation(9693,9694): , TokenAnnotation(9695,9698): You TokenAnnotation(9699,9702): may TokenAnnotation(9703,9709): choose TokenAnnotation(9710,9712): to TokenAnnotation(9713,9718): offer TokenAnnotation(9718,9719): , TokenAnnotation(9727,9730): and TokenAnnotation(9731,9737): charge TokenAnnotation(9738,9739): a TokenAnnotation(9740,9743): fee TokenAnnotation(9744,9747): for TokenAnnotation(9747,9748): , TokenAnnotation(9749,9759): acceptance TokenAnnotation(9760,9762): of TokenAnnotation(9763,9770): support TokenAnnotation(9770,9771): , TokenAnnotation(9772,9780): warranty TokenAnnotation(9780,9781): , TokenAnnotation(9782,9791): indemnity TokenAnnotation(9791,9792): , TokenAnnotation(9800,9802): or TokenAnnotation(9803,9808): other TokenAnnotation(9809,9818): liability TokenAnnotation(9819,9830): obligations TokenAnnotation(9831,9834): and TokenAnnotation(9834,9835): / TokenAnnotation(9835,9837): or TokenAnnotation(9838,9844): rights TokenAnnotation(9845,9855): consistent TokenAnnotation(9856,9860): with TokenAnnotation(9861,9865): this TokenAnnotation(9873,9880): License TokenAnnotation(9880,9881): . SentenceAnnotation(9881,10291): However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. TokenAnnotation(9882,9889): However TokenAnnotation(9889,9890): , TokenAnnotation(9891,9893): in TokenAnnotation(9894,9903): accepting TokenAnnotation(9904,9908): such TokenAnnotation(9909,9920): obligations TokenAnnotation(9920,9921): , TokenAnnotation(9922,9925): You TokenAnnotation(9926,9929): may TokenAnnotation(9930,9933): act TokenAnnotation(9934,9938): only TokenAnnotation(9946,9948): on TokenAnnotation(9949,9953): Your TokenAnnotation(9954,9957): own TokenAnnotation(9958,9964): behalf TokenAnnotation(9965,9968): and TokenAnnotation(9969,9971): on TokenAnnotation(9972,9976): Your TokenAnnotation(9977,9981): sole TokenAnnotation(9982,9996): responsibility TokenAnnotation(9996,9997): , TokenAnnotation(9998,10001): not TokenAnnotation(10002,10004): on TokenAnnotation(10005,10011): behalf TokenAnnotation(10019,10021): of TokenAnnotation(10022,10025): any TokenAnnotation(10026,10031): other TokenAnnotation(10032,10043): Contributor TokenAnnotation(10043,10044): , TokenAnnotation(10045,10048): and TokenAnnotation(10049,10053): only TokenAnnotation(10054,10056): if TokenAnnotation(10057,10060): You TokenAnnotation(10061,10066): agree TokenAnnotation(10067,10069): to TokenAnnotation(10070,10079): indemnify TokenAnnotation(10079,10080): , TokenAnnotation(10088,10094): defend TokenAnnotation(10094,10095): , TokenAnnotation(10096,10099): and TokenAnnotation(10100,10104): hold TokenAnnotation(10105,10109): each TokenAnnotation(10110,10121): Contributor TokenAnnotation(10122,10130): harmless TokenAnnotation(10131,10134): for TokenAnnotation(10135,10138): any TokenAnnotation(10139,10148): liability TokenAnnotation(10156,10164): incurred TokenAnnotation(10165,10167): by TokenAnnotation(10167,10168): , TokenAnnotation(10169,10171): or TokenAnnotation(10172,10178): claims TokenAnnotation(10179,10187): asserted TokenAnnotation(10188,10195): against TokenAnnotation(10195,10196): , TokenAnnotation(10197,10201): such TokenAnnotation(10202,10213): Contributor TokenAnnotation(10214,10216): by TokenAnnotation(10217,10223): reason TokenAnnotation(10231,10233): of TokenAnnotation(10234,10238): your TokenAnnotation(10239,10248): accepting TokenAnnotation(10249,10252): any TokenAnnotation(10253,10257): such TokenAnnotation(10258,10266): warranty TokenAnnotation(10267,10269): or TokenAnnotation(10270,10280): additional TokenAnnotation(10281,10290): liability TokenAnnotation(10290,10291): . SentenceAnnotation(10291,10387): END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. TokenAnnotation(10298,10301): END TokenAnnotation(10302,10304): OF TokenAnnotation(10305,10310): TERMS TokenAnnotation(10311,10314): AND TokenAnnotation(10315,10325): CONDITIONS TokenAnnotation(10332,10340): APPENDIX TokenAnnotation(10340,10341): : TokenAnnotation(10342,10345): How TokenAnnotation(10346,10348): to TokenAnnotation(10349,10354): apply TokenAnnotation(10355,10358): the TokenAnnotation(10359,10365): Apache TokenAnnotation(10366,10373): License TokenAnnotation(10374,10376): to TokenAnnotation(10377,10381): your TokenAnnotation(10382,10386): work TokenAnnotation(10386,10387): . SentenceAnnotation(10387,10583): To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. TokenAnnotation(10397,10399): To TokenAnnotation(10400,10405): apply TokenAnnotation(10406,10409): the TokenAnnotation(10410,10416): Apache TokenAnnotation(10417,10424): License TokenAnnotation(10425,10427): to TokenAnnotation(10428,10432): your TokenAnnotation(10433,10437): work TokenAnnotation(10437,10438): , TokenAnnotation(10439,10445): attach TokenAnnotation(10446,10449): the TokenAnnotation(10450,10459): following TokenAnnotation(10467,10478): boilerplate TokenAnnotation(10479,10485): notice TokenAnnotation(10485,10486): , TokenAnnotation(10487,10491): with TokenAnnotation(10492,10495): the TokenAnnotation(10496,10502): fields TokenAnnotation(10503,10511): enclosed TokenAnnotation(10512,10514): by TokenAnnotation(10515,10523): brackets TokenAnnotation(10524,10525): " TokenAnnotation(10525,10526): [ TokenAnnotation(10526,10527): ] TokenAnnotation(10527,10528): " TokenAnnotation(10536,10544): replaced TokenAnnotation(10545,10549): with TokenAnnotation(10550,10554): your TokenAnnotation(10555,10558): own TokenAnnotation(10559,10570): identifying TokenAnnotation(10571,10582): information TokenAnnotation(10582,10583): . SentenceAnnotation(10583,10711): (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. TokenAnnotation(10584,10585): ( TokenAnnotation(10585,10588): Don TokenAnnotation(10588,10589): ' TokenAnnotation(10589,10590): t TokenAnnotation(10591,10598): include TokenAnnotation(10606,10609): the TokenAnnotation(10610,10618): brackets TokenAnnotation(10618,10619): ! TokenAnnotation(10619,10620): ) TokenAnnotation(10622,10625): The TokenAnnotation(10626,10630): text TokenAnnotation(10631,10637): should TokenAnnotation(10638,10640): be TokenAnnotation(10641,10649): enclosed TokenAnnotation(10650,10652): in TokenAnnotation(10653,10656): the TokenAnnotation(10657,10668): appropriate TokenAnnotation(10676,10683): comment TokenAnnotation(10684,10690): syntax TokenAnnotation(10691,10694): for TokenAnnotation(10695,10698): the TokenAnnotation(10699,10703): file TokenAnnotation(10704,10710): format TokenAnnotation(10710,10711): . SentenceAnnotation(10711,10921): We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. TokenAnnotation(10712,10714): We TokenAnnotation(10715,10719): also TokenAnnotation(10720,10729): recommend TokenAnnotation(10730,10734): that TokenAnnotation(10735,10736): a TokenAnnotation(10744,10748): file TokenAnnotation(10749,10751): or TokenAnnotation(10752,10757): class TokenAnnotation(10758,10762): name TokenAnnotation(10763,10766): and TokenAnnotation(10767,10778): description TokenAnnotation(10779,10781): of TokenAnnotation(10782,10789): purpose TokenAnnotation(10790,10792): be TokenAnnotation(10793,10801): included TokenAnnotation(10802,10804): on TokenAnnotation(10805,10808): the TokenAnnotation(10816,10820): same TokenAnnotation(10821,10822): " TokenAnnotation(10822,10829): printed TokenAnnotation(10830,10834): page TokenAnnotation(10834,10835): " TokenAnnotation(10836,10838): as TokenAnnotation(10839,10842): the TokenAnnotation(10843,10852): copyright TokenAnnotation(10853,10859): notice TokenAnnotation(10860,10863): for TokenAnnotation(10864,10870): easier TokenAnnotation(10878,10892): identification TokenAnnotation(10893,10899): within TokenAnnotation(10900,10905): third TokenAnnotation(10905,10906): - TokenAnnotation(10906,10911): party TokenAnnotation(10912,10920): archives TokenAnnotation(10920,10921): . SentenceAnnotation(10921,11109): Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. TokenAnnotation(10928,10937): Copyright TokenAnnotation(10938,10939): [ TokenAnnotation(10939,10943): yyyy TokenAnnotation(10943,10944): ] TokenAnnotation(10945,10946): [ TokenAnnotation(10946,10950): name TokenAnnotation(10951,10953): of TokenAnnotation(10954,10963): copyright TokenAnnotation(10964,10969): owner TokenAnnotation(10969,10970): ] TokenAnnotation(10977,10985): Licensed TokenAnnotation(10986,10991): under TokenAnnotation(10992,10995): the TokenAnnotation(10996,11002): Apache TokenAnnotation(11003,11010): License TokenAnnotation(11010,11011): , TokenAnnotation(11012,11019): Version TokenAnnotation(11020,11021): 2 TokenAnnotation(11021,11022): . TokenAnnotation(11022,11023): 0 TokenAnnotation(11024,11025): ( TokenAnnotation(11025,11028): the TokenAnnotation(11029,11030): " TokenAnnotation(11030,11037): License TokenAnnotation(11037,11038): " TokenAnnotation(11038,11039): ) TokenAnnotation(11039,11040): ; TokenAnnotation(11045,11048): you TokenAnnotation(11049,11052): may TokenAnnotation(11053,11056): not TokenAnnotation(11057,11060): use TokenAnnotation(11061,11065): this TokenAnnotation(11066,11070): file TokenAnnotation(11071,11077): except TokenAnnotation(11078,11080): in TokenAnnotation(11081,11091): compliance TokenAnnotation(11092,11096): with TokenAnnotation(11097,11100): the TokenAnnotation(11101,11108): License TokenAnnotation(11108,11109): . SentenceAnnotation(11109,11427): You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. TokenAnnotation(11114,11117): You TokenAnnotation(11118,11121): may TokenAnnotation(11122,11128): obtain TokenAnnotation(11129,11130): a TokenAnnotation(11131,11135): copy TokenAnnotation(11136,11138): of TokenAnnotation(11139,11142): the TokenAnnotation(11143,11150): License TokenAnnotation(11151,11153): at TokenAnnotation(11164,11168): http TokenAnnotation(11168,11169): : TokenAnnotation(11169,11170): / TokenAnnotation(11170,11171): / TokenAnnotation(11171,11174): www TokenAnnotation(11174,11175): . TokenAnnotation(11175,11181): apache TokenAnnotation(11181,11182): . TokenAnnotation(11182,11185): org TokenAnnotation(11185,11186): / TokenAnnotation(11186,11194): licenses TokenAnnotation(11194,11195): / TokenAnnotation(11195,11202): LICENSE TokenAnnotation(11202,11203): - TokenAnnotation(11203,11204): 2 TokenAnnotation(11204,11205): . TokenAnnotation(11205,11206): 0 TokenAnnotation(11213,11219): Unless TokenAnnotation(11220,11228): required TokenAnnotation(11229,11231): by TokenAnnotation(11232,11242): applicable TokenAnnotation(11243,11246): law TokenAnnotation(11247,11249): or TokenAnnotation(11250,11256): agreed TokenAnnotation(11257,11259): to TokenAnnotation(11260,11262): in TokenAnnotation(11263,11270): writing TokenAnnotation(11270,11271): , TokenAnnotation(11272,11280): software TokenAnnotation(11285,11296): distributed TokenAnnotation(11297,11302): under TokenAnnotation(11303,11306): the TokenAnnotation(11307,11314): License TokenAnnotation(11315,11317): is TokenAnnotation(11318,11329): distributed TokenAnnotation(11330,11332): on TokenAnnotation(11333,11335): an TokenAnnotation(11336,11337): " TokenAnnotation(11337,11339): AS TokenAnnotation(11340,11342): IS TokenAnnotation(11342,11343): " TokenAnnotation(11344,11349): BASIS TokenAnnotation(11349,11350): , TokenAnnotation(11355,11362): WITHOUT TokenAnnotation(11363,11373): WARRANTIES TokenAnnotation(11374,11376): OR TokenAnnotation(11377,11387): CONDITIONS TokenAnnotation(11388,11390): OF TokenAnnotation(11391,11394): ANY TokenAnnotation(11395,11399): KIND TokenAnnotation(11399,11400): , TokenAnnotation(11401,11407): either TokenAnnotation(11408,11415): express TokenAnnotation(11416,11418): or TokenAnnotation(11419,11426): implied TokenAnnotation(11426,11427): . SentenceAnnotation(11427,11534): See the License for the specific language governing permissions and limitations under the License. TokenAnnotation(11432,11435): See TokenAnnotation(11436,11439): the TokenAnnotation(11440,11447): License TokenAnnotation(11448,11451): for TokenAnnotation(11452,11455): the TokenAnnotation(11456,11464): specific TokenAnnotation(11465,11473): language TokenAnnotation(11474,11483): governing TokenAnnotation(11484,11495): permissions TokenAnnotation(11496,11499): and TokenAnnotation(11504,11515): limitations TokenAnnotation(11516,11521): under TokenAnnotation(11522,11525): the TokenAnnotation(11526,11533): License TokenAnnotation(11533,11534): . uima-addons-2.3.1/WhitespaceTokenizer/src/test/java/0000755000175000017500000000000011625126452022274 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/test/java/org/0000755000175000017500000000000011625126452023063 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/test/java/org/apache/0000755000175000017500000000000011625126452024304 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/test/java/org/apache/uima/0000755000175000017500000000000011625126452025237 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/src/test/java/org/apache/uima/annotator/0000755000175000017500000000000011625126452027244 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/WhitespaceTokenizer/src/test/java/org/apache/uima/annotator/WhitespaceTokenizerPerfTest.javauima-addons-2.3.1/WhitespaceTokenizer/src/test/java/org/apache/uima/annotator/WhitespaceTokenizerPer0000644000175000017500000000416211625126452033630 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator; import java.io.File; import junit.framework.TestCase; import org.apache.uima.test.junit_extension.AnnotatorPerformanceTester; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.test.junit_extension.PerformanceTestResult; /** * * WhitespaceTokenizer performance test class */ public class WhitespaceTokenizerPerfTest extends TestCase { /** * test annotator performance for simple english document. * * @throws Exception */ public void testEnglishProcessingTest() throws Exception { // get descriptor File descFile = JUnitExtension.getFile("WhitespaceTokenizer.xml"); File testFileDir = JUnitExtension.getFile("perfTestFiles"); // run performance test PerformanceTestResult result = AnnotatorPerformanceTester.runPerformanceTest(true, 10000, descFile, testFileDir, null, true); // get result file System.out.println(result); } /** * main method to start the tests not a JUnit test. * * @param args */ public static void main(String[] args) { WhitespaceTokenizerPerfTest perf = new WhitespaceTokenizerPerfTest(); try { perf.testEnglishProcessingTest(); } catch (Exception ex) { ex.printStackTrace(); } } }uima-addons-2.3.1/WhitespaceTokenizer/src/test/java/org/apache/uima/annotator/WhitespaceTokTest.java0000644000175000017500000000710511625126452033524 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator; import java.io.File; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * Testclass for the WhitespaceTokenizer annotator. */ public class WhitespaceTokTest extends TestCase { private AnnotatorTester annotTester; /** * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { this.annotTester = new AnnotatorTester(JUnitExtension.getFile("WhitespaceTokenizer.xml")); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); this.annotTester = null; } public void testAnnotatorSpecial() throws Exception { //retrieve Annotator sample text String text = AnnotatorTester.readFileContent(JUnitExtension.getFile("testdoc.txt"), "UTF-8"); //execute sample text CAS cas = this.annotTester.performTest(text,"en"); //define result interested in String[] tofs = {"org.apache.uima.TokenAnnotation", "org.apache.uima.SentenceAnnotation"}; //compare results File outputFile = new File(JUnitExtension.getFile("testdocRef.txt").getParent(), "testdocRef_testoutput.txt") ; AnnotatorTester.checkResult(cas, tofs, JUnitExtension.getFile("testdocRef.txt"), outputFile); } public void testAnnotatorEnglish() throws Exception { //retrieve Annotator sample text String text = AnnotatorTester.readFileContent(JUnitExtension.getFile("english.txt"), "UTF-8"); //execute sample text CAS cas = this.annotTester.performTest(text,"en"); //define result interested in String[] tofs = {"org.apache.uima.TokenAnnotation", "org.apache.uima.SentenceAnnotation"}; //compare results File outputFile = new File(JUnitExtension.getFile("englishRef.txt").getParent(), "englishRef_testoutput.txt") ; AnnotatorTester.checkResult(cas, tofs, JUnitExtension.getFile("englishRef.txt"), outputFile); } public void testAnnotatorTabs() throws Exception { // retrieve Annotator sample text String text = AnnotatorTester.readFileContent(JUnitExtension.getFile("tabs.txt"), "UTF-8"); // execute sample text CAS cas = this.annotTester.performTest(text, "en"); // define result interested in String[] tofs = { "org.apache.uima.TokenAnnotation", "org.apache.uima.SentenceAnnotation" }; // compare results File outputFile = new File(JUnitExtension.getFile("tabsRef.txt").getParent(), "tabsRef_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension.getFile("tabsRef.txt"), outputFile); } } uima-addons-2.3.1/WhitespaceTokenizer/desc/0000755000175000017500000000000011625126452020523 5ustar drazzibdrazzibuima-addons-2.3.1/WhitespaceTokenizer/desc/WhitespaceTokenizer.xml0000644000175000017500000000656411625126452025247 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.WhitespaceTokenizer WhitespaceTokenizer creates token and sentence annotations for whitespace separated languages 1.0 The Apache Software Foundation SofaNames The Sofa names the annotator should work on. If no names are specified, the annotator works on the default sofa. String true false org.apache.uima.TokenAnnotation Single token annotation uima.tcas.Annotation tokenType token type uima.cas.String org.apache.uima.SentenceAnnotation sentence annotation uima.tcas.Annotation org.apache.uima.TokenAnnotation org.apache.uima.TokenAnnotation:tokentype org.apache.uima.SentenceAnnotation x-unspecified uima-addons-2.3.1/PearPackagingAntTask/0000755000175000017500000000000011625127344017601 5ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/pom.xml0000644000175000017500000000620211625126450021113 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent PearPackagingAntTask 2.3.1 UIMA Addon: ${project.artifactId} Provides an Ant Task: packagePear, which runs the UIMA PEAR packaging utility ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} PearPackagingAntTaskUserGuide 2.3.1 org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.ant ant 1.8.2 provided uima-pear-ant-task uima-addons-2.3.1/PearPackagingAntTask/LICENSE.txt0000644000175000017500000002644611625126450021435 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/PearPackagingAntTask/marker-file-identifying-single-project0000644000175000017500000000000011625126450027137 0ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/NOTICE.txt0000644000175000017500000000032211625126450021315 0ustar drazzibdrazzibApache UIMA PearPackagingAntTask software component Copyright 2007-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). uima-addons-2.3.1/PearPackagingAntTask/src/0000755000175000017500000000000011625126450020365 5ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/src/main/0000755000175000017500000000000011625126450021311 5ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/src/main/java/0000755000175000017500000000000011625126450022232 5ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/src/main/java/org/0000755000175000017500000000000011625126450023021 5ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/src/main/java/org/apache/0000755000175000017500000000000011625126450024242 5ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/src/main/java/org/apache/uima/0000755000175000017500000000000011625126450025175 5ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/src/main/java/org/apache/uima/pear/0000755000175000017500000000000011625126450026124 5ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/src/main/java/org/apache/uima/pear/tools/0000755000175000017500000000000011625126450027264 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/PearPackagingAntTask/src/main/java/org/apache/uima/pear/tools/PearPackagingAntTask.javauima-addons-2.3.1/PearPackagingAntTask/src/main/java/org/apache/uima/pear/tools/PearPackagingAntTask0000644000175000017500000001236711625126450033202 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.pear.tools; import java.util.ArrayList; import java.util.Properties; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.Parameter; /** * Class to create an ANT task to package a UIMA PEAR file. * * See the example below on how to add the target to your ant build. * *
 *
 * <!-- define the classpath settings for the pear packaging task. 
 *      uimaj-pear-task.jar and uima-core.jar is needed -->
 * <path id="pearTask.classpath">
 *     <fileset dir="/home/apache-uima/lib/" includes="uimaj-pear-task.jar"/>
 *     <fileset dir="/home/apache-uima/lib/" includes="uima-core.jar"/>
 * </path>
 * 
 * <!-- pear packaging sample target -->
 * <target name="pearPackagingSample">
 *     
 *   <!-- Define pear packaging task -->
 *   <taskdef name="packagePear" 
 *       classname="org.apache.uima.pear.tools.PearPackagingAntTask"
 *       classpathref="pearTask.classpath"/>
 *
 *    <!-- Sample pear packaging -->
 *    <packagePear componentID="SampleAnnotator"
 *        mainComponentDesc="desc/mainComponentDesc.xml" 
 *        classpath="$main_root/pearClasspahtEntry;$main_root/anotherPearClasspahtEntry" 
 *        datapath="$main_root/resources"
 *        mainComponentDir="/home/user/workspace/SampeAnntotator" 
 *        targetDir="/home/user/pearArchive">
 *        <envVar name="ENV_VAR_NO1" value="value1"/>
 *        <envVar name="ENV_VAR_NO2" value="value2"/>
 *   </packagePear>
 * </target>
 * 
* */ public class PearPackagingAntTask extends Task { private String componentID = null; private String mainComponentDesc = null; private String classpath = null; private String datapath = null; private String mainComponentDir = null; private String targetDir = null; private ArrayList params = new ArrayList(); /* * (non-Javadoc) * * @see org.apache.tools.ant.Task#execute() */ public void execute() throws BuildException { super.execute(); // get environment variables () specified for the pear component Properties props = null; if (this.params.size() > 0) { props = new Properties(); for (int i = 0; i < this.params.size(); i++) { Parameter param = (Parameter) this.params.get(i); props.setProperty(param.getName(), param.getValue()); } } //call pear packager with the ANT defined information try { PackageCreator.generatePearPackage(this.componentID, this.mainComponentDesc, this.classpath, this.datapath, this.mainComponentDir, this.targetDir, props); } catch (PackageCreatorException ex) { throw new BuildException(ex); } } /** * add environment variable for the pear component * * @param envVar * environment variable setting */ public void addEnvVar(Parameter envVar) { this.params.add(envVar); } /** * set classpath for the pear component. * * @param classpath * the classpath to set */ public void setClasspath(String classpath) { this.classpath = classpath; } /** * set component ID for the pear component * * @param componentID * the componentID to set */ public void setComponentID(String componentID) { this.componentID = componentID; } /** * the datapath setting for the pear component * * @param datapath * the datapath to set */ public void setDatapath(String datapath) { this.datapath = datapath; } /** * the main component descriptor for the pear component * * @param mainComponentDesc * the mainComponentDesc to set */ public void setMainComponentDesc(String mainComponentDesc) { this.mainComponentDesc = mainComponentDesc; } /** * the main component directory for the pear data * * @param mainComponentDir * the mainComponentDir to set */ public void setMainComponentDir(String mainComponentDir) { this.mainComponentDir = mainComponentDir; } /** * the target directory for the output * * @param targetDir * the targetDir to set */ public void setTargetDir(String targetDir) { this.targetDir = targetDir; } } uima-addons-2.3.1/PearPackagingAntTask/src/docbook/0000755000175000017500000000000011625126450022005 5ustar drazzibdrazzibuima-addons-2.3.1/PearPackagingAntTask/src/docbook/PearPackagingAntTaskUserGuide.xml0000644000175000017500000001317511625126450030335 0ustar drazzibdrazzib ]> Apache UIMA PEAR Packaging Ant Task Documentation Overview To make UIMA analysis components easily consumable for other users, UIMA defines the PEAR (Processing Engine ARchive) file format. This allows applications and tools to manage UIMA analysis components automatically for verification, deployment, invocation and testing. So far the PEAR file format is the desired output format for an UIMA analysis component. With the PEAR packaging Ant Task it is possible to create such a PEAR package for the analysis component automatically. Using The PEAR Packaging Ant Task To use the PEAR packaging Ant task it is necessary to define an additional classpath setting for the ant build. The two necessary jars for this setting are the uima-core.jar that contains the PEAR packaging code and the uima-pear-ant-task.jar that contains the code for the PEAR packaging Ant task. The additional classpath setting can look like: ]]> Update the classpath fileset with your local path settings. Next we have to define a custom Ant task for the PEAR packaging. The definition looks like: ]]> The custom PEAR packaging Ant task is called packagePear. This task name is used later to package a PEAR file. The classname attribute contains the main class of the PEAR packaging Ant task component and should not be changed. The classpathref attribute refers the defined pearTask.classpath that is necessary to execute the PEAR packaging task. Now we are ready to use the PEAR packaging Ant task within our build target. To call the PEAR packaging just integrate the custom defined task <packagePear>as shown in the fragment below: ]]> The <packagePear> task has the following mandatory properties. If a property is not necessary, provide it with an empty content. componentID - The main component ID of the UIMA component that should be packaged mainComponentDesc - The main component descriptor that should be used to run the PEAR package content classpath - The classpath settings that must be used to run the PEAR package content - use $main_root macros datapath - The datapath settings that must be used to run the PEAR package content - use $main_root macros mainComponentDir - The main component directory that contains the PEAR package content targetDir - The target directory where the created PEAR package is written to. The filename for the created PEAR package is <componetID>.pear Additionally it is possible to specify environment variable settings that are necessary to run the PEAR package. This is done with the <envVar> element as shown above. The name specifies the variable name and the value specifies the variable value. uima-addons-2.3.1/PearPackagingAntTask/src/docbook/images/0000755000175000017500000000000011625126450023252 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/0000755000175000017500000000000011625127050021421 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/pom.xml0000644000175000017500000002263711625126544022757 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent ConfigurableFeatureExtractor 2.3.1 UIMA Annotator: ${project.artifactId} Extracts Features specified in a feature-specification language, from a CAS ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/cas_consumers/UIMAFeatureConsumer.xml CFE_UG org.apache.uima uimaj-core ${uimaDependencyVersion} provided commons-jxpath commons-jxpath 1.3 org.apache.xmlbeans xmlbeans 2.4.0 stax stax-api org.apache.geronimo.specs geronimo-stax-api_1.0_spec 1.0.1 org.eclipse.emf.ecore xmi 2.3.0-v200706262000 org.eclipse.emf common 2.3.0-v200706262000 org.eclipse.emf ecore 2.3.0-v200706262000 org.apache.uima uimaj-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-examples ${uimaDependencyVersion} test org.apache.uima uimaj-document-annotation ${uimaDependencyVersion} test junit junit 4.8.2 test uima-tool-configurableFeatureExtractor org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES cfeModelGen/* src/test/java/example/PersonTitle*.java src/test/java/org/apache/uima/examples/SourceDocumentInformation*.java src/test/resources/testData*.txt* org.codehaus.mojo xmlbeans-maven-plugin 2.3.3 xmlbeans src/main/xsdForXMLBeans 1.5 org.apache.maven.plugins maven-resources-plugin copy-resources process-resources ${project.build.directory}/pearPackaging/desc src/main/resources/descriptors copy special resources to assembly-src copy-resources process-resources ${project.build.directory}/assembly-src/${project.artifactId} . cfeModelGen/** uima-addons-2.3.1/ConfigurableFeatureExtractor/NoticeFileResearchLog.txt0000644000175000017500000000755611625126544026346 0ustar drazzibdrazzib Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. app-1.0.0-v20070423.jar org.eclipse.equinox groupId; no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html and includes OSGi Materials licensed under the Apache v2 license about directory has a LICENSE file holding Apache v2 license common-2.3.0-v200706262000.jar groupId: org.eclipse.emf no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html common-3.3.0-v20070426.jar groupId: org.eclipse.equinox no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html commons-jxpath-1.3.jar groupId: commons-jxpath Notice file is standard minimal Apache Notice file LICENSE is standard Apache v2 contenttype-3.2.100-v20070319.jar groupId: org.eclipse.core no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html ecore-2.3.0-v200706262000.jar groupId: org.eclipse.emf no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html and includes Apache XML4J 4.3 derivative works jobs-3.3.0-v20070423.jar groupId: org.eclipse.core no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html osgi-3.3.0-v20070530.jar groupId: org.eclipse no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html and includes OSGi Materials licensed under the Apache v2 license about directory has a LICENSE file holding Apache v2 license preferences-3.2.100-v20070522.jar groupId: org.eclipse.equinox no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html and includes OSGi Materials licensed under the Apache v2 license about directory has a LICENSE file holding Apache v2 license registry-3.3.0-v20070522.jar groupId: org.eclipse.equinox NOTICE file holding a standard minimal Apache Notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html and includes Jakarta Commons Collection licensed under the Apache v2 license about directory has a LICENSE file holding Apache v2 license and a NOTICE file holding a standard minimal Apache Notice file runtime-3.3.100-v20070530.jar groupId: org.eclipse.core no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html xmi-2.3.0-v200706262000.jar groupId: org.eclipse.emf no notice file; about.html indicates its under EPL http://www.eclipse.org/legal/epl-v10.html xmlbeans-2.4.0.jar groupId: org.apache.xmlbeans Notice File has several notices in it, but nothing that states the notices need to be copied to a project which includes it. License: Apache v2 xmlbeans depends on stax:stax-api stax:stax-api dependency replaced with org.apache.geronimo.specs:geronimo-stax-api_1.0_spec version 1.0.1 see https://issues.apache.org/jira/browse/LEGAL-42 uima-addons-2.3.1/ConfigurableFeatureExtractor/LICENSE.txt0000644000175000017500000005535711625126544023272 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Eclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT’S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i)changes to the Program, and ii)additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor’s behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient’s responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor’s responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient’s patent(s), then such Recipient’s rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient’s rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient’s rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient’s obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. uima-addons-2.3.1/ConfigurableFeatureExtractor/cfeModelGen/0000755000175000017500000000000011625126544023600 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/cfeModelGen/config.ecore0000644000175000017500000006107711625126544026077 0ustar drazzibdrazzib
uima-addons-2.3.1/ConfigurableFeatureExtractor/cfeModelGen/CFE.genmodel0000644000175000017500000001627211625126544025721 0ustar drazzibdrazzib ../src/main/xsdForEmf/CFEConfigModel.xsd uima-addons-2.3.1/ConfigurableFeatureExtractor/README.txt0000644000175000017500000000463211625126544023133 0ustar drazzibdrazzibNote to maintainers: The Java source files in org.apache.uima.tools.cfe.config, org.apache.uima.tools.cfe.config.impl, and org.apache.uima.tools.cfe.config.utils are generated using Eclipse EMF tooling, from the CFEConfig.xsd file. Note: One file: org.apache.uima.tools.cfe.config.utils.ConfigResourceUtil.java is *not* generated but should be kept, if you regenerate the others. The procedure for regenerating these, using Eclipse (version 3.5), is as follows: 1. Open Java perspective and select ConfigurableFeatureExtractor project in ProjectExplorer 2. Create new EMF Model from CFEConfig.xsd by following these steps: 2.1. Click to select the folder ConfigurableFeatureExtractor/cfeModelGen 2.2 From main menu select File->New->Other->Eclipse Modeling Framework->EMF Generator Model If you don't see this selection, install the EMF Modeling Framework plugin (Help -> Install New Software). 2.3. In the "EMF Model" dialog: 2.3.1. In the "Enter or select the parent folder" edit box verify the cfeModelGen folder is selected. 2.3.2. In the "File Name" edit box enter CFE.genmodel" and press "Next" 2.4. In the "Select a Model Importer" dialog select "XML Schema" from the "Model Importers" list and press the "Next" button. If it's not a choice, install the XSL - XSD Schema Definition plugin, and try again. 2.5. In "XML Schema Import" dialog browse the workspace to select the schema file (src/main/xsdForEmf/CFEConfig.xsd) and press the "Next" button 2.6. In the "Package selection" dialog press the "Finish" button 3. Generating source files 3.1. After step 2.6 a genmodel file CFEConfig.genmodel should be created and open in Eclipse editor 3.2. Right-click this and select Show Properties View. Change the following 4 properties: All -> Bundle Manifest: false Model -> Model Directory: change the value by appending /main/java so the value looks like /ConfigurableFeatureExtractor/src/main/java Model -> Model Plug in Id: delete (clear) this field Templates & Merge -> Update Classpath: false 3.4. Go back to the CFE.genmodel screen, save the modified model, and then right-click the model and select "Generate Model Code" This will regenerate the source files for the model under src/main/java in the org.apache.uima.tools.cfe.config, ...config.impl and ... config.utils packages.uima-addons-2.3.1/ConfigurableFeatureExtractor/marker-file-identifying-single-project0000644000175000017500000000000011625126544030771 0ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/marker-file-identifying-standard-pear0000644000175000017500000000000011625126544030571 0ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/marker-file-identifying-osgi-project0000644000175000017500000000000011625126544030451 0ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/NOTICE.txt0000644000175000017500000000132111625126544023147 0ustar drazzibdrazzibApache UIMA sandbox -- Configurable Feature Extractor component Copyright 2009-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). This software contains parts of Apache XMLBeans (http://xmlbeans.apache.org/), which contains the following software: - W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web Consortium (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) - Piccolo XML Parser for Java from http://piccolo.sourceforge.net/, Copyright 2002 Yuval Oren under the terms of the Apache Software License 2.0 uima-addons-2.3.1/ConfigurableFeatureExtractor/src/0000755000175000017500000000000011625126536022220 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/0000755000175000017500000000000011625126544023143 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/resources/0000755000175000017500000000000011625126544025155 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/resources/descriptors/0000755000175000017500000000000011625126544027516 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/resources/descriptors/cas_consumers/0000755000175000017500000000000011625126544032362 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/resources/descriptors/cas_consumers/UIMAFeatureConsumer.xmluima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/resources/descriptors/cas_consumers/UIMAFeat0000644000175000017500000000653711625126544033653 0ustar drazzibdrazzib org.apache.uima.java org.apache.uima.tools.cfe.UIMAFeatureConsumer UIMAFeatureConsumer extracts UIMA features according to specification given in the configuration file 1.0 IBM OutputDirectory output directory String false false ConfigurationFile configuration file String false false IncludeTargetId Specifies whether the Id of target annotation object should be included in the extracted feature set Boolean false false XMLBeansParser Boolean false false IncludeTargetId false XMLBeansParser false false true false uima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/resources/descriptors/type_system/0000755000175000017500000000000011625126544032103 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/resources/descriptors/type_system/AppliedSenseAnnotation.xmluima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/resources/descriptors/type_system/AppliedSen0000644000175000017500000000731711625126544034062 0ustar drazzibdrazzib AppliedSenseAnnotation Type system for UIMA Applier for WSD project 1.0 IBM org.apache.uima.tools.cfe.ApplierInfoAnnotation uima.tcas.Annotation Features List of features for a term uima.cas.StringArray AppliedAnnotation Annotation that contains assigned senses as well as it might contain onfo about manualy preannotated sense org.apache.uima.tools.cfe.AppliedAnnotation Context uima.cas.StringArray DocumentId unique id of a document (used in tf*idf calculations) uima.cas.String org.apache.uima.tools.cfe.AppliedAnnotation Annotation that contains truth(if available) and assigned senses uima.tcas.Annotation Assigned Annotation that contains information about sense assigned by applier org.apache.uima.tools.cfe.SenseAnnotation Truth Annotation that contains information about manualy preannotated sense org.apache.uima.tools.cfe.SenseAnnotation org.apache.uima.tools.cfe.SenseAnnotation contains manually preannotated sense, you can derive this with your own type, that might have additional information uima.tcas.Annotation SENSE sense name uima.cas.String uima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/xsdForXMLBeans/0000755000175000017500000000000011625126536025743 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/xsdForXMLBeans/CFEConfig.xsd0000644000175000017500000001673111625126536030216 0ustar drazzibdrazzib class id for RRM training in class CommonFeatureMatcher the following flg constants are defined CONSTANT_LEFTLEFT // 1 feature annotation starts left from the target ends left from the target CONSTANT_LEFTINSIDE // 2 feature annotation starts left from the target ends inside the target CONSTANT_LEFTRIGHT // 4 feature annotation starts left from the target ends right from the target CONSTANT_INSIDEINSIDE // 8 feature annotation starts inside the target ends inside the target CONSTANT_INSIDERIGHT // 16 feature annotation starts inside the target ends right from the target CONSTANT_RIGHTRIGHT // 32 feature annotation starts right from the target ends right from the target // any annotation that starts left from the target CONSTANT_STARTSLEFT = CONSTANT_LEFTLEFT | CONSTANT_LEFTINSIDE | CONSTANT_LEFTRIGHT; // 7 // any annotation that starts inside the target CONSTANT_STARTSINSIDE = CONSTANT_INSIDEINSIDE|CONSTANT_INSIDERIGHT; // 24 // any annotation that starts right from the target CONSTANT_STARTSRIGHT = CONSTANT_RIGHTRIGHT; // 32 // any annotation that is within the span of enclosing annotation CONSTANT_ANYENCLOSED = CONSTANT_STARTSLEFT | CONSTANT_STARTSINSIDE | CONSTANT_STARTSRIGHT; // 63 uima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/xsdForEmf/0000755000175000017500000000000011625126544025040 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/xsdForEmf/CFEConfigModel.xsd0000644000175000017500000001670711625126544030277 0ustar drazzibdrazzib class id for RRM training in class CommonFeatureMatcher the following flg constants are defined CONSTANT_LEFTLEFT // 1 feature annotation starts left from the target ends left from the target CONSTANT_LEFTINSIDE // 2 feature annotation starts left from the target ends inside the target CONSTANT_LEFTRIGHT // 4 feature annotation starts left from the target ends right from the target CONSTANT_INSIDEINSIDE // 8 feature annotation starts inside the target ends inside the target CONSTANT_INSIDERIGHT // 16 feature annotation starts inside the target ends right from the target CONSTANT_RIGHTRIGHT // 32 feature annotation starts right from the target ends right from the target // any annotation that starts left from the target CONSTANT_STARTSLEFT = CONSTANT_LEFTLEFT | CONSTANT_LEFTINSIDE | CONSTANT_LEFTRIGHT; // 7 // any annotation that starts inside the target CONSTANT_STARTSINSIDE = CONSTANT_INSIDEINSIDE|CONSTANT_INSIDERIGHT; // 24 // any annotation that starts right from the target CONSTANT_STARTSRIGHT = CONSTANT_RIGHTRIGHT; // 32 // any annotation that is within the span of enclosing annotation CONSTANT_ANYENCLOSED = CONSTANT_STARTSLEFT | CONSTANT_STARTSINSIDE | CONSTANT_STARTSRIGHT; // 63 uima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/0000755000175000017500000000000011625126536024065 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/0000755000175000017500000000000011625126536024654 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/0000755000175000017500000000000011625126536026075 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/0000755000175000017500000000000011625126536027030 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/0000755000175000017500000000000011625126536030170 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/0000755000175000017500000000000011625126544030724 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/UIMAFeatureMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/UIMAFeatureMa0000644000175000017500000000702611625126544033201 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.tools.cfe.support.ComparableArray; public class UIMAFeatureMatcher extends CommonFeatureMatcher { Map m_featureImages; public UIMAFeatureMatcher (boolean includeTargetId) { super(includeTargetId, false, false, "|", new String[] {";", "^", "!", "%"}); } public void processJCas (JCas jcas) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, ClassNotFoundException, SecurityException, NoSuchFieldException { // to make features sorted by begin/end offsets m_featureImages = new TreeMap(); super.processJCas(jcas); } protected void processFeatureGroup(JCas jcas, Annotation trg, String group_label, Collection features) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { for (Iterator feat_it = features.iterator(); feat_it.hasNext();) { MatchedAnnotationDescriptor mad = feat_it.next(); ComparableArray key = new ComparableArray( new Integer[] { Integer.valueOf(mad.m_feature_mv.getAnnotation().getEnd()), Integer.valueOf(mad.m_feature_mv.getAnnotation().getBegin()), Integer.valueOf(mad.m_orderIndex), Integer.valueOf(m_featureImages.size()) }); String feature = make_UIMA_feature(mad, make_image(mad, trg)); m_featureImages.put(key, group_label + m_fieldSeparator + feature); } } String make_UIMA_feature (MatchedAnnotationDescriptor mad, String other_fields) { StringBuilder stBuff = new StringBuilder(); if (mad.m_feature_matcher.m_orientation || mad.m_feature_matcher.m_distance) { stBuff.append(make_image_position(mad)); stBuff.append(m_fieldSeparator); } stBuff.append(other_fields); return stBuff.toString(); } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/PatternFeatureValues.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/PatternFeatur0000644000175000017500000000251411625126544033435 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.util.regex.Pattern; public class PatternFeatureValues implements FeatureValues { final Pattern m_pattern; public PatternFeatureValues(String pattern) { m_pattern = Pattern.compile(pattern); } public boolean matches (Object feature) { return m_pattern.matcher(getFeatureImage(feature)).find(); } public String getFeatureImage (Object feature) { return feature.toString(); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CFEConfigFromXML_XMLBeans.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CFEConfigFrom0000644000175000017500000003001311625126544033213 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import org.apache.uima.tools.cfe.config.xmlBeans.BitsetFeatureValuesXML; import org.apache.uima.tools.cfe.config.xmlBeans.CFEConfigDocument; import org.apache.uima.tools.cfe.config.xmlBeans.CFEDescriptorXML; import org.apache.uima.tools.cfe.config.xmlBeans.EnumFeatureValuesXML; import org.apache.uima.tools.cfe.config.xmlBeans.FeatureObjectMatcherXML; import org.apache.uima.tools.cfe.config.xmlBeans.GroupFeatureMatcherXML; import org.apache.uima.tools.cfe.config.xmlBeans.ObjectPathFeatureValuesXML; import org.apache.uima.tools.cfe.config.xmlBeans.PartialObjectMatcherXML; import org.apache.uima.tools.cfe.config.xmlBeans.PatternFeatureValuesXML; import org.apache.uima.tools.cfe.config.xmlBeans.RangeFeatureValuesXML; import org.apache.uima.tools.cfe.config.xmlBeans.SingleFeatureMatcherXML; import org.apache.uima.tools.cfe.config.xmlBeans.TargetAnnotationXML; import org.apache.xmlbeans.XmlException; public class CFEConfigFromXML_XMLBeans { private final CFEDescriptorXML m_CFEDescriptor; public CFEConfigFromXML_XMLBeans (String path) throws XmlException, IOException { CFEConfigDocument doc = CFEConfigDocument.Factory.parse(new File(path)); m_CFEDescriptor = doc.getCFEConfig(); } EnumFeatureValues getEnumFeatureValues(EnumFeatureValuesXML efvs_xml) throws IOException, URISyntaxException { List vals = efvs_xml.getValuesList(); if ((1 == vals.size()) && (vals.get(0).startsWith("file://"))) { return new EnumFeatureValues(quote(vals.get(0)).getPath(), efvs_xml.getCaseSensitive()); } return new EnumFeatureValues(vals, efvs_xml.getCaseSensitive()); } RangeFeatureValues getRangeFeatureValues(RangeFeatureValuesXML rfvs_xml) { String lb = rfvs_xml.getLowerBoundary().toString().trim(); String ub = rfvs_xml.getUpperBoundary().toString().trim(); return new RangeFeatureValues(Double.parseDouble(lb), rfvs_xml.getLowerBoundaryInclusive(), Double.parseDouble(ub), rfvs_xml.getUpperBoundaryInclusive()); } BitsetFeatureValues getBitsetFeatureValues(BitsetFeatureValuesXML bfvs_xml) { return new BitsetFeatureValues(Integer.parseInt(bfvs_xml.getBitmask(), 16), bfvs_xml.getExactMatch()); } PatternFeatureValues getPatternFeatureValues(PatternFeatureValuesXML pattern_xml) { return new PatternFeatureValues(pattern_xml.getPattern()); } ObjectPathFeatureValues getObjectPathFeatureValues(ObjectPathFeatureValuesXML opfvs_xml, String feature_class) { return new ObjectPathFeatureValues(feature_class, opfvs_xml.getObjectPath()); } SingleFeatureMatcher getSingleFeatureMatcher(SingleFeatureMatcherXML sfm_xml, String obj_class) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IOException, URISyntaxException { if (null != sfm_xml.getEnumFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.getExclude(), sfm_xml.getQuiet(), getEnumFeatureValues(sfm_xml.getEnumFeatureValues())); } else if (null != sfm_xml.getRangeFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.getExclude(), sfm_xml.getQuiet(), getRangeFeatureValues(sfm_xml.getRangeFeatureValues())); } else if (null != sfm_xml.getBitsetFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.getExclude(), sfm_xml.getQuiet(), getBitsetFeatureValues(sfm_xml.getBitsetFeatureValues())); } else if (null != sfm_xml.getPatternFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.getExclude(), sfm_xml.getQuiet(), getPatternFeatureValues(sfm_xml.getPatternFeatureValues())); } else if (null != sfm_xml.getObjectPathFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.getExclude(), sfm_xml.getQuiet(), getObjectPathFeatureValues(sfm_xml.getObjectPathFeatureValues(), sfm_xml.getFeatureTypeName())); } else { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.getExclude(), sfm_xml.getQuiet(), new EnumFeatureValues()); // would match any value } } GroupFeatureMatcher getGroupFeatureMatcher(GroupFeatureMatcherXML gfm_xml, String obj_class_name) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IOException, URISyntaxException { List fms_xml = gfm_xml.getFeatureMatchersList(); List sfms = new ArrayList(); for (SingleFeatureMatcherXML fm_xml : fms_xml) { sfms.add(getSingleFeatureMatcher(fm_xml, obj_class_name)); } return new GroupFeatureMatcher(sfms, gfm_xml.getExclude()); } PartialObjectMatcher getPartialObjectMatcher(PartialObjectMatcherXML pom_xml) throws SecurityException, NoSuchMethodException, IOException, URISyntaxException, ClassNotFoundException { List gfms_xml = pom_xml.getGroupFeatureMatchersList(); List gfms = new ArrayList(); for (GroupFeatureMatcherXML gfm_xml : gfms_xml) { gfms.add(getGroupFeatureMatcher(gfm_xml, pom_xml.getAnnotationTypeName())); } return new PartialObjectMatcher(pom_xml.getAnnotationTypeName(), pom_xml.getFullPath(), gfms); } FeatureObjectMatcher getFeatureObjectMatcher(FeatureObjectMatcherXML fom_xml) throws SecurityException, NoSuchMethodException, IOException, ClassNotFoundException, URISyntaxException { List gfms_xml = fom_xml.getGroupFeatureMatchersList(); List gfms = new ArrayList(); for (GroupFeatureMatcherXML gfm_xml : gfms_xml) { gfms.add(getGroupFeatureMatcher(gfm_xml, fom_xml.getAnnotationTypeName())); } return new FeatureObjectMatcher(fom_xml.getAnnotationTypeName(), fom_xml.getFullPath(), gfms, fom_xml.getWindowsizeLeft(), fom_xml.getWindowsizeInside(), fom_xml.getWindowsizeRight(), fom_xml.getWindowsizeEnclosed(), fom_xml.getWindowFlags(), fom_xml.getOrientation(), fom_xml.getDistance()); } TargetAnnotationDescriptor getTargetAnnotationDescriptor(TargetAnnotationXML ta_xml, int priorityOrder) throws SecurityException, NoSuchMethodException, IOException, ClassNotFoundException, URISyntaxException { PartialObjectMatcher ta_matcher = getPartialObjectMatcher(ta_xml.getTargetAnnotationMatcher()); List fams_xml = ta_xml.getFeatureAnnotationMatchersList(); List fams = new ArrayList(); for (FeatureObjectMatcherXML fam_xml : fams_xml) { fams.add(getFeatureObjectMatcher(fam_xml)); } return new TargetAnnotationDescriptor(ta_xml.getClassName(), ta_xml.getEnclosingAnnotation(), ta_matcher, fams, priorityOrder); } public List getTargetAnnotationDescriptors() throws SecurityException, NoSuchMethodException, IOException, ClassNotFoundException, URISyntaxException { List result = new ArrayList(); List tans = m_CFEDescriptor.getTargetAnnotationsList(); for (TargetAnnotationXML tan_xml : tans) { result.add(getTargetAnnotationDescriptor(tan_xml, result.size() + 1)); } return result; } public String getNullValueImage() { return m_CFEDescriptor.getNullValueImage(); } // Maintainer note: remove these methods once base sdk 2.3.2 is released, and switch // to using these methods from there /** * Create a URI from a string, with proper quoting. * Already quoted things in the input string are not re-quoted. * There are several cases: * String has no characters needing quoting * String has chars needing quoting, but no chars are currently quoted (e.g. %20) * String has quoted (e.g. %20) characters but no other chars needing quoting * String has quoted (e.g. %20) characters and chars needing quoting, not currently quoted * -- this case will throw an exception * @param s * @return URI with proper quoting * @throws URISyntaxException */ private static URI quote (String s) throws URISyntaxException { if (-1 == s.indexOf('%')) { // 3 argument constructor does any needed quoting of otherwise illegal chars // https://issues.apache.org/jira/browse/UIMA-2097 return new URI(null, s, null); } // assume s already has all otherwise illegal chars properly quoted return new URI(s); } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/ArrayDelimiterObject.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/ArrayDelimite0000644000175000017500000000200611625126544033400 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; public class ArrayDelimiterObject { public final int m_level; ArrayDelimiterObject (int level) { m_level = level; } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/BitsetFeatureValues.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/BitsetFeature0000644000175000017500000000302011625126544033410 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; public class BitsetFeatureValues implements FeatureValues { final int m_bitmask; final boolean m_exact_match; public BitsetFeatureValues(int bitmask, boolean exact_match) { m_bitmask = bitmask; m_exact_match = exact_match; } public boolean matches (Object feature) { if (feature instanceof Integer) { int mask = ((Integer)feature).intValue(); return m_exact_match ? ((m_bitmask & mask) == m_bitmask) : ((m_bitmask & mask) != 0); } return false; } public String getFeatureImage (Object feature) { return feature.toString(); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/AppliedAnnotation.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/AppliedAnnota0000644000175000017500000001075611625126544033377 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Tue Mar 18 14:49:11 EDT 2008 */ package org.apache.uima.tools.cfe; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** Annotation that contains truth(if available) and assigned senses * Updated by JCasGen Tue Mar 18 14:49:11 EDT 2008 * XML source: C:/eclipse/CFE/org/apache/uima/cfe/AppliedSenseAnnotation.xml * @generated */ public class AppliedAnnotation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(AppliedAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected AppliedAnnotation() {} /** Internal - constructor used by generator * @generated */ public AppliedAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public AppliedAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public AppliedAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: Assigned /** getter for Assigned - gets Annotation that contains information about sense assigned by applier * @generated */ public SenseAnnotation getAssigned() { if (AppliedAnnotation_Type.featOkTst && ((AppliedAnnotation_Type)jcasType).casFeat_Assigned == null) jcasType.jcas.throwFeatMissing("Assigned", "org.apache.uima.cfe.AppliedAnnotation"); return (SenseAnnotation)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((AppliedAnnotation_Type)jcasType).casFeatCode_Assigned)));} /** setter for Assigned - sets Annotation that contains information about sense assigned by applier * @generated */ public void setAssigned(SenseAnnotation v) { if (AppliedAnnotation_Type.featOkTst && ((AppliedAnnotation_Type)jcasType).casFeat_Assigned == null) jcasType.jcas.throwFeatMissing("Assigned", "org.apache.uima.cfe.AppliedAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((AppliedAnnotation_Type)jcasType).casFeatCode_Assigned, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: Truth /** getter for Truth - gets Annotation that contains information about manualy preannotated sense * @generated */ public SenseAnnotation getTruth() { if (AppliedAnnotation_Type.featOkTst && ((AppliedAnnotation_Type)jcasType).casFeat_Truth == null) jcasType.jcas.throwFeatMissing("Truth", "org.apache.uima.cfe.AppliedAnnotation"); return (SenseAnnotation)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((AppliedAnnotation_Type)jcasType).casFeatCode_Truth)));} /** setter for Truth - sets Annotation that contains information about manualy preannotated sense * @generated */ public void setTruth(SenseAnnotation v) { if (AppliedAnnotation_Type.featOkTst && ((AppliedAnnotation_Type)jcasType).casFeat_Truth == null) jcasType.jcas.throwFeatMissing("Truth", "org.apache.uima.cfe.AppliedAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((AppliedAnnotation_Type)jcasType).casFeatCode_Truth, jcasType.ll_cas.ll_getFSRef(v));} } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/RRMFeatureMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/RRMFeatureMat0000644000175000017500000001314511625126544033271 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.StringArray; import org.apache.uima.jcas.tcas.Annotation; public class RRMFeatureMatcher extends CommonFeatureMatcher { public static final String PARAM_INCLUDEFEATUREWINDOWIMAGE = "IncludeFeatureWindowImage"; final boolean m_isFeatureWindowImage; public RRMFeatureMatcher(boolean includeAnnotationName, boolean includeFeatureName, boolean isFeatureWindowImage) { super(false, includeAnnotationName, includeFeatureName, "_", new String[]{"_"}); m_isFeatureWindowImage = isFeatureWindowImage; } protected String featureWindowImage (MatchedAnnotationDescriptor mad) { StringBuilder buf = new StringBuilder("W"); if (mad.m_feature_matcher.m_windowsizeLeft > 0) { buf.append("L" + mad.m_feature_matcher.m_windowsizeLeft); } if (mad.m_feature_matcher.m_windowsizeInside > 0) { buf.append("I" + mad.m_feature_matcher.m_windowsizeInside); } if (mad.m_feature_matcher.m_windowsizeRight > 0) { buf.append("R" + mad.m_feature_matcher.m_windowsizeRight); } if (mad.m_feature_matcher.m_windowsizeEnclosed > 0) { String[] name_toks = mad.m_enclosing.getClass().getName().split("\\."); buf.append(name_toks[name_toks.length - 1]); } if (mad.m_feature_matcher.m_windowFlags > 0) { buf.append("F" + mad.m_feature_matcher.m_windowFlags); } return buf.toString(); } protected void processFeatureGroup(JCas jcas, Annotation trg, String class_label, Collection features) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { // to avoid duplicates Set featureImages = new TreeSet(); for (Iterator feat_it = features.iterator(); feat_it.hasNext();) { MatchedAnnotationDescriptor mad = feat_it.next(); String feature = make_RRM_feature(mad, make_image(mad, trg)); if (m_isFeatureWindowImage) { feature = featureWindowImage(mad) + m_fieldSeparator + feature; } featureImages.add(feature); } StringArray uima_feats = new StringArray(jcas, featureImages.size()); int ind = 0; for (Iterator img_it = featureImages.iterator(); img_it.hasNext();) { uima_feats.set(ind++, img_it.next()); } SenseAnnotation sa = new SenseAnnotation(jcas, trg.getBegin(), trg.getEnd()); sa.setSENSE(class_label); AppliedAnnotation aa = new AppliedAnnotation(jcas, trg.getBegin(), trg.getEnd()); aa.setTruth(sa); ApplierInfoAnnotation aia = new ApplierInfoAnnotation(jcas, trg.getBegin(), trg.getEnd()); aia.setDocumentId(getDocumentId(jcas, aia)); aia.setAppliedAnnotation(aa); aia.setFeatures(uima_feats); aia.addToIndexes(); } private String make_RRM_feature (MatchedAnnotationDescriptor mad, String suffix) { if (suffix.indexOf(" ") >= 0) { System.err.println("ERROR: \"" + suffix + "\"" + "has spaces"); } StringBuilder feature = new StringBuilder(); Pattern pat = Pattern.compile("\\W"); Matcher mat = pat.matcher(suffix); int start = 0; while (mat.find()) { int gstart = mat.start(); feature.append(suffix.substring(start, gstart)); start = mat.end(); StringBuilder replaced = new StringBuilder(); String group = mat.group(); for (int i = 0; i < group.length(); ++i) { replaced.append("__CHAR" + (int)group.charAt(i) + "__"); } feature.append(replaced); } feature.append(suffix.substring(start)); StringBuilder strBuf = new StringBuilder(); if (mad.m_feature_matcher.m_orientation || mad.m_feature_matcher.m_distance) { strBuf.append(make_image_position(mad)); strBuf.append(m_fieldSeparator); } strBuf.append(feature); return strBuf.toString(); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/TargetAnnotationDescriptor.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/TargetAnnotat0000644000175000017500000000464411625126544033432 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.util.Collection; public class TargetAnnotationDescriptor { String m_class_name; String m_enclosing_annotation_name; PartialObjectMatcher m_target_annotation_matcher; Collection m_feature_annotation_matchers; final int m_priorityOrder; public TargetAnnotationDescriptor(String class_name, String enclosing_annotation_name, PartialObjectMatcher target_annotation_matcher, Collection feature_annotation_matchers, int priorityOrder) { m_class_name = class_name; m_enclosing_annotation_name = enclosing_annotation_name; m_target_annotation_matcher = target_annotation_matcher; m_feature_annotation_matchers = feature_annotation_matchers; m_priorityOrder = priorityOrder; } String getClassName () { return m_class_name; } String getEnclosingAnnotationName () { return m_enclosing_annotation_name; } PartialObjectMatcher getTargetAnnotationMatcher () { return m_target_annotation_matcher; } Collection getFeatureAnnotationMatchers () { return m_feature_annotation_matchers; } } uima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/0000755000175000017500000000000011625126542032167 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/PartialObjectMatcherXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Partia0000644000175000017500000001164111625126542033335 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'Partial Object Matcher XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getGroupFeatureMatchers Group Feature Matchers}
  • *
  • {@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getAnnotationTypeName Annotation Type Name}
  • *
  • {@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getFullPath Full Path}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getPartialObjectMatcherXML() * @model extendedMetaData="name='PartialObjectMatcherXML' kind='elementOnly'" * @generated */ public interface PartialObjectMatcherXML extends EObject { /** * Returns the value of the 'Group Feature Matchers' containment reference list. * The list contents are of type {@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML}. * *

* If the meaning of the 'Group Feature Matchers' containment reference list isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Group Feature Matchers' containment reference list. * @see org.apache.uima.tools.cfe.config.ConfigPackage#getPartialObjectMatcherXML_GroupFeatureMatchers() * @model containment="true" * extendedMetaData="kind='element' name='groupFeatureMatchers' namespace='##targetNamespace'" * @generated */ EList getGroupFeatureMatchers(); /** * Returns the value of the 'Annotation Type Name' attribute. * *

* If the meaning of the 'Annotation Type Name' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Annotation Type Name' attribute. * @see #setAnnotationTypeName(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getPartialObjectMatcherXML_AnnotationTypeName() * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true" * extendedMetaData="kind='attribute' name='annotationTypeName'" * @generated */ String getAnnotationTypeName(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getAnnotationTypeName Annotation Type Name}' attribute. * * * @param value the new value of the 'Annotation Type Name' attribute. * @see #getAnnotationTypeName() * @generated */ void setAnnotationTypeName(String value); /** * Returns the value of the 'Full Path' attribute. * *

* If the meaning of the 'Full Path' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Full Path' attribute. * @see #setFullPath(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getPartialObjectMatcherXML_FullPath() * @model dataType="org.eclipse.emf.ecore.xml.type.String" * extendedMetaData="kind='attribute' name='fullPath'" * @generated */ String getFullPath(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getFullPath Full Path}' attribute. * * * @param value the new value of the 'Full Path' attribute. * @see #getFullPath() * @generated */ void setFullPath(String value); } // PartialObjectMatcherXML././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/CFEDescriptorXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/CFEDes0000644000175000017500000000717211625126542033152 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'CFE Descriptor XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.CFEDescriptorXML#getTargetAnnotations Target Annotations}
  • *
  • {@link org.apache.uima.tools.cfe.config.CFEDescriptorXML#getNullValueImage Null Value Image}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getCFEDescriptorXML() * @model extendedMetaData="name='CFEDescriptorXML' kind='elementOnly'" * @generated */ public interface CFEDescriptorXML extends EObject { /** * Returns the value of the 'Target Annotations' containment reference list. * The list contents are of type {@link org.apache.uima.tools.cfe.config.TargetAnnotationXML}. * *

* If the meaning of the 'Target Annotations' containment reference list isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Target Annotations' containment reference list. * @see org.apache.uima.tools.cfe.config.ConfigPackage#getCFEDescriptorXML_TargetAnnotations() * @model containment="true" required="true" * extendedMetaData="kind='element' name='targetAnnotations' namespace='##targetNamespace'" * @generated */ EList getTargetAnnotations(); /** * Returns the value of the 'Null Value Image' attribute. * *

* If the meaning of the 'Null Value Image' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Null Value Image' attribute. * @see #setNullValueImage(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getCFEDescriptorXML_NullValueImage() * @model dataType="org.eclipse.emf.ecore.xml.type.String" * extendedMetaData="kind='attribute' name='nullValueImage'" * @generated */ String getNullValueImage(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.CFEDescriptorXML#getNullValueImage Null Value Image}' attribute. * * * @param value the new value of the 'Null Value Image' attribute. * @see #getNullValueImage() * @generated */ void setNullValueImage(String value); } // CFEDescriptorXML././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/DocumentRoot.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Docume0000644000175000017500000001273511625126542033336 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.common.util.EMap; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.FeatureMap; /** * * A representation of the model object 'Document Root'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.DocumentRoot#getMixed Mixed}
  • *
  • {@link org.apache.uima.tools.cfe.config.DocumentRoot#getXMLNSPrefixMap XMLNS Prefix Map}
  • *
  • {@link org.apache.uima.tools.cfe.config.DocumentRoot#getXSISchemaLocation XSI Schema Location}
  • *
  • {@link org.apache.uima.tools.cfe.config.DocumentRoot#getCFEConfig CFE Config}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getDocumentRoot() * @model extendedMetaData="name='' kind='mixed'" * @generated */ public interface DocumentRoot extends EObject { /** * Returns the value of the 'Mixed' attribute list. * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}. * *

* If the meaning of the 'Mixed' attribute list isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Mixed' attribute list. * @see org.apache.uima.tools.cfe.config.ConfigPackage#getDocumentRoot_Mixed() * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true" * extendedMetaData="kind='elementWildcard' name=':mixed'" * @generated */ FeatureMap getMixed(); /** * Returns the value of the 'XMLNS Prefix Map' map. * The key is of type {@link java.lang.String}, * and the value is of type {@link java.lang.String}, * *

* If the meaning of the 'XMLNS Prefix Map' map isn't clear, * there really should be more of a description here... *

* * @return the value of the 'XMLNS Prefix Map' map. * @see org.apache.uima.tools.cfe.config.ConfigPackage#getDocumentRoot_XMLNSPrefixMap() * @model mapType="org.eclipse.emf.ecore.EStringToStringMapEntry" transient="true" * extendedMetaData="kind='attribute' name='xmlns:prefix'" * @generated */ EMap getXMLNSPrefixMap(); /** * Returns the value of the 'XSI Schema Location' map. * The key is of type {@link java.lang.String}, * and the value is of type {@link java.lang.String}, * *

* If the meaning of the 'XSI Schema Location' map isn't clear, * there really should be more of a description here... *

* * @return the value of the 'XSI Schema Location' map. * @see org.apache.uima.tools.cfe.config.ConfigPackage#getDocumentRoot_XSISchemaLocation() * @model mapType="org.eclipse.emf.ecore.EStringToStringMapEntry" transient="true" * extendedMetaData="kind='attribute' name='xsi:schemaLocation'" * @generated */ EMap getXSISchemaLocation(); /** * Returns the value of the 'CFE Config' containment reference. * *

* If the meaning of the 'CFE Config' containment reference isn't clear, * there really should be more of a description here... *

* * @return the value of the 'CFE Config' containment reference. * @see #setCFEConfig(CFEDescriptorXML) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getDocumentRoot_CFEConfig() * @model containment="true" upper="-2" transient="true" volatile="true" derived="true" * extendedMetaData="kind='element' name='CFEConfig' namespace='##targetNamespace'" * @generated */ CFEDescriptorXML getCFEConfig(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.DocumentRoot#getCFEConfig CFE Config}' containment reference. * * * @param value the new value of the 'CFE Config' containment reference. * @see #getCFEConfig() * @generated */ void setCFEConfig(CFEDescriptorXML value); } // DocumentRoot././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/xmlBeans/uima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/xmlBea0000755000175000017500000000000011625126542033320 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/ConfigFactory.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Config0000644000175000017500000001242211625126542033320 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.ecore.EFactory; /** * * The Factory for the model. * It provides a create method for each non-abstract class of the model. * * @see org.apache.uima.tools.cfe.config.ConfigPackage * @generated */ public interface ConfigFactory extends EFactory { /** * The singleton instance of the factory. * * * @generated */ ConfigFactory eINSTANCE = org.apache.uima.tools.cfe.config.impl.ConfigFactoryImpl.init(); /** * Returns a new object of class 'Bitset Feature Values XML'. * * * @return a new object of class 'Bitset Feature Values XML'. * @generated */ BitsetFeatureValuesXML createBitsetFeatureValuesXML(); /** * Returns a new object of class 'CFE Descriptor XML'. * * * @return a new object of class 'CFE Descriptor XML'. * @generated */ CFEDescriptorXML createCFEDescriptorXML(); /** * Returns a new object of class 'Document Root'. * * * @return a new object of class 'Document Root'. * @generated */ DocumentRoot createDocumentRoot(); /** * Returns a new object of class 'Enum Feature Values XML'. * * * @return a new object of class 'Enum Feature Values XML'. * @generated */ EnumFeatureValuesXML createEnumFeatureValuesXML(); /** * Returns a new object of class 'Feature Object Matcher XML'. * * * @return a new object of class 'Feature Object Matcher XML'. * @generated */ FeatureObjectMatcherXML createFeatureObjectMatcherXML(); /** * Returns a new object of class 'Group Feature Matcher XML'. * * * @return a new object of class 'Group Feature Matcher XML'. * @generated */ GroupFeatureMatcherXML createGroupFeatureMatcherXML(); /** * Returns a new object of class 'Object Path Feature Values XML'. * * * @return a new object of class 'Object Path Feature Values XML'. * @generated */ ObjectPathFeatureValuesXML createObjectPathFeatureValuesXML(); /** * Returns a new object of class 'Partial Object Matcher XML'. * * * @return a new object of class 'Partial Object Matcher XML'. * @generated */ PartialObjectMatcherXML createPartialObjectMatcherXML(); /** * Returns a new object of class 'Pattern Feature Values XML'. * * * @return a new object of class 'Pattern Feature Values XML'. * @generated */ PatternFeatureValuesXML createPatternFeatureValuesXML(); /** * Returns a new object of class 'Range Feature Values XML'. * * * @return a new object of class 'Range Feature Values XML'. * @generated */ RangeFeatureValuesXML createRangeFeatureValuesXML(); /** * Returns a new object of class 'Single Feature Matcher XML'. * * * @return a new object of class 'Single Feature Matcher XML'. * @generated */ SingleFeatureMatcherXML createSingleFeatureMatcherXML(); /** * Returns a new object of class 'Target Annotation XML'. * * * @return a new object of class 'Target Annotation XML'. * @generated */ TargetAnnotationXML createTargetAnnotationXML(); /** * Returns the package supported by this factory. * * * @return the package supported by this factory. * @generated */ ConfigPackage getConfigPackage(); } //ConfigFactory ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/RangeFeatureValuesXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/RangeF0000644000175000017500000002144211625126542033257 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'Range Feature Values XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#getLowerBoundary Lower Boundary}
  • *
  • {@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isLowerBoundaryInclusive Lower Boundary Inclusive}
  • *
  • {@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#getUpperBoundary Upper Boundary}
  • *
  • {@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isUpperBoundaryInclusive Upper Boundary Inclusive}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getRangeFeatureValuesXML() * @model extendedMetaData="name='RangeFeatureValuesXML' kind='empty'" * @generated */ public interface RangeFeatureValuesXML extends EObject { /** * Returns the value of the 'Lower Boundary' attribute. * *

* If the meaning of the 'Lower Boundary' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Lower Boundary' attribute. * @see #setLowerBoundary(Object) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getRangeFeatureValuesXML_LowerBoundary() * @model dataType="org.eclipse.emf.ecore.xml.type.AnySimpleType" * extendedMetaData="kind='attribute' name='lowerBoundary'" * @generated */ Object getLowerBoundary(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#getLowerBoundary Lower Boundary}' attribute. * * * @param value the new value of the 'Lower Boundary' attribute. * @see #getLowerBoundary() * @generated */ void setLowerBoundary(Object value); /** * Returns the value of the 'Lower Boundary Inclusive' attribute. * *

* If the meaning of the 'Lower Boundary Inclusive' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Lower Boundary Inclusive' attribute. * @see #isSetLowerBoundaryInclusive() * @see #unsetLowerBoundaryInclusive() * @see #setLowerBoundaryInclusive(boolean) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getRangeFeatureValuesXML_LowerBoundaryInclusive() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * extendedMetaData="kind='attribute' name='lowerBoundaryInclusive'" * @generated */ boolean isLowerBoundaryInclusive(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isLowerBoundaryInclusive Lower Boundary Inclusive}' attribute. * * * @param value the new value of the 'Lower Boundary Inclusive' attribute. * @see #isSetLowerBoundaryInclusive() * @see #unsetLowerBoundaryInclusive() * @see #isLowerBoundaryInclusive() * @generated */ void setLowerBoundaryInclusive(boolean value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isLowerBoundaryInclusive Lower Boundary Inclusive}' attribute. * * * @see #isSetLowerBoundaryInclusive() * @see #isLowerBoundaryInclusive() * @see #setLowerBoundaryInclusive(boolean) * @generated */ void unsetLowerBoundaryInclusive(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isLowerBoundaryInclusive Lower Boundary Inclusive}' attribute is set. * * * @return whether the value of the 'Lower Boundary Inclusive' attribute is set. * @see #unsetLowerBoundaryInclusive() * @see #isLowerBoundaryInclusive() * @see #setLowerBoundaryInclusive(boolean) * @generated */ boolean isSetLowerBoundaryInclusive(); /** * Returns the value of the 'Upper Boundary' attribute. * *

* If the meaning of the 'Upper Boundary' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Upper Boundary' attribute. * @see #setUpperBoundary(Object) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getRangeFeatureValuesXML_UpperBoundary() * @model dataType="org.eclipse.emf.ecore.xml.type.AnySimpleType" * extendedMetaData="kind='attribute' name='upperBoundary'" * @generated */ Object getUpperBoundary(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#getUpperBoundary Upper Boundary}' attribute. * * * @param value the new value of the 'Upper Boundary' attribute. * @see #getUpperBoundary() * @generated */ void setUpperBoundary(Object value); /** * Returns the value of the 'Upper Boundary Inclusive' attribute. * *

* If the meaning of the 'Upper Boundary Inclusive' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Upper Boundary Inclusive' attribute. * @see #isSetUpperBoundaryInclusive() * @see #unsetUpperBoundaryInclusive() * @see #setUpperBoundaryInclusive(boolean) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getRangeFeatureValuesXML_UpperBoundaryInclusive() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * extendedMetaData="kind='attribute' name='upperBoundaryInclusive'" * @generated */ boolean isUpperBoundaryInclusive(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isUpperBoundaryInclusive Upper Boundary Inclusive}' attribute. * * * @param value the new value of the 'Upper Boundary Inclusive' attribute. * @see #isSetUpperBoundaryInclusive() * @see #unsetUpperBoundaryInclusive() * @see #isUpperBoundaryInclusive() * @generated */ void setUpperBoundaryInclusive(boolean value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isUpperBoundaryInclusive Upper Boundary Inclusive}' attribute. * * * @see #isSetUpperBoundaryInclusive() * @see #isUpperBoundaryInclusive() * @see #setUpperBoundaryInclusive(boolean) * @generated */ void unsetUpperBoundaryInclusive(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isUpperBoundaryInclusive Upper Boundary Inclusive}' attribute is set. * * * @return whether the value of the 'Upper Boundary Inclusive' attribute is set. * @see #unsetUpperBoundaryInclusive() * @see #isUpperBoundaryInclusive() * @see #setUpperBoundaryInclusive(boolean) * @generated */ boolean isSetUpperBoundaryInclusive(); } // RangeFeatureValuesXML././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/ConfigPackage.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Config0000644000175000017500000020716511625126542033332 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; /** * * The Package for the model. * It contains accessors for the meta objects to represent *
    *
  • each class,
  • *
  • each feature of each class,
  • *
  • each enum,
  • *
  • and each data type
  • *
* * @see org.apache.uima.tools.cfe.config.ConfigFactory * @model kind="package" * @generated */ public interface ConfigPackage extends EPackage { /** * The package name. * * * @generated */ String eNAME = "config"; /** * The package namespace URI. * * * @generated */ String eNS_URI = "http://www.apache.org/uima/tools/cfe/config"; /** * The package namespace name. * * * @generated */ String eNS_PREFIX = "config"; /** * The singleton instance of the package. * * * @generated */ ConfigPackage eINSTANCE = org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl.init(); /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.BitsetFeatureValuesXMLImpl Bitset Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.BitsetFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getBitsetFeatureValuesXML() * @generated */ int BITSET_FEATURE_VALUES_XML = 0; /** * The feature id for the 'Bitmask' attribute. * * * @generated * @ordered */ int BITSET_FEATURE_VALUES_XML__BITMASK = 0; /** * The feature id for the 'Exact Match' attribute. * * * @generated * @ordered */ int BITSET_FEATURE_VALUES_XML__EXACT_MATCH = 1; /** * The number of structural features of the 'Bitset Feature Values XML' class. * * * @generated * @ordered */ int BITSET_FEATURE_VALUES_XML_FEATURE_COUNT = 2; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.CFEDescriptorXMLImpl CFE Descriptor XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.CFEDescriptorXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getCFEDescriptorXML() * @generated */ int CFE_DESCRIPTOR_XML = 1; /** * The feature id for the 'Target Annotations' containment reference list. * * * @generated * @ordered */ int CFE_DESCRIPTOR_XML__TARGET_ANNOTATIONS = 0; /** * The feature id for the 'Null Value Image' attribute. * * * @generated * @ordered */ int CFE_DESCRIPTOR_XML__NULL_VALUE_IMAGE = 1; /** * The number of structural features of the 'CFE Descriptor XML' class. * * * @generated * @ordered */ int CFE_DESCRIPTOR_XML_FEATURE_COUNT = 2; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.DocumentRootImpl Document Root}' class. * * * @see org.apache.uima.tools.cfe.config.impl.DocumentRootImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getDocumentRoot() * @generated */ int DOCUMENT_ROOT = 2; /** * The feature id for the 'Mixed' attribute list. * * * @generated * @ordered */ int DOCUMENT_ROOT__MIXED = 0; /** * The feature id for the 'XMLNS Prefix Map' map. * * * @generated * @ordered */ int DOCUMENT_ROOT__XMLNS_PREFIX_MAP = 1; /** * The feature id for the 'XSI Schema Location' map. * * * @generated * @ordered */ int DOCUMENT_ROOT__XSI_SCHEMA_LOCATION = 2; /** * The feature id for the 'CFE Config' containment reference. * * * @generated * @ordered */ int DOCUMENT_ROOT__CFE_CONFIG = 3; /** * The number of structural features of the 'Document Root' class. * * * @generated * @ordered */ int DOCUMENT_ROOT_FEATURE_COUNT = 4; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.EnumFeatureValuesXMLImpl Enum Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.EnumFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getEnumFeatureValuesXML() * @generated */ int ENUM_FEATURE_VALUES_XML = 3; /** * The feature id for the 'Values' attribute list. * * * @generated * @ordered */ int ENUM_FEATURE_VALUES_XML__VALUES = 0; /** * The feature id for the 'Case Sensitive' attribute. * * * @generated * @ordered */ int ENUM_FEATURE_VALUES_XML__CASE_SENSITIVE = 1; /** * The number of structural features of the 'Enum Feature Values XML' class. * * * @generated * @ordered */ int ENUM_FEATURE_VALUES_XML_FEATURE_COUNT = 2; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.PartialObjectMatcherXMLImpl Partial Object Matcher XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.PartialObjectMatcherXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getPartialObjectMatcherXML() * @generated */ int PARTIAL_OBJECT_MATCHER_XML = 7; /** * The feature id for the 'Group Feature Matchers' containment reference list. * * * @generated * @ordered */ int PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS = 0; /** * The feature id for the 'Annotation Type Name' attribute. * * * @generated * @ordered */ int PARTIAL_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME = 1; /** * The feature id for the 'Full Path' attribute. * * * @generated * @ordered */ int PARTIAL_OBJECT_MATCHER_XML__FULL_PATH = 2; /** * The number of structural features of the 'Partial Object Matcher XML' class. * * * @generated * @ordered */ int PARTIAL_OBJECT_MATCHER_XML_FEATURE_COUNT = 3; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl Feature Object Matcher XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getFeatureObjectMatcherXML() * @generated */ int FEATURE_OBJECT_MATCHER_XML = 4; /** * The feature id for the 'Group Feature Matchers' containment reference list. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS = PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS; /** * The feature id for the 'Annotation Type Name' attribute. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME = PARTIAL_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME; /** * The feature id for the 'Full Path' attribute. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__FULL_PATH = PARTIAL_OBJECT_MATCHER_XML__FULL_PATH; /** * The feature id for the 'Distance' attribute. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__DISTANCE = PARTIAL_OBJECT_MATCHER_XML_FEATURE_COUNT + 0; /** * The feature id for the 'Orientation' attribute. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__ORIENTATION = PARTIAL_OBJECT_MATCHER_XML_FEATURE_COUNT + 1; /** * The feature id for the 'Window Flags' attribute. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__WINDOW_FLAGS = PARTIAL_OBJECT_MATCHER_XML_FEATURE_COUNT + 2; /** * The feature id for the 'Windowsize Enclosed' attribute. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_ENCLOSED = PARTIAL_OBJECT_MATCHER_XML_FEATURE_COUNT + 3; /** * The feature id for the 'Windowsize Inside' attribute. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_INSIDE = PARTIAL_OBJECT_MATCHER_XML_FEATURE_COUNT + 4; /** * The feature id for the 'Windowsize Left' attribute. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_LEFT = PARTIAL_OBJECT_MATCHER_XML_FEATURE_COUNT + 5; /** * The feature id for the 'Windowsize Right' attribute. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_RIGHT = PARTIAL_OBJECT_MATCHER_XML_FEATURE_COUNT + 6; /** * The number of structural features of the 'Feature Object Matcher XML' class. * * * @generated * @ordered */ int FEATURE_OBJECT_MATCHER_XML_FEATURE_COUNT = PARTIAL_OBJECT_MATCHER_XML_FEATURE_COUNT + 7; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.GroupFeatureMatcherXMLImpl Group Feature Matcher XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.GroupFeatureMatcherXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getGroupFeatureMatcherXML() * @generated */ int GROUP_FEATURE_MATCHER_XML = 5; /** * The feature id for the 'Feature Matchers' containment reference list. * * * @generated * @ordered */ int GROUP_FEATURE_MATCHER_XML__FEATURE_MATCHERS = 0; /** * The feature id for the 'Exclude' attribute. * * * @generated * @ordered */ int GROUP_FEATURE_MATCHER_XML__EXCLUDE = 1; /** * The number of structural features of the 'Group Feature Matcher XML' class. * * * @generated * @ordered */ int GROUP_FEATURE_MATCHER_XML_FEATURE_COUNT = 2; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.ObjectPathFeatureValuesXMLImpl Object Path Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.ObjectPathFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getObjectPathFeatureValuesXML() * @generated */ int OBJECT_PATH_FEATURE_VALUES_XML = 6; /** * The feature id for the 'Object Path' attribute. * * * @generated * @ordered */ int OBJECT_PATH_FEATURE_VALUES_XML__OBJECT_PATH = 0; /** * The number of structural features of the 'Object Path Feature Values XML' class. * * * @generated * @ordered */ int OBJECT_PATH_FEATURE_VALUES_XML_FEATURE_COUNT = 1; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.PatternFeatureValuesXMLImpl Pattern Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.PatternFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getPatternFeatureValuesXML() * @generated */ int PATTERN_FEATURE_VALUES_XML = 8; /** * The feature id for the 'Pattern' attribute. * * * @generated * @ordered */ int PATTERN_FEATURE_VALUES_XML__PATTERN = 0; /** * The number of structural features of the 'Pattern Feature Values XML' class. * * * @generated * @ordered */ int PATTERN_FEATURE_VALUES_XML_FEATURE_COUNT = 1; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.RangeFeatureValuesXMLImpl Range Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.RangeFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getRangeFeatureValuesXML() * @generated */ int RANGE_FEATURE_VALUES_XML = 9; /** * The feature id for the 'Lower Boundary' attribute. * * * @generated * @ordered */ int RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY = 0; /** * The feature id for the 'Lower Boundary Inclusive' attribute. * * * @generated * @ordered */ int RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY_INCLUSIVE = 1; /** * The feature id for the 'Upper Boundary' attribute. * * * @generated * @ordered */ int RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY = 2; /** * The feature id for the 'Upper Boundary Inclusive' attribute. * * * @generated * @ordered */ int RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY_INCLUSIVE = 3; /** * The number of structural features of the 'Range Feature Values XML' class. * * * @generated * @ordered */ int RANGE_FEATURE_VALUES_XML_FEATURE_COUNT = 4; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl Single Feature Matcher XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getSingleFeatureMatcherXML() * @generated */ int SINGLE_FEATURE_MATCHER_XML = 10; /** * The feature id for the 'Range Feature Values' containment reference. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES = 0; /** * The feature id for the 'Enum Feature Values' containment reference. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES = 1; /** * The feature id for the 'Bitset Feature Values' containment reference. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES = 2; /** * The feature id for the 'Object Path Feature Values' containment reference. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES = 3; /** * The feature id for the 'Pattern Feature Values' containment reference. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES = 4; /** * The feature id for the 'Exclude' attribute. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML__EXCLUDE = 5; /** * The feature id for the 'Feature Path' attribute. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML__FEATURE_PATH = 6; /** * The feature id for the 'Feature Type Name' attribute. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML__FEATURE_TYPE_NAME = 7; /** * The feature id for the 'Quiet' attribute. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML__QUIET = 8; /** * The number of structural features of the 'Single Feature Matcher XML' class. * * * @generated * @ordered */ int SINGLE_FEATURE_MATCHER_XML_FEATURE_COUNT = 9; /** * The meta object id for the '{@link org.apache.uima.tools.cfe.config.impl.TargetAnnotationXMLImpl Target Annotation XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.TargetAnnotationXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getTargetAnnotationXML() * @generated */ int TARGET_ANNOTATION_XML = 11; /** * The feature id for the 'Target Annotation Matcher' containment reference. * * * @generated * @ordered */ int TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER = 0; /** * The feature id for the 'Feature Annotation Matchers' containment reference list. * * * @generated * @ordered */ int TARGET_ANNOTATION_XML__FEATURE_ANNOTATION_MATCHERS = 1; /** * The feature id for the 'Class Name' attribute. * * * @generated * @ordered */ int TARGET_ANNOTATION_XML__CLASS_NAME = 2; /** * The feature id for the 'Enclosing Annotation' attribute. * * * @generated * @ordered */ int TARGET_ANNOTATION_XML__ENCLOSING_ANNOTATION = 3; /** * The number of structural features of the 'Target Annotation XML' class. * * * @generated * @ordered */ int TARGET_ANNOTATION_XML_FEATURE_COUNT = 4; /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML Bitset Feature Values XML}'. * * * @return the meta object for class 'Bitset Feature Values XML'. * @see org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML * @generated */ EClass getBitsetFeatureValuesXML(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#getBitmask Bitmask}'. * * * @return the meta object for the attribute 'Bitmask'. * @see org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#getBitmask() * @see #getBitsetFeatureValuesXML() * @generated */ EAttribute getBitsetFeatureValuesXML_Bitmask(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#isExactMatch Exact Match}'. * * * @return the meta object for the attribute 'Exact Match'. * @see org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#isExactMatch() * @see #getBitsetFeatureValuesXML() * @generated */ EAttribute getBitsetFeatureValuesXML_ExactMatch(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.CFEDescriptorXML CFE Descriptor XML}'. * * * @return the meta object for class 'CFE Descriptor XML'. * @see org.apache.uima.tools.cfe.config.CFEDescriptorXML * @generated */ EClass getCFEDescriptorXML(); /** * Returns the meta object for the containment reference list '{@link org.apache.uima.tools.cfe.config.CFEDescriptorXML#getTargetAnnotations Target Annotations}'. * * * @return the meta object for the containment reference list 'Target Annotations'. * @see org.apache.uima.tools.cfe.config.CFEDescriptorXML#getTargetAnnotations() * @see #getCFEDescriptorXML() * @generated */ EReference getCFEDescriptorXML_TargetAnnotations(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.CFEDescriptorXML#getNullValueImage Null Value Image}'. * * * @return the meta object for the attribute 'Null Value Image'. * @see org.apache.uima.tools.cfe.config.CFEDescriptorXML#getNullValueImage() * @see #getCFEDescriptorXML() * @generated */ EAttribute getCFEDescriptorXML_NullValueImage(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.DocumentRoot Document Root}'. * * * @return the meta object for class 'Document Root'. * @see org.apache.uima.tools.cfe.config.DocumentRoot * @generated */ EClass getDocumentRoot(); /** * Returns the meta object for the attribute list '{@link org.apache.uima.tools.cfe.config.DocumentRoot#getMixed Mixed}'. * * * @return the meta object for the attribute list 'Mixed'. * @see org.apache.uima.tools.cfe.config.DocumentRoot#getMixed() * @see #getDocumentRoot() * @generated */ EAttribute getDocumentRoot_Mixed(); /** * Returns the meta object for the map '{@link org.apache.uima.tools.cfe.config.DocumentRoot#getXMLNSPrefixMap XMLNS Prefix Map}'. * * * @return the meta object for the map 'XMLNS Prefix Map'. * @see org.apache.uima.tools.cfe.config.DocumentRoot#getXMLNSPrefixMap() * @see #getDocumentRoot() * @generated */ EReference getDocumentRoot_XMLNSPrefixMap(); /** * Returns the meta object for the map '{@link org.apache.uima.tools.cfe.config.DocumentRoot#getXSISchemaLocation XSI Schema Location}'. * * * @return the meta object for the map 'XSI Schema Location'. * @see org.apache.uima.tools.cfe.config.DocumentRoot#getXSISchemaLocation() * @see #getDocumentRoot() * @generated */ EReference getDocumentRoot_XSISchemaLocation(); /** * Returns the meta object for the containment reference '{@link org.apache.uima.tools.cfe.config.DocumentRoot#getCFEConfig CFE Config}'. * * * @return the meta object for the containment reference 'CFE Config'. * @see org.apache.uima.tools.cfe.config.DocumentRoot#getCFEConfig() * @see #getDocumentRoot() * @generated */ EReference getDocumentRoot_CFEConfig(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.EnumFeatureValuesXML Enum Feature Values XML}'. * * * @return the meta object for class 'Enum Feature Values XML'. * @see org.apache.uima.tools.cfe.config.EnumFeatureValuesXML * @generated */ EClass getEnumFeatureValuesXML(); /** * Returns the meta object for the attribute list '{@link org.apache.uima.tools.cfe.config.EnumFeatureValuesXML#getValues Values}'. * * * @return the meta object for the attribute list 'Values'. * @see org.apache.uima.tools.cfe.config.EnumFeatureValuesXML#getValues() * @see #getEnumFeatureValuesXML() * @generated */ EAttribute getEnumFeatureValuesXML_Values(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.EnumFeatureValuesXML#isCaseSensitive Case Sensitive}'. * * * @return the meta object for the attribute 'Case Sensitive'. * @see org.apache.uima.tools.cfe.config.EnumFeatureValuesXML#isCaseSensitive() * @see #getEnumFeatureValuesXML() * @generated */ EAttribute getEnumFeatureValuesXML_CaseSensitive(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML Feature Object Matcher XML}'. * * * @return the meta object for class 'Feature Object Matcher XML'. * @see org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML * @generated */ EClass getFeatureObjectMatcherXML(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isDistance Distance}'. * * * @return the meta object for the attribute 'Distance'. * @see org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isDistance() * @see #getFeatureObjectMatcherXML() * @generated */ EAttribute getFeatureObjectMatcherXML_Distance(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isOrientation Orientation}'. * * * @return the meta object for the attribute 'Orientation'. * @see org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isOrientation() * @see #getFeatureObjectMatcherXML() * @generated */ EAttribute getFeatureObjectMatcherXML_Orientation(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowFlags Window Flags}'. * * * @return the meta object for the attribute 'Window Flags'. * @see org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowFlags() * @see #getFeatureObjectMatcherXML() * @generated */ EAttribute getFeatureObjectMatcherXML_WindowFlags(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeEnclosed Windowsize Enclosed}'. * * * @return the meta object for the attribute 'Windowsize Enclosed'. * @see org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeEnclosed() * @see #getFeatureObjectMatcherXML() * @generated */ EAttribute getFeatureObjectMatcherXML_WindowsizeEnclosed(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeInside Windowsize Inside}'. * * * @return the meta object for the attribute 'Windowsize Inside'. * @see org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeInside() * @see #getFeatureObjectMatcherXML() * @generated */ EAttribute getFeatureObjectMatcherXML_WindowsizeInside(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeLeft Windowsize Left}'. * * * @return the meta object for the attribute 'Windowsize Left'. * @see org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeLeft() * @see #getFeatureObjectMatcherXML() * @generated */ EAttribute getFeatureObjectMatcherXML_WindowsizeLeft(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeRight Windowsize Right}'. * * * @return the meta object for the attribute 'Windowsize Right'. * @see org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeRight() * @see #getFeatureObjectMatcherXML() * @generated */ EAttribute getFeatureObjectMatcherXML_WindowsizeRight(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML Group Feature Matcher XML}'. * * * @return the meta object for class 'Group Feature Matcher XML'. * @see org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML * @generated */ EClass getGroupFeatureMatcherXML(); /** * Returns the meta object for the containment reference list '{@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML#getFeatureMatchers Feature Matchers}'. * * * @return the meta object for the containment reference list 'Feature Matchers'. * @see org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML#getFeatureMatchers() * @see #getGroupFeatureMatcherXML() * @generated */ EReference getGroupFeatureMatcherXML_FeatureMatchers(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML#isExclude Exclude}'. * * * @return the meta object for the attribute 'Exclude'. * @see org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML#isExclude() * @see #getGroupFeatureMatcherXML() * @generated */ EAttribute getGroupFeatureMatcherXML_Exclude(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML Object Path Feature Values XML}'. * * * @return the meta object for class 'Object Path Feature Values XML'. * @see org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML * @generated */ EClass getObjectPathFeatureValuesXML(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML#getObjectPath Object Path}'. * * * @return the meta object for the attribute 'Object Path'. * @see org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML#getObjectPath() * @see #getObjectPathFeatureValuesXML() * @generated */ EAttribute getObjectPathFeatureValuesXML_ObjectPath(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML Partial Object Matcher XML}'. * * * @return the meta object for class 'Partial Object Matcher XML'. * @see org.apache.uima.tools.cfe.config.PartialObjectMatcherXML * @generated */ EClass getPartialObjectMatcherXML(); /** * Returns the meta object for the containment reference list '{@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getGroupFeatureMatchers Group Feature Matchers}'. * * * @return the meta object for the containment reference list 'Group Feature Matchers'. * @see org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getGroupFeatureMatchers() * @see #getPartialObjectMatcherXML() * @generated */ EReference getPartialObjectMatcherXML_GroupFeatureMatchers(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getAnnotationTypeName Annotation Type Name}'. * * * @return the meta object for the attribute 'Annotation Type Name'. * @see org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getAnnotationTypeName() * @see #getPartialObjectMatcherXML() * @generated */ EAttribute getPartialObjectMatcherXML_AnnotationTypeName(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getFullPath Full Path}'. * * * @return the meta object for the attribute 'Full Path'. * @see org.apache.uima.tools.cfe.config.PartialObjectMatcherXML#getFullPath() * @see #getPartialObjectMatcherXML() * @generated */ EAttribute getPartialObjectMatcherXML_FullPath(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.PatternFeatureValuesXML Pattern Feature Values XML}'. * * * @return the meta object for class 'Pattern Feature Values XML'. * @see org.apache.uima.tools.cfe.config.PatternFeatureValuesXML * @generated */ EClass getPatternFeatureValuesXML(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.PatternFeatureValuesXML#getPattern Pattern}'. * * * @return the meta object for the attribute 'Pattern'. * @see org.apache.uima.tools.cfe.config.PatternFeatureValuesXML#getPattern() * @see #getPatternFeatureValuesXML() * @generated */ EAttribute getPatternFeatureValuesXML_Pattern(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML Range Feature Values XML}'. * * * @return the meta object for class 'Range Feature Values XML'. * @see org.apache.uima.tools.cfe.config.RangeFeatureValuesXML * @generated */ EClass getRangeFeatureValuesXML(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#getLowerBoundary Lower Boundary}'. * * * @return the meta object for the attribute 'Lower Boundary'. * @see org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#getLowerBoundary() * @see #getRangeFeatureValuesXML() * @generated */ EAttribute getRangeFeatureValuesXML_LowerBoundary(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isLowerBoundaryInclusive Lower Boundary Inclusive}'. * * * @return the meta object for the attribute 'Lower Boundary Inclusive'. * @see org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isLowerBoundaryInclusive() * @see #getRangeFeatureValuesXML() * @generated */ EAttribute getRangeFeatureValuesXML_LowerBoundaryInclusive(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#getUpperBoundary Upper Boundary}'. * * * @return the meta object for the attribute 'Upper Boundary'. * @see org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#getUpperBoundary() * @see #getRangeFeatureValuesXML() * @generated */ EAttribute getRangeFeatureValuesXML_UpperBoundary(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isUpperBoundaryInclusive Upper Boundary Inclusive}'. * * * @return the meta object for the attribute 'Upper Boundary Inclusive'. * @see org.apache.uima.tools.cfe.config.RangeFeatureValuesXML#isUpperBoundaryInclusive() * @see #getRangeFeatureValuesXML() * @generated */ EAttribute getRangeFeatureValuesXML_UpperBoundaryInclusive(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML Single Feature Matcher XML}'. * * * @return the meta object for class 'Single Feature Matcher XML'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML * @generated */ EClass getSingleFeatureMatcherXML(); /** * Returns the meta object for the containment reference '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getRangeFeatureValues Range Feature Values}'. * * * @return the meta object for the containment reference 'Range Feature Values'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getRangeFeatureValues() * @see #getSingleFeatureMatcherXML() * @generated */ EReference getSingleFeatureMatcherXML_RangeFeatureValues(); /** * Returns the meta object for the containment reference '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getEnumFeatureValues Enum Feature Values}'. * * * @return the meta object for the containment reference 'Enum Feature Values'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getEnumFeatureValues() * @see #getSingleFeatureMatcherXML() * @generated */ EReference getSingleFeatureMatcherXML_EnumFeatureValues(); /** * Returns the meta object for the containment reference '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getBitsetFeatureValues Bitset Feature Values}'. * * * @return the meta object for the containment reference 'Bitset Feature Values'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getBitsetFeatureValues() * @see #getSingleFeatureMatcherXML() * @generated */ EReference getSingleFeatureMatcherXML_BitsetFeatureValues(); /** * Returns the meta object for the containment reference '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getObjectPathFeatureValues Object Path Feature Values}'. * * * @return the meta object for the containment reference 'Object Path Feature Values'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getObjectPathFeatureValues() * @see #getSingleFeatureMatcherXML() * @generated */ EReference getSingleFeatureMatcherXML_ObjectPathFeatureValues(); /** * Returns the meta object for the containment reference '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getPatternFeatureValues Pattern Feature Values}'. * * * @return the meta object for the containment reference 'Pattern Feature Values'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getPatternFeatureValues() * @see #getSingleFeatureMatcherXML() * @generated */ EReference getSingleFeatureMatcherXML_PatternFeatureValues(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isExclude Exclude}'. * * * @return the meta object for the attribute 'Exclude'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isExclude() * @see #getSingleFeatureMatcherXML() * @generated */ EAttribute getSingleFeatureMatcherXML_Exclude(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getFeaturePath Feature Path}'. * * * @return the meta object for the attribute 'Feature Path'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getFeaturePath() * @see #getSingleFeatureMatcherXML() * @generated */ EAttribute getSingleFeatureMatcherXML_FeaturePath(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getFeatureTypeName Feature Type Name}'. * * * @return the meta object for the attribute 'Feature Type Name'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getFeatureTypeName() * @see #getSingleFeatureMatcherXML() * @generated */ EAttribute getSingleFeatureMatcherXML_FeatureTypeName(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isQuiet Quiet}'. * * * @return the meta object for the attribute 'Quiet'. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isQuiet() * @see #getSingleFeatureMatcherXML() * @generated */ EAttribute getSingleFeatureMatcherXML_Quiet(); /** * Returns the meta object for class '{@link org.apache.uima.tools.cfe.config.TargetAnnotationXML Target Annotation XML}'. * * * @return the meta object for class 'Target Annotation XML'. * @see org.apache.uima.tools.cfe.config.TargetAnnotationXML * @generated */ EClass getTargetAnnotationXML(); /** * Returns the meta object for the containment reference '{@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getTargetAnnotationMatcher Target Annotation Matcher}'. * * * @return the meta object for the containment reference 'Target Annotation Matcher'. * @see org.apache.uima.tools.cfe.config.TargetAnnotationXML#getTargetAnnotationMatcher() * @see #getTargetAnnotationXML() * @generated */ EReference getTargetAnnotationXML_TargetAnnotationMatcher(); /** * Returns the meta object for the containment reference list '{@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getFeatureAnnotationMatchers Feature Annotation Matchers}'. * * * @return the meta object for the containment reference list 'Feature Annotation Matchers'. * @see org.apache.uima.tools.cfe.config.TargetAnnotationXML#getFeatureAnnotationMatchers() * @see #getTargetAnnotationXML() * @generated */ EReference getTargetAnnotationXML_FeatureAnnotationMatchers(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getClassName Class Name}'. * * * @return the meta object for the attribute 'Class Name'. * @see org.apache.uima.tools.cfe.config.TargetAnnotationXML#getClassName() * @see #getTargetAnnotationXML() * @generated */ EAttribute getTargetAnnotationXML_ClassName(); /** * Returns the meta object for the attribute '{@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getEnclosingAnnotation Enclosing Annotation}'. * * * @return the meta object for the attribute 'Enclosing Annotation'. * @see org.apache.uima.tools.cfe.config.TargetAnnotationXML#getEnclosingAnnotation() * @see #getTargetAnnotationXML() * @generated */ EAttribute getTargetAnnotationXML_EnclosingAnnotation(); /** * Returns the factory that creates the instances of the model. * * * @return the factory that creates the instances of the model. * @generated */ ConfigFactory getConfigFactory(); /** * * Defines literals for the meta objects that represent *
    *
  • each class,
  • *
  • each feature of each class,
  • *
  • each enum,
  • *
  • and each data type
  • *
* * @generated */ interface Literals { /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.BitsetFeatureValuesXMLImpl Bitset Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.BitsetFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getBitsetFeatureValuesXML() * @generated */ EClass BITSET_FEATURE_VALUES_XML = eINSTANCE.getBitsetFeatureValuesXML(); /** * The meta object literal for the 'Bitmask' attribute feature. * * * @generated */ EAttribute BITSET_FEATURE_VALUES_XML__BITMASK = eINSTANCE.getBitsetFeatureValuesXML_Bitmask(); /** * The meta object literal for the 'Exact Match' attribute feature. * * * @generated */ EAttribute BITSET_FEATURE_VALUES_XML__EXACT_MATCH = eINSTANCE.getBitsetFeatureValuesXML_ExactMatch(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.CFEDescriptorXMLImpl CFE Descriptor XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.CFEDescriptorXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getCFEDescriptorXML() * @generated */ EClass CFE_DESCRIPTOR_XML = eINSTANCE.getCFEDescriptorXML(); /** * The meta object literal for the 'Target Annotations' containment reference list feature. * * * @generated */ EReference CFE_DESCRIPTOR_XML__TARGET_ANNOTATIONS = eINSTANCE.getCFEDescriptorXML_TargetAnnotations(); /** * The meta object literal for the 'Null Value Image' attribute feature. * * * @generated */ EAttribute CFE_DESCRIPTOR_XML__NULL_VALUE_IMAGE = eINSTANCE.getCFEDescriptorXML_NullValueImage(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.DocumentRootImpl Document Root}' class. * * * @see org.apache.uima.tools.cfe.config.impl.DocumentRootImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getDocumentRoot() * @generated */ EClass DOCUMENT_ROOT = eINSTANCE.getDocumentRoot(); /** * The meta object literal for the 'Mixed' attribute list feature. * * * @generated */ EAttribute DOCUMENT_ROOT__MIXED = eINSTANCE.getDocumentRoot_Mixed(); /** * The meta object literal for the 'XMLNS Prefix Map' map feature. * * * @generated */ EReference DOCUMENT_ROOT__XMLNS_PREFIX_MAP = eINSTANCE.getDocumentRoot_XMLNSPrefixMap(); /** * The meta object literal for the 'XSI Schema Location' map feature. * * * @generated */ EReference DOCUMENT_ROOT__XSI_SCHEMA_LOCATION = eINSTANCE.getDocumentRoot_XSISchemaLocation(); /** * The meta object literal for the 'CFE Config' containment reference feature. * * * @generated */ EReference DOCUMENT_ROOT__CFE_CONFIG = eINSTANCE.getDocumentRoot_CFEConfig(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.EnumFeatureValuesXMLImpl Enum Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.EnumFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getEnumFeatureValuesXML() * @generated */ EClass ENUM_FEATURE_VALUES_XML = eINSTANCE.getEnumFeatureValuesXML(); /** * The meta object literal for the 'Values' attribute list feature. * * * @generated */ EAttribute ENUM_FEATURE_VALUES_XML__VALUES = eINSTANCE.getEnumFeatureValuesXML_Values(); /** * The meta object literal for the 'Case Sensitive' attribute feature. * * * @generated */ EAttribute ENUM_FEATURE_VALUES_XML__CASE_SENSITIVE = eINSTANCE.getEnumFeatureValuesXML_CaseSensitive(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl Feature Object Matcher XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getFeatureObjectMatcherXML() * @generated */ EClass FEATURE_OBJECT_MATCHER_XML = eINSTANCE.getFeatureObjectMatcherXML(); /** * The meta object literal for the 'Distance' attribute feature. * * * @generated */ EAttribute FEATURE_OBJECT_MATCHER_XML__DISTANCE = eINSTANCE.getFeatureObjectMatcherXML_Distance(); /** * The meta object literal for the 'Orientation' attribute feature. * * * @generated */ EAttribute FEATURE_OBJECT_MATCHER_XML__ORIENTATION = eINSTANCE.getFeatureObjectMatcherXML_Orientation(); /** * The meta object literal for the 'Window Flags' attribute feature. * * * @generated */ EAttribute FEATURE_OBJECT_MATCHER_XML__WINDOW_FLAGS = eINSTANCE.getFeatureObjectMatcherXML_WindowFlags(); /** * The meta object literal for the 'Windowsize Enclosed' attribute feature. * * * @generated */ EAttribute FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_ENCLOSED = eINSTANCE.getFeatureObjectMatcherXML_WindowsizeEnclosed(); /** * The meta object literal for the 'Windowsize Inside' attribute feature. * * * @generated */ EAttribute FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_INSIDE = eINSTANCE.getFeatureObjectMatcherXML_WindowsizeInside(); /** * The meta object literal for the 'Windowsize Left' attribute feature. * * * @generated */ EAttribute FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_LEFT = eINSTANCE.getFeatureObjectMatcherXML_WindowsizeLeft(); /** * The meta object literal for the 'Windowsize Right' attribute feature. * * * @generated */ EAttribute FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_RIGHT = eINSTANCE.getFeatureObjectMatcherXML_WindowsizeRight(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.GroupFeatureMatcherXMLImpl Group Feature Matcher XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.GroupFeatureMatcherXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getGroupFeatureMatcherXML() * @generated */ EClass GROUP_FEATURE_MATCHER_XML = eINSTANCE.getGroupFeatureMatcherXML(); /** * The meta object literal for the 'Feature Matchers' containment reference list feature. * * * @generated */ EReference GROUP_FEATURE_MATCHER_XML__FEATURE_MATCHERS = eINSTANCE.getGroupFeatureMatcherXML_FeatureMatchers(); /** * The meta object literal for the 'Exclude' attribute feature. * * * @generated */ EAttribute GROUP_FEATURE_MATCHER_XML__EXCLUDE = eINSTANCE.getGroupFeatureMatcherXML_Exclude(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.ObjectPathFeatureValuesXMLImpl Object Path Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.ObjectPathFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getObjectPathFeatureValuesXML() * @generated */ EClass OBJECT_PATH_FEATURE_VALUES_XML = eINSTANCE.getObjectPathFeatureValuesXML(); /** * The meta object literal for the 'Object Path' attribute feature. * * * @generated */ EAttribute OBJECT_PATH_FEATURE_VALUES_XML__OBJECT_PATH = eINSTANCE.getObjectPathFeatureValuesXML_ObjectPath(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.PartialObjectMatcherXMLImpl Partial Object Matcher XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.PartialObjectMatcherXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getPartialObjectMatcherXML() * @generated */ EClass PARTIAL_OBJECT_MATCHER_XML = eINSTANCE.getPartialObjectMatcherXML(); /** * The meta object literal for the 'Group Feature Matchers' containment reference list feature. * * * @generated */ EReference PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS = eINSTANCE.getPartialObjectMatcherXML_GroupFeatureMatchers(); /** * The meta object literal for the 'Annotation Type Name' attribute feature. * * * @generated */ EAttribute PARTIAL_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME = eINSTANCE.getPartialObjectMatcherXML_AnnotationTypeName(); /** * The meta object literal for the 'Full Path' attribute feature. * * * @generated */ EAttribute PARTIAL_OBJECT_MATCHER_XML__FULL_PATH = eINSTANCE.getPartialObjectMatcherXML_FullPath(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.PatternFeatureValuesXMLImpl Pattern Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.PatternFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getPatternFeatureValuesXML() * @generated */ EClass PATTERN_FEATURE_VALUES_XML = eINSTANCE.getPatternFeatureValuesXML(); /** * The meta object literal for the 'Pattern' attribute feature. * * * @generated */ EAttribute PATTERN_FEATURE_VALUES_XML__PATTERN = eINSTANCE.getPatternFeatureValuesXML_Pattern(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.RangeFeatureValuesXMLImpl Range Feature Values XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.RangeFeatureValuesXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getRangeFeatureValuesXML() * @generated */ EClass RANGE_FEATURE_VALUES_XML = eINSTANCE.getRangeFeatureValuesXML(); /** * The meta object literal for the 'Lower Boundary' attribute feature. * * * @generated */ EAttribute RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY = eINSTANCE.getRangeFeatureValuesXML_LowerBoundary(); /** * The meta object literal for the 'Lower Boundary Inclusive' attribute feature. * * * @generated */ EAttribute RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY_INCLUSIVE = eINSTANCE.getRangeFeatureValuesXML_LowerBoundaryInclusive(); /** * The meta object literal for the 'Upper Boundary' attribute feature. * * * @generated */ EAttribute RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY = eINSTANCE.getRangeFeatureValuesXML_UpperBoundary(); /** * The meta object literal for the 'Upper Boundary Inclusive' attribute feature. * * * @generated */ EAttribute RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY_INCLUSIVE = eINSTANCE.getRangeFeatureValuesXML_UpperBoundaryInclusive(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl Single Feature Matcher XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getSingleFeatureMatcherXML() * @generated */ EClass SINGLE_FEATURE_MATCHER_XML = eINSTANCE.getSingleFeatureMatcherXML(); /** * The meta object literal for the 'Range Feature Values' containment reference feature. * * * @generated */ EReference SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES = eINSTANCE.getSingleFeatureMatcherXML_RangeFeatureValues(); /** * The meta object literal for the 'Enum Feature Values' containment reference feature. * * * @generated */ EReference SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES = eINSTANCE.getSingleFeatureMatcherXML_EnumFeatureValues(); /** * The meta object literal for the 'Bitset Feature Values' containment reference feature. * * * @generated */ EReference SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES = eINSTANCE.getSingleFeatureMatcherXML_BitsetFeatureValues(); /** * The meta object literal for the 'Object Path Feature Values' containment reference feature. * * * @generated */ EReference SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES = eINSTANCE.getSingleFeatureMatcherXML_ObjectPathFeatureValues(); /** * The meta object literal for the 'Pattern Feature Values' containment reference feature. * * * @generated */ EReference SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES = eINSTANCE.getSingleFeatureMatcherXML_PatternFeatureValues(); /** * The meta object literal for the 'Exclude' attribute feature. * * * @generated */ EAttribute SINGLE_FEATURE_MATCHER_XML__EXCLUDE = eINSTANCE.getSingleFeatureMatcherXML_Exclude(); /** * The meta object literal for the 'Feature Path' attribute feature. * * * @generated */ EAttribute SINGLE_FEATURE_MATCHER_XML__FEATURE_PATH = eINSTANCE.getSingleFeatureMatcherXML_FeaturePath(); /** * The meta object literal for the 'Feature Type Name' attribute feature. * * * @generated */ EAttribute SINGLE_FEATURE_MATCHER_XML__FEATURE_TYPE_NAME = eINSTANCE.getSingleFeatureMatcherXML_FeatureTypeName(); /** * The meta object literal for the 'Quiet' attribute feature. * * * @generated */ EAttribute SINGLE_FEATURE_MATCHER_XML__QUIET = eINSTANCE.getSingleFeatureMatcherXML_Quiet(); /** * The meta object literal for the '{@link org.apache.uima.tools.cfe.config.impl.TargetAnnotationXMLImpl Target Annotation XML}' class. * * * @see org.apache.uima.tools.cfe.config.impl.TargetAnnotationXMLImpl * @see org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl#getTargetAnnotationXML() * @generated */ EClass TARGET_ANNOTATION_XML = eINSTANCE.getTargetAnnotationXML(); /** * The meta object literal for the 'Target Annotation Matcher' containment reference feature. * * * @generated */ EReference TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER = eINSTANCE.getTargetAnnotationXML_TargetAnnotationMatcher(); /** * The meta object literal for the 'Feature Annotation Matchers' containment reference list feature. * * * @generated */ EReference TARGET_ANNOTATION_XML__FEATURE_ANNOTATION_MATCHERS = eINSTANCE.getTargetAnnotationXML_FeatureAnnotationMatchers(); /** * The meta object literal for the 'Class Name' attribute feature. * * * @generated */ EAttribute TARGET_ANNOTATION_XML__CLASS_NAME = eINSTANCE.getTargetAnnotationXML_ClassName(); /** * The meta object literal for the 'Enclosing Annotation' attribute feature. * * * @generated */ EAttribute TARGET_ANNOTATION_XML__ENCLOSING_ANNOTATION = eINSTANCE.getTargetAnnotationXML_EnclosingAnnotation(); } } //ConfigPackage ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/ObjectPathFeatureValuesXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Object0000644000175000017500000000521511625126542033323 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'Object Path Feature Values XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML#getObjectPath Object Path}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getObjectPathFeatureValuesXML() * @model extendedMetaData="name='ObjectPathFeatureValuesXML' kind='empty'" * @generated */ public interface ObjectPathFeatureValuesXML extends EObject { /** * Returns the value of the 'Object Path' attribute. * *

* If the meaning of the 'Object Path' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Object Path' attribute. * @see #setObjectPath(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getObjectPathFeatureValuesXML_ObjectPath() * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true" * extendedMetaData="kind='attribute' name='objectPath'" * @generated */ String getObjectPath(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML#getObjectPath Object Path}' attribute. * * * @param value the new value of the 'Object Path' attribute. * @see #getObjectPath() * @generated */ void setObjectPath(String value); } // ObjectPathFeatureValuesXML././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/FeatureObjectMatcherXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Featur0000644000175000017500000004536411625126542033354 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; /** * * A representation of the model object 'Feature Object Matcher XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isDistance Distance}
  • *
  • {@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isOrientation Orientation}
  • *
  • {@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowFlags Window Flags}
  • *
  • {@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeEnclosed Windowsize Enclosed}
  • *
  • {@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeInside Windowsize Inside}
  • *
  • {@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeLeft Windowsize Left}
  • *
  • {@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeRight Windowsize Right}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getFeatureObjectMatcherXML() * @model extendedMetaData="name='FeatureObjectMatcherXML' kind='elementOnly'" * @generated */ public interface FeatureObjectMatcherXML extends PartialObjectMatcherXML { /** * Returns the value of the 'Distance' attribute. * *

* If the meaning of the 'Distance' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Distance' attribute. * @see #isSetDistance() * @see #unsetDistance() * @see #setDistance(boolean) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getFeatureObjectMatcherXML_Distance() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * extendedMetaData="kind='attribute' name='distance'" * @generated */ boolean isDistance(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isDistance Distance}' attribute. * * * @param value the new value of the 'Distance' attribute. * @see #isSetDistance() * @see #unsetDistance() * @see #isDistance() * @generated */ void setDistance(boolean value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isDistance Distance}' attribute. * * * @see #isSetDistance() * @see #isDistance() * @see #setDistance(boolean) * @generated */ void unsetDistance(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isDistance Distance}' attribute is set. * * * @return whether the value of the 'Distance' attribute is set. * @see #unsetDistance() * @see #isDistance() * @see #setDistance(boolean) * @generated */ boolean isSetDistance(); /** * Returns the value of the 'Orientation' attribute. * *

* If the meaning of the 'Orientation' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Orientation' attribute. * @see #isSetOrientation() * @see #unsetOrientation() * @see #setOrientation(boolean) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getFeatureObjectMatcherXML_Orientation() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * extendedMetaData="kind='attribute' name='orientation'" * @generated */ boolean isOrientation(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isOrientation Orientation}' attribute. * * * @param value the new value of the 'Orientation' attribute. * @see #isSetOrientation() * @see #unsetOrientation() * @see #isOrientation() * @generated */ void setOrientation(boolean value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isOrientation Orientation}' attribute. * * * @see #isSetOrientation() * @see #isOrientation() * @see #setOrientation(boolean) * @generated */ void unsetOrientation(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#isOrientation Orientation}' attribute is set. * * * @return whether the value of the 'Orientation' attribute is set. * @see #unsetOrientation() * @see #isOrientation() * @see #setOrientation(boolean) * @generated */ boolean isSetOrientation(); /** * Returns the value of the 'Window Flags' attribute. * * * * * in class CommonFeatureMatcher * the following flg constants are defined * * CONSTANT_LEFTLEFT // 1 feature * annotation starts left from the target ends * left from the target * * CONSTANT_LEFTINSIDE // 2 feature * annotation starts left from the target ends * inside the target * * CONSTANT_LEFTRIGHT // 4 feature * annotation starts left from the target ends * right from the target * * CONSTANT_INSIDEINSIDE // 8 feature * annotation starts inside the target ends * inside the target * * CONSTANT_INSIDERIGHT // 16 feature * annotation starts inside the target ends * right from the target * * CONSTANT_RIGHTRIGHT // 32 feature * annotation starts right from the target ends * right from the target * * // any annotation that starts left from the * target * * CONSTANT_STARTSLEFT = CONSTANT_LEFTLEFT | * CONSTANT_LEFTINSIDE | CONSTANT_LEFTRIGHT; * // 7 * * // any annotation that starts inside the * target * * CONSTANT_STARTSINSIDE = * CONSTANT_INSIDEINSIDE|CONSTANT_INSIDERIGHT; * // 24 * * // any annotation that starts right from the * target * * CONSTANT_STARTSRIGHT = CONSTANT_RIGHTRIGHT; * // 32 * * // any annotation that is within the span * of enclosing annotation * * CONSTANT_ANYENCLOSED = CONSTANT_STARTSLEFT | * CONSTANT_STARTSINSIDE | * CONSTANT_STARTSRIGHT; * // 63 * * * @return the value of the 'Window Flags' attribute. * @see #isSetWindowFlags() * @see #unsetWindowFlags() * @see #setWindowFlags(int) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getFeatureObjectMatcherXML_WindowFlags() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int" * extendedMetaData="kind='attribute' name='windowFlags'" * @generated */ int getWindowFlags(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowFlags Window Flags}' attribute. * * * @param value the new value of the 'Window Flags' attribute. * @see #isSetWindowFlags() * @see #unsetWindowFlags() * @see #getWindowFlags() * @generated */ void setWindowFlags(int value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowFlags Window Flags}' attribute. * * * @see #isSetWindowFlags() * @see #getWindowFlags() * @see #setWindowFlags(int) * @generated */ void unsetWindowFlags(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowFlags Window Flags}' attribute is set. * * * @return whether the value of the 'Window Flags' attribute is set. * @see #unsetWindowFlags() * @see #getWindowFlags() * @see #setWindowFlags(int) * @generated */ boolean isSetWindowFlags(); /** * Returns the value of the 'Windowsize Enclosed' attribute. * *

* If the meaning of the 'Windowsize Enclosed' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Windowsize Enclosed' attribute. * @see #isSetWindowsizeEnclosed() * @see #unsetWindowsizeEnclosed() * @see #setWindowsizeEnclosed(int) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getFeatureObjectMatcherXML_WindowsizeEnclosed() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int" * extendedMetaData="kind='attribute' name='windowsizeEnclosed'" * @generated */ int getWindowsizeEnclosed(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeEnclosed Windowsize Enclosed}' attribute. * * * @param value the new value of the 'Windowsize Enclosed' attribute. * @see #isSetWindowsizeEnclosed() * @see #unsetWindowsizeEnclosed() * @see #getWindowsizeEnclosed() * @generated */ void setWindowsizeEnclosed(int value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeEnclosed Windowsize Enclosed}' attribute. * * * @see #isSetWindowsizeEnclosed() * @see #getWindowsizeEnclosed() * @see #setWindowsizeEnclosed(int) * @generated */ void unsetWindowsizeEnclosed(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeEnclosed Windowsize Enclosed}' attribute is set. * * * @return whether the value of the 'Windowsize Enclosed' attribute is set. * @see #unsetWindowsizeEnclosed() * @see #getWindowsizeEnclosed() * @see #setWindowsizeEnclosed(int) * @generated */ boolean isSetWindowsizeEnclosed(); /** * Returns the value of the 'Windowsize Inside' attribute. * *

* If the meaning of the 'Windowsize Inside' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Windowsize Inside' attribute. * @see #isSetWindowsizeInside() * @see #unsetWindowsizeInside() * @see #setWindowsizeInside(int) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getFeatureObjectMatcherXML_WindowsizeInside() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int" * extendedMetaData="kind='attribute' name='windowsizeInside'" * @generated */ int getWindowsizeInside(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeInside Windowsize Inside}' attribute. * * * @param value the new value of the 'Windowsize Inside' attribute. * @see #isSetWindowsizeInside() * @see #unsetWindowsizeInside() * @see #getWindowsizeInside() * @generated */ void setWindowsizeInside(int value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeInside Windowsize Inside}' attribute. * * * @see #isSetWindowsizeInside() * @see #getWindowsizeInside() * @see #setWindowsizeInside(int) * @generated */ void unsetWindowsizeInside(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeInside Windowsize Inside}' attribute is set. * * * @return whether the value of the 'Windowsize Inside' attribute is set. * @see #unsetWindowsizeInside() * @see #getWindowsizeInside() * @see #setWindowsizeInside(int) * @generated */ boolean isSetWindowsizeInside(); /** * Returns the value of the 'Windowsize Left' attribute. * *

* If the meaning of the 'Windowsize Left' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Windowsize Left' attribute. * @see #isSetWindowsizeLeft() * @see #unsetWindowsizeLeft() * @see #setWindowsizeLeft(int) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getFeatureObjectMatcherXML_WindowsizeLeft() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int" * extendedMetaData="kind='attribute' name='windowsizeLeft'" * @generated */ int getWindowsizeLeft(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeLeft Windowsize Left}' attribute. * * * @param value the new value of the 'Windowsize Left' attribute. * @see #isSetWindowsizeLeft() * @see #unsetWindowsizeLeft() * @see #getWindowsizeLeft() * @generated */ void setWindowsizeLeft(int value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeLeft Windowsize Left}' attribute. * * * @see #isSetWindowsizeLeft() * @see #getWindowsizeLeft() * @see #setWindowsizeLeft(int) * @generated */ void unsetWindowsizeLeft(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeLeft Windowsize Left}' attribute is set. * * * @return whether the value of the 'Windowsize Left' attribute is set. * @see #unsetWindowsizeLeft() * @see #getWindowsizeLeft() * @see #setWindowsizeLeft(int) * @generated */ boolean isSetWindowsizeLeft(); /** * Returns the value of the 'Windowsize Right' attribute. * *

* If the meaning of the 'Windowsize Right' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Windowsize Right' attribute. * @see #isSetWindowsizeRight() * @see #unsetWindowsizeRight() * @see #setWindowsizeRight(int) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getFeatureObjectMatcherXML_WindowsizeRight() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int" * extendedMetaData="kind='attribute' name='windowsizeRight'" * @generated */ int getWindowsizeRight(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeRight Windowsize Right}' attribute. * * * @param value the new value of the 'Windowsize Right' attribute. * @see #isSetWindowsizeRight() * @see #unsetWindowsizeRight() * @see #getWindowsizeRight() * @generated */ void setWindowsizeRight(int value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeRight Windowsize Right}' attribute. * * * @see #isSetWindowsizeRight() * @see #getWindowsizeRight() * @see #setWindowsizeRight(int) * @generated */ void unsetWindowsizeRight(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML#getWindowsizeRight Windowsize Right}' attribute is set. * * * @return whether the value of the 'Windowsize Right' attribute is set. * @see #unsetWindowsizeRight() * @see #getWindowsizeRight() * @see #setWindowsizeRight(int) * @generated */ boolean isSetWindowsizeRight(); } // FeatureObjectMatcherXML././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/TargetAnnotationXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Target0000644000175000017500000001452411625126542033346 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'Target Annotation XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getTargetAnnotationMatcher Target Annotation Matcher}
  • *
  • {@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getFeatureAnnotationMatchers Feature Annotation Matchers}
  • *
  • {@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getClassName Class Name}
  • *
  • {@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getEnclosingAnnotation Enclosing Annotation}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getTargetAnnotationXML() * @model extendedMetaData="name='TargetAnnotationXML' kind='elementOnly'" * @generated */ public interface TargetAnnotationXML extends EObject { /** * Returns the value of the 'Target Annotation Matcher' containment reference. * *

* If the meaning of the 'Target Annotation Matcher' containment reference isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Target Annotation Matcher' containment reference. * @see #setTargetAnnotationMatcher(PartialObjectMatcherXML) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getTargetAnnotationXML_TargetAnnotationMatcher() * @model containment="true" required="true" * extendedMetaData="kind='element' name='targetAnnotationMatcher' namespace='##targetNamespace'" * @generated */ PartialObjectMatcherXML getTargetAnnotationMatcher(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getTargetAnnotationMatcher Target Annotation Matcher}' containment reference. * * * @param value the new value of the 'Target Annotation Matcher' containment reference. * @see #getTargetAnnotationMatcher() * @generated */ void setTargetAnnotationMatcher(PartialObjectMatcherXML value); /** * Returns the value of the 'Feature Annotation Matchers' containment reference list. * The list contents are of type {@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML}. * *

* If the meaning of the 'Feature Annotation Matchers' containment reference list isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Feature Annotation Matchers' containment reference list. * @see org.apache.uima.tools.cfe.config.ConfigPackage#getTargetAnnotationXML_FeatureAnnotationMatchers() * @model containment="true" * extendedMetaData="kind='element' name='featureAnnotationMatchers' namespace='##targetNamespace'" * @generated */ EList getFeatureAnnotationMatchers(); /** * Returns the value of the 'Class Name' attribute. * * * * class id for RRM training * * @return the value of the 'Class Name' attribute. * @see #setClassName(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getTargetAnnotationXML_ClassName() * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true" * extendedMetaData="kind='attribute' name='className'" * @generated */ String getClassName(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getClassName Class Name}' attribute. * * * @param value the new value of the 'Class Name' attribute. * @see #getClassName() * @generated */ void setClassName(String value); /** * Returns the value of the 'Enclosing Annotation' attribute. * *

* If the meaning of the 'Enclosing Annotation' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Enclosing Annotation' attribute. * @see #setEnclosingAnnotation(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getTargetAnnotationXML_EnclosingAnnotation() * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true" * extendedMetaData="kind='attribute' name='enclosingAnnotation'" * @generated */ String getEnclosingAnnotation(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.TargetAnnotationXML#getEnclosingAnnotation Enclosing Annotation}' attribute. * * * @param value the new value of the 'Enclosing Annotation' attribute. * @see #getEnclosingAnnotation() * @generated */ void setEnclosingAnnotation(String value); } // TargetAnnotationXML././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/PatternFeatureValuesXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Patter0000644000175000017500000000506411625126542033356 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'Pattern Feature Values XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.PatternFeatureValuesXML#getPattern Pattern}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getPatternFeatureValuesXML() * @model extendedMetaData="name='PatternFeatureValuesXML' kind='empty'" * @generated */ public interface PatternFeatureValuesXML extends EObject { /** * Returns the value of the 'Pattern' attribute. * *

* If the meaning of the 'Pattern' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Pattern' attribute. * @see #setPattern(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getPatternFeatureValuesXML_Pattern() * @model dataType="org.eclipse.emf.ecore.xml.type.String" * extendedMetaData="kind='attribute' name='pattern'" * @generated */ String getPattern(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.PatternFeatureValuesXML#getPattern Pattern}' attribute. * * * @param value the new value of the 'Pattern' attribute. * @see #getPattern() * @generated */ void setPattern(String value); } // PatternFeatureValuesXML././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/BitsetFeatureValuesXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Bitset0000644000175000017500000001125511625126542033350 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'Bitset Feature Values XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#getBitmask Bitmask}
  • *
  • {@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#isExactMatch Exact Match}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getBitsetFeatureValuesXML() * @model extendedMetaData="name='BitsetFeatureValuesXML' kind='empty'" * @generated */ public interface BitsetFeatureValuesXML extends EObject { /** * Returns the value of the 'Bitmask' attribute. * *

* If the meaning of the 'Bitmask' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Bitmask' attribute. * @see #setBitmask(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getBitsetFeatureValuesXML_Bitmask() * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true" * extendedMetaData="kind='attribute' name='bitmask'" * @generated */ String getBitmask(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#getBitmask Bitmask}' attribute. * * * @param value the new value of the 'Bitmask' attribute. * @see #getBitmask() * @generated */ void setBitmask(String value); /** * Returns the value of the 'Exact Match' attribute. * *

* If the meaning of the 'Exact Match' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Exact Match' attribute. * @see #isSetExactMatch() * @see #unsetExactMatch() * @see #setExactMatch(boolean) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getBitsetFeatureValuesXML_ExactMatch() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * extendedMetaData="kind='attribute' name='exact_match'" * @generated */ boolean isExactMatch(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#isExactMatch Exact Match}' attribute. * * * @param value the new value of the 'Exact Match' attribute. * @see #isSetExactMatch() * @see #unsetExactMatch() * @see #isExactMatch() * @generated */ void setExactMatch(boolean value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#isExactMatch Exact Match}' attribute. * * * @see #isSetExactMatch() * @see #isExactMatch() * @see #setExactMatch(boolean) * @generated */ void unsetExactMatch(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML#isExactMatch Exact Match}' attribute is set. * * * @return whether the value of the 'Exact Match' attribute is set. * @see #unsetExactMatch() * @see #isExactMatch() * @see #setExactMatch(boolean) * @generated */ boolean isSetExactMatch(); } // BitsetFeatureValuesXML././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/GroupFeatureMatcherXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/GroupF0000644000175000017500000001077011625126542033321 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'Group Feature Matcher XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML#getFeatureMatchers Feature Matchers}
  • *
  • {@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML#isExclude Exclude}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getGroupFeatureMatcherXML() * @model extendedMetaData="name='GroupFeatureMatcherXML' kind='elementOnly'" * @generated */ public interface GroupFeatureMatcherXML extends EObject { /** * Returns the value of the 'Feature Matchers' containment reference list. * The list contents are of type {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML}. * *

* If the meaning of the 'Feature Matchers' containment reference list isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Feature Matchers' containment reference list. * @see org.apache.uima.tools.cfe.config.ConfigPackage#getGroupFeatureMatcherXML_FeatureMatchers() * @model containment="true" required="true" * extendedMetaData="kind='element' name='featureMatchers' namespace='##targetNamespace'" * @generated */ EList getFeatureMatchers(); /** * Returns the value of the 'Exclude' attribute. * *

* If the meaning of the 'Exclude' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Exclude' attribute. * @see #isSetExclude() * @see #unsetExclude() * @see #setExclude(boolean) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getGroupFeatureMatcherXML_Exclude() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * extendedMetaData="kind='element' name='exclude' namespace='##targetNamespace'" * @generated */ boolean isExclude(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML#isExclude Exclude}' attribute. * * * @param value the new value of the 'Exclude' attribute. * @see #isSetExclude() * @see #unsetExclude() * @see #isExclude() * @generated */ void setExclude(boolean value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML#isExclude Exclude}' attribute. * * * @see #isSetExclude() * @see #isExclude() * @see #setExclude(boolean) * @generated */ void unsetExclude(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML#isExclude Exclude}' attribute is set. * * * @return whether the value of the 'Exclude' attribute is set. * @see #unsetExclude() * @see #isExclude() * @see #setExclude(boolean) * @generated */ boolean isSetExclude(); } // GroupFeatureMatcherXML././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/SingleFeatureMatcherXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/Single0000644000175000017500000003551611625126542033345 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'Single Feature Matcher XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getRangeFeatureValues Range Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getEnumFeatureValues Enum Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getBitsetFeatureValues Bitset Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getObjectPathFeatureValues Object Path Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getPatternFeatureValues Pattern Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isExclude Exclude}
  • *
  • {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getFeaturePath Feature Path}
  • *
  • {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getFeatureTypeName Feature Type Name}
  • *
  • {@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isQuiet Quiet}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML() * @model extendedMetaData="name='SingleFeatureMatcherXML' kind='elementOnly'" * @generated */ public interface SingleFeatureMatcherXML extends EObject { /** * Returns the value of the 'Range Feature Values' containment reference. * *

* If the meaning of the 'Range Feature Values' containment reference isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Range Feature Values' containment reference. * @see #setRangeFeatureValues(RangeFeatureValuesXML) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML_RangeFeatureValues() * @model containment="true" * extendedMetaData="kind='element' name='rangeFeatureValues' namespace='##targetNamespace'" * @generated */ RangeFeatureValuesXML getRangeFeatureValues(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getRangeFeatureValues Range Feature Values}' containment reference. * * * @param value the new value of the 'Range Feature Values' containment reference. * @see #getRangeFeatureValues() * @generated */ void setRangeFeatureValues(RangeFeatureValuesXML value); /** * Returns the value of the 'Enum Feature Values' containment reference. * *

* If the meaning of the 'Enum Feature Values' containment reference isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Enum Feature Values' containment reference. * @see #setEnumFeatureValues(EnumFeatureValuesXML) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML_EnumFeatureValues() * @model containment="true" * extendedMetaData="kind='element' name='enumFeatureValues' namespace='##targetNamespace'" * @generated */ EnumFeatureValuesXML getEnumFeatureValues(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getEnumFeatureValues Enum Feature Values}' containment reference. * * * @param value the new value of the 'Enum Feature Values' containment reference. * @see #getEnumFeatureValues() * @generated */ void setEnumFeatureValues(EnumFeatureValuesXML value); /** * Returns the value of the 'Bitset Feature Values' containment reference. * *

* If the meaning of the 'Bitset Feature Values' containment reference isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Bitset Feature Values' containment reference. * @see #setBitsetFeatureValues(BitsetFeatureValuesXML) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML_BitsetFeatureValues() * @model containment="true" * extendedMetaData="kind='element' name='bitsetFeatureValues' namespace='##targetNamespace'" * @generated */ BitsetFeatureValuesXML getBitsetFeatureValues(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getBitsetFeatureValues Bitset Feature Values}' containment reference. * * * @param value the new value of the 'Bitset Feature Values' containment reference. * @see #getBitsetFeatureValues() * @generated */ void setBitsetFeatureValues(BitsetFeatureValuesXML value); /** * Returns the value of the 'Object Path Feature Values' containment reference. * *

* If the meaning of the 'Object Path Feature Values' containment reference isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Object Path Feature Values' containment reference. * @see #setObjectPathFeatureValues(ObjectPathFeatureValuesXML) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML_ObjectPathFeatureValues() * @model containment="true" * extendedMetaData="kind='element' name='objectPathFeatureValues' namespace='##targetNamespace'" * @generated */ ObjectPathFeatureValuesXML getObjectPathFeatureValues(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getObjectPathFeatureValues Object Path Feature Values}' containment reference. * * * @param value the new value of the 'Object Path Feature Values' containment reference. * @see #getObjectPathFeatureValues() * @generated */ void setObjectPathFeatureValues(ObjectPathFeatureValuesXML value); /** * Returns the value of the 'Pattern Feature Values' containment reference. * *

* If the meaning of the 'Pattern Feature Values' containment reference isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Pattern Feature Values' containment reference. * @see #setPatternFeatureValues(PatternFeatureValuesXML) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML_PatternFeatureValues() * @model containment="true" * extendedMetaData="kind='element' name='patternFeatureValues' namespace='##targetNamespace'" * @generated */ PatternFeatureValuesXML getPatternFeatureValues(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getPatternFeatureValues Pattern Feature Values}' containment reference. * * * @param value the new value of the 'Pattern Feature Values' containment reference. * @see #getPatternFeatureValues() * @generated */ void setPatternFeatureValues(PatternFeatureValuesXML value); /** * Returns the value of the 'Exclude' attribute. * *

* If the meaning of the 'Exclude' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Exclude' attribute. * @see #isSetExclude() * @see #unsetExclude() * @see #setExclude(boolean) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML_Exclude() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * extendedMetaData="kind='attribute' name='exclude'" * @generated */ boolean isExclude(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isExclude Exclude}' attribute. * * * @param value the new value of the 'Exclude' attribute. * @see #isSetExclude() * @see #unsetExclude() * @see #isExclude() * @generated */ void setExclude(boolean value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isExclude Exclude}' attribute. * * * @see #isSetExclude() * @see #isExclude() * @see #setExclude(boolean) * @generated */ void unsetExclude(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isExclude Exclude}' attribute is set. * * * @return whether the value of the 'Exclude' attribute is set. * @see #unsetExclude() * @see #isExclude() * @see #setExclude(boolean) * @generated */ boolean isSetExclude(); /** * Returns the value of the 'Feature Path' attribute. * *

* If the meaning of the 'Feature Path' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Feature Path' attribute. * @see #setFeaturePath(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML_FeaturePath() * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true" * extendedMetaData="kind='attribute' name='featurePath'" * @generated */ String getFeaturePath(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getFeaturePath Feature Path}' attribute. * * * @param value the new value of the 'Feature Path' attribute. * @see #getFeaturePath() * @generated */ void setFeaturePath(String value); /** * Returns the value of the 'Feature Type Name' attribute. * *

* If the meaning of the 'Feature Type Name' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Feature Type Name' attribute. * @see #setFeatureTypeName(String) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML_FeatureTypeName() * @model dataType="org.eclipse.emf.ecore.xml.type.String" * extendedMetaData="kind='attribute' name='featureTypeName'" * @generated */ String getFeatureTypeName(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#getFeatureTypeName Feature Type Name}' attribute. * * * @param value the new value of the 'Feature Type Name' attribute. * @see #getFeatureTypeName() * @generated */ void setFeatureTypeName(String value); /** * Returns the value of the 'Quiet' attribute. * *

* If the meaning of the 'Quiet' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Quiet' attribute. * @see #isSetQuiet() * @see #unsetQuiet() * @see #setQuiet(boolean) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getSingleFeatureMatcherXML_Quiet() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * extendedMetaData="kind='attribute' name='quiet'" * @generated */ boolean isQuiet(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isQuiet Quiet}' attribute. * * * @param value the new value of the 'Quiet' attribute. * @see #isSetQuiet() * @see #unsetQuiet() * @see #isQuiet() * @generated */ void setQuiet(boolean value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isQuiet Quiet}' attribute. * * * @see #isSetQuiet() * @see #isQuiet() * @see #setQuiet(boolean) * @generated */ void unsetQuiet(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML#isQuiet Quiet}' attribute is set. * * * @return whether the value of the 'Quiet' attribute is set. * @see #unsetQuiet() * @see #isQuiet() * @see #setQuiet(boolean) * @generated */ boolean isSetQuiet(); } // SingleFeatureMatcherXMLuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/0000755000175000017500000000000011625126542033130 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/PartialObjectMatcherXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/P0000644000175000017500000002400311625126542033251 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import java.util.Collection; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML; import org.apache.uima.tools.cfe.config.PartialObjectMatcherXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; import org.eclipse.emf.ecore.util.EObjectContainmentEList; import org.eclipse.emf.ecore.util.InternalEList; /** * * An implementation of the model object 'Partial Object Matcher XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.PartialObjectMatcherXMLImpl#getGroupFeatureMatchers Group Feature Matchers}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.PartialObjectMatcherXMLImpl#getAnnotationTypeName Annotation Type Name}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.PartialObjectMatcherXMLImpl#getFullPath Full Path}
  • *
*

* * @generated */ public class PartialObjectMatcherXMLImpl extends EObjectImpl implements PartialObjectMatcherXML { /** * The cached value of the '{@link #getGroupFeatureMatchers() Group Feature Matchers}' containment reference list. * * * @see #getGroupFeatureMatchers() * @generated * @ordered */ protected EList groupFeatureMatchers; /** * The default value of the '{@link #getAnnotationTypeName() Annotation Type Name}' attribute. * * * @see #getAnnotationTypeName() * @generated * @ordered */ protected static final String ANNOTATION_TYPE_NAME_EDEFAULT = null; /** * The cached value of the '{@link #getAnnotationTypeName() Annotation Type Name}' attribute. * * * @see #getAnnotationTypeName() * @generated * @ordered */ protected String annotationTypeName = ANNOTATION_TYPE_NAME_EDEFAULT; /** * The default value of the '{@link #getFullPath() Full Path}' attribute. * * * @see #getFullPath() * @generated * @ordered */ protected static final String FULL_PATH_EDEFAULT = null; /** * The cached value of the '{@link #getFullPath() Full Path}' attribute. * * * @see #getFullPath() * @generated * @ordered */ protected String fullPath = FULL_PATH_EDEFAULT; /** * * * @generated */ protected PartialObjectMatcherXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.PARTIAL_OBJECT_MATCHER_XML; } /** * * * @generated */ public EList getGroupFeatureMatchers() { if (groupFeatureMatchers == null) { groupFeatureMatchers = new EObjectContainmentEList(GroupFeatureMatcherXML.class, this, ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS); } return groupFeatureMatchers; } /** * * * @generated */ public String getAnnotationTypeName() { return annotationTypeName; } /** * * * @generated */ public void setAnnotationTypeName(String newAnnotationTypeName) { String oldAnnotationTypeName = annotationTypeName; annotationTypeName = newAnnotationTypeName; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME, oldAnnotationTypeName, annotationTypeName)); } /** * * * @generated */ public String getFullPath() { return fullPath; } /** * * * @generated */ public void setFullPath(String newFullPath) { String oldFullPath = fullPath; fullPath = newFullPath; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__FULL_PATH, oldFullPath, fullPath)); } /** * * * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS: return ((InternalEList)getGroupFeatureMatchers()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS: return getGroupFeatureMatchers(); case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME: return getAnnotationTypeName(); case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__FULL_PATH: return getFullPath(); } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS: getGroupFeatureMatchers().clear(); getGroupFeatureMatchers().addAll((Collection)newValue); return; case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME: setAnnotationTypeName((String)newValue); return; case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__FULL_PATH: setFullPath((String)newValue); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS: getGroupFeatureMatchers().clear(); return; case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME: setAnnotationTypeName(ANNOTATION_TYPE_NAME_EDEFAULT); return; case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__FULL_PATH: setFullPath(FULL_PATH_EDEFAULT); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS: return groupFeatureMatchers != null && !groupFeatureMatchers.isEmpty(); case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME: return ANNOTATION_TYPE_NAME_EDEFAULT == null ? annotationTypeName != null : !ANNOTATION_TYPE_NAME_EDEFAULT.equals(annotationTypeName); case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML__FULL_PATH: return FULL_PATH_EDEFAULT == null ? fullPath != null : !FULL_PATH_EDEFAULT.equals(fullPath); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (annotationTypeName: "); result.append(annotationTypeName); result.append(", fullPath: "); result.append(fullPath); result.append(')'); return result.toString(); } } //PartialObjectMatcherXMLImpl././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/ConfigPackageImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/C0000644000175000017500000015012611625126542033242 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML; import org.apache.uima.tools.cfe.config.CFEDescriptorXML; import org.apache.uima.tools.cfe.config.ConfigFactory; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.DocumentRoot; import org.apache.uima.tools.cfe.config.EnumFeatureValuesXML; import org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML; import org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML; import org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML; import org.apache.uima.tools.cfe.config.PartialObjectMatcherXML; import org.apache.uima.tools.cfe.config.PatternFeatureValuesXML; import org.apache.uima.tools.cfe.config.RangeFeatureValuesXML; import org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML; import org.apache.uima.tools.cfe.config.TargetAnnotationXML; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.impl.EPackageImpl; import org.eclipse.emf.ecore.xml.type.XMLTypePackage; /** * * An implementation of the model Package. * * @generated */ public class ConfigPackageImpl extends EPackageImpl implements ConfigPackage { /** * * * @generated */ private EClass bitsetFeatureValuesXMLEClass = null; /** * * * @generated */ private EClass cfeDescriptorXMLEClass = null; /** * * * @generated */ private EClass documentRootEClass = null; /** * * * @generated */ private EClass enumFeatureValuesXMLEClass = null; /** * * * @generated */ private EClass featureObjectMatcherXMLEClass = null; /** * * * @generated */ private EClass groupFeatureMatcherXMLEClass = null; /** * * * @generated */ private EClass objectPathFeatureValuesXMLEClass = null; /** * * * @generated */ private EClass partialObjectMatcherXMLEClass = null; /** * * * @generated */ private EClass patternFeatureValuesXMLEClass = null; /** * * * @generated */ private EClass rangeFeatureValuesXMLEClass = null; /** * * * @generated */ private EClass singleFeatureMatcherXMLEClass = null; /** * * * @generated */ private EClass targetAnnotationXMLEClass = null; /** * Creates an instance of the model Package, registered with * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package * package URI value. *

Note: the correct way to create the package is via the static * factory method {@link #init init()}, which also performs * initialization of the package, or returns the registered package, * if one already exists. * * * @see org.eclipse.emf.ecore.EPackage.Registry * @see org.apache.uima.tools.cfe.config.ConfigPackage#eNS_URI * @see #init() * @generated */ private ConfigPackageImpl() { super(eNS_URI, ConfigFactory.eINSTANCE); } /** * * * @generated */ private static boolean isInited = false; /** * Creates, registers, and initializes the Package for this * model, and for any others upon which it depends. Simple * dependencies are satisfied by calling this method on all * dependent packages before doing anything else. This method drives * initialization for interdependent packages directly, in parallel * with this package, itself. *

Of this package and its interdependencies, all packages which * have not yet been registered by their URI values are first created * and registered. The packages are then initialized in two steps: * meta-model objects for all of the packages are created before any * are initialized, since one package's meta-model objects may refer to * those of another. *

Invocation of this method will not affect any packages that have * already been initialized. * * * @see #eNS_URI * @see #createPackageContents() * @see #initializePackageContents() * @generated */ public static ConfigPackage init() { if (isInited) return (ConfigPackage)EPackage.Registry.INSTANCE.getEPackage(ConfigPackage.eNS_URI); // Obtain or create and register package ConfigPackageImpl theConfigPackage = (ConfigPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof ConfigPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new ConfigPackageImpl()); isInited = true; // Initialize simple dependencies XMLTypePackage.eINSTANCE.eClass(); // Create package meta-data objects theConfigPackage.createPackageContents(); // Initialize created meta-data theConfigPackage.initializePackageContents(); // Mark meta-data to indicate it can't be changed theConfigPackage.freeze(); return theConfigPackage; } /** * * * @generated */ public EClass getBitsetFeatureValuesXML() { return bitsetFeatureValuesXMLEClass; } /** * * * @generated */ public EAttribute getBitsetFeatureValuesXML_Bitmask() { return (EAttribute)bitsetFeatureValuesXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EAttribute getBitsetFeatureValuesXML_ExactMatch() { return (EAttribute)bitsetFeatureValuesXMLEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EClass getCFEDescriptorXML() { return cfeDescriptorXMLEClass; } /** * * * @generated */ public EReference getCFEDescriptorXML_TargetAnnotations() { return (EReference)cfeDescriptorXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EAttribute getCFEDescriptorXML_NullValueImage() { return (EAttribute)cfeDescriptorXMLEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EClass getDocumentRoot() { return documentRootEClass; } /** * * * @generated */ public EAttribute getDocumentRoot_Mixed() { return (EAttribute)documentRootEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EReference getDocumentRoot_XMLNSPrefixMap() { return (EReference)documentRootEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EReference getDocumentRoot_XSISchemaLocation() { return (EReference)documentRootEClass.getEStructuralFeatures().get(2); } /** * * * @generated */ public EReference getDocumentRoot_CFEConfig() { return (EReference)documentRootEClass.getEStructuralFeatures().get(3); } /** * * * @generated */ public EClass getEnumFeatureValuesXML() { return enumFeatureValuesXMLEClass; } /** * * * @generated */ public EAttribute getEnumFeatureValuesXML_Values() { return (EAttribute)enumFeatureValuesXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EAttribute getEnumFeatureValuesXML_CaseSensitive() { return (EAttribute)enumFeatureValuesXMLEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EClass getFeatureObjectMatcherXML() { return featureObjectMatcherXMLEClass; } /** * * * @generated */ public EAttribute getFeatureObjectMatcherXML_Distance() { return (EAttribute)featureObjectMatcherXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EAttribute getFeatureObjectMatcherXML_Orientation() { return (EAttribute)featureObjectMatcherXMLEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EAttribute getFeatureObjectMatcherXML_WindowFlags() { return (EAttribute)featureObjectMatcherXMLEClass.getEStructuralFeatures().get(2); } /** * * * @generated */ public EAttribute getFeatureObjectMatcherXML_WindowsizeEnclosed() { return (EAttribute)featureObjectMatcherXMLEClass.getEStructuralFeatures().get(3); } /** * * * @generated */ public EAttribute getFeatureObjectMatcherXML_WindowsizeInside() { return (EAttribute)featureObjectMatcherXMLEClass.getEStructuralFeatures().get(4); } /** * * * @generated */ public EAttribute getFeatureObjectMatcherXML_WindowsizeLeft() { return (EAttribute)featureObjectMatcherXMLEClass.getEStructuralFeatures().get(5); } /** * * * @generated */ public EAttribute getFeatureObjectMatcherXML_WindowsizeRight() { return (EAttribute)featureObjectMatcherXMLEClass.getEStructuralFeatures().get(6); } /** * * * @generated */ public EClass getGroupFeatureMatcherXML() { return groupFeatureMatcherXMLEClass; } /** * * * @generated */ public EReference getGroupFeatureMatcherXML_FeatureMatchers() { return (EReference)groupFeatureMatcherXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EAttribute getGroupFeatureMatcherXML_Exclude() { return (EAttribute)groupFeatureMatcherXMLEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EClass getObjectPathFeatureValuesXML() { return objectPathFeatureValuesXMLEClass; } /** * * * @generated */ public EAttribute getObjectPathFeatureValuesXML_ObjectPath() { return (EAttribute)objectPathFeatureValuesXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EClass getPartialObjectMatcherXML() { return partialObjectMatcherXMLEClass; } /** * * * @generated */ public EReference getPartialObjectMatcherXML_GroupFeatureMatchers() { return (EReference)partialObjectMatcherXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EAttribute getPartialObjectMatcherXML_AnnotationTypeName() { return (EAttribute)partialObjectMatcherXMLEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EAttribute getPartialObjectMatcherXML_FullPath() { return (EAttribute)partialObjectMatcherXMLEClass.getEStructuralFeatures().get(2); } /** * * * @generated */ public EClass getPatternFeatureValuesXML() { return patternFeatureValuesXMLEClass; } /** * * * @generated */ public EAttribute getPatternFeatureValuesXML_Pattern() { return (EAttribute)patternFeatureValuesXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EClass getRangeFeatureValuesXML() { return rangeFeatureValuesXMLEClass; } /** * * * @generated */ public EAttribute getRangeFeatureValuesXML_LowerBoundary() { return (EAttribute)rangeFeatureValuesXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EAttribute getRangeFeatureValuesXML_LowerBoundaryInclusive() { return (EAttribute)rangeFeatureValuesXMLEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EAttribute getRangeFeatureValuesXML_UpperBoundary() { return (EAttribute)rangeFeatureValuesXMLEClass.getEStructuralFeatures().get(2); } /** * * * @generated */ public EAttribute getRangeFeatureValuesXML_UpperBoundaryInclusive() { return (EAttribute)rangeFeatureValuesXMLEClass.getEStructuralFeatures().get(3); } /** * * * @generated */ public EClass getSingleFeatureMatcherXML() { return singleFeatureMatcherXMLEClass; } /** * * * @generated */ public EReference getSingleFeatureMatcherXML_RangeFeatureValues() { return (EReference)singleFeatureMatcherXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EReference getSingleFeatureMatcherXML_EnumFeatureValues() { return (EReference)singleFeatureMatcherXMLEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EReference getSingleFeatureMatcherXML_BitsetFeatureValues() { return (EReference)singleFeatureMatcherXMLEClass.getEStructuralFeatures().get(2); } /** * * * @generated */ public EReference getSingleFeatureMatcherXML_ObjectPathFeatureValues() { return (EReference)singleFeatureMatcherXMLEClass.getEStructuralFeatures().get(3); } /** * * * @generated */ public EReference getSingleFeatureMatcherXML_PatternFeatureValues() { return (EReference)singleFeatureMatcherXMLEClass.getEStructuralFeatures().get(4); } /** * * * @generated */ public EAttribute getSingleFeatureMatcherXML_Exclude() { return (EAttribute)singleFeatureMatcherXMLEClass.getEStructuralFeatures().get(5); } /** * * * @generated */ public EAttribute getSingleFeatureMatcherXML_FeaturePath() { return (EAttribute)singleFeatureMatcherXMLEClass.getEStructuralFeatures().get(6); } /** * * * @generated */ public EAttribute getSingleFeatureMatcherXML_FeatureTypeName() { return (EAttribute)singleFeatureMatcherXMLEClass.getEStructuralFeatures().get(7); } /** * * * @generated */ public EAttribute getSingleFeatureMatcherXML_Quiet() { return (EAttribute)singleFeatureMatcherXMLEClass.getEStructuralFeatures().get(8); } /** * * * @generated */ public EClass getTargetAnnotationXML() { return targetAnnotationXMLEClass; } /** * * * @generated */ public EReference getTargetAnnotationXML_TargetAnnotationMatcher() { return (EReference)targetAnnotationXMLEClass.getEStructuralFeatures().get(0); } /** * * * @generated */ public EReference getTargetAnnotationXML_FeatureAnnotationMatchers() { return (EReference)targetAnnotationXMLEClass.getEStructuralFeatures().get(1); } /** * * * @generated */ public EAttribute getTargetAnnotationXML_ClassName() { return (EAttribute)targetAnnotationXMLEClass.getEStructuralFeatures().get(2); } /** * * * @generated */ public EAttribute getTargetAnnotationXML_EnclosingAnnotation() { return (EAttribute)targetAnnotationXMLEClass.getEStructuralFeatures().get(3); } /** * * * @generated */ public ConfigFactory getConfigFactory() { return (ConfigFactory)getEFactoryInstance(); } /** * * * @generated */ private boolean isCreated = false; /** * Creates the meta-model objects for the package. This method is * guarded to have no affect on any invocation but its first. * * * @generated */ public void createPackageContents() { if (isCreated) return; isCreated = true; // Create classes and their features bitsetFeatureValuesXMLEClass = createEClass(BITSET_FEATURE_VALUES_XML); createEAttribute(bitsetFeatureValuesXMLEClass, BITSET_FEATURE_VALUES_XML__BITMASK); createEAttribute(bitsetFeatureValuesXMLEClass, BITSET_FEATURE_VALUES_XML__EXACT_MATCH); cfeDescriptorXMLEClass = createEClass(CFE_DESCRIPTOR_XML); createEReference(cfeDescriptorXMLEClass, CFE_DESCRIPTOR_XML__TARGET_ANNOTATIONS); createEAttribute(cfeDescriptorXMLEClass, CFE_DESCRIPTOR_XML__NULL_VALUE_IMAGE); documentRootEClass = createEClass(DOCUMENT_ROOT); createEAttribute(documentRootEClass, DOCUMENT_ROOT__MIXED); createEReference(documentRootEClass, DOCUMENT_ROOT__XMLNS_PREFIX_MAP); createEReference(documentRootEClass, DOCUMENT_ROOT__XSI_SCHEMA_LOCATION); createEReference(documentRootEClass, DOCUMENT_ROOT__CFE_CONFIG); enumFeatureValuesXMLEClass = createEClass(ENUM_FEATURE_VALUES_XML); createEAttribute(enumFeatureValuesXMLEClass, ENUM_FEATURE_VALUES_XML__VALUES); createEAttribute(enumFeatureValuesXMLEClass, ENUM_FEATURE_VALUES_XML__CASE_SENSITIVE); featureObjectMatcherXMLEClass = createEClass(FEATURE_OBJECT_MATCHER_XML); createEAttribute(featureObjectMatcherXMLEClass, FEATURE_OBJECT_MATCHER_XML__DISTANCE); createEAttribute(featureObjectMatcherXMLEClass, FEATURE_OBJECT_MATCHER_XML__ORIENTATION); createEAttribute(featureObjectMatcherXMLEClass, FEATURE_OBJECT_MATCHER_XML__WINDOW_FLAGS); createEAttribute(featureObjectMatcherXMLEClass, FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_ENCLOSED); createEAttribute(featureObjectMatcherXMLEClass, FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_INSIDE); createEAttribute(featureObjectMatcherXMLEClass, FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_LEFT); createEAttribute(featureObjectMatcherXMLEClass, FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_RIGHT); groupFeatureMatcherXMLEClass = createEClass(GROUP_FEATURE_MATCHER_XML); createEReference(groupFeatureMatcherXMLEClass, GROUP_FEATURE_MATCHER_XML__FEATURE_MATCHERS); createEAttribute(groupFeatureMatcherXMLEClass, GROUP_FEATURE_MATCHER_XML__EXCLUDE); objectPathFeatureValuesXMLEClass = createEClass(OBJECT_PATH_FEATURE_VALUES_XML); createEAttribute(objectPathFeatureValuesXMLEClass, OBJECT_PATH_FEATURE_VALUES_XML__OBJECT_PATH); partialObjectMatcherXMLEClass = createEClass(PARTIAL_OBJECT_MATCHER_XML); createEReference(partialObjectMatcherXMLEClass, PARTIAL_OBJECT_MATCHER_XML__GROUP_FEATURE_MATCHERS); createEAttribute(partialObjectMatcherXMLEClass, PARTIAL_OBJECT_MATCHER_XML__ANNOTATION_TYPE_NAME); createEAttribute(partialObjectMatcherXMLEClass, PARTIAL_OBJECT_MATCHER_XML__FULL_PATH); patternFeatureValuesXMLEClass = createEClass(PATTERN_FEATURE_VALUES_XML); createEAttribute(patternFeatureValuesXMLEClass, PATTERN_FEATURE_VALUES_XML__PATTERN); rangeFeatureValuesXMLEClass = createEClass(RANGE_FEATURE_VALUES_XML); createEAttribute(rangeFeatureValuesXMLEClass, RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY); createEAttribute(rangeFeatureValuesXMLEClass, RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY_INCLUSIVE); createEAttribute(rangeFeatureValuesXMLEClass, RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY); createEAttribute(rangeFeatureValuesXMLEClass, RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY_INCLUSIVE); singleFeatureMatcherXMLEClass = createEClass(SINGLE_FEATURE_MATCHER_XML); createEReference(singleFeatureMatcherXMLEClass, SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES); createEReference(singleFeatureMatcherXMLEClass, SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES); createEReference(singleFeatureMatcherXMLEClass, SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES); createEReference(singleFeatureMatcherXMLEClass, SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES); createEReference(singleFeatureMatcherXMLEClass, SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES); createEAttribute(singleFeatureMatcherXMLEClass, SINGLE_FEATURE_MATCHER_XML__EXCLUDE); createEAttribute(singleFeatureMatcherXMLEClass, SINGLE_FEATURE_MATCHER_XML__FEATURE_PATH); createEAttribute(singleFeatureMatcherXMLEClass, SINGLE_FEATURE_MATCHER_XML__FEATURE_TYPE_NAME); createEAttribute(singleFeatureMatcherXMLEClass, SINGLE_FEATURE_MATCHER_XML__QUIET); targetAnnotationXMLEClass = createEClass(TARGET_ANNOTATION_XML); createEReference(targetAnnotationXMLEClass, TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER); createEReference(targetAnnotationXMLEClass, TARGET_ANNOTATION_XML__FEATURE_ANNOTATION_MATCHERS); createEAttribute(targetAnnotationXMLEClass, TARGET_ANNOTATION_XML__CLASS_NAME); createEAttribute(targetAnnotationXMLEClass, TARGET_ANNOTATION_XML__ENCLOSING_ANNOTATION); } /** * * * @generated */ private boolean isInitialized = false; /** * Complete the initialization of the package and its meta-model. This * method is guarded to have no affect on any invocation but its first. * * * @generated */ public void initializePackageContents() { if (isInitialized) return; isInitialized = true; // Initialize package setName(eNAME); setNsPrefix(eNS_PREFIX); setNsURI(eNS_URI); // Obtain other dependent packages XMLTypePackage theXMLTypePackage = (XMLTypePackage)EPackage.Registry.INSTANCE.getEPackage(XMLTypePackage.eNS_URI); // Create type parameters // Set bounds for type parameters // Add supertypes to classes featureObjectMatcherXMLEClass.getESuperTypes().add(this.getPartialObjectMatcherXML()); // Initialize classes and features; add operations and parameters initEClass(bitsetFeatureValuesXMLEClass, BitsetFeatureValuesXML.class, "BitsetFeatureValuesXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getBitsetFeatureValuesXML_Bitmask(), theXMLTypePackage.getString(), "bitmask", null, 1, 1, BitsetFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getBitsetFeatureValuesXML_ExactMatch(), theXMLTypePackage.getBoolean(), "exactMatch", null, 0, 1, BitsetFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(cfeDescriptorXMLEClass, CFEDescriptorXML.class, "CFEDescriptorXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getCFEDescriptorXML_TargetAnnotations(), this.getTargetAnnotationXML(), null, "targetAnnotations", null, 1, -1, CFEDescriptorXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getCFEDescriptorXML_NullValueImage(), theXMLTypePackage.getString(), "nullValueImage", null, 0, 1, CFEDescriptorXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(documentRootEClass, DocumentRoot.class, "DocumentRoot", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getDocumentRoot_Mixed(), ecorePackage.getEFeatureMapEntry(), "mixed", null, 0, -1, null, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getDocumentRoot_XMLNSPrefixMap(), ecorePackage.getEStringToStringMapEntry(), null, "xMLNSPrefixMap", null, 0, -1, null, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getDocumentRoot_XSISchemaLocation(), ecorePackage.getEStringToStringMapEntry(), null, "xSISchemaLocation", null, 0, -1, null, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getDocumentRoot_CFEConfig(), this.getCFEDescriptorXML(), null, "cFEConfig", null, 0, -2, null, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED); initEClass(enumFeatureValuesXMLEClass, EnumFeatureValuesXML.class, "EnumFeatureValuesXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getEnumFeatureValuesXML_Values(), theXMLTypePackage.getString(), "values", null, 0, -1, EnumFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getEnumFeatureValuesXML_CaseSensitive(), theXMLTypePackage.getBoolean(), "caseSensitive", null, 0, 1, EnumFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(featureObjectMatcherXMLEClass, FeatureObjectMatcherXML.class, "FeatureObjectMatcherXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getFeatureObjectMatcherXML_Distance(), theXMLTypePackage.getBoolean(), "distance", null, 0, 1, FeatureObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getFeatureObjectMatcherXML_Orientation(), theXMLTypePackage.getBoolean(), "orientation", null, 0, 1, FeatureObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getFeatureObjectMatcherXML_WindowFlags(), theXMLTypePackage.getInt(), "windowFlags", null, 0, 1, FeatureObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getFeatureObjectMatcherXML_WindowsizeEnclosed(), theXMLTypePackage.getInt(), "windowsizeEnclosed", null, 0, 1, FeatureObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getFeatureObjectMatcherXML_WindowsizeInside(), theXMLTypePackage.getInt(), "windowsizeInside", null, 0, 1, FeatureObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getFeatureObjectMatcherXML_WindowsizeLeft(), theXMLTypePackage.getInt(), "windowsizeLeft", null, 0, 1, FeatureObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getFeatureObjectMatcherXML_WindowsizeRight(), theXMLTypePackage.getInt(), "windowsizeRight", null, 0, 1, FeatureObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(groupFeatureMatcherXMLEClass, GroupFeatureMatcherXML.class, "GroupFeatureMatcherXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getGroupFeatureMatcherXML_FeatureMatchers(), this.getSingleFeatureMatcherXML(), null, "featureMatchers", null, 1, -1, GroupFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getGroupFeatureMatcherXML_Exclude(), theXMLTypePackage.getBoolean(), "exclude", null, 0, 1, GroupFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(objectPathFeatureValuesXMLEClass, ObjectPathFeatureValuesXML.class, "ObjectPathFeatureValuesXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getObjectPathFeatureValuesXML_ObjectPath(), theXMLTypePackage.getString(), "objectPath", null, 1, 1, ObjectPathFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(partialObjectMatcherXMLEClass, PartialObjectMatcherXML.class, "PartialObjectMatcherXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getPartialObjectMatcherXML_GroupFeatureMatchers(), this.getGroupFeatureMatcherXML(), null, "groupFeatureMatchers", null, 0, -1, PartialObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getPartialObjectMatcherXML_AnnotationTypeName(), theXMLTypePackage.getString(), "annotationTypeName", null, 1, 1, PartialObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getPartialObjectMatcherXML_FullPath(), theXMLTypePackage.getString(), "fullPath", null, 0, 1, PartialObjectMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(patternFeatureValuesXMLEClass, PatternFeatureValuesXML.class, "PatternFeatureValuesXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getPatternFeatureValuesXML_Pattern(), theXMLTypePackage.getString(), "pattern", null, 0, 1, PatternFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(rangeFeatureValuesXMLEClass, RangeFeatureValuesXML.class, "RangeFeatureValuesXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getRangeFeatureValuesXML_LowerBoundary(), theXMLTypePackage.getAnySimpleType(), "lowerBoundary", null, 0, 1, RangeFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getRangeFeatureValuesXML_LowerBoundaryInclusive(), theXMLTypePackage.getBoolean(), "lowerBoundaryInclusive", null, 0, 1, RangeFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getRangeFeatureValuesXML_UpperBoundary(), theXMLTypePackage.getAnySimpleType(), "upperBoundary", null, 0, 1, RangeFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getRangeFeatureValuesXML_UpperBoundaryInclusive(), theXMLTypePackage.getBoolean(), "upperBoundaryInclusive", null, 0, 1, RangeFeatureValuesXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(singleFeatureMatcherXMLEClass, SingleFeatureMatcherXML.class, "SingleFeatureMatcherXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getSingleFeatureMatcherXML_RangeFeatureValues(), this.getRangeFeatureValuesXML(), null, "rangeFeatureValues", null, 0, 1, SingleFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getSingleFeatureMatcherXML_EnumFeatureValues(), this.getEnumFeatureValuesXML(), null, "enumFeatureValues", null, 0, 1, SingleFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getSingleFeatureMatcherXML_BitsetFeatureValues(), this.getBitsetFeatureValuesXML(), null, "bitsetFeatureValues", null, 0, 1, SingleFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getSingleFeatureMatcherXML_ObjectPathFeatureValues(), this.getObjectPathFeatureValuesXML(), null, "objectPathFeatureValues", null, 0, 1, SingleFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getSingleFeatureMatcherXML_PatternFeatureValues(), this.getPatternFeatureValuesXML(), null, "patternFeatureValues", null, 0, 1, SingleFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getSingleFeatureMatcherXML_Exclude(), theXMLTypePackage.getBoolean(), "exclude", null, 0, 1, SingleFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getSingleFeatureMatcherXML_FeaturePath(), theXMLTypePackage.getString(), "featurePath", null, 1, 1, SingleFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getSingleFeatureMatcherXML_FeatureTypeName(), theXMLTypePackage.getString(), "featureTypeName", null, 0, 1, SingleFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getSingleFeatureMatcherXML_Quiet(), theXMLTypePackage.getBoolean(), "quiet", null, 0, 1, SingleFeatureMatcherXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(targetAnnotationXMLEClass, TargetAnnotationXML.class, "TargetAnnotationXML", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getTargetAnnotationXML_TargetAnnotationMatcher(), this.getPartialObjectMatcherXML(), null, "targetAnnotationMatcher", null, 1, 1, TargetAnnotationXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getTargetAnnotationXML_FeatureAnnotationMatchers(), this.getFeatureObjectMatcherXML(), null, "featureAnnotationMatchers", null, 0, -1, TargetAnnotationXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getTargetAnnotationXML_ClassName(), theXMLTypePackage.getString(), "className", null, 1, 1, TargetAnnotationXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getTargetAnnotationXML_EnclosingAnnotation(), theXMLTypePackage.getString(), "enclosingAnnotation", null, 1, 1, TargetAnnotationXML.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); // Create resource createResource(eNS_URI); // Create annotations // http:///org/eclipse/emf/ecore/util/ExtendedMetaData createExtendedMetaDataAnnotations(); } /** * Initializes the annotations for http:///org/eclipse/emf/ecore/util/ExtendedMetaData. * * * @generated */ protected void createExtendedMetaDataAnnotations() { String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData"; addAnnotation (bitsetFeatureValuesXMLEClass, source, new String[] { "name", "BitsetFeatureValuesXML", "kind", "empty" }); addAnnotation (getBitsetFeatureValuesXML_Bitmask(), source, new String[] { "kind", "attribute", "name", "bitmask" }); addAnnotation (getBitsetFeatureValuesXML_ExactMatch(), source, new String[] { "kind", "attribute", "name", "exact_match" }); addAnnotation (cfeDescriptorXMLEClass, source, new String[] { "name", "CFEDescriptorXML", "kind", "elementOnly" }); addAnnotation (getCFEDescriptorXML_TargetAnnotations(), source, new String[] { "kind", "element", "name", "targetAnnotations", "namespace", "##targetNamespace" }); addAnnotation (getCFEDescriptorXML_NullValueImage(), source, new String[] { "kind", "attribute", "name", "nullValueImage" }); addAnnotation (documentRootEClass, source, new String[] { "name", "", "kind", "mixed" }); addAnnotation (getDocumentRoot_Mixed(), source, new String[] { "kind", "elementWildcard", "name", ":mixed" }); addAnnotation (getDocumentRoot_XMLNSPrefixMap(), source, new String[] { "kind", "attribute", "name", "xmlns:prefix" }); addAnnotation (getDocumentRoot_XSISchemaLocation(), source, new String[] { "kind", "attribute", "name", "xsi:schemaLocation" }); addAnnotation (getDocumentRoot_CFEConfig(), source, new String[] { "kind", "element", "name", "CFEConfig", "namespace", "##targetNamespace" }); addAnnotation (enumFeatureValuesXMLEClass, source, new String[] { "name", "EnumFeatureValuesXML", "kind", "elementOnly" }); addAnnotation (getEnumFeatureValuesXML_Values(), source, new String[] { "kind", "element", "name", "values", "namespace", "##targetNamespace" }); addAnnotation (getEnumFeatureValuesXML_CaseSensitive(), source, new String[] { "kind", "attribute", "name", "caseSensitive" }); addAnnotation (featureObjectMatcherXMLEClass, source, new String[] { "name", "FeatureObjectMatcherXML", "kind", "elementOnly" }); addAnnotation (getFeatureObjectMatcherXML_Distance(), source, new String[] { "kind", "attribute", "name", "distance" }); addAnnotation (getFeatureObjectMatcherXML_Orientation(), source, new String[] { "kind", "attribute", "name", "orientation" }); addAnnotation (getFeatureObjectMatcherXML_WindowFlags(), source, new String[] { "kind", "attribute", "name", "windowFlags" }); addAnnotation (getFeatureObjectMatcherXML_WindowsizeEnclosed(), source, new String[] { "kind", "attribute", "name", "windowsizeEnclosed" }); addAnnotation (getFeatureObjectMatcherXML_WindowsizeInside(), source, new String[] { "kind", "attribute", "name", "windowsizeInside" }); addAnnotation (getFeatureObjectMatcherXML_WindowsizeLeft(), source, new String[] { "kind", "attribute", "name", "windowsizeLeft" }); addAnnotation (getFeatureObjectMatcherXML_WindowsizeRight(), source, new String[] { "kind", "attribute", "name", "windowsizeRight" }); addAnnotation (groupFeatureMatcherXMLEClass, source, new String[] { "name", "GroupFeatureMatcherXML", "kind", "elementOnly" }); addAnnotation (getGroupFeatureMatcherXML_FeatureMatchers(), source, new String[] { "kind", "element", "name", "featureMatchers", "namespace", "##targetNamespace" }); addAnnotation (getGroupFeatureMatcherXML_Exclude(), source, new String[] { "kind", "element", "name", "exclude", "namespace", "##targetNamespace" }); addAnnotation (objectPathFeatureValuesXMLEClass, source, new String[] { "name", "ObjectPathFeatureValuesXML", "kind", "empty" }); addAnnotation (getObjectPathFeatureValuesXML_ObjectPath(), source, new String[] { "kind", "attribute", "name", "objectPath" }); addAnnotation (partialObjectMatcherXMLEClass, source, new String[] { "name", "PartialObjectMatcherXML", "kind", "elementOnly" }); addAnnotation (getPartialObjectMatcherXML_GroupFeatureMatchers(), source, new String[] { "kind", "element", "name", "groupFeatureMatchers", "namespace", "##targetNamespace" }); addAnnotation (getPartialObjectMatcherXML_AnnotationTypeName(), source, new String[] { "kind", "attribute", "name", "annotationTypeName" }); addAnnotation (getPartialObjectMatcherXML_FullPath(), source, new String[] { "kind", "attribute", "name", "fullPath" }); addAnnotation (patternFeatureValuesXMLEClass, source, new String[] { "name", "PatternFeatureValuesXML", "kind", "empty" }); addAnnotation (getPatternFeatureValuesXML_Pattern(), source, new String[] { "kind", "attribute", "name", "pattern" }); addAnnotation (rangeFeatureValuesXMLEClass, source, new String[] { "name", "RangeFeatureValuesXML", "kind", "empty" }); addAnnotation (getRangeFeatureValuesXML_LowerBoundary(), source, new String[] { "kind", "attribute", "name", "lowerBoundary" }); addAnnotation (getRangeFeatureValuesXML_LowerBoundaryInclusive(), source, new String[] { "kind", "attribute", "name", "lowerBoundaryInclusive" }); addAnnotation (getRangeFeatureValuesXML_UpperBoundary(), source, new String[] { "kind", "attribute", "name", "upperBoundary" }); addAnnotation (getRangeFeatureValuesXML_UpperBoundaryInclusive(), source, new String[] { "kind", "attribute", "name", "upperBoundaryInclusive" }); addAnnotation (singleFeatureMatcherXMLEClass, source, new String[] { "name", "SingleFeatureMatcherXML", "kind", "elementOnly" }); addAnnotation (getSingleFeatureMatcherXML_RangeFeatureValues(), source, new String[] { "kind", "element", "name", "rangeFeatureValues", "namespace", "##targetNamespace" }); addAnnotation (getSingleFeatureMatcherXML_EnumFeatureValues(), source, new String[] { "kind", "element", "name", "enumFeatureValues", "namespace", "##targetNamespace" }); addAnnotation (getSingleFeatureMatcherXML_BitsetFeatureValues(), source, new String[] { "kind", "element", "name", "bitsetFeatureValues", "namespace", "##targetNamespace" }); addAnnotation (getSingleFeatureMatcherXML_ObjectPathFeatureValues(), source, new String[] { "kind", "element", "name", "objectPathFeatureValues", "namespace", "##targetNamespace" }); addAnnotation (getSingleFeatureMatcherXML_PatternFeatureValues(), source, new String[] { "kind", "element", "name", "patternFeatureValues", "namespace", "##targetNamespace" }); addAnnotation (getSingleFeatureMatcherXML_Exclude(), source, new String[] { "kind", "attribute", "name", "exclude" }); addAnnotation (getSingleFeatureMatcherXML_FeaturePath(), source, new String[] { "kind", "attribute", "name", "featurePath" }); addAnnotation (getSingleFeatureMatcherXML_FeatureTypeName(), source, new String[] { "kind", "attribute", "name", "featureTypeName" }); addAnnotation (getSingleFeatureMatcherXML_Quiet(), source, new String[] { "kind", "attribute", "name", "quiet" }); addAnnotation (targetAnnotationXMLEClass, source, new String[] { "name", "TargetAnnotationXML", "kind", "elementOnly" }); addAnnotation (getTargetAnnotationXML_TargetAnnotationMatcher(), source, new String[] { "kind", "element", "name", "targetAnnotationMatcher", "namespace", "##targetNamespace" }); addAnnotation (getTargetAnnotationXML_FeatureAnnotationMatchers(), source, new String[] { "kind", "element", "name", "featureAnnotationMatchers", "namespace", "##targetNamespace" }); addAnnotation (getTargetAnnotationXML_ClassName(), source, new String[] { "kind", "attribute", "name", "className" }); addAnnotation (getTargetAnnotationXML_EnclosingAnnotation(), source, new String[] { "kind", "attribute", "name", "enclosingAnnotation" }); } } //ConfigPackageImpl ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/SingleFeatureMatcherXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/S0000644000175000017500000007414211625126542033265 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.EnumFeatureValuesXML; import org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML; import org.apache.uima.tools.cfe.config.PatternFeatureValuesXML; import org.apache.uima.tools.cfe.config.RangeFeatureValuesXML; import org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; /** * * An implementation of the model object 'Single Feature Matcher XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl#getRangeFeatureValues Range Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl#getEnumFeatureValues Enum Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl#getBitsetFeatureValues Bitset Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl#getObjectPathFeatureValues Object Path Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl#getPatternFeatureValues Pattern Feature Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl#isExclude Exclude}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl#getFeaturePath Feature Path}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl#getFeatureTypeName Feature Type Name}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.SingleFeatureMatcherXMLImpl#isQuiet Quiet}
  • *
*

* * @generated */ public class SingleFeatureMatcherXMLImpl extends EObjectImpl implements SingleFeatureMatcherXML { /** * The cached value of the '{@link #getRangeFeatureValues() Range Feature Values}' containment reference. * * * @see #getRangeFeatureValues() * @generated * @ordered */ protected RangeFeatureValuesXML rangeFeatureValues; /** * The cached value of the '{@link #getEnumFeatureValues() Enum Feature Values}' containment reference. * * * @see #getEnumFeatureValues() * @generated * @ordered */ protected EnumFeatureValuesXML enumFeatureValues; /** * The cached value of the '{@link #getBitsetFeatureValues() Bitset Feature Values}' containment reference. * * * @see #getBitsetFeatureValues() * @generated * @ordered */ protected BitsetFeatureValuesXML bitsetFeatureValues; /** * The cached value of the '{@link #getObjectPathFeatureValues() Object Path Feature Values}' containment reference. * * * @see #getObjectPathFeatureValues() * @generated * @ordered */ protected ObjectPathFeatureValuesXML objectPathFeatureValues; /** * The cached value of the '{@link #getPatternFeatureValues() Pattern Feature Values}' containment reference. * * * @see #getPatternFeatureValues() * @generated * @ordered */ protected PatternFeatureValuesXML patternFeatureValues; /** * The default value of the '{@link #isExclude() Exclude}' attribute. * * * @see #isExclude() * @generated * @ordered */ protected static final boolean EXCLUDE_EDEFAULT = false; /** * The cached value of the '{@link #isExclude() Exclude}' attribute. * * * @see #isExclude() * @generated * @ordered */ protected boolean exclude = EXCLUDE_EDEFAULT; /** * This is true if the Exclude attribute has been set. * * * @generated * @ordered */ protected boolean excludeESet; /** * The default value of the '{@link #getFeaturePath() Feature Path}' attribute. * * * @see #getFeaturePath() * @generated * @ordered */ protected static final String FEATURE_PATH_EDEFAULT = null; /** * The cached value of the '{@link #getFeaturePath() Feature Path}' attribute. * * * @see #getFeaturePath() * @generated * @ordered */ protected String featurePath = FEATURE_PATH_EDEFAULT; /** * The default value of the '{@link #getFeatureTypeName() Feature Type Name}' attribute. * * * @see #getFeatureTypeName() * @generated * @ordered */ protected static final String FEATURE_TYPE_NAME_EDEFAULT = null; /** * The cached value of the '{@link #getFeatureTypeName() Feature Type Name}' attribute. * * * @see #getFeatureTypeName() * @generated * @ordered */ protected String featureTypeName = FEATURE_TYPE_NAME_EDEFAULT; /** * The default value of the '{@link #isQuiet() Quiet}' attribute. * * * @see #isQuiet() * @generated * @ordered */ protected static final boolean QUIET_EDEFAULT = false; /** * The cached value of the '{@link #isQuiet() Quiet}' attribute. * * * @see #isQuiet() * @generated * @ordered */ protected boolean quiet = QUIET_EDEFAULT; /** * This is true if the Quiet attribute has been set. * * * @generated * @ordered */ protected boolean quietESet; /** * * * @generated */ protected SingleFeatureMatcherXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.SINGLE_FEATURE_MATCHER_XML; } /** * * * @generated */ public RangeFeatureValuesXML getRangeFeatureValues() { return rangeFeatureValues; } /** * * * @generated */ public NotificationChain basicSetRangeFeatureValues(RangeFeatureValuesXML newRangeFeatureValues, NotificationChain msgs) { RangeFeatureValuesXML oldRangeFeatureValues = rangeFeatureValues; rangeFeatureValues = newRangeFeatureValues; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES, oldRangeFeatureValues, newRangeFeatureValues); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * * * @generated */ public void setRangeFeatureValues(RangeFeatureValuesXML newRangeFeatureValues) { if (newRangeFeatureValues != rangeFeatureValues) { NotificationChain msgs = null; if (rangeFeatureValues != null) msgs = ((InternalEObject)rangeFeatureValues).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES, null, msgs); if (newRangeFeatureValues != null) msgs = ((InternalEObject)newRangeFeatureValues).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES, null, msgs); msgs = basicSetRangeFeatureValues(newRangeFeatureValues, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES, newRangeFeatureValues, newRangeFeatureValues)); } /** * * * @generated */ public EnumFeatureValuesXML getEnumFeatureValues() { return enumFeatureValues; } /** * * * @generated */ public NotificationChain basicSetEnumFeatureValues(EnumFeatureValuesXML newEnumFeatureValues, NotificationChain msgs) { EnumFeatureValuesXML oldEnumFeatureValues = enumFeatureValues; enumFeatureValues = newEnumFeatureValues; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES, oldEnumFeatureValues, newEnumFeatureValues); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * * * @generated */ public void setEnumFeatureValues(EnumFeatureValuesXML newEnumFeatureValues) { if (newEnumFeatureValues != enumFeatureValues) { NotificationChain msgs = null; if (enumFeatureValues != null) msgs = ((InternalEObject)enumFeatureValues).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES, null, msgs); if (newEnumFeatureValues != null) msgs = ((InternalEObject)newEnumFeatureValues).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES, null, msgs); msgs = basicSetEnumFeatureValues(newEnumFeatureValues, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES, newEnumFeatureValues, newEnumFeatureValues)); } /** * * * @generated */ public BitsetFeatureValuesXML getBitsetFeatureValues() { return bitsetFeatureValues; } /** * * * @generated */ public NotificationChain basicSetBitsetFeatureValues(BitsetFeatureValuesXML newBitsetFeatureValues, NotificationChain msgs) { BitsetFeatureValuesXML oldBitsetFeatureValues = bitsetFeatureValues; bitsetFeatureValues = newBitsetFeatureValues; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES, oldBitsetFeatureValues, newBitsetFeatureValues); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * * * @generated */ public void setBitsetFeatureValues(BitsetFeatureValuesXML newBitsetFeatureValues) { if (newBitsetFeatureValues != bitsetFeatureValues) { NotificationChain msgs = null; if (bitsetFeatureValues != null) msgs = ((InternalEObject)bitsetFeatureValues).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES, null, msgs); if (newBitsetFeatureValues != null) msgs = ((InternalEObject)newBitsetFeatureValues).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES, null, msgs); msgs = basicSetBitsetFeatureValues(newBitsetFeatureValues, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES, newBitsetFeatureValues, newBitsetFeatureValues)); } /** * * * @generated */ public ObjectPathFeatureValuesXML getObjectPathFeatureValues() { return objectPathFeatureValues; } /** * * * @generated */ public NotificationChain basicSetObjectPathFeatureValues(ObjectPathFeatureValuesXML newObjectPathFeatureValues, NotificationChain msgs) { ObjectPathFeatureValuesXML oldObjectPathFeatureValues = objectPathFeatureValues; objectPathFeatureValues = newObjectPathFeatureValues; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES, oldObjectPathFeatureValues, newObjectPathFeatureValues); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * * * @generated */ public void setObjectPathFeatureValues(ObjectPathFeatureValuesXML newObjectPathFeatureValues) { if (newObjectPathFeatureValues != objectPathFeatureValues) { NotificationChain msgs = null; if (objectPathFeatureValues != null) msgs = ((InternalEObject)objectPathFeatureValues).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES, null, msgs); if (newObjectPathFeatureValues != null) msgs = ((InternalEObject)newObjectPathFeatureValues).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES, null, msgs); msgs = basicSetObjectPathFeatureValues(newObjectPathFeatureValues, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES, newObjectPathFeatureValues, newObjectPathFeatureValues)); } /** * * * @generated */ public PatternFeatureValuesXML getPatternFeatureValues() { return patternFeatureValues; } /** * * * @generated */ public NotificationChain basicSetPatternFeatureValues(PatternFeatureValuesXML newPatternFeatureValues, NotificationChain msgs) { PatternFeatureValuesXML oldPatternFeatureValues = patternFeatureValues; patternFeatureValues = newPatternFeatureValues; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES, oldPatternFeatureValues, newPatternFeatureValues); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * * * @generated */ public void setPatternFeatureValues(PatternFeatureValuesXML newPatternFeatureValues) { if (newPatternFeatureValues != patternFeatureValues) { NotificationChain msgs = null; if (patternFeatureValues != null) msgs = ((InternalEObject)patternFeatureValues).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES, null, msgs); if (newPatternFeatureValues != null) msgs = ((InternalEObject)newPatternFeatureValues).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES, null, msgs); msgs = basicSetPatternFeatureValues(newPatternFeatureValues, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES, newPatternFeatureValues, newPatternFeatureValues)); } /** * * * @generated */ public boolean isExclude() { return exclude; } /** * * * @generated */ public void setExclude(boolean newExclude) { boolean oldExclude = exclude; exclude = newExclude; boolean oldExcludeESet = excludeESet; excludeESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__EXCLUDE, oldExclude, exclude, !oldExcludeESet)); } /** * * * @generated */ public void unsetExclude() { boolean oldExclude = exclude; boolean oldExcludeESet = excludeESet; exclude = EXCLUDE_EDEFAULT; excludeESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__EXCLUDE, oldExclude, EXCLUDE_EDEFAULT, oldExcludeESet)); } /** * * * @generated */ public boolean isSetExclude() { return excludeESet; } /** * * * @generated */ public String getFeaturePath() { return featurePath; } /** * * * @generated */ public void setFeaturePath(String newFeaturePath) { String oldFeaturePath = featurePath; featurePath = newFeaturePath; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_PATH, oldFeaturePath, featurePath)); } /** * * * @generated */ public String getFeatureTypeName() { return featureTypeName; } /** * * * @generated */ public void setFeatureTypeName(String newFeatureTypeName) { String oldFeatureTypeName = featureTypeName; featureTypeName = newFeatureTypeName; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_TYPE_NAME, oldFeatureTypeName, featureTypeName)); } /** * * * @generated */ public boolean isQuiet() { return quiet; } /** * * * @generated */ public void setQuiet(boolean newQuiet) { boolean oldQuiet = quiet; quiet = newQuiet; boolean oldQuietESet = quietESet; quietESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__QUIET, oldQuiet, quiet, !oldQuietESet)); } /** * * * @generated */ public void unsetQuiet() { boolean oldQuiet = quiet; boolean oldQuietESet = quietESet; quiet = QUIET_EDEFAULT; quietESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.SINGLE_FEATURE_MATCHER_XML__QUIET, oldQuiet, QUIET_EDEFAULT, oldQuietESet)); } /** * * * @generated */ public boolean isSetQuiet() { return quietESet; } /** * * * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES: return basicSetRangeFeatureValues(null, msgs); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES: return basicSetEnumFeatureValues(null, msgs); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES: return basicSetBitsetFeatureValues(null, msgs); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES: return basicSetObjectPathFeatureValues(null, msgs); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES: return basicSetPatternFeatureValues(null, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES: return getRangeFeatureValues(); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES: return getEnumFeatureValues(); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES: return getBitsetFeatureValues(); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES: return getObjectPathFeatureValues(); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES: return getPatternFeatureValues(); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__EXCLUDE: return isExclude() ? Boolean.TRUE : Boolean.FALSE; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_PATH: return getFeaturePath(); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_TYPE_NAME: return getFeatureTypeName(); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__QUIET: return isQuiet() ? Boolean.TRUE : Boolean.FALSE; } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES: setRangeFeatureValues((RangeFeatureValuesXML)newValue); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES: setEnumFeatureValues((EnumFeatureValuesXML)newValue); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES: setBitsetFeatureValues((BitsetFeatureValuesXML)newValue); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES: setObjectPathFeatureValues((ObjectPathFeatureValuesXML)newValue); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES: setPatternFeatureValues((PatternFeatureValuesXML)newValue); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__EXCLUDE: setExclude(((Boolean)newValue).booleanValue()); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_PATH: setFeaturePath((String)newValue); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_TYPE_NAME: setFeatureTypeName((String)newValue); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__QUIET: setQuiet(((Boolean)newValue).booleanValue()); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES: setRangeFeatureValues((RangeFeatureValuesXML)null); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES: setEnumFeatureValues((EnumFeatureValuesXML)null); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES: setBitsetFeatureValues((BitsetFeatureValuesXML)null); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES: setObjectPathFeatureValues((ObjectPathFeatureValuesXML)null); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES: setPatternFeatureValues((PatternFeatureValuesXML)null); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__EXCLUDE: unsetExclude(); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_PATH: setFeaturePath(FEATURE_PATH_EDEFAULT); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_TYPE_NAME: setFeatureTypeName(FEATURE_TYPE_NAME_EDEFAULT); return; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__QUIET: unsetQuiet(); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__RANGE_FEATURE_VALUES: return rangeFeatureValues != null; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__ENUM_FEATURE_VALUES: return enumFeatureValues != null; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__BITSET_FEATURE_VALUES: return bitsetFeatureValues != null; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__OBJECT_PATH_FEATURE_VALUES: return objectPathFeatureValues != null; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__PATTERN_FEATURE_VALUES: return patternFeatureValues != null; case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__EXCLUDE: return isSetExclude(); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_PATH: return FEATURE_PATH_EDEFAULT == null ? featurePath != null : !FEATURE_PATH_EDEFAULT.equals(featurePath); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__FEATURE_TYPE_NAME: return FEATURE_TYPE_NAME_EDEFAULT == null ? featureTypeName != null : !FEATURE_TYPE_NAME_EDEFAULT.equals(featureTypeName); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML__QUIET: return isSetQuiet(); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (exclude: "); if (excludeESet) result.append(exclude); else result.append(""); result.append(", featurePath: "); result.append(featurePath); result.append(", featureTypeName: "); result.append(featureTypeName); result.append(", quiet: "); if (quietESet) result.append(quiet); else result.append(""); result.append(')'); return result.toString(); } } //SingleFeatureMatcherXMLImpl././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/EnumFeatureValuesXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/E0000644000175000017500000001760111625126542033244 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import java.util.Collection; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.EnumFeatureValuesXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; import org.eclipse.emf.ecore.util.EDataTypeEList; /** * * An implementation of the model object 'Enum Feature Values XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.EnumFeatureValuesXMLImpl#getValues Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.EnumFeatureValuesXMLImpl#isCaseSensitive Case Sensitive}
  • *
*

* * @generated */ public class EnumFeatureValuesXMLImpl extends EObjectImpl implements EnumFeatureValuesXML { /** * The cached value of the '{@link #getValues() Values}' attribute list. * * * @see #getValues() * @generated * @ordered */ protected EList values; /** * The default value of the '{@link #isCaseSensitive() Case Sensitive}' attribute. * * * @see #isCaseSensitive() * @generated * @ordered */ protected static final boolean CASE_SENSITIVE_EDEFAULT = false; /** * The cached value of the '{@link #isCaseSensitive() Case Sensitive}' attribute. * * * @see #isCaseSensitive() * @generated * @ordered */ protected boolean caseSensitive = CASE_SENSITIVE_EDEFAULT; /** * This is true if the Case Sensitive attribute has been set. * * * @generated * @ordered */ protected boolean caseSensitiveESet; /** * * * @generated */ protected EnumFeatureValuesXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.ENUM_FEATURE_VALUES_XML; } /** * * * @generated */ public EList getValues() { if (values == null) { values = new EDataTypeEList(String.class, this, ConfigPackage.ENUM_FEATURE_VALUES_XML__VALUES); } return values; } /** * * * @generated */ public boolean isCaseSensitive() { return caseSensitive; } /** * * * @generated */ public void setCaseSensitive(boolean newCaseSensitive) { boolean oldCaseSensitive = caseSensitive; caseSensitive = newCaseSensitive; boolean oldCaseSensitiveESet = caseSensitiveESet; caseSensitiveESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.ENUM_FEATURE_VALUES_XML__CASE_SENSITIVE, oldCaseSensitive, caseSensitive, !oldCaseSensitiveESet)); } /** * * * @generated */ public void unsetCaseSensitive() { boolean oldCaseSensitive = caseSensitive; boolean oldCaseSensitiveESet = caseSensitiveESet; caseSensitive = CASE_SENSITIVE_EDEFAULT; caseSensitiveESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.ENUM_FEATURE_VALUES_XML__CASE_SENSITIVE, oldCaseSensitive, CASE_SENSITIVE_EDEFAULT, oldCaseSensitiveESet)); } /** * * * @generated */ public boolean isSetCaseSensitive() { return caseSensitiveESet; } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.ENUM_FEATURE_VALUES_XML__VALUES: return getValues(); case ConfigPackage.ENUM_FEATURE_VALUES_XML__CASE_SENSITIVE: return isCaseSensitive() ? Boolean.TRUE : Boolean.FALSE; } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.ENUM_FEATURE_VALUES_XML__VALUES: getValues().clear(); getValues().addAll((Collection)newValue); return; case ConfigPackage.ENUM_FEATURE_VALUES_XML__CASE_SENSITIVE: setCaseSensitive(((Boolean)newValue).booleanValue()); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.ENUM_FEATURE_VALUES_XML__VALUES: getValues().clear(); return; case ConfigPackage.ENUM_FEATURE_VALUES_XML__CASE_SENSITIVE: unsetCaseSensitive(); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.ENUM_FEATURE_VALUES_XML__VALUES: return values != null && !values.isEmpty(); case ConfigPackage.ENUM_FEATURE_VALUES_XML__CASE_SENSITIVE: return isSetCaseSensitive(); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (values: "); result.append(values); result.append(", caseSensitive: "); if (caseSensitiveESet) result.append(caseSensitive); else result.append(""); result.append(')'); return result.toString(); } } //EnumFeatureValuesXMLImpl././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/DocumentRootImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/D0000644000175000017500000002440511625126542033243 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import org.apache.uima.tools.cfe.config.CFEDescriptorXML; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.DocumentRoot; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.EMap; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.EObjectImpl; import org.eclipse.emf.ecore.impl.EStringToStringMapEntryImpl; import org.eclipse.emf.ecore.util.BasicFeatureMap; import org.eclipse.emf.ecore.util.EcoreEMap; import org.eclipse.emf.ecore.util.FeatureMap; import org.eclipse.emf.ecore.util.InternalEList; /** * * An implementation of the model object 'Document Root'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.DocumentRootImpl#getMixed Mixed}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.DocumentRootImpl#getXMLNSPrefixMap XMLNS Prefix Map}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.DocumentRootImpl#getXSISchemaLocation XSI Schema Location}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.DocumentRootImpl#getCFEConfig CFE Config}
  • *
*

* * @generated */ public class DocumentRootImpl extends EObjectImpl implements DocumentRoot { /** * The cached value of the '{@link #getMixed() Mixed}' attribute list. * * * @see #getMixed() * @generated * @ordered */ protected FeatureMap mixed; /** * The cached value of the '{@link #getXMLNSPrefixMap() XMLNS Prefix Map}' map. * * * @see #getXMLNSPrefixMap() * @generated * @ordered */ protected EMap xMLNSPrefixMap; /** * The cached value of the '{@link #getXSISchemaLocation() XSI Schema Location}' map. * * * @see #getXSISchemaLocation() * @generated * @ordered */ protected EMap xSISchemaLocation; /** * * * @generated */ protected DocumentRootImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.DOCUMENT_ROOT; } /** * * * @generated */ public FeatureMap getMixed() { if (mixed == null) { mixed = new BasicFeatureMap(this, ConfigPackage.DOCUMENT_ROOT__MIXED); } return mixed; } /** * * * @generated */ public EMap getXMLNSPrefixMap() { if (xMLNSPrefixMap == null) { xMLNSPrefixMap = new EcoreEMap(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY, EStringToStringMapEntryImpl.class, this, ConfigPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP); } return xMLNSPrefixMap; } /** * * * @generated */ public EMap getXSISchemaLocation() { if (xSISchemaLocation == null) { xSISchemaLocation = new EcoreEMap(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY, EStringToStringMapEntryImpl.class, this, ConfigPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION); } return xSISchemaLocation; } /** * * * @generated */ public CFEDescriptorXML getCFEConfig() { return (CFEDescriptorXML)getMixed().get(ConfigPackage.Literals.DOCUMENT_ROOT__CFE_CONFIG, true); } /** * * * @generated */ public NotificationChain basicSetCFEConfig(CFEDescriptorXML newCFEConfig, NotificationChain msgs) { return ((FeatureMap.Internal)getMixed()).basicAdd(ConfigPackage.Literals.DOCUMENT_ROOT__CFE_CONFIG, newCFEConfig, msgs); } /** * * * @generated */ public void setCFEConfig(CFEDescriptorXML newCFEConfig) { ((FeatureMap.Internal)getMixed()).set(ConfigPackage.Literals.DOCUMENT_ROOT__CFE_CONFIG, newCFEConfig); } /** * * * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case ConfigPackage.DOCUMENT_ROOT__MIXED: return ((InternalEList)getMixed()).basicRemove(otherEnd, msgs); case ConfigPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP: return ((InternalEList)getXMLNSPrefixMap()).basicRemove(otherEnd, msgs); case ConfigPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION: return ((InternalEList)getXSISchemaLocation()).basicRemove(otherEnd, msgs); case ConfigPackage.DOCUMENT_ROOT__CFE_CONFIG: return basicSetCFEConfig(null, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.DOCUMENT_ROOT__MIXED: if (coreType) return getMixed(); return ((FeatureMap.Internal)getMixed()).getWrapper(); case ConfigPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP: if (coreType) return getXMLNSPrefixMap(); else return getXMLNSPrefixMap().map(); case ConfigPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION: if (coreType) return getXSISchemaLocation(); else return getXSISchemaLocation().map(); case ConfigPackage.DOCUMENT_ROOT__CFE_CONFIG: return getCFEConfig(); } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.DOCUMENT_ROOT__MIXED: ((FeatureMap.Internal)getMixed()).set(newValue); return; case ConfigPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP: ((EStructuralFeature.Setting)getXMLNSPrefixMap()).set(newValue); return; case ConfigPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION: ((EStructuralFeature.Setting)getXSISchemaLocation()).set(newValue); return; case ConfigPackage.DOCUMENT_ROOT__CFE_CONFIG: setCFEConfig((CFEDescriptorXML)newValue); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.DOCUMENT_ROOT__MIXED: getMixed().clear(); return; case ConfigPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP: getXMLNSPrefixMap().clear(); return; case ConfigPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION: getXSISchemaLocation().clear(); return; case ConfigPackage.DOCUMENT_ROOT__CFE_CONFIG: setCFEConfig((CFEDescriptorXML)null); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.DOCUMENT_ROOT__MIXED: return mixed != null && !mixed.isEmpty(); case ConfigPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP: return xMLNSPrefixMap != null && !xMLNSPrefixMap.isEmpty(); case ConfigPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION: return xSISchemaLocation != null && !xSISchemaLocation.isEmpty(); case ConfigPackage.DOCUMENT_ROOT__CFE_CONFIG: return getCFEConfig() != null; } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (mixed: "); result.append(mixed); result.append(')'); return result.toString(); } } //DocumentRootImpl././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/FeatureObjectMatcherXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/F0000644000175000017500000006203011625126542033241 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.impl.ENotificationImpl; /** * * An implementation of the model object 'Feature Object Matcher XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl#isDistance Distance}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl#isOrientation Orientation}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl#getWindowFlags Window Flags}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl#getWindowsizeEnclosed Windowsize Enclosed}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl#getWindowsizeInside Windowsize Inside}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl#getWindowsizeLeft Windowsize Left}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.FeatureObjectMatcherXMLImpl#getWindowsizeRight Windowsize Right}
  • *
*

* * @generated */ public class FeatureObjectMatcherXMLImpl extends PartialObjectMatcherXMLImpl implements FeatureObjectMatcherXML { /** * The default value of the '{@link #isDistance() Distance}' attribute. * * * @see #isDistance() * @generated * @ordered */ protected static final boolean DISTANCE_EDEFAULT = false; /** * The cached value of the '{@link #isDistance() Distance}' attribute. * * * @see #isDistance() * @generated * @ordered */ protected boolean distance = DISTANCE_EDEFAULT; /** * This is true if the Distance attribute has been set. * * * @generated * @ordered */ protected boolean distanceESet; /** * The default value of the '{@link #isOrientation() Orientation}' attribute. * * * @see #isOrientation() * @generated * @ordered */ protected static final boolean ORIENTATION_EDEFAULT = false; /** * The cached value of the '{@link #isOrientation() Orientation}' attribute. * * * @see #isOrientation() * @generated * @ordered */ protected boolean orientation = ORIENTATION_EDEFAULT; /** * This is true if the Orientation attribute has been set. * * * @generated * @ordered */ protected boolean orientationESet; /** * The default value of the '{@link #getWindowFlags() Window Flags}' attribute. * * * @see #getWindowFlags() * @generated * @ordered */ protected static final int WINDOW_FLAGS_EDEFAULT = 0; /** * The cached value of the '{@link #getWindowFlags() Window Flags}' attribute. * * * @see #getWindowFlags() * @generated * @ordered */ protected int windowFlags = WINDOW_FLAGS_EDEFAULT; /** * This is true if the Window Flags attribute has been set. * * * @generated * @ordered */ protected boolean windowFlagsESet; /** * The default value of the '{@link #getWindowsizeEnclosed() Windowsize Enclosed}' attribute. * * * @see #getWindowsizeEnclosed() * @generated * @ordered */ protected static final int WINDOWSIZE_ENCLOSED_EDEFAULT = 0; /** * The cached value of the '{@link #getWindowsizeEnclosed() Windowsize Enclosed}' attribute. * * * @see #getWindowsizeEnclosed() * @generated * @ordered */ protected int windowsizeEnclosed = WINDOWSIZE_ENCLOSED_EDEFAULT; /** * This is true if the Windowsize Enclosed attribute has been set. * * * @generated * @ordered */ protected boolean windowsizeEnclosedESet; /** * The default value of the '{@link #getWindowsizeInside() Windowsize Inside}' attribute. * * * @see #getWindowsizeInside() * @generated * @ordered */ protected static final int WINDOWSIZE_INSIDE_EDEFAULT = 0; /** * The cached value of the '{@link #getWindowsizeInside() Windowsize Inside}' attribute. * * * @see #getWindowsizeInside() * @generated * @ordered */ protected int windowsizeInside = WINDOWSIZE_INSIDE_EDEFAULT; /** * This is true if the Windowsize Inside attribute has been set. * * * @generated * @ordered */ protected boolean windowsizeInsideESet; /** * The default value of the '{@link #getWindowsizeLeft() Windowsize Left}' attribute. * * * @see #getWindowsizeLeft() * @generated * @ordered */ protected static final int WINDOWSIZE_LEFT_EDEFAULT = 0; /** * The cached value of the '{@link #getWindowsizeLeft() Windowsize Left}' attribute. * * * @see #getWindowsizeLeft() * @generated * @ordered */ protected int windowsizeLeft = WINDOWSIZE_LEFT_EDEFAULT; /** * This is true if the Windowsize Left attribute has been set. * * * @generated * @ordered */ protected boolean windowsizeLeftESet; /** * The default value of the '{@link #getWindowsizeRight() Windowsize Right}' attribute. * * * @see #getWindowsizeRight() * @generated * @ordered */ protected static final int WINDOWSIZE_RIGHT_EDEFAULT = 0; /** * The cached value of the '{@link #getWindowsizeRight() Windowsize Right}' attribute. * * * @see #getWindowsizeRight() * @generated * @ordered */ protected int windowsizeRight = WINDOWSIZE_RIGHT_EDEFAULT; /** * This is true if the Windowsize Right attribute has been set. * * * @generated * @ordered */ protected boolean windowsizeRightESet; /** * * * @generated */ protected FeatureObjectMatcherXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.FEATURE_OBJECT_MATCHER_XML; } /** * * * @generated */ public boolean isDistance() { return distance; } /** * * * @generated */ public void setDistance(boolean newDistance) { boolean oldDistance = distance; distance = newDistance; boolean oldDistanceESet = distanceESet; distanceESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__DISTANCE, oldDistance, distance, !oldDistanceESet)); } /** * * * @generated */ public void unsetDistance() { boolean oldDistance = distance; boolean oldDistanceESet = distanceESet; distance = DISTANCE_EDEFAULT; distanceESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__DISTANCE, oldDistance, DISTANCE_EDEFAULT, oldDistanceESet)); } /** * * * @generated */ public boolean isSetDistance() { return distanceESet; } /** * * * @generated */ public boolean isOrientation() { return orientation; } /** * * * @generated */ public void setOrientation(boolean newOrientation) { boolean oldOrientation = orientation; orientation = newOrientation; boolean oldOrientationESet = orientationESet; orientationESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__ORIENTATION, oldOrientation, orientation, !oldOrientationESet)); } /** * * * @generated */ public void unsetOrientation() { boolean oldOrientation = orientation; boolean oldOrientationESet = orientationESet; orientation = ORIENTATION_EDEFAULT; orientationESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__ORIENTATION, oldOrientation, ORIENTATION_EDEFAULT, oldOrientationESet)); } /** * * * @generated */ public boolean isSetOrientation() { return orientationESet; } /** * * * @generated */ public int getWindowFlags() { return windowFlags; } /** * * * @generated */ public void setWindowFlags(int newWindowFlags) { int oldWindowFlags = windowFlags; windowFlags = newWindowFlags; boolean oldWindowFlagsESet = windowFlagsESet; windowFlagsESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOW_FLAGS, oldWindowFlags, windowFlags, !oldWindowFlagsESet)); } /** * * * @generated */ public void unsetWindowFlags() { int oldWindowFlags = windowFlags; boolean oldWindowFlagsESet = windowFlagsESet; windowFlags = WINDOW_FLAGS_EDEFAULT; windowFlagsESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOW_FLAGS, oldWindowFlags, WINDOW_FLAGS_EDEFAULT, oldWindowFlagsESet)); } /** * * * @generated */ public boolean isSetWindowFlags() { return windowFlagsESet; } /** * * * @generated */ public int getWindowsizeEnclosed() { return windowsizeEnclosed; } /** * * * @generated */ public void setWindowsizeEnclosed(int newWindowsizeEnclosed) { int oldWindowsizeEnclosed = windowsizeEnclosed; windowsizeEnclosed = newWindowsizeEnclosed; boolean oldWindowsizeEnclosedESet = windowsizeEnclosedESet; windowsizeEnclosedESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_ENCLOSED, oldWindowsizeEnclosed, windowsizeEnclosed, !oldWindowsizeEnclosedESet)); } /** * * * @generated */ public void unsetWindowsizeEnclosed() { int oldWindowsizeEnclosed = windowsizeEnclosed; boolean oldWindowsizeEnclosedESet = windowsizeEnclosedESet; windowsizeEnclosed = WINDOWSIZE_ENCLOSED_EDEFAULT; windowsizeEnclosedESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_ENCLOSED, oldWindowsizeEnclosed, WINDOWSIZE_ENCLOSED_EDEFAULT, oldWindowsizeEnclosedESet)); } /** * * * @generated */ public boolean isSetWindowsizeEnclosed() { return windowsizeEnclosedESet; } /** * * * @generated */ public int getWindowsizeInside() { return windowsizeInside; } /** * * * @generated */ public void setWindowsizeInside(int newWindowsizeInside) { int oldWindowsizeInside = windowsizeInside; windowsizeInside = newWindowsizeInside; boolean oldWindowsizeInsideESet = windowsizeInsideESet; windowsizeInsideESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_INSIDE, oldWindowsizeInside, windowsizeInside, !oldWindowsizeInsideESet)); } /** * * * @generated */ public void unsetWindowsizeInside() { int oldWindowsizeInside = windowsizeInside; boolean oldWindowsizeInsideESet = windowsizeInsideESet; windowsizeInside = WINDOWSIZE_INSIDE_EDEFAULT; windowsizeInsideESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_INSIDE, oldWindowsizeInside, WINDOWSIZE_INSIDE_EDEFAULT, oldWindowsizeInsideESet)); } /** * * * @generated */ public boolean isSetWindowsizeInside() { return windowsizeInsideESet; } /** * * * @generated */ public int getWindowsizeLeft() { return windowsizeLeft; } /** * * * @generated */ public void setWindowsizeLeft(int newWindowsizeLeft) { int oldWindowsizeLeft = windowsizeLeft; windowsizeLeft = newWindowsizeLeft; boolean oldWindowsizeLeftESet = windowsizeLeftESet; windowsizeLeftESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_LEFT, oldWindowsizeLeft, windowsizeLeft, !oldWindowsizeLeftESet)); } /** * * * @generated */ public void unsetWindowsizeLeft() { int oldWindowsizeLeft = windowsizeLeft; boolean oldWindowsizeLeftESet = windowsizeLeftESet; windowsizeLeft = WINDOWSIZE_LEFT_EDEFAULT; windowsizeLeftESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_LEFT, oldWindowsizeLeft, WINDOWSIZE_LEFT_EDEFAULT, oldWindowsizeLeftESet)); } /** * * * @generated */ public boolean isSetWindowsizeLeft() { return windowsizeLeftESet; } /** * * * @generated */ public int getWindowsizeRight() { return windowsizeRight; } /** * * * @generated */ public void setWindowsizeRight(int newWindowsizeRight) { int oldWindowsizeRight = windowsizeRight; windowsizeRight = newWindowsizeRight; boolean oldWindowsizeRightESet = windowsizeRightESet; windowsizeRightESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_RIGHT, oldWindowsizeRight, windowsizeRight, !oldWindowsizeRightESet)); } /** * * * @generated */ public void unsetWindowsizeRight() { int oldWindowsizeRight = windowsizeRight; boolean oldWindowsizeRightESet = windowsizeRightESet; windowsizeRight = WINDOWSIZE_RIGHT_EDEFAULT; windowsizeRightESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_RIGHT, oldWindowsizeRight, WINDOWSIZE_RIGHT_EDEFAULT, oldWindowsizeRightESet)); } /** * * * @generated */ public boolean isSetWindowsizeRight() { return windowsizeRightESet; } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__DISTANCE: return isDistance() ? Boolean.TRUE : Boolean.FALSE; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__ORIENTATION: return isOrientation() ? Boolean.TRUE : Boolean.FALSE; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOW_FLAGS: return Integer.valueOf(getWindowFlags()); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_ENCLOSED: return Integer.valueOf(getWindowsizeEnclosed()); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_INSIDE: return Integer.valueOf(getWindowsizeInside()); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_LEFT: return Integer.valueOf(getWindowsizeLeft()); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_RIGHT: return Integer.valueOf(getWindowsizeRight()); } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__DISTANCE: setDistance(((Boolean)newValue).booleanValue()); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__ORIENTATION: setOrientation(((Boolean)newValue).booleanValue()); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOW_FLAGS: setWindowFlags(((Integer)newValue).intValue()); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_ENCLOSED: setWindowsizeEnclosed(((Integer)newValue).intValue()); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_INSIDE: setWindowsizeInside(((Integer)newValue).intValue()); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_LEFT: setWindowsizeLeft(((Integer)newValue).intValue()); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_RIGHT: setWindowsizeRight(((Integer)newValue).intValue()); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__DISTANCE: unsetDistance(); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__ORIENTATION: unsetOrientation(); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOW_FLAGS: unsetWindowFlags(); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_ENCLOSED: unsetWindowsizeEnclosed(); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_INSIDE: unsetWindowsizeInside(); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_LEFT: unsetWindowsizeLeft(); return; case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_RIGHT: unsetWindowsizeRight(); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__DISTANCE: return isSetDistance(); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__ORIENTATION: return isSetOrientation(); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOW_FLAGS: return isSetWindowFlags(); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_ENCLOSED: return isSetWindowsizeEnclosed(); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_INSIDE: return isSetWindowsizeInside(); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_LEFT: return isSetWindowsizeLeft(); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML__WINDOWSIZE_RIGHT: return isSetWindowsizeRight(); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuilder result = new StringBuilder(super.toString()); result.append(" (distance: "); if (distanceESet) result.append(distance); else result.append(""); result.append(", orientation: "); if (orientationESet) result.append(orientation); else result.append(""); result.append(", windowFlags: "); if (windowFlagsESet) result.append(windowFlags); else result.append(""); result.append(", windowsizeEnclosed: "); if (windowsizeEnclosedESet) result.append(windowsizeEnclosed); else result.append(""); result.append(", windowsizeInside: "); if (windowsizeInsideESet) result.append(windowsizeInside); else result.append(""); result.append(", windowsizeLeft: "); if (windowsizeLeftESet) result.append(windowsizeLeft); else result.append(""); result.append(", windowsizeRight: "); if (windowsizeRightESet) result.append(windowsizeRight); else result.append(""); result.append(')'); return result.toString(); } } //FeatureObjectMatcherXMLImpl././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/PatternFeatureValuesXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/P0000644000175000017500000001224711625126542033260 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.PatternFeatureValuesXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; /** * * An implementation of the model object 'Pattern Feature Values XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.PatternFeatureValuesXMLImpl#getPattern Pattern}
  • *
*

* * @generated */ public class PatternFeatureValuesXMLImpl extends EObjectImpl implements PatternFeatureValuesXML { /** * The default value of the '{@link #getPattern() Pattern}' attribute. * * * @see #getPattern() * @generated * @ordered */ protected static final String PATTERN_EDEFAULT = null; /** * The cached value of the '{@link #getPattern() Pattern}' attribute. * * * @see #getPattern() * @generated * @ordered */ protected String pattern = PATTERN_EDEFAULT; /** * * * @generated */ protected PatternFeatureValuesXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.PATTERN_FEATURE_VALUES_XML; } /** * * * @generated */ public String getPattern() { return pattern; } /** * * * @generated */ public void setPattern(String newPattern) { String oldPattern = pattern; pattern = newPattern; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.PATTERN_FEATURE_VALUES_XML__PATTERN, oldPattern, pattern)); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.PATTERN_FEATURE_VALUES_XML__PATTERN: return getPattern(); } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.PATTERN_FEATURE_VALUES_XML__PATTERN: setPattern((String)newValue); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.PATTERN_FEATURE_VALUES_XML__PATTERN: setPattern(PATTERN_EDEFAULT); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.PATTERN_FEATURE_VALUES_XML__PATTERN: return PATTERN_EDEFAULT == null ? pattern != null : !PATTERN_EDEFAULT.equals(pattern); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (pattern: "); result.append(pattern); result.append(')'); return result.toString(); } } //PatternFeatureValuesXMLImpl././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/BitsetFeatureValuesXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/B0000644000175000017500000002015611625126542033240 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; /** * * An implementation of the model object 'Bitset Feature Values XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.BitsetFeatureValuesXMLImpl#getBitmask Bitmask}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.BitsetFeatureValuesXMLImpl#isExactMatch Exact Match}
  • *
*

* * @generated */ public class BitsetFeatureValuesXMLImpl extends EObjectImpl implements BitsetFeatureValuesXML { /** * The default value of the '{@link #getBitmask() Bitmask}' attribute. * * * @see #getBitmask() * @generated * @ordered */ protected static final String BITMASK_EDEFAULT = null; /** * The cached value of the '{@link #getBitmask() Bitmask}' attribute. * * * @see #getBitmask() * @generated * @ordered */ protected String bitmask = BITMASK_EDEFAULT; /** * The default value of the '{@link #isExactMatch() Exact Match}' attribute. * * * @see #isExactMatch() * @generated * @ordered */ protected static final boolean EXACT_MATCH_EDEFAULT = false; /** * The cached value of the '{@link #isExactMatch() Exact Match}' attribute. * * * @see #isExactMatch() * @generated * @ordered */ protected boolean exactMatch = EXACT_MATCH_EDEFAULT; /** * This is true if the Exact Match attribute has been set. * * * @generated * @ordered */ protected boolean exactMatchESet; /** * * * @generated */ protected BitsetFeatureValuesXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.BITSET_FEATURE_VALUES_XML; } /** * * * @generated */ public String getBitmask() { return bitmask; } /** * * * @generated */ public void setBitmask(String newBitmask) { String oldBitmask = bitmask; bitmask = newBitmask; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.BITSET_FEATURE_VALUES_XML__BITMASK, oldBitmask, bitmask)); } /** * * * @generated */ public boolean isExactMatch() { return exactMatch; } /** * * * @generated */ public void setExactMatch(boolean newExactMatch) { boolean oldExactMatch = exactMatch; exactMatch = newExactMatch; boolean oldExactMatchESet = exactMatchESet; exactMatchESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.BITSET_FEATURE_VALUES_XML__EXACT_MATCH, oldExactMatch, exactMatch, !oldExactMatchESet)); } /** * * * @generated */ public void unsetExactMatch() { boolean oldExactMatch = exactMatch; boolean oldExactMatchESet = exactMatchESet; exactMatch = EXACT_MATCH_EDEFAULT; exactMatchESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.BITSET_FEATURE_VALUES_XML__EXACT_MATCH, oldExactMatch, EXACT_MATCH_EDEFAULT, oldExactMatchESet)); } /** * * * @generated */ public boolean isSetExactMatch() { return exactMatchESet; } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.BITSET_FEATURE_VALUES_XML__BITMASK: return getBitmask(); case ConfigPackage.BITSET_FEATURE_VALUES_XML__EXACT_MATCH: return isExactMatch() ? Boolean.TRUE : Boolean.FALSE; } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.BITSET_FEATURE_VALUES_XML__BITMASK: setBitmask((String)newValue); return; case ConfigPackage.BITSET_FEATURE_VALUES_XML__EXACT_MATCH: setExactMatch(((Boolean)newValue).booleanValue()); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.BITSET_FEATURE_VALUES_XML__BITMASK: setBitmask(BITMASK_EDEFAULT); return; case ConfigPackage.BITSET_FEATURE_VALUES_XML__EXACT_MATCH: unsetExactMatch(); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.BITSET_FEATURE_VALUES_XML__BITMASK: return BITMASK_EDEFAULT == null ? bitmask != null : !BITMASK_EDEFAULT.equals(bitmask); case ConfigPackage.BITSET_FEATURE_VALUES_XML__EXACT_MATCH: return isSetExactMatch(); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (bitmask: "); result.append(bitmask); result.append(", exactMatch: "); if (exactMatchESet) result.append(exactMatch); else result.append(""); result.append(')'); return result.toString(); } } //BitsetFeatureValuesXMLImpl././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/GroupFeatureMatcherXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/G0000644000175000017500000002105411625126542033243 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import java.util.Collection; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML; import org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; import org.eclipse.emf.ecore.util.EObjectContainmentEList; import org.eclipse.emf.ecore.util.InternalEList; /** * * An implementation of the model object 'Group Feature Matcher XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.GroupFeatureMatcherXMLImpl#getFeatureMatchers Feature Matchers}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.GroupFeatureMatcherXMLImpl#isExclude Exclude}
  • *
*

* * @generated */ public class GroupFeatureMatcherXMLImpl extends EObjectImpl implements GroupFeatureMatcherXML { /** * The cached value of the '{@link #getFeatureMatchers() Feature Matchers}' containment reference list. * * * @see #getFeatureMatchers() * @generated * @ordered */ protected EList featureMatchers; /** * The default value of the '{@link #isExclude() Exclude}' attribute. * * * @see #isExclude() * @generated * @ordered */ protected static final boolean EXCLUDE_EDEFAULT = false; /** * The cached value of the '{@link #isExclude() Exclude}' attribute. * * * @see #isExclude() * @generated * @ordered */ protected boolean exclude = EXCLUDE_EDEFAULT; /** * This is true if the Exclude attribute has been set. * * * @generated * @ordered */ protected boolean excludeESet; /** * * * @generated */ protected GroupFeatureMatcherXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.GROUP_FEATURE_MATCHER_XML; } /** * * * @generated */ public EList getFeatureMatchers() { if (featureMatchers == null) { featureMatchers = new EObjectContainmentEList(SingleFeatureMatcherXML.class, this, ConfigPackage.GROUP_FEATURE_MATCHER_XML__FEATURE_MATCHERS); } return featureMatchers; } /** * * * @generated */ public boolean isExclude() { return exclude; } /** * * * @generated */ public void setExclude(boolean newExclude) { boolean oldExclude = exclude; exclude = newExclude; boolean oldExcludeESet = excludeESet; excludeESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.GROUP_FEATURE_MATCHER_XML__EXCLUDE, oldExclude, exclude, !oldExcludeESet)); } /** * * * @generated */ public void unsetExclude() { boolean oldExclude = exclude; boolean oldExcludeESet = excludeESet; exclude = EXCLUDE_EDEFAULT; excludeESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.GROUP_FEATURE_MATCHER_XML__EXCLUDE, oldExclude, EXCLUDE_EDEFAULT, oldExcludeESet)); } /** * * * @generated */ public boolean isSetExclude() { return excludeESet; } /** * * * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case ConfigPackage.GROUP_FEATURE_MATCHER_XML__FEATURE_MATCHERS: return ((InternalEList)getFeatureMatchers()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.GROUP_FEATURE_MATCHER_XML__FEATURE_MATCHERS: return getFeatureMatchers(); case ConfigPackage.GROUP_FEATURE_MATCHER_XML__EXCLUDE: return isExclude() ? Boolean.TRUE : Boolean.FALSE; } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.GROUP_FEATURE_MATCHER_XML__FEATURE_MATCHERS: getFeatureMatchers().clear(); getFeatureMatchers().addAll((Collection)newValue); return; case ConfigPackage.GROUP_FEATURE_MATCHER_XML__EXCLUDE: setExclude(((Boolean)newValue).booleanValue()); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.GROUP_FEATURE_MATCHER_XML__FEATURE_MATCHERS: getFeatureMatchers().clear(); return; case ConfigPackage.GROUP_FEATURE_MATCHER_XML__EXCLUDE: unsetExclude(); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.GROUP_FEATURE_MATCHER_XML__FEATURE_MATCHERS: return featureMatchers != null && !featureMatchers.isEmpty(); case ConfigPackage.GROUP_FEATURE_MATCHER_XML__EXCLUDE: return isSetExclude(); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (exclude: "); if (excludeESet) result.append(exclude); else result.append(""); result.append(')'); return result.toString(); } } //GroupFeatureMatcherXMLImpl././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/ObjectPathFeatureValuesXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/O0000644000175000017500000001251611625126542033256 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; /** * * An implementation of the model object 'Object Path Feature Values XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.ObjectPathFeatureValuesXMLImpl#getObjectPath Object Path}
  • *
*

* * @generated */ public class ObjectPathFeatureValuesXMLImpl extends EObjectImpl implements ObjectPathFeatureValuesXML { /** * The default value of the '{@link #getObjectPath() Object Path}' attribute. * * * @see #getObjectPath() * @generated * @ordered */ protected static final String OBJECT_PATH_EDEFAULT = null; /** * The cached value of the '{@link #getObjectPath() Object Path}' attribute. * * * @see #getObjectPath() * @generated * @ordered */ protected String objectPath = OBJECT_PATH_EDEFAULT; /** * * * @generated */ protected ObjectPathFeatureValuesXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.OBJECT_PATH_FEATURE_VALUES_XML; } /** * * * @generated */ public String getObjectPath() { return objectPath; } /** * * * @generated */ public void setObjectPath(String newObjectPath) { String oldObjectPath = objectPath; objectPath = newObjectPath; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.OBJECT_PATH_FEATURE_VALUES_XML__OBJECT_PATH, oldObjectPath, objectPath)); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.OBJECT_PATH_FEATURE_VALUES_XML__OBJECT_PATH: return getObjectPath(); } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.OBJECT_PATH_FEATURE_VALUES_XML__OBJECT_PATH: setObjectPath((String)newValue); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.OBJECT_PATH_FEATURE_VALUES_XML__OBJECT_PATH: setObjectPath(OBJECT_PATH_EDEFAULT); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.OBJECT_PATH_FEATURE_VALUES_XML__OBJECT_PATH: return OBJECT_PATH_EDEFAULT == null ? objectPath != null : !OBJECT_PATH_EDEFAULT.equals(objectPath); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (objectPath: "); result.append(objectPath); result.append(')'); return result.toString(); } } //ObjectPathFeatureValuesXMLImpl././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/RangeFeatureValuesXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/R0000644000175000017500000003507311625126542033264 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.RangeFeatureValuesXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; /** * * An implementation of the model object 'Range Feature Values XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.RangeFeatureValuesXMLImpl#getLowerBoundary Lower Boundary}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.RangeFeatureValuesXMLImpl#isLowerBoundaryInclusive Lower Boundary Inclusive}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.RangeFeatureValuesXMLImpl#getUpperBoundary Upper Boundary}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.RangeFeatureValuesXMLImpl#isUpperBoundaryInclusive Upper Boundary Inclusive}
  • *
*

* * @generated */ public class RangeFeatureValuesXMLImpl extends EObjectImpl implements RangeFeatureValuesXML { /** * The default value of the '{@link #getLowerBoundary() Lower Boundary}' attribute. * * * @see #getLowerBoundary() * @generated * @ordered */ protected static final Object LOWER_BOUNDARY_EDEFAULT = null; /** * The cached value of the '{@link #getLowerBoundary() Lower Boundary}' attribute. * * * @see #getLowerBoundary() * @generated * @ordered */ protected Object lowerBoundary = LOWER_BOUNDARY_EDEFAULT; /** * The default value of the '{@link #isLowerBoundaryInclusive() Lower Boundary Inclusive}' attribute. * * * @see #isLowerBoundaryInclusive() * @generated * @ordered */ protected static final boolean LOWER_BOUNDARY_INCLUSIVE_EDEFAULT = false; /** * The cached value of the '{@link #isLowerBoundaryInclusive() Lower Boundary Inclusive}' attribute. * * * @see #isLowerBoundaryInclusive() * @generated * @ordered */ protected boolean lowerBoundaryInclusive = LOWER_BOUNDARY_INCLUSIVE_EDEFAULT; /** * This is true if the Lower Boundary Inclusive attribute has been set. * * * @generated * @ordered */ protected boolean lowerBoundaryInclusiveESet; /** * The default value of the '{@link #getUpperBoundary() Upper Boundary}' attribute. * * * @see #getUpperBoundary() * @generated * @ordered */ protected static final Object UPPER_BOUNDARY_EDEFAULT = null; /** * The cached value of the '{@link #getUpperBoundary() Upper Boundary}' attribute. * * * @see #getUpperBoundary() * @generated * @ordered */ protected Object upperBoundary = UPPER_BOUNDARY_EDEFAULT; /** * The default value of the '{@link #isUpperBoundaryInclusive() Upper Boundary Inclusive}' attribute. * * * @see #isUpperBoundaryInclusive() * @generated * @ordered */ protected static final boolean UPPER_BOUNDARY_INCLUSIVE_EDEFAULT = false; /** * The cached value of the '{@link #isUpperBoundaryInclusive() Upper Boundary Inclusive}' attribute. * * * @see #isUpperBoundaryInclusive() * @generated * @ordered */ protected boolean upperBoundaryInclusive = UPPER_BOUNDARY_INCLUSIVE_EDEFAULT; /** * This is true if the Upper Boundary Inclusive attribute has been set. * * * @generated * @ordered */ protected boolean upperBoundaryInclusiveESet; /** * * * @generated */ protected RangeFeatureValuesXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.RANGE_FEATURE_VALUES_XML; } /** * * * @generated */ public Object getLowerBoundary() { return lowerBoundary; } /** * * * @generated */ public void setLowerBoundary(Object newLowerBoundary) { Object oldLowerBoundary = lowerBoundary; lowerBoundary = newLowerBoundary; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY, oldLowerBoundary, lowerBoundary)); } /** * * * @generated */ public boolean isLowerBoundaryInclusive() { return lowerBoundaryInclusive; } /** * * * @generated */ public void setLowerBoundaryInclusive(boolean newLowerBoundaryInclusive) { boolean oldLowerBoundaryInclusive = lowerBoundaryInclusive; lowerBoundaryInclusive = newLowerBoundaryInclusive; boolean oldLowerBoundaryInclusiveESet = lowerBoundaryInclusiveESet; lowerBoundaryInclusiveESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY_INCLUSIVE, oldLowerBoundaryInclusive, lowerBoundaryInclusive, !oldLowerBoundaryInclusiveESet)); } /** * * * @generated */ public void unsetLowerBoundaryInclusive() { boolean oldLowerBoundaryInclusive = lowerBoundaryInclusive; boolean oldLowerBoundaryInclusiveESet = lowerBoundaryInclusiveESet; lowerBoundaryInclusive = LOWER_BOUNDARY_INCLUSIVE_EDEFAULT; lowerBoundaryInclusiveESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY_INCLUSIVE, oldLowerBoundaryInclusive, LOWER_BOUNDARY_INCLUSIVE_EDEFAULT, oldLowerBoundaryInclusiveESet)); } /** * * * @generated */ public boolean isSetLowerBoundaryInclusive() { return lowerBoundaryInclusiveESet; } /** * * * @generated */ public Object getUpperBoundary() { return upperBoundary; } /** * * * @generated */ public void setUpperBoundary(Object newUpperBoundary) { Object oldUpperBoundary = upperBoundary; upperBoundary = newUpperBoundary; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY, oldUpperBoundary, upperBoundary)); } /** * * * @generated */ public boolean isUpperBoundaryInclusive() { return upperBoundaryInclusive; } /** * * * @generated */ public void setUpperBoundaryInclusive(boolean newUpperBoundaryInclusive) { boolean oldUpperBoundaryInclusive = upperBoundaryInclusive; upperBoundaryInclusive = newUpperBoundaryInclusive; boolean oldUpperBoundaryInclusiveESet = upperBoundaryInclusiveESet; upperBoundaryInclusiveESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY_INCLUSIVE, oldUpperBoundaryInclusive, upperBoundaryInclusive, !oldUpperBoundaryInclusiveESet)); } /** * * * @generated */ public void unsetUpperBoundaryInclusive() { boolean oldUpperBoundaryInclusive = upperBoundaryInclusive; boolean oldUpperBoundaryInclusiveESet = upperBoundaryInclusiveESet; upperBoundaryInclusive = UPPER_BOUNDARY_INCLUSIVE_EDEFAULT; upperBoundaryInclusiveESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY_INCLUSIVE, oldUpperBoundaryInclusive, UPPER_BOUNDARY_INCLUSIVE_EDEFAULT, oldUpperBoundaryInclusiveESet)); } /** * * * @generated */ public boolean isSetUpperBoundaryInclusive() { return upperBoundaryInclusiveESet; } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY: return getLowerBoundary(); case ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY_INCLUSIVE: return isLowerBoundaryInclusive() ? Boolean.TRUE : Boolean.FALSE; case ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY: return getUpperBoundary(); case ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY_INCLUSIVE: return isUpperBoundaryInclusive() ? Boolean.TRUE : Boolean.FALSE; } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY: setLowerBoundary(newValue); return; case ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY_INCLUSIVE: setLowerBoundaryInclusive(((Boolean)newValue).booleanValue()); return; case ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY: setUpperBoundary(newValue); return; case ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY_INCLUSIVE: setUpperBoundaryInclusive(((Boolean)newValue).booleanValue()); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY: setLowerBoundary(LOWER_BOUNDARY_EDEFAULT); return; case ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY_INCLUSIVE: unsetLowerBoundaryInclusive(); return; case ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY: setUpperBoundary(UPPER_BOUNDARY_EDEFAULT); return; case ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY_INCLUSIVE: unsetUpperBoundaryInclusive(); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY: return LOWER_BOUNDARY_EDEFAULT == null ? lowerBoundary != null : !LOWER_BOUNDARY_EDEFAULT.equals(lowerBoundary); case ConfigPackage.RANGE_FEATURE_VALUES_XML__LOWER_BOUNDARY_INCLUSIVE: return isSetLowerBoundaryInclusive(); case ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY: return UPPER_BOUNDARY_EDEFAULT == null ? upperBoundary != null : !UPPER_BOUNDARY_EDEFAULT.equals(upperBoundary); case ConfigPackage.RANGE_FEATURE_VALUES_XML__UPPER_BOUNDARY_INCLUSIVE: return isSetUpperBoundaryInclusive(); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (lowerBoundary: "); result.append(lowerBoundary); result.append(", lowerBoundaryInclusive: "); if (lowerBoundaryInclusiveESet) result.append(lowerBoundaryInclusive); else result.append(""); result.append(", upperBoundary: "); result.append(upperBoundary); result.append(", upperBoundaryInclusive: "); if (upperBoundaryInclusiveESet) result.append(upperBoundaryInclusive); else result.append(""); result.append(')'); return result.toString(); } } //RangeFeatureValuesXMLImpl././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/CFEDescriptorXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/C0000644000175000017500000001737011625126542033245 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import java.util.Collection; import org.apache.uima.tools.cfe.config.CFEDescriptorXML; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.TargetAnnotationXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; import org.eclipse.emf.ecore.util.EObjectContainmentEList; import org.eclipse.emf.ecore.util.InternalEList; /** * * An implementation of the model object 'CFE Descriptor XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.CFEDescriptorXMLImpl#getTargetAnnotations Target Annotations}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.CFEDescriptorXMLImpl#getNullValueImage Null Value Image}
  • *
*

* * @generated */ public class CFEDescriptorXMLImpl extends EObjectImpl implements CFEDescriptorXML { /** * The cached value of the '{@link #getTargetAnnotations() Target Annotations}' containment reference list. * * * @see #getTargetAnnotations() * @generated * @ordered */ protected EList targetAnnotations; /** * The default value of the '{@link #getNullValueImage() Null Value Image}' attribute. * * * @see #getNullValueImage() * @generated * @ordered */ protected static final String NULL_VALUE_IMAGE_EDEFAULT = null; /** * The cached value of the '{@link #getNullValueImage() Null Value Image}' attribute. * * * @see #getNullValueImage() * @generated * @ordered */ protected String nullValueImage = NULL_VALUE_IMAGE_EDEFAULT; /** * * * @generated */ protected CFEDescriptorXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.CFE_DESCRIPTOR_XML; } /** * * * @generated */ public EList getTargetAnnotations() { if (targetAnnotations == null) { targetAnnotations = new EObjectContainmentEList(TargetAnnotationXML.class, this, ConfigPackage.CFE_DESCRIPTOR_XML__TARGET_ANNOTATIONS); } return targetAnnotations; } /** * * * @generated */ public String getNullValueImage() { return nullValueImage; } /** * * * @generated */ public void setNullValueImage(String newNullValueImage) { String oldNullValueImage = nullValueImage; nullValueImage = newNullValueImage; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.CFE_DESCRIPTOR_XML__NULL_VALUE_IMAGE, oldNullValueImage, nullValueImage)); } /** * * * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case ConfigPackage.CFE_DESCRIPTOR_XML__TARGET_ANNOTATIONS: return ((InternalEList)getTargetAnnotations()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.CFE_DESCRIPTOR_XML__TARGET_ANNOTATIONS: return getTargetAnnotations(); case ConfigPackage.CFE_DESCRIPTOR_XML__NULL_VALUE_IMAGE: return getNullValueImage(); } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.CFE_DESCRIPTOR_XML__TARGET_ANNOTATIONS: getTargetAnnotations().clear(); getTargetAnnotations().addAll((Collection)newValue); return; case ConfigPackage.CFE_DESCRIPTOR_XML__NULL_VALUE_IMAGE: setNullValueImage((String)newValue); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.CFE_DESCRIPTOR_XML__TARGET_ANNOTATIONS: getTargetAnnotations().clear(); return; case ConfigPackage.CFE_DESCRIPTOR_XML__NULL_VALUE_IMAGE: setNullValueImage(NULL_VALUE_IMAGE_EDEFAULT); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.CFE_DESCRIPTOR_XML__TARGET_ANNOTATIONS: return targetAnnotations != null && !targetAnnotations.isEmpty(); case ConfigPackage.CFE_DESCRIPTOR_XML__NULL_VALUE_IMAGE: return NULL_VALUE_IMAGE_EDEFAULT == null ? nullValueImage != null : !NULL_VALUE_IMAGE_EDEFAULT.equals(nullValueImage); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (nullValueImage: "); result.append(nullValueImage); result.append(')'); return result.toString(); } } //CFEDescriptorXMLImpl././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/TargetAnnotationXMLImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/T0000644000175000017500000003300611625126542033260 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import java.util.Collection; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML; import org.apache.uima.tools.cfe.config.PartialObjectMatcherXML; import org.apache.uima.tools.cfe.config.TargetAnnotationXML; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.EObjectImpl; import org.eclipse.emf.ecore.util.EObjectContainmentEList; import org.eclipse.emf.ecore.util.InternalEList; /** * * An implementation of the model object 'Target Annotation XML'. * *

* The following features are implemented: *

    *
  • {@link org.apache.uima.tools.cfe.config.impl.TargetAnnotationXMLImpl#getTargetAnnotationMatcher Target Annotation Matcher}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.TargetAnnotationXMLImpl#getFeatureAnnotationMatchers Feature Annotation Matchers}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.TargetAnnotationXMLImpl#getClassName Class Name}
  • *
  • {@link org.apache.uima.tools.cfe.config.impl.TargetAnnotationXMLImpl#getEnclosingAnnotation Enclosing Annotation}
  • *
*

* * @generated */ public class TargetAnnotationXMLImpl extends EObjectImpl implements TargetAnnotationXML { /** * The cached value of the '{@link #getTargetAnnotationMatcher() Target Annotation Matcher}' containment reference. * * * @see #getTargetAnnotationMatcher() * @generated * @ordered */ protected PartialObjectMatcherXML targetAnnotationMatcher; /** * The cached value of the '{@link #getFeatureAnnotationMatchers() Feature Annotation Matchers}' containment reference list. * * * @see #getFeatureAnnotationMatchers() * @generated * @ordered */ protected EList featureAnnotationMatchers; /** * The default value of the '{@link #getClassName() Class Name}' attribute. * * * @see #getClassName() * @generated * @ordered */ protected static final String CLASS_NAME_EDEFAULT = null; /** * The cached value of the '{@link #getClassName() Class Name}' attribute. * * * @see #getClassName() * @generated * @ordered */ protected String className = CLASS_NAME_EDEFAULT; /** * The default value of the '{@link #getEnclosingAnnotation() Enclosing Annotation}' attribute. * * * @see #getEnclosingAnnotation() * @generated * @ordered */ protected static final String ENCLOSING_ANNOTATION_EDEFAULT = null; /** * The cached value of the '{@link #getEnclosingAnnotation() Enclosing Annotation}' attribute. * * * @see #getEnclosingAnnotation() * @generated * @ordered */ protected String enclosingAnnotation = ENCLOSING_ANNOTATION_EDEFAULT; /** * * * @generated */ protected TargetAnnotationXMLImpl() { super(); } /** * * * @generated */ @Override protected EClass eStaticClass() { return ConfigPackage.Literals.TARGET_ANNOTATION_XML; } /** * * * @generated */ public PartialObjectMatcherXML getTargetAnnotationMatcher() { return targetAnnotationMatcher; } /** * * * @generated */ public NotificationChain basicSetTargetAnnotationMatcher(PartialObjectMatcherXML newTargetAnnotationMatcher, NotificationChain msgs) { PartialObjectMatcherXML oldTargetAnnotationMatcher = targetAnnotationMatcher; targetAnnotationMatcher = newTargetAnnotationMatcher; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ConfigPackage.TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER, oldTargetAnnotationMatcher, newTargetAnnotationMatcher); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * * * @generated */ public void setTargetAnnotationMatcher(PartialObjectMatcherXML newTargetAnnotationMatcher) { if (newTargetAnnotationMatcher != targetAnnotationMatcher) { NotificationChain msgs = null; if (targetAnnotationMatcher != null) msgs = ((InternalEObject)targetAnnotationMatcher).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER, null, msgs); if (newTargetAnnotationMatcher != null) msgs = ((InternalEObject)newTargetAnnotationMatcher).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ConfigPackage.TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER, null, msgs); msgs = basicSetTargetAnnotationMatcher(newTargetAnnotationMatcher, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER, newTargetAnnotationMatcher, newTargetAnnotationMatcher)); } /** * * * @generated */ public EList getFeatureAnnotationMatchers() { if (featureAnnotationMatchers == null) { featureAnnotationMatchers = new EObjectContainmentEList(FeatureObjectMatcherXML.class, this, ConfigPackage.TARGET_ANNOTATION_XML__FEATURE_ANNOTATION_MATCHERS); } return featureAnnotationMatchers; } /** * * * @generated */ public String getClassName() { return className; } /** * * * @generated */ public void setClassName(String newClassName) { String oldClassName = className; className = newClassName; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TARGET_ANNOTATION_XML__CLASS_NAME, oldClassName, className)); } /** * * * @generated */ public String getEnclosingAnnotation() { return enclosingAnnotation; } /** * * * @generated */ public void setEnclosingAnnotation(String newEnclosingAnnotation) { String oldEnclosingAnnotation = enclosingAnnotation; enclosingAnnotation = newEnclosingAnnotation; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TARGET_ANNOTATION_XML__ENCLOSING_ANNOTATION, oldEnclosingAnnotation, enclosingAnnotation)); } /** * * * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case ConfigPackage.TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER: return basicSetTargetAnnotationMatcher(null, msgs); case ConfigPackage.TARGET_ANNOTATION_XML__FEATURE_ANNOTATION_MATCHERS: return ((InternalEList)getFeatureAnnotationMatchers()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ConfigPackage.TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER: return getTargetAnnotationMatcher(); case ConfigPackage.TARGET_ANNOTATION_XML__FEATURE_ANNOTATION_MATCHERS: return getFeatureAnnotationMatchers(); case ConfigPackage.TARGET_ANNOTATION_XML__CLASS_NAME: return getClassName(); case ConfigPackage.TARGET_ANNOTATION_XML__ENCLOSING_ANNOTATION: return getEnclosingAnnotation(); } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ConfigPackage.TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER: setTargetAnnotationMatcher((PartialObjectMatcherXML)newValue); return; case ConfigPackage.TARGET_ANNOTATION_XML__FEATURE_ANNOTATION_MATCHERS: getFeatureAnnotationMatchers().clear(); getFeatureAnnotationMatchers().addAll((Collection)newValue); return; case ConfigPackage.TARGET_ANNOTATION_XML__CLASS_NAME: setClassName((String)newValue); return; case ConfigPackage.TARGET_ANNOTATION_XML__ENCLOSING_ANNOTATION: setEnclosingAnnotation((String)newValue); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ConfigPackage.TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER: setTargetAnnotationMatcher((PartialObjectMatcherXML)null); return; case ConfigPackage.TARGET_ANNOTATION_XML__FEATURE_ANNOTATION_MATCHERS: getFeatureAnnotationMatchers().clear(); return; case ConfigPackage.TARGET_ANNOTATION_XML__CLASS_NAME: setClassName(CLASS_NAME_EDEFAULT); return; case ConfigPackage.TARGET_ANNOTATION_XML__ENCLOSING_ANNOTATION: setEnclosingAnnotation(ENCLOSING_ANNOTATION_EDEFAULT); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ConfigPackage.TARGET_ANNOTATION_XML__TARGET_ANNOTATION_MATCHER: return targetAnnotationMatcher != null; case ConfigPackage.TARGET_ANNOTATION_XML__FEATURE_ANNOTATION_MATCHERS: return featureAnnotationMatchers != null && !featureAnnotationMatchers.isEmpty(); case ConfigPackage.TARGET_ANNOTATION_XML__CLASS_NAME: return CLASS_NAME_EDEFAULT == null ? className != null : !CLASS_NAME_EDEFAULT.equals(className); case ConfigPackage.TARGET_ANNOTATION_XML__ENCLOSING_ANNOTATION: return ENCLOSING_ANNOTATION_EDEFAULT == null ? enclosingAnnotation != null : !ENCLOSING_ANNOTATION_EDEFAULT.equals(enclosingAnnotation); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (className: "); result.append(className); result.append(", enclosingAnnotation: "); result.append(enclosingAnnotation); result.append(')'); return result.toString(); } } //TargetAnnotationXMLImpl././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/ConfigFactoryImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/impl/C0000644000175000017500000002072711625126542033245 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.impl; import org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML; import org.apache.uima.tools.cfe.config.CFEDescriptorXML; import org.apache.uima.tools.cfe.config.ConfigFactory; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.DocumentRoot; import org.apache.uima.tools.cfe.config.EnumFeatureValuesXML; import org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML; import org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML; import org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML; import org.apache.uima.tools.cfe.config.PartialObjectMatcherXML; import org.apache.uima.tools.cfe.config.PatternFeatureValuesXML; import org.apache.uima.tools.cfe.config.RangeFeatureValuesXML; import org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML; import org.apache.uima.tools.cfe.config.TargetAnnotationXML; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.impl.EFactoryImpl; import org.eclipse.emf.ecore.plugin.EcorePlugin; /** * * An implementation of the model Factory. * * @generated */ public class ConfigFactoryImpl extends EFactoryImpl implements ConfigFactory { /** * Creates the default factory implementation. * * * @generated */ public static ConfigFactory init() { try { ConfigFactory theConfigFactory = (ConfigFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.apache.org/uima/tools/cfe/config"); if (theConfigFactory != null) { return theConfigFactory; } } catch (Exception exception) { EcorePlugin.INSTANCE.log(exception); } return new ConfigFactoryImpl(); } /** * Creates an instance of the factory. * * * @generated */ public ConfigFactoryImpl() { super(); } /** * * * @generated */ @Override public EObject create(EClass eClass) { switch (eClass.getClassifierID()) { case ConfigPackage.BITSET_FEATURE_VALUES_XML: return createBitsetFeatureValuesXML(); case ConfigPackage.CFE_DESCRIPTOR_XML: return createCFEDescriptorXML(); case ConfigPackage.DOCUMENT_ROOT: return createDocumentRoot(); case ConfigPackage.ENUM_FEATURE_VALUES_XML: return createEnumFeatureValuesXML(); case ConfigPackage.FEATURE_OBJECT_MATCHER_XML: return createFeatureObjectMatcherXML(); case ConfigPackage.GROUP_FEATURE_MATCHER_XML: return createGroupFeatureMatcherXML(); case ConfigPackage.OBJECT_PATH_FEATURE_VALUES_XML: return createObjectPathFeatureValuesXML(); case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML: return createPartialObjectMatcherXML(); case ConfigPackage.PATTERN_FEATURE_VALUES_XML: return createPatternFeatureValuesXML(); case ConfigPackage.RANGE_FEATURE_VALUES_XML: return createRangeFeatureValuesXML(); case ConfigPackage.SINGLE_FEATURE_MATCHER_XML: return createSingleFeatureMatcherXML(); case ConfigPackage.TARGET_ANNOTATION_XML: return createTargetAnnotationXML(); default: throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); } } /** * * * @generated */ public BitsetFeatureValuesXML createBitsetFeatureValuesXML() { BitsetFeatureValuesXMLImpl bitsetFeatureValuesXML = new BitsetFeatureValuesXMLImpl(); return bitsetFeatureValuesXML; } /** * * * @generated */ public CFEDescriptorXML createCFEDescriptorXML() { CFEDescriptorXMLImpl cfeDescriptorXML = new CFEDescriptorXMLImpl(); return cfeDescriptorXML; } /** * * * @generated */ public DocumentRoot createDocumentRoot() { DocumentRootImpl documentRoot = new DocumentRootImpl(); return documentRoot; } /** * * * @generated */ public EnumFeatureValuesXML createEnumFeatureValuesXML() { EnumFeatureValuesXMLImpl enumFeatureValuesXML = new EnumFeatureValuesXMLImpl(); return enumFeatureValuesXML; } /** * * * @generated */ public FeatureObjectMatcherXML createFeatureObjectMatcherXML() { FeatureObjectMatcherXMLImpl featureObjectMatcherXML = new FeatureObjectMatcherXMLImpl(); return featureObjectMatcherXML; } /** * * * @generated */ public GroupFeatureMatcherXML createGroupFeatureMatcherXML() { GroupFeatureMatcherXMLImpl groupFeatureMatcherXML = new GroupFeatureMatcherXMLImpl(); return groupFeatureMatcherXML; } /** * * * @generated */ public ObjectPathFeatureValuesXML createObjectPathFeatureValuesXML() { ObjectPathFeatureValuesXMLImpl objectPathFeatureValuesXML = new ObjectPathFeatureValuesXMLImpl(); return objectPathFeatureValuesXML; } /** * * * @generated */ public PartialObjectMatcherXML createPartialObjectMatcherXML() { PartialObjectMatcherXMLImpl partialObjectMatcherXML = new PartialObjectMatcherXMLImpl(); return partialObjectMatcherXML; } /** * * * @generated */ public PatternFeatureValuesXML createPatternFeatureValuesXML() { PatternFeatureValuesXMLImpl patternFeatureValuesXML = new PatternFeatureValuesXMLImpl(); return patternFeatureValuesXML; } /** * * * @generated */ public RangeFeatureValuesXML createRangeFeatureValuesXML() { RangeFeatureValuesXMLImpl rangeFeatureValuesXML = new RangeFeatureValuesXMLImpl(); return rangeFeatureValuesXML; } /** * * * @generated */ public SingleFeatureMatcherXML createSingleFeatureMatcherXML() { SingleFeatureMatcherXMLImpl singleFeatureMatcherXML = new SingleFeatureMatcherXMLImpl(); return singleFeatureMatcherXML; } /** * * * @generated */ public TargetAnnotationXML createTargetAnnotationXML() { TargetAnnotationXMLImpl targetAnnotationXML = new TargetAnnotationXMLImpl(); return targetAnnotationXML; } /** * * * @generated */ public ConfigPackage getConfigPackage() { return (ConfigPackage)getEPackage(); } /** * * * @deprecated * @generated */ @Deprecated public static ConfigPackage getPackage() { return ConfigPackage.eINSTANCE; } } //ConfigFactoryImpl uima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/0000755000175000017500000000000011625126542033144 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/ConfigSwitch.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/C0000644000175000017500000004164411625126542033262 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.util; import java.util.List; import org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML; import org.apache.uima.tools.cfe.config.CFEDescriptorXML; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.DocumentRoot; import org.apache.uima.tools.cfe.config.EnumFeatureValuesXML; import org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML; import org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML; import org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML; import org.apache.uima.tools.cfe.config.PartialObjectMatcherXML; import org.apache.uima.tools.cfe.config.PatternFeatureValuesXML; import org.apache.uima.tools.cfe.config.RangeFeatureValuesXML; import org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML; import org.apache.uima.tools.cfe.config.TargetAnnotationXML; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; /** * * The Switch for the model's inheritance hierarchy. * It supports the call {@link #doSwitch(EObject) doSwitch(object)} * to invoke the caseXXX method for each class of the model, * starting with the actual class of the object * and proceeding up the inheritance hierarchy * until a non-null result is returned, * which is the result of the switch. * * @see org.apache.uima.tools.cfe.config.ConfigPackage * @generated */ public class ConfigSwitch { /** * The cached model package * * * @generated */ protected static ConfigPackage modelPackage; /** * Creates an instance of the switch. * * * @generated */ public ConfigSwitch() { if (modelPackage == null) { modelPackage = ConfigPackage.eINSTANCE; } } /** * Calls caseXXX for each class of the model until one returns a non null result; it yields that result. * * * @return the first non-null result returned by a caseXXX call. * @generated */ public T doSwitch(EObject theEObject) { return doSwitch(theEObject.eClass(), theEObject); } /** * Calls caseXXX for each class of the model until one returns a non null result; it yields that result. * * * @return the first non-null result returned by a caseXXX call. * @generated */ protected T doSwitch(EClass theEClass, EObject theEObject) { if (theEClass.eContainer() == modelPackage) { return doSwitch(theEClass.getClassifierID(), theEObject); } else { List eSuperTypes = theEClass.getESuperTypes(); return eSuperTypes.isEmpty() ? defaultCase(theEObject) : doSwitch(eSuperTypes.get(0), theEObject); } } /** * Calls caseXXX for each class of the model until one returns a non null result; it yields that result. * * * @return the first non-null result returned by a caseXXX call. * @generated */ protected T doSwitch(int classifierID, EObject theEObject) { switch (classifierID) { case ConfigPackage.BITSET_FEATURE_VALUES_XML: { BitsetFeatureValuesXML bitsetFeatureValuesXML = (BitsetFeatureValuesXML)theEObject; T result = caseBitsetFeatureValuesXML(bitsetFeatureValuesXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.CFE_DESCRIPTOR_XML: { CFEDescriptorXML cfeDescriptorXML = (CFEDescriptorXML)theEObject; T result = caseCFEDescriptorXML(cfeDescriptorXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.DOCUMENT_ROOT: { DocumentRoot documentRoot = (DocumentRoot)theEObject; T result = caseDocumentRoot(documentRoot); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.ENUM_FEATURE_VALUES_XML: { EnumFeatureValuesXML enumFeatureValuesXML = (EnumFeatureValuesXML)theEObject; T result = caseEnumFeatureValuesXML(enumFeatureValuesXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.FEATURE_OBJECT_MATCHER_XML: { FeatureObjectMatcherXML featureObjectMatcherXML = (FeatureObjectMatcherXML)theEObject; T result = caseFeatureObjectMatcherXML(featureObjectMatcherXML); if (result == null) result = casePartialObjectMatcherXML(featureObjectMatcherXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.GROUP_FEATURE_MATCHER_XML: { GroupFeatureMatcherXML groupFeatureMatcherXML = (GroupFeatureMatcherXML)theEObject; T result = caseGroupFeatureMatcherXML(groupFeatureMatcherXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.OBJECT_PATH_FEATURE_VALUES_XML: { ObjectPathFeatureValuesXML objectPathFeatureValuesXML = (ObjectPathFeatureValuesXML)theEObject; T result = caseObjectPathFeatureValuesXML(objectPathFeatureValuesXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.PARTIAL_OBJECT_MATCHER_XML: { PartialObjectMatcherXML partialObjectMatcherXML = (PartialObjectMatcherXML)theEObject; T result = casePartialObjectMatcherXML(partialObjectMatcherXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.PATTERN_FEATURE_VALUES_XML: { PatternFeatureValuesXML patternFeatureValuesXML = (PatternFeatureValuesXML)theEObject; T result = casePatternFeatureValuesXML(patternFeatureValuesXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.RANGE_FEATURE_VALUES_XML: { RangeFeatureValuesXML rangeFeatureValuesXML = (RangeFeatureValuesXML)theEObject; T result = caseRangeFeatureValuesXML(rangeFeatureValuesXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.SINGLE_FEATURE_MATCHER_XML: { SingleFeatureMatcherXML singleFeatureMatcherXML = (SingleFeatureMatcherXML)theEObject; T result = caseSingleFeatureMatcherXML(singleFeatureMatcherXML); if (result == null) result = defaultCase(theEObject); return result; } case ConfigPackage.TARGET_ANNOTATION_XML: { TargetAnnotationXML targetAnnotationXML = (TargetAnnotationXML)theEObject; T result = caseTargetAnnotationXML(targetAnnotationXML); if (result == null) result = defaultCase(theEObject); return result; } default: return defaultCase(theEObject); } } /** * Returns the result of interpreting the object as an instance of 'Bitset Feature Values XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Bitset Feature Values XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseBitsetFeatureValuesXML(BitsetFeatureValuesXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'CFE Descriptor XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'CFE Descriptor XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseCFEDescriptorXML(CFEDescriptorXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Document Root'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Document Root'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseDocumentRoot(DocumentRoot object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Enum Feature Values XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Enum Feature Values XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseEnumFeatureValuesXML(EnumFeatureValuesXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Feature Object Matcher XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Feature Object Matcher XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseFeatureObjectMatcherXML(FeatureObjectMatcherXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Group Feature Matcher XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Group Feature Matcher XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseGroupFeatureMatcherXML(GroupFeatureMatcherXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Object Path Feature Values XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Object Path Feature Values XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseObjectPathFeatureValuesXML(ObjectPathFeatureValuesXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Partial Object Matcher XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Partial Object Matcher XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T casePartialObjectMatcherXML(PartialObjectMatcherXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Pattern Feature Values XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Pattern Feature Values XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T casePatternFeatureValuesXML(PatternFeatureValuesXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Range Feature Values XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Range Feature Values XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseRangeFeatureValuesXML(RangeFeatureValuesXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Single Feature Matcher XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Single Feature Matcher XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseSingleFeatureMatcherXML(SingleFeatureMatcherXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'Target Annotation XML'. * * This implementation returns null; * returning a non-null result will terminate the switch. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'Target Annotation XML'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated */ public T caseTargetAnnotationXML(TargetAnnotationXML object) { return null; } /** * Returns the result of interpreting the object as an instance of 'EObject'. * * This implementation returns null; * returning a non-null result will terminate the switch, but this is the last case anyway. * * @param object the target of the switch. * @return the result of interpreting the object as an instance of 'EObject'. * @see #doSwitch(org.eclipse.emf.ecore.EObject) * @generated */ public T defaultCase(EObject object) { return null; } } //ConfigSwitch ././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/ConfigResourceUtil.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/C0000644000175000017500000001227311625126542033256 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.util; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.uima.tools.cfe.config.ConfigFactory; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.DocumentRoot; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; /** * The utility class for loading and storing SDO instances as XML files. * @generated */ public class ConfigResourceUtil { /** * The single instance of this class. * @generated */ private static ConfigResourceUtil instance; /** * Return the single instance of this class. * @generated */ public static ConfigResourceUtil getInstance() { if (instance == null) { instance = new ConfigResourceUtil(); } return instance; } /** * The default constructor. * @generated */ public ConfigResourceUtil() { initialize(); } /** * @generated */ private void initialize() { Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xml", new ConfigResourceFactoryImpl()); @SuppressWarnings("unused") ConfigPackage pkg = ConfigPackage.eINSTANCE; @SuppressWarnings("unused") ConfigFactory factory = ConfigFactory.eINSTANCE; } /** * Load an existing XML file. * @param filename the absolute path name of the XML file to be loaded. * @exception IOException failed loading from an XML file. * @return DocumentRoot * @generated */ public DocumentRoot load(String filename) throws IOException { ConfigResourceImpl resource = (ConfigResourceImpl)(new ConfigResourceFactoryImpl()).createResource(URI.createURI(filename)); resource.load(null); DocumentRoot documentRoot = (DocumentRoot)resource.getContents().get(0); return documentRoot; } /** * Load an existing XML file. * @param istream the InputStream to load the XML content from. * @exception IOException failed loading from an XML file. * @return DocumentRoot * @generated */ public DocumentRoot load(InputStream istream) throws IOException { ConfigResourceImpl resource = (ConfigResourceImpl)(new ConfigResourceFactoryImpl()).createResource(URI.createURI("*.xml")); resource.load(istream,null); DocumentRoot documentRoot = (DocumentRoot)resource.getContents().get(0); return documentRoot; } /** * Save as an XML file. * @param documentRoot the document root of the SDO instances. * @param filename the absolute path name of the XML file to be created. * @exception IOException failed storing to an XML file. * @generated */ public void save(DocumentRoot documentRoot, String filename) throws IOException { ConfigResourceImpl resource = getConfigResourceImpl(documentRoot); resource.setURI(URI.createURI(filename)); if (!resource.getContents().contains(documentRoot)) { resource.getContents().add((EObject)documentRoot); } resource.setEncoding("UTF-8"); resource.save(null); } /** * Save as an XML output stream. * @param documentRoot the document root of the SDO instances. * @param ostream the OutputStream where the XML content is to be written. * @exception IOException failed storing to an XML file. * @generated */ public void save(DocumentRoot documentRoot, OutputStream ostream) throws IOException { ConfigResourceImpl resource = getConfigResourceImpl(documentRoot); if (!resource.getContents().contains(documentRoot)) { resource.getContents().add((EObject)documentRoot); } resource.setEncoding("UTF-8"); resource.save(ostream,null); } /** * Return a resource associated with documentRoot. * @param documentRoot the document root of the SDO instances. * @return ConfigResourceImpl * @generated */ private ConfigResourceImpl getConfigResourceImpl(DocumentRoot documentRoot) { ConfigResourceImpl resource = (ConfigResourceImpl)((EObject)documentRoot).eResource(); if (resource == null) resource = (ConfigResourceImpl)(new ConfigResourceFactoryImpl()).createResource(URI.createURI("*.xml")); return resource; } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/ConfigAdapterFactory.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/C0000644000175000017500000003372611625126542033264 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.util; import org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML; import org.apache.uima.tools.cfe.config.CFEDescriptorXML; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.apache.uima.tools.cfe.config.DocumentRoot; import org.apache.uima.tools.cfe.config.EnumFeatureValuesXML; import org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML; import org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML; import org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML; import org.apache.uima.tools.cfe.config.PartialObjectMatcherXML; import org.apache.uima.tools.cfe.config.PatternFeatureValuesXML; import org.apache.uima.tools.cfe.config.RangeFeatureValuesXML; import org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML; import org.apache.uima.tools.cfe.config.TargetAnnotationXML; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; import org.eclipse.emf.ecore.EObject; /** * * The Adapter Factory for the model. * It provides an adapter createXXX method for each class of the model. * * @see org.apache.uima.tools.cfe.config.ConfigPackage * @generated */ public class ConfigAdapterFactory extends AdapterFactoryImpl { /** * The cached model package. * * * @generated */ protected static ConfigPackage modelPackage; /** * Creates an instance of the adapter factory. * * * @generated */ public ConfigAdapterFactory() { if (modelPackage == null) { modelPackage = ConfigPackage.eINSTANCE; } } /** * Returns whether this factory is applicable for the type of the object. * * This implementation returns true if the object is either the model's package or is an instance object of the model. * * @return whether this factory is applicable for the type of the object. * @generated */ @Override public boolean isFactoryForType(Object object) { if (object == modelPackage) { return true; } if (object instanceof EObject) { return ((EObject)object).eClass().getEPackage() == modelPackage; } return false; } /** * The switch the delegates to the createXXX methods. * * * @generated */ protected ConfigSwitch modelSwitch = new ConfigSwitch() { @Override public Adapter caseBitsetFeatureValuesXML(BitsetFeatureValuesXML object) { return createBitsetFeatureValuesXMLAdapter(); } @Override public Adapter caseCFEDescriptorXML(CFEDescriptorXML object) { return createCFEDescriptorXMLAdapter(); } @Override public Adapter caseDocumentRoot(DocumentRoot object) { return createDocumentRootAdapter(); } @Override public Adapter caseEnumFeatureValuesXML(EnumFeatureValuesXML object) { return createEnumFeatureValuesXMLAdapter(); } @Override public Adapter caseFeatureObjectMatcherXML(FeatureObjectMatcherXML object) { return createFeatureObjectMatcherXMLAdapter(); } @Override public Adapter caseGroupFeatureMatcherXML(GroupFeatureMatcherXML object) { return createGroupFeatureMatcherXMLAdapter(); } @Override public Adapter caseObjectPathFeatureValuesXML(ObjectPathFeatureValuesXML object) { return createObjectPathFeatureValuesXMLAdapter(); } @Override public Adapter casePartialObjectMatcherXML(PartialObjectMatcherXML object) { return createPartialObjectMatcherXMLAdapter(); } @Override public Adapter casePatternFeatureValuesXML(PatternFeatureValuesXML object) { return createPatternFeatureValuesXMLAdapter(); } @Override public Adapter caseRangeFeatureValuesXML(RangeFeatureValuesXML object) { return createRangeFeatureValuesXMLAdapter(); } @Override public Adapter caseSingleFeatureMatcherXML(SingleFeatureMatcherXML object) { return createSingleFeatureMatcherXMLAdapter(); } @Override public Adapter caseTargetAnnotationXML(TargetAnnotationXML object) { return createTargetAnnotationXMLAdapter(); } @Override public Adapter defaultCase(EObject object) { return createEObjectAdapter(); } }; /** * Creates an adapter for the target. * * * @param target the object to adapt. * @return the adapter for the target. * @generated */ @Override public Adapter createAdapter(Notifier target) { return modelSwitch.doSwitch((EObject)target); } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML Bitset Feature Values XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML * @generated */ public Adapter createBitsetFeatureValuesXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.CFEDescriptorXML CFE Descriptor XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.CFEDescriptorXML * @generated */ public Adapter createCFEDescriptorXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.DocumentRoot Document Root}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.DocumentRoot * @generated */ public Adapter createDocumentRootAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.EnumFeatureValuesXML Enum Feature Values XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.EnumFeatureValuesXML * @generated */ public Adapter createEnumFeatureValuesXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML Feature Object Matcher XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML * @generated */ public Adapter createFeatureObjectMatcherXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML Group Feature Matcher XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML * @generated */ public Adapter createGroupFeatureMatcherXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML Object Path Feature Values XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML * @generated */ public Adapter createObjectPathFeatureValuesXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.PartialObjectMatcherXML Partial Object Matcher XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.PartialObjectMatcherXML * @generated */ public Adapter createPartialObjectMatcherXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.PatternFeatureValuesXML Pattern Feature Values XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.PatternFeatureValuesXML * @generated */ public Adapter createPatternFeatureValuesXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.RangeFeatureValuesXML Range Feature Values XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.RangeFeatureValuesXML * @generated */ public Adapter createRangeFeatureValuesXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML Single Feature Matcher XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML * @generated */ public Adapter createSingleFeatureMatcherXMLAdapter() { return null; } /** * Creates a new adapter for an object of class '{@link org.apache.uima.tools.cfe.config.TargetAnnotationXML Target Annotation XML}'. * * This default implementation returns null so that we can easily ignore cases; * it's useful to ignore a case when inheritance will catch all the cases anyway. * * @return the new adapter. * @see org.apache.uima.tools.cfe.config.TargetAnnotationXML * @generated */ public Adapter createTargetAnnotationXMLAdapter() { return null; } /** * Creates a new adapter for the default case. * * This default implementation returns null. * * @return the new adapter. * @generated */ public Adapter createEObjectAdapter() { return null; } } //ConfigAdapterFactory ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/ConfigResourceFactoryImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/C0000644000175000017500000000500711625126542033253 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.util; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl; import org.eclipse.emf.ecore.xmi.XMLResource; /** * * The Resource Factory associated with the package. * * @see org.apache.uima.tools.cfe.config.util.ConfigResourceImpl * @generated */ public class ConfigResourceFactoryImpl extends ResourceFactoryImpl { /** * Creates an instance of the resource factory. * * * @generated */ public ConfigResourceFactoryImpl() { super(); } /** * Creates an instance of the resource. * * * @generated */ @Override public Resource createResource(URI uri) { XMLResource result = new ConfigResourceImpl(uri); result.getDefaultSaveOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE); result.getDefaultLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE); result.getDefaultSaveOptions().put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE); result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE); result.getDefaultSaveOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE); result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_LEXICAL_HANDLER, Boolean.TRUE); return result; } } //ConfigResourceFactoryImpl ././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/ConfigResourceImpl.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/C0000644000175000017500000000306211625126542033252 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.util; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl; /** * * The Resource associated with the package. * * @see org.apache.uima.tools.cfe.config.util.ConfigResourceFactoryImpl * @generated */ public class ConfigResourceImpl extends XMLResourceImpl { /** * Creates an instance of the resource. * * * @param uri the URI of the new resource. * @generated */ public ConfigResourceImpl(URI uri) { super(uri); } } //ConfigResourceImpl ././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/ConfigXMLProcessor.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/util/C0000644000175000017500000000431311625126542033252 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config.util; import java.util.Map; import org.apache.uima.tools.cfe.config.ConfigPackage; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.xmi.util.XMLProcessor; /** * This class contains helper methods to serialize and deserialize XML documents * * * @generated */ public class ConfigXMLProcessor extends XMLProcessor { /** * Public constructor to instantiate the helper. * * * @generated */ public ConfigXMLProcessor() { super((EPackage.Registry.INSTANCE)); ConfigPackage.eINSTANCE.eClass(); } /** * Register for "*" and "xml" file extensions the ConfigResourceFactoryImpl factory. * * * @generated */ @Override protected Map getRegistrations() { if (registrations == null) { super.getRegistrations(); registrations.put(XML_EXTENSION, new ConfigResourceFactoryImpl()); registrations.put(STAR_EXTENSION, new ConfigResourceFactoryImpl()); } return registrations; } } //ConfigXMLProcessor ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/EnumFeatureValuesXML.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/config/EnumFe0000644000175000017500000001077311625126542033301 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * * * * $Id$ */ package org.apache.uima.tools.cfe.config; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; /** * * A representation of the model object 'Enum Feature Values XML'. * * *

* The following features are supported: *

    *
  • {@link org.apache.uima.tools.cfe.config.EnumFeatureValuesXML#getValues Values}
  • *
  • {@link org.apache.uima.tools.cfe.config.EnumFeatureValuesXML#isCaseSensitive Case Sensitive}
  • *
*

* * @see org.apache.uima.tools.cfe.config.ConfigPackage#getEnumFeatureValuesXML() * @model extendedMetaData="name='EnumFeatureValuesXML' kind='elementOnly'" * @generated */ public interface EnumFeatureValuesXML extends EObject { /** * Returns the value of the 'Values' attribute list. * The list contents are of type {@link java.lang.String}. * *

* If the meaning of the 'Values' attribute list isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Values' attribute list. * @see org.apache.uima.tools.cfe.config.ConfigPackage#getEnumFeatureValuesXML_Values() * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" * extendedMetaData="kind='element' name='values' namespace='##targetNamespace'" * @generated */ EList getValues(); /** * Returns the value of the 'Case Sensitive' attribute. * *

* If the meaning of the 'Case Sensitive' attribute isn't clear, * there really should be more of a description here... *

* * @return the value of the 'Case Sensitive' attribute. * @see #isSetCaseSensitive() * @see #unsetCaseSensitive() * @see #setCaseSensitive(boolean) * @see org.apache.uima.tools.cfe.config.ConfigPackage#getEnumFeatureValuesXML_CaseSensitive() * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * extendedMetaData="kind='attribute' name='caseSensitive'" * @generated */ boolean isCaseSensitive(); /** * Sets the value of the '{@link org.apache.uima.tools.cfe.config.EnumFeatureValuesXML#isCaseSensitive Case Sensitive}' attribute. * * * @param value the new value of the 'Case Sensitive' attribute. * @see #isSetCaseSensitive() * @see #unsetCaseSensitive() * @see #isCaseSensitive() * @generated */ void setCaseSensitive(boolean value); /** * Unsets the value of the '{@link org.apache.uima.tools.cfe.config.EnumFeatureValuesXML#isCaseSensitive Case Sensitive}' attribute. * * * @see #isSetCaseSensitive() * @see #isCaseSensitive() * @see #setCaseSensitive(boolean) * @generated */ void unsetCaseSensitive(); /** * Returns whether the value of the '{@link org.apache.uima.tools.cfe.config.EnumFeatureValuesXML#isCaseSensitive Case Sensitive}' attribute is set. * * * @return whether the value of the 'Case Sensitive' attribute is set. * @see #unsetCaseSensitive() * @see #isCaseSensitive() * @see #setCaseSensitive(boolean) * @generated */ boolean isSetCaseSensitive(); } // EnumFeatureValuesXML././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/PrimitiveFeatureTransformer.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/PrimitiveFeat0000644000175000017500000000373511625126544033427 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; public class PrimitiveFeatureTransformer implements FeatureValueConverter, FeatureValueNormalizer { final boolean m_case_sensitive; static public String nullValueImage = "null"; public PrimitiveFeatureTransformer (boolean case_sensitive) { m_case_sensitive = case_sensitive; } static public String capitalize (String str) { StringBuilder strBuf = new StringBuilder(str); if (strBuf.length() > 1) { if (Character.isLetter(strBuf.charAt(0))) { strBuf.setCharAt(0, Character.toUpperCase(strBuf.charAt(0))); } } return strBuf.toString(); } public String convert (Object feature) { if (null == feature) { return nullValueImage; } return feature.toString(); } public String normalize (String feature) { return m_case_sensitive ? capitalize(feature) : feature.toLowerCase(); } public String getValue (Object feature) { return normalize(convert(feature)); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/RangeFeatureValues.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/RangeFeatureV0000644000175000017500000000414411625126544033350 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; public class RangeFeatureValues implements FeatureValues { Double m_lower_boundary; boolean m_lower_boundary_inclusive; Double m_upper_boundary; boolean m_upper_boundary_inclusive; public RangeFeatureValues(double lb, boolean lbi, double ub, boolean ubi) { m_lower_boundary = lb; m_lower_boundary_inclusive = lbi; m_upper_boundary = ub; m_upper_boundary_inclusive = ubi; } public boolean matches (Object feature) { if (!(feature instanceof Number)) { return false; } Number nfeature = (Number)feature; int lb_res = m_lower_boundary.compareTo(nfeature.doubleValue()); if (((0 == lb_res) && !m_lower_boundary_inclusive) || (lb_res < 0)) { return false; } int ub_res = m_upper_boundary.compareTo(nfeature.doubleValue()); if (((0 == ub_res) && !m_upper_boundary_inclusive) || (ub_res > 0)) { return false; } return true; } public String getFeatureImage (Object feature) { return feature.toString(); } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/ApplierInfoAnnotation.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/ApplierInfoAn0000644000175000017500000002217111625126544033341 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Tue Mar 18 14:49:11 EDT 2008 */ package org.apache.uima.tools.cfe; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.StringArray; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Updated by JCasGen Tue Mar 18 14:49:11 EDT 2008 * XML source: C:/eclipse/CFE/org/apache/uima/cfe/AppliedSenseAnnotation.xml * @generated */ public class ApplierInfoAnnotation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(ApplierInfoAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected ApplierInfoAnnotation() {} /** Internal - constructor used by generator * @generated */ public ApplierInfoAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public ApplierInfoAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public ApplierInfoAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: Features /** getter for Features - gets List of features for a term * @generated */ public StringArray getFeatures() { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_Features == null) jcasType.jcas.throwFeatMissing("Features", "org.apache.uima.cfe.ApplierInfoAnnotation"); return (StringArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Features)));} /** setter for Features - sets List of features for a term * @generated */ public void setFeatures(StringArray v) { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_Features == null) jcasType.jcas.throwFeatMissing("Features", "org.apache.uima.cfe.ApplierInfoAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Features, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for Features - gets an indexed value - List of features for a term * @generated */ public String getFeatures(int i) { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_Features == null) jcasType.jcas.throwFeatMissing("Features", "org.apache.uima.cfe.ApplierInfoAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Features), i); return jcasType.ll_cas.ll_getStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Features), i);} /** indexed setter for Features - sets an indexed value - List of features for a term * @generated */ public void setFeatures(int i, String v) { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_Features == null) jcasType.jcas.throwFeatMissing("Features", "org.apache.uima.cfe.ApplierInfoAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Features), i); jcasType.ll_cas.ll_setStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Features), i, v);} //*--------------* //* Feature: AppliedAnnotation /** getter for AppliedAnnotation - gets Annotation that contains assigned senses as well as it might contain onfo about manualy preannotated sense * @generated */ public AppliedAnnotation getAppliedAnnotation() { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_AppliedAnnotation == null) jcasType.jcas.throwFeatMissing("AppliedAnnotation", "org.apache.uima.cfe.ApplierInfoAnnotation"); return (AppliedAnnotation)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_AppliedAnnotation)));} /** setter for AppliedAnnotation - sets Annotation that contains assigned senses as well as it might contain onfo about manualy preannotated sense * @generated */ public void setAppliedAnnotation(AppliedAnnotation v) { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_AppliedAnnotation == null) jcasType.jcas.throwFeatMissing("AppliedAnnotation", "org.apache.uima.cfe.ApplierInfoAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_AppliedAnnotation, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: Context /** getter for Context - gets * @generated */ public StringArray getContext() { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_Context == null) jcasType.jcas.throwFeatMissing("Context", "org.apache.uima.cfe.ApplierInfoAnnotation"); return (StringArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Context)));} /** setter for Context - sets * @generated */ public void setContext(StringArray v) { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_Context == null) jcasType.jcas.throwFeatMissing("Context", "org.apache.uima.cfe.ApplierInfoAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Context, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for Context - gets an indexed value - * @generated */ public String getContext(int i) { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_Context == null) jcasType.jcas.throwFeatMissing("Context", "org.apache.uima.cfe.ApplierInfoAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Context), i); return jcasType.ll_cas.ll_getStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Context), i);} /** indexed setter for Context - sets an indexed value - * @generated */ public void setContext(int i, String v) { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_Context == null) jcasType.jcas.throwFeatMissing("Context", "org.apache.uima.cfe.ApplierInfoAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Context), i); jcasType.ll_cas.ll_setStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_Context), i, v);} //*--------------* //* Feature: DocumentId /** getter for DocumentId - gets unique id of a document (used in tf*idf calculations) * @generated */ public String getDocumentId() { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_DocumentId == null) jcasType.jcas.throwFeatMissing("DocumentId", "org.apache.uima.cfe.ApplierInfoAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_DocumentId);} /** setter for DocumentId - sets unique id of a document (used in tf*idf calculations) * @generated */ public void setDocumentId(String v) { if (ApplierInfoAnnotation_Type.featOkTst && ((ApplierInfoAnnotation_Type)jcasType).casFeat_DocumentId == null) jcasType.jcas.throwFeatMissing("DocumentId", "org.apache.uima.cfe.ApplierInfoAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((ApplierInfoAnnotation_Type)jcasType).casFeatCode_DocumentId, v);} } uima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/0000755000175000017500000000000011625126540032201 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/WheelAnnotation_Type.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/WheelA0000644000175000017500000001100611625126540033267 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Sep 05 14:43:49 EDT 2008 */ package org.apache.uima.tools.cfe.sample; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.tcas.Annotation_Type; /** annotation representing wheels of a car * Updated by JCasGen Fri Sep 05 14:53:11 EDT 2008 * @generated */ public class WheelAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (WheelAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = WheelAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new WheelAnnotation(addr, WheelAnnotation_Type.this); WheelAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new WheelAnnotation(addr, WheelAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = WheelAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.cfe.sample.WheelAnnotation"); /** @generated */ final Feature casFeat_Diameter; /** @generated */ final int casFeatCode_Diameter; /** @generated */ public float getDiameter(int addr) { if (featOkTst && casFeat_Diameter == null) jcas.throwFeatMissing("Diameter", "org.apache.uima.cfe.sample.WheelAnnotation"); return ll_cas.ll_getFloatValue(addr, casFeatCode_Diameter); } /** @generated */ public void setDiameter(int addr, float v) { if (featOkTst && casFeat_Diameter == null) jcas.throwFeatMissing("Diameter", "org.apache.uima.cfe.sample.WheelAnnotation"); ll_cas.ll_setFloatValue(addr, casFeatCode_Diameter, v);} /** @generated */ final Feature casFeat_Color; /** @generated */ final int casFeatCode_Color; /** @generated */ public String getColor(int addr) { if (featOkTst && casFeat_Color == null) jcas.throwFeatMissing("Color", "org.apache.uima.cfe.sample.WheelAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_Color); } /** @generated */ public void setColor(int addr, String v) { if (featOkTst && casFeat_Color == null) jcas.throwFeatMissing("Color", "org.apache.uima.cfe.sample.WheelAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_Color, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public WheelAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_Diameter = jcas.getRequiredFeatureDE(casType, "Diameter", "uima.cas.Float", featOkTst); casFeatCode_Diameter = (null == casFeat_Diameter) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Diameter).getCode(); casFeat_Color = jcas.getRequiredFeatureDE(casType, "Color", "uima.cas.String", featOkTst); casFeatCode_Color = (null == casFeat_Color) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Color).getCode(); } } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/EngineAnnotation_Type.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/Engine0000644000175000017500000001101511625126540033327 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Sep 05 14:43:49 EDT 2008 */ package org.apache.uima.tools.cfe.sample; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.tcas.Annotation_Type; /** annotation representing an engine of a car * Updated by JCasGen Fri Sep 05 14:53:11 EDT 2008 * @generated */ public class EngineAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (EngineAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = EngineAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new EngineAnnotation(addr, EngineAnnotation_Type.this); EngineAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new EngineAnnotation(addr, EngineAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = EngineAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.cfe.sample.EngineAnnotation"); /** @generated */ final Feature casFeat_Cylinders; /** @generated */ final int casFeatCode_Cylinders; /** @generated */ public int getCylinders(int addr) { if (featOkTst && casFeat_Cylinders == null) jcas.throwFeatMissing("Cylinders", "org.apache.uima.cfe.sample.EngineAnnotation"); return ll_cas.ll_getIntValue(addr, casFeatCode_Cylinders); } /** @generated */ public void setCylinders(int addr, int v) { if (featOkTst && casFeat_Cylinders == null) jcas.throwFeatMissing("Cylinders", "org.apache.uima.cfe.sample.EngineAnnotation"); ll_cas.ll_setIntValue(addr, casFeatCode_Cylinders, v);} /** @generated */ final Feature casFeat_Size; /** @generated */ final int casFeatCode_Size; /** @generated */ public float getSize(int addr) { if (featOkTst && casFeat_Size == null) jcas.throwFeatMissing("Size", "org.apache.uima.cfe.sample.EngineAnnotation"); return ll_cas.ll_getFloatValue(addr, casFeatCode_Size); } /** @generated */ public void setSize(int addr, float v) { if (featOkTst && casFeat_Size == null) jcas.throwFeatMissing("Size", "org.apache.uima.cfe.sample.EngineAnnotation"); ll_cas.ll_setFloatValue(addr, casFeatCode_Size, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public EngineAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_Cylinders = jcas.getRequiredFeatureDE(casType, "Cylinders", "uima.cas.Integer", featOkTst); casFeatCode_Cylinders = (null == casFeat_Cylinders) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Cylinders).getCode(); casFeat_Size = jcas.getRequiredFeatureDE(casType, "Size", "uima.cas.Float", featOkTst); casFeatCode_Size = (null == casFeat_Size) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Size).getCode(); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/CarAnnotation_Type.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/CarAnn0000644000175000017500000001266011625126540033273 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Sep 05 14:43:49 EDT 2008 */ package org.apache.uima.tools.cfe.sample; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Fri Sep 05 14:53:11 EDT 2008 * @generated */ public class CarAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (CarAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = CarAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new CarAnnotation(addr, CarAnnotation_Type.this); CarAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new CarAnnotation(addr, CarAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = CarAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.cfe.sample.CarAnnotation"); /** @generated */ final Feature casFeat_Wheels; /** @generated */ final int casFeatCode_Wheels; /** @generated */ public int getWheels(int addr) { if (featOkTst && casFeat_Wheels == null) jcas.throwFeatMissing("Wheels", "org.apache.uima.cfe.sample.CarAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_Wheels); } /** @generated */ public void setWheels(int addr, int v) { if (featOkTst && casFeat_Wheels == null) jcas.throwFeatMissing("Wheels", "org.apache.uima.cfe.sample.CarAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_Wheels, v);} /** @generated */ public int getWheels(int addr, int i) { if (featOkTst && casFeat_Wheels == null) jcas.throwFeatMissing("Wheels", "org.apache.uima.cfe.sample.CarAnnotation"); if (lowLevelTypeChecks) return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Wheels), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_Wheels), i); return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Wheels), i); } /** @generated */ public void setWheels(int addr, int i, int v) { if (featOkTst && casFeat_Wheels == null) jcas.throwFeatMissing("Wheels", "org.apache.uima.cfe.sample.CarAnnotation"); if (lowLevelTypeChecks) ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Wheels), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_Wheels), i); ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Wheels), i, v); } /** @generated */ final Feature casFeat_Engine; /** @generated */ final int casFeatCode_Engine; /** @generated */ public int getEngine(int addr) { if (featOkTst && casFeat_Engine == null) jcas.throwFeatMissing("Engine", "org.apache.uima.cfe.sample.CarAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_Engine); } /** @generated */ public void setEngine(int addr, int v) { if (featOkTst && casFeat_Engine == null) jcas.throwFeatMissing("Engine", "org.apache.uima.cfe.sample.CarAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_Engine, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public CarAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_Wheels = jcas.getRequiredFeatureDE(casType, "Wheels", "uima.cas.FSArray", featOkTst); casFeatCode_Wheels = (null == casFeat_Wheels) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Wheels).getCode(); casFeat_Engine = jcas.getRequiredFeatureDE(casType, "Engine", "org.apache.uima.cfe.sample.EngineAnnotation", featOkTst); casFeatCode_Engine = (null == casFeat_Engine) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Engine).getCode(); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/WheelAnnotation.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/WheelA0000644000175000017500000001007011625126540033267 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Sep 05 14:43:49 EDT 2008 */ package org.apache.uima.tools.cfe.sample; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** annotation representing wheels of a car * Updated by JCasGen Fri Sep 05 14:53:11 EDT 2008 * XML source: C:/eclipse/CFE/resources/samples/SampleTypeSystem.xml * @generated */ public class WheelAnnotation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(WheelAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected WheelAnnotation() {} /** Internal - constructor used by generator * @generated */ public WheelAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public WheelAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public WheelAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: Diameter /** getter for Diameter - gets diameter of a wheel * @generated */ public float getDiameter() { if (WheelAnnotation_Type.featOkTst && ((WheelAnnotation_Type)jcasType).casFeat_Diameter == null) jcasType.jcas.throwFeatMissing("Diameter", "org.apache.uima.cfe.sample.WheelAnnotation"); return jcasType.ll_cas.ll_getFloatValue(addr, ((WheelAnnotation_Type)jcasType).casFeatCode_Diameter);} /** setter for Diameter - sets diameter of a wheel * @generated */ public void setDiameter(float v) { if (WheelAnnotation_Type.featOkTst && ((WheelAnnotation_Type)jcasType).casFeat_Diameter == null) jcasType.jcas.throwFeatMissing("Diameter", "org.apache.uima.cfe.sample.WheelAnnotation"); jcasType.ll_cas.ll_setFloatValue(addr, ((WheelAnnotation_Type)jcasType).casFeatCode_Diameter, v);} //*--------------* //* Feature: Color /** getter for Color - gets color of a car * @generated */ public String getColor() { if (WheelAnnotation_Type.featOkTst && ((WheelAnnotation_Type)jcasType).casFeat_Color == null) jcasType.jcas.throwFeatMissing("Color", "org.apache.uima.cfe.sample.WheelAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((WheelAnnotation_Type)jcasType).casFeatCode_Color);} /** setter for Color - sets color of a car * @generated */ public void setColor(String v) { if (WheelAnnotation_Type.featOkTst && ((WheelAnnotation_Type)jcasType).casFeat_Color == null) jcasType.jcas.throwFeatMissing("Color", "org.apache.uima.cfe.sample.WheelAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((WheelAnnotation_Type)jcasType).casFeatCode_Color, v);} } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/EngineAnnotation.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/Engine0000644000175000017500000001011311625126540033325 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Sep 05 14:43:49 EDT 2008 */ package org.apache.uima.tools.cfe.sample; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** annotation representing an engine of a car * Updated by JCasGen Fri Sep 05 14:53:11 EDT 2008 * XML source: C:/eclipse/CFE/resources/samples/SampleTypeSystem.xml * @generated */ public class EngineAnnotation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(EngineAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected EngineAnnotation() {} /** Internal - constructor used by generator * @generated */ public EngineAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public EngineAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public EngineAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: Cylinders /** getter for Cylinders - gets Number of cylinders * @generated */ public int getCylinders() { if (EngineAnnotation_Type.featOkTst && ((EngineAnnotation_Type)jcasType).casFeat_Cylinders == null) jcasType.jcas.throwFeatMissing("Cylinders", "org.apache.uima.cfe.sample.EngineAnnotation"); return jcasType.ll_cas.ll_getIntValue(addr, ((EngineAnnotation_Type)jcasType).casFeatCode_Cylinders);} /** setter for Cylinders - sets Number of cylinders * @generated */ public void setCylinders(int v) { if (EngineAnnotation_Type.featOkTst && ((EngineAnnotation_Type)jcasType).casFeat_Cylinders == null) jcasType.jcas.throwFeatMissing("Cylinders", "org.apache.uima.cfe.sample.EngineAnnotation"); jcasType.ll_cas.ll_setIntValue(addr, ((EngineAnnotation_Type)jcasType).casFeatCode_Cylinders, v);} //*--------------* //* Feature: Size /** getter for Size - gets size of an engine * @generated */ public float getSize() { if (EngineAnnotation_Type.featOkTst && ((EngineAnnotation_Type)jcasType).casFeat_Size == null) jcasType.jcas.throwFeatMissing("Size", "org.apache.uima.cfe.sample.EngineAnnotation"); return jcasType.ll_cas.ll_getFloatValue(addr, ((EngineAnnotation_Type)jcasType).casFeatCode_Size);} /** setter for Size - sets size of an engine * @generated */ public void setSize(float v) { if (EngineAnnotation_Type.featOkTst && ((EngineAnnotation_Type)jcasType).casFeat_Size == null) jcasType.jcas.throwFeatMissing("Size", "org.apache.uima.cfe.sample.EngineAnnotation"); jcasType.ll_cas.ll_setFloatValue(addr, ((EngineAnnotation_Type)jcasType).casFeatCode_Size, v);} } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/CarAnnotation.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/sample/CarAnn0000644000175000017500000001266211625126540033275 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Sep 05 14:43:49 EDT 2008 */ package org.apache.uima.tools.cfe.sample; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Updated by JCasGen Fri Sep 05 14:53:11 EDT 2008 * XML source: C:/eclipse/CFE/resources/samples/SampleTypeSystem.xml * @generated */ public class CarAnnotation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(CarAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected CarAnnotation() {} /** Internal - constructor used by generator * @generated */ public CarAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public CarAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public CarAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: Wheels /** getter for Wheels - gets wheels of a car * @generated */ public FSArray getWheels() { if (CarAnnotation_Type.featOkTst && ((CarAnnotation_Type)jcasType).casFeat_Wheels == null) jcasType.jcas.throwFeatMissing("Wheels", "org.apache.uima.cfe.sample.CarAnnotation"); return (FSArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((CarAnnotation_Type)jcasType).casFeatCode_Wheels)));} /** setter for Wheels - sets wheels of a car * @generated */ public void setWheels(FSArray v) { if (CarAnnotation_Type.featOkTst && ((CarAnnotation_Type)jcasType).casFeat_Wheels == null) jcasType.jcas.throwFeatMissing("Wheels", "org.apache.uima.cfe.sample.CarAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((CarAnnotation_Type)jcasType).casFeatCode_Wheels, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for Wheels - gets an indexed value - wheels of a car * @generated */ public WheelAnnotation getWheels(int i) { if (CarAnnotation_Type.featOkTst && ((CarAnnotation_Type)jcasType).casFeat_Wheels == null) jcasType.jcas.throwFeatMissing("Wheels", "org.apache.uima.cfe.sample.CarAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((CarAnnotation_Type)jcasType).casFeatCode_Wheels), i); return (WheelAnnotation)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((CarAnnotation_Type)jcasType).casFeatCode_Wheels), i)));} /** indexed setter for Wheels - sets an indexed value - wheels of a car * @generated */ public void setWheels(int i, WheelAnnotation v) { if (CarAnnotation_Type.featOkTst && ((CarAnnotation_Type)jcasType).casFeat_Wheels == null) jcasType.jcas.throwFeatMissing("Wheels", "org.apache.uima.cfe.sample.CarAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((CarAnnotation_Type)jcasType).casFeatCode_Wheels), i); jcasType.ll_cas.ll_setRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((CarAnnotation_Type)jcasType).casFeatCode_Wheels), i, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: Engine /** getter for Engine - gets engine of a car * @generated */ public EngineAnnotation getEngine() { if (CarAnnotation_Type.featOkTst && ((CarAnnotation_Type)jcasType).casFeat_Engine == null) jcasType.jcas.throwFeatMissing("Engine", "org.apache.uima.cfe.sample.CarAnnotation"); return (EngineAnnotation)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((CarAnnotation_Type)jcasType).casFeatCode_Engine)));} /** setter for Engine - sets engine of a car * @generated */ public void setEngine(EngineAnnotation v) { if (CarAnnotation_Type.featOkTst && ((CarAnnotation_Type)jcasType).casFeat_Engine == null) jcasType.jcas.throwFeatMissing("Engine", "org.apache.uima.cfe.sample.CarAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((CarAnnotation_Type)jcasType).casFeatCode_Engine, jcasType.ll_cas.ll_getFSRef(v));} } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/FeatureValueConverter.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/FeatureValueC0000644000175000017500000000171011625126544033341 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; public interface FeatureValueConverter { abstract public String convert (Object feature); } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/FeatureValueNormalizer.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/FeatureValueN0000644000175000017500000000172111625126544033356 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; public interface FeatureValueNormalizer { abstract public String normalize (String feature_value); } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/PartialObjectMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/PartialObject0000644000175000017500000000667111625126544033404 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class PartialObjectMatcher { Class m_matcher_class; String m_full_path; Collection m_group_feature_matchers = new ArrayList(); public PartialObjectMatcher(String class_name, String full_path, Collection gfms) throws ClassNotFoundException { m_matcher_class = Class.forName(class_name); if ((null == full_path) || (0 == full_path.length())) { m_full_path = m_matcher_class.getName(); } else { m_full_path = full_path; } if (null != gfms) { m_group_feature_matchers.addAll(gfms); } } protected PartialObjectMatcher(String class_name, String full_annotation_path) throws ClassNotFoundException { this(class_name, full_annotation_path, new ArrayList()); } String getObjectPath () { return m_full_path; } public void addGroupMatcher(GroupFeatureMatcher gfm) { m_group_feature_matchers.add(gfm); } public boolean matches (MatchedValue mv, Collection matched) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { if (!m_matcher_class.isAssignableFrom(mv.m_matchedObject.getClass())) { return false; } if (m_group_feature_matchers.isEmpty()) { return true; } for (Iterator it = m_group_feature_matchers.iterator(); it.hasNext();) { GroupFeatureMatcher gfm = it.next(); Collection grp_matched = new ArrayList(); if (gfm.matches(mv, grp_matched)) { matched.addAll(grp_matched); return true; } } return false; } void update(Object source) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException, InvocationTargetException { for (Iterator it = m_group_feature_matchers.iterator(); it.hasNext();) { it.next().update(source); } } public Class getMatcherClass () { return m_matcher_class; } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/RRMFeatureAnnotator.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/RRMFeatureAnn0000644000175000017500000000505011625126544033260 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; public class RRMFeatureAnnotator extends JCasAnnotator_ImplBase { private CommonFeatureMatcher m_cfaImpl; public void initialize (UimaContext ac) throws ResourceInitializationException { super.initialize(ac); // Process configration parameters try { m_cfaImpl = new RRMFeatureMatcher( ((Boolean)ac.getConfigParameterValue(CommonFeatureMatcher.PARAM_INCLUDEANNOTATIONNAME)).booleanValue(), ((Boolean)ac.getConfigParameterValue(CommonFeatureMatcher.PARAM_INCLUDEFEATURENAME)).booleanValue(), ((Boolean)ac.getConfigParameterValue(RRMFeatureMatcher.PARAM_INCLUDEFEATUREWINDOWIMAGE)).booleanValue()); m_cfaImpl.initialize( (String)ac.getConfigParameterValue(CommonFeatureMatcher.PARAM_CONFIGURATIONFILE), ((Boolean)ac.getConfigParameterValue(CommonFeatureMatcher.PARAM_XMLBEANSPARSER)).booleanValue()); } catch (Exception e) { // TODO UIMA style exception throw new ResourceInitializationException(e); } } @Override public void process(JCas jcas) throws AnalysisEngineProcessException { try { m_cfaImpl.processJCas(jcas); } catch (Exception e) { throw new AnalysisEngineProcessException(e); } } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/MatchedValue.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/MatchedValue.0000644000175000017500000000454111625126544033273 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * */ package org.apache.uima.tools.cfe; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class MatchedValue { protected Object m_matchedObject; public List m_orderedPath; public MatchedValue (Object matchedObject, List orderedPath) { m_matchedObject = matchedObject; m_orderedPath = orderedPath; } public MatchedValue (Object matchedObject) { m_matchedObject = matchedObject; m_orderedPath = new ArrayList(); } public static boolean contains (Collection values, Object obj) { for (T mv : values) { if (obj == mv.m_matchedObject) { return true; } } return false; } public static T get (Collection values, Object obj) { for (T mv : values) { if (obj == mv.m_matchedObject) { return mv; } } return null; } public static void removeAll (Collection removeFrom, Collection contained) { Collection matched = new ArrayList(); for (T mv : removeFrom) { if (contains(contained, mv.m_matchedObject)) { matched.add(mv); } } removeFrom.removeAll(matched); } }././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/GroupFeatureMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/GroupFeatureM0000644000175000017500000001132011625126544033371 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; public class GroupFeatureMatcher { Collection m_single_feature_matchers = new ArrayList(); boolean m_exclude; public GroupFeatureMatcher(Collection sfms, boolean exclude) { m_exclude = exclude; m_single_feature_matchers.addAll(sfms); } public void addMatcher (String feat_class, String feat_path, boolean exclude, boolean quiet, String path, boolean case_sensitive) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IOException { m_single_feature_matchers.add( new SingleFeatureMatcher(feat_class, feat_path, exclude, quiet, path, case_sensitive)); } public void addMatcher (String feat_class, String feat_path, boolean exclude, boolean quiet, Collection values, boolean case_sensitive) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IOException { m_single_feature_matchers.add( new SingleFeatureMatcher(feat_class, feat_path, exclude, quiet, values, case_sensitive)); } public void addMatcher (String feat_class, String feat_path, boolean exclude, boolean quiet, double lb, boolean lbi, double ub, boolean ubi) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IOException { m_single_feature_matchers.add(new SingleFeatureMatcher(feat_class, feat_path, exclude, quiet, lb, lbi, ub, ubi)); } public void addMatcher (String feat_class, String feat_path, boolean exclude, boolean quiet, int bitmask, boolean excact_match) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IOException { m_single_feature_matchers.add(new SingleFeatureMatcher(feat_class, feat_path, exclude, quiet, bitmask, excact_match)); } public boolean matches (MatchedValue mv, Collection matched) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { // if collection is emtpy - means "matches to any value" for (Iterator it = m_single_feature_matchers.iterator(); it.hasNext();) { SingleFeatureMatcher sfm = it.next(); List matchedValues = new ArrayList(); if (!sfm.matches(mv, matchedValues)) { return m_exclude; } matched.add(new MatchedSingleFeatureMatcher(sfm, matchedValues)); } return !m_exclude; } void update(Object source) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException, InvocationTargetException { for (Iterator it = m_single_feature_matchers.iterator(); it.hasNext();) { it.next().update(source); } } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/OffsetDiff.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/OffsetDiff.ja0000644000175000017500000002512711625126544033266 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class OffsetDiff { public String m_source_id; public String m_target_id; public OffsetDiff(String source_id, String target_id) { m_source_id = source_id; m_target_id = target_id; } static class Span { public String[] m_toks; public int m_begin; public int m_end; public int m_printed; public Span(String line) { final String CONSTANT_EOL_NULL = "CONSTANT_EOL_NULL"; if (line.endsWith("|")) { line += CONSTANT_EOL_NULL; } m_toks = line.split("\\|"); if (CONSTANT_EOL_NULL.equals(m_toks[m_toks.length - 1])) { m_toks[m_toks.length - 1] = ""; } m_begin = Integer.parseInt(m_toks[0]); m_end = Integer.parseInt(m_toks[1]); } int getBegin() { return m_begin; } int getEnd() { return m_end; } public static final int COMPARE_NONE = -1; public static final int COMPARE_EQUAL = 0; public static final int COMPARE_CONTAINS = 1; public static final int COMPARE_BELONGS = 2; public static final int COMPARE_AHEAD = 3; public static final int COMPARE_BEHIND = 4; public static final int COMPARE_FARAHEAD = 5; public static final int COMPARE_FARBEHIND = 6; public int printed() { return m_printed; } public String printImage() { ++m_printed; StringBuilder image = new StringBuilder(m_toks[0] + "|" + m_toks[1]); for (int i = 2; i < m_toks.length; ++i) { image.append("|"); image.append(m_toks[i]); } return image.toString(); } String printNullImage() { StringBuilder image = new StringBuilder("|"); // for begin/end for (int i = 2; i < m_toks.length; ++i) { image.append("|"); } return image.toString(); } public int compare (Span other) { if ((getBegin() == other.getBegin()) && (getEnd() == other.getEnd())) { return COMPARE_EQUAL; } if ((getBegin() <= other.getBegin()) && (getEnd() >= other.getEnd())) { return COMPARE_CONTAINS; } if ((getBegin() >= other.getBegin()) && (getEnd() <= other.getEnd())) { return COMPARE_BELONGS; } if ((getBegin() < other.getBegin()) && (getEnd() > other.getBegin()) && (getEnd() < other.getEnd())) { return COMPARE_BEHIND; } if ((getBegin() > other.getBegin()) && (other.getEnd() > getBegin()) && (getEnd() > other.getEnd())) { return COMPARE_AHEAD; } if ((getBegin() > other.getBegin()) && (getBegin() >= other.getEnd())) { return COMPARE_FARAHEAD; } if ((getBegin() < other.getBegin()) && (getEnd() <= other.getBegin())) { return COMPARE_FARBEHIND; } return COMPARE_NONE; } } private static int nextSpanInd(Collection spans, int curr) { if (curr < spans.size()) { return curr + 1; } return curr; } private void print(Span source, Span target) { String m = null; if (null == source) { m = target.printNullImage(); } else { m = source.printImage(); } m += "|"; if (null == target) { m += source.printNullImage(); } else { m += target.printImage(); } m += "|" + m_source_id + "|" + m_target_id; System.out.println(m); } public void process (List source, List target) { findEqual(source, target); int trg_ind = 0; int src_ind = 0; Span sspan = null; Span tspan = null; List smatched = new ArrayList(); List tmatched = new ArrayList(); while ((src_ind < source.size()) || (trg_ind < target.size())) { int curr_state = Span.COMPARE_NONE; if (src_ind < source.size()) { sspan = (Span)source.get(src_ind); } if (trg_ind < target.size()) { tspan = (Span)target.get(trg_ind); } if ((src_ind < source.size()) && (trg_ind < target.size())) { curr_state = sspan.compare(tspan); } else if (trg_ind >= target.size()) { curr_state = Span.COMPARE_FARBEHIND; } else if (src_ind >= source.size()) { curr_state = Span.COMPARE_FARAHEAD; } switch (curr_state) { case Span.COMPARE_CONTAINS: print(sspan, tspan); trg_ind = nextSpanInd(target, trg_ind); src_ind = nextSpanInd(source, src_ind); tmatched.add(tspan); smatched.add(sspan); break; case Span.COMPARE_BELONGS: print(sspan, tspan); trg_ind = nextSpanInd(target, trg_ind); src_ind = nextSpanInd(source, src_ind); tmatched.add(tspan); smatched.add(sspan); break; case Span.COMPARE_AHEAD: print(sspan, tspan); src_ind = nextSpanInd(source, src_ind); trg_ind = nextSpanInd(target, trg_ind); tmatched.add(tspan); smatched.add(sspan); break; case Span.COMPARE_BEHIND: print(sspan, tspan); src_ind = nextSpanInd(source, src_ind); trg_ind = nextSpanInd(target, trg_ind); tmatched.add(tspan); smatched.add(sspan); break; case Span.COMPARE_FARAHEAD: print(null, tspan); trg_ind = nextSpanInd(target, trg_ind); tmatched.add(tspan); break; case Span.COMPARE_FARBEHIND: print(sspan, null); src_ind = nextSpanInd(source, src_ind); smatched.add(sspan); break; } } source.removeAll(smatched); target.removeAll(tmatched); if (!source.isEmpty() || !target.isEmpty()) { System.err.println("ERROR: comparison incomplete. source:" + source.size() + ", target:" + target.size()); } } void findEqual (List source, List target) { int trg_ind = 0; Span sspan = null; Span tspan = null; List smatched = new ArrayList(); List tmatched = new ArrayList(); for (int i = 0; i < source.size(); ++i) { sspan = (Span)source.get(i); for (int j = trg_ind; j < target.size(); ++j) { tspan = (Span)target.get(j); int curr_state = sspan.compare(tspan); if (Span.COMPARE_EQUAL == curr_state) { print(sspan, tspan); trg_ind = j + 1; smatched.add(sspan); tmatched.add(tspan); break; } else if (Span.COMPARE_FARBEHIND == curr_state) { break; } } } source.removeAll(smatched); target.removeAll(tmatched); } static private List readSpannedFile (String filename) throws FileNotFoundException { String line = null; List result = new ArrayList(); File fs = new File(filename); if (fs.exists()) { int cnt = 0; try { BufferedReader in = new BufferedReader(new FileReader(fs)); while (null != (line = in.readLine())) { cnt++; if (line.startsWith("#")) { continue; } Span s = new Span(line); if (null != s) { result.add(s); } } in.close(); } catch (IOException e) { System.err.println(filename + ": failed to read " + cnt +" line"); } } return result; } public static void main (String[] args) throws IOException { if (2 != args.length) { System.err.println("Usage: com.ibm.medtas.common source_file target_file"); return; } OffsetDiff od = new OffsetDiff(args[0], args[1]); List source = readSpannedFile(args[0]); List target = readSpannedFile(args[1]); od.process(source, target); } } uima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/0000755000175000017500000000000011625126544032440 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/ArrayComparatorFinder.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/Array0000644000175000017500000000252511625126544033445 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.support; import java.util.Comparator; import org.apache.uima.jcas.tcas.Annotation; public class ArrayComparatorFinder { public static Comparator find (Object[] objs) { for (int i = 0; i < objs.length; ++i) { if (null == objs[i]) { continue; } if (!(objs[i] instanceof Annotation)) { return null; } } return new UIMAAnnotationOffsetComparator(); } }././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/DictionaryMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/Dicti0000644000175000017500000000213211625126544033415 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.support; import java.lang.reflect.InvocationTargetException; public interface DictionaryMatcher { abstract boolean matches(T key) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException; } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/EnumeratedEntryDictionary.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/Enume0000644000175000017500000000303011625126544033430 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.support; import java.util.Set; import org.apache.uima.tools.cfe.FeatureValueNormalizer; public class EnumeratedEntryDictionary extends SimpleFileBasedDictionary { protected FeatureValueNormalizer m_normalizer; public EnumeratedEntryDictionary(String name, String path, FeatureValueNormalizer normalizer) { super(name, path, null, null, null); m_normalizer = normalizer; } protected void addLine(String[] toks, int cnt) { String tok = m_normalizer.normalize(toks[0]); addEntry(tok, null, cnt); } public Set values() { return storage().keySet(); } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/UIMAAnnotationUtils.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/UIMAA0000644000175000017500000002025611625126544033224 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.support; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationIndex; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.tcas.Annotation; public class UIMAAnnotationUtils { public static int getTypeIndexId (Class cls) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { return cls.getField("typeIndexID").getInt(null); } public static int getTypeIndexId (String typename) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException, ClassNotFoundException { return getTypeIndexId(forName(typename)); } public static int getTypeIndexId (Type type) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException, ClassNotFoundException { return getTypeIndexId(type.getName()); } public static boolean containsAnnotationBySpan (Object[] annotations, Annotation test) { for (int i = 0; i < annotations.length; ++i) { Annotation co = (Annotation)annotations[i]; if ((co.getBegin() == test.getBegin()) && (co.getEnd() == test.getEnd())) { return true; } } return false; } public static void addFSArrayToAnnotations (List dest, FSArray source) { for (int i = 0; i < source.size(); ++i) { dest.add((Annotation)source.get(i)); } } public static List fsArrayToAnnotations (FSArray source) { List result = new ArrayList(); addFSArrayToAnnotations(result, source); return result; } public static void addAnnotationsToFSArray (JCas jcas, Annotation parent, String feat_name, Collection anns, boolean update_span) { Feature feat = jcas.getCasType(parent.getTypeIndexID()).getFeatureByBaseName(feat_name); FSArray fsa = (FSArray)parent.getFeatureValue(feat); List new_elements = new ArrayList(); if (null != fsa ) { addFSArrayToAnnotations(new_elements, fsa); } new_elements.addAll(anns); int b = Integer.MAX_VALUE, e = Integer.MIN_VALUE; FSArray new_fsa = new FSArray(jcas, new_elements.size()); for (int i = 0; i < new_elements.size(); ++i) { Annotation ann = (Annotation)new_elements.get(i); new_fsa.set(i, ann); if (b > ann.getBegin()) { b = ann.getBegin(); } if (e < ann.getEnd()) { e = ann.getEnd(); } } parent.setFeatureValue(feat, new_fsa); if (update_span) { parent.removeFromIndexes(); updateSpan(parent, b, e); parent.addToIndexes(); } } public static void updateSpan (Annotation target, Annotation included) { updateSpan(target, included.getBegin(), included.getEnd()); } public static void updateSpan (Annotation target, int b, int e) { boolean force_offset = false; if ((0 == target.getBegin()) && (0 == target.getEnd())) { force_offset = true; } if (force_offset || target.getBegin() > b) { target.setBegin(b); } if (force_offset || target.getEnd() < e) { target.setEnd(e); } } public static boolean sameSpanAnnotations (Annotation ann1, Annotation ann2) { return (ann1.getBegin() == ann2.getBegin()) && (ann1.getEnd() == ann2.getEnd()); } public static Annotation getSameOffsetAnnotation (JCas jcas, Class ann_class, int begin, int end) { try { Iterator it = FeatureConstrainedIterator.getEnclosedIterator(jcas, ann_class, begin, begin + 1, end - 1, end); if (it.hasNext()) { return (Annotation)it.next(); } } catch (Exception e) { e.printStackTrace(); } return null; } public static List getSameOffsetAnnotations (JCas jcas, Class ann_class, int begin, int end) { List result = new ArrayList(); try { Iterator it = FeatureConstrainedIterator.getEnclosedIterator(jcas, ann_class, begin, begin + 1, end - 1, end); while (it.hasNext()) { result.add((Annotation)it.next()); } } catch (Exception e) { e.printStackTrace(); } return result; } public static Annotation getSameOffsetAnnotation (JCas jcas, Class ann_class, Annotation source) { return getSameOffsetAnnotation(jcas, ann_class, source.getBegin(), source.getEnd()); } public static List getSameOffsetAnnotations (JCas jcas, Class ann_class, Annotation source) { return getSameOffsetAnnotations(jcas, ann_class, source.getBegin(), source.getEnd()); } static public FSIterator fsIterator (JCas jcas, Class cls_ann) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { AnnotationIndex ind = jcas.getJFSIndexRepository().getAnnotationIndex(UIMAAnnotationUtils.getTypeIndexId(cls_ann)); return ind.iterator(); } @SuppressWarnings("unchecked") public static Class getAnnotationClass (Class cls) { if (!Annotation.class.isAssignableFrom(cls)) { throw new IllegalArgumentException("class '" + cls.getName() + "' is not derived from " + Annotation.class.getName()); } return (Class)cls; } @SuppressWarnings("unchecked") static public Iterator iterator (JCas jcas, Class cls) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { return (Iterator)fsIterator(jcas, cls); } static public Class forName (String name) throws ClassNotFoundException { return getAnnotationClass(Class.forName(name)); } @SuppressWarnings("unchecked") static public Class forName (Class cls_base, String name) throws ClassNotFoundException { return (Class)getAnnotationClass(Class.forName(name)); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/FileBasedResource.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/FileB0000644000175000017500000000255311625126544033351 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.support; import java.io.IOException; public abstract class FileBasedResource { protected String m_name; protected String m_path; public FileBasedResource (String name, String path) { m_path = path; m_name = name; } public String name () { return m_name; } public String path () { return m_path; } abstract public void load() throws IOException; abstract public void save() throws IOException; } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/FeatureConstrainedIterator.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/Featu0000644000175000017500000005736011625126544033442 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.support; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.uima.cas.ConstraintFactory; import org.apache.uima.cas.FSIntConstraint; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.FSMatchConstraint; import org.apache.uima.cas.FSStringConstraint; import org.apache.uima.cas.FSTypeConstraint; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeaturePath; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.cas.text.AnnotationIndex; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JFSIndexRepository; import org.apache.uima.jcas.tcas.Annotation; ; public class FeatureConstrainedIterator { static private class ConstraintDescriptor { protected Map m_feat2path = new HashMap(); final protected int m_typeId; public ConstraintDescriptor (JCas jcas, int typeId, Collection featureNames) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { m_typeId = typeId; if (null != featureNames) { addFeatures(jcas, featureNames); } } void addFeatures (JCas jcas, Collection featureNames) { for (Iterator it = featureNames.iterator(); it.hasNext();) { String featureName = it.next(); FeaturePath featurePath = jcas.createFeaturePath(); Feature feature = jcas.getCasType(m_typeId).getFeatureByBaseName(featureName); featurePath.addFeature(feature); m_feat2path.put(featureName, featurePath); } } FSIterator createFilteredIterator (JCas jcas, FSMatchConstraint constraint) { JFSIndexRepository idxs = jcas.getJFSIndexRepository (); AnnotationIndex sdi_ind = idxs.getAnnotationIndex(m_typeId); return jcas.createFilteredIterator(sdi_ind.iterator(), constraint); } } static private class SubiteratorConstraintDescriptor extends ConstraintDescriptor { public SubiteratorConstraintDescriptor (JCas jcas, Class enclosed) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { super(jcas, UIMAAnnotationUtils.getTypeIndexId(enclosed), null); } FSIterator createSubiterator (JCas jcas, AnnotationFS enclosing) { JFSIndexRepository idxs = jcas.getJFSIndexRepository (); AnnotationIndex sdi_ind = idxs.getAnnotationIndex(m_typeId); return sdi_ind.subiterator(enclosing); } } static private class EnclosedConstraintDescriptor extends ConstraintDescriptor { private EnclosedConstraintDescriptor (JCas jcas, int typeId) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { super(jcas, typeId, Arrays.asList(new String[] {"begin", "end"})); } public EnclosedConstraintDescriptor (JCas jcas, Class enclosed) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { this(jcas, UIMAAnnotationUtils.getTypeIndexId(enclosed)); } FSMatchConstraint createConstraint (JCas jcas, int begin_lower, int begin_upper, int end_lower, int end_upper) { FeaturePath begin_fp = m_feat2path.get("begin"); FeaturePath end_fp = m_feat2path.get("end"); ConstraintFactory cf = jcas.getConstraintFactory(); FSIntConstraint bcLower = cf.createIntConstraint(); bcLower.geq(begin_lower); FSMatchConstraint mcBegin = cf.embedConstraint(begin_fp, bcLower); if (begin_upper > begin_lower) { FSIntConstraint bcUpper = cf.createIntConstraint(); bcUpper.lt(begin_upper); mcBegin = cf.and(mcBegin, cf.embedConstraint(begin_fp, bcUpper)); } FSIntConstraint ecUpper = cf.createIntConstraint(); ecUpper.leq(end_upper); FSMatchConstraint mcEnd = cf.embedConstraint(end_fp, ecUpper); if (end_upper > end_lower) { FSIntConstraint ecLower = cf.createIntConstraint(); ecLower.gt(end_lower); mcEnd = cf.and(mcEnd, cf.embedConstraint(end_fp, ecLower)); } FSMatchConstraint mcBounds = cf.and(mcBegin, mcEnd); return mcBounds; } } static private class FeatureConstraintDescriptor extends ConstraintDescriptor { private FeatureConstraintDescriptor (JCas jcas, int typeId, Collection featureNames) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { super(jcas, typeId, featureNames); } public FeatureConstraintDescriptor (JCas jcas, Class annotation_class, Collection feature_names) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { this(jcas, UIMAAnnotationUtils.getTypeIndexId(annotation_class), feature_names); } FSMatchConstraint createConstraint (JCas jcas, String feature_name, Object[] values) { ConstraintFactory cf = jcas.getConstraintFactory(); FeaturePath feature_path = m_feat2path.get(feature_name); FSMatchConstraint feat_mc = null; for (int i = 0; i < values.length; ++i) { FSStringConstraint val_sc = cf.createStringConstraint(); val_sc.equals(values[i].toString()); if (null == feat_mc) { feat_mc = cf.embedConstraint(feature_path, val_sc); } else { feat_mc = cf.or(feat_mc, cf.embedConstraint(feature_path, val_sc)); } } return feat_mc; } } static public FSIterator getEnclosedIterator(JCas jcas, Class enclosed, int begin, int end) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { return getEnclosedIterator(jcas, enclosed, begin, begin, end, end); } static public FSIterator getEnclosedIterator(JCas jcas, int[] typeIds, int begin, int end) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { return getEnclosedIterator(jcas, typeIds, begin, begin, end, end); } static public FSIterator getEnclosedIterator(JCas jcas, Class enclosed, int begin_lower, int begin_upper, int end_lower, int end_upper) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { EnclosedConstraintDescriptor ecDescr = new EnclosedConstraintDescriptor(jcas, enclosed); FSMatchConstraint mcBounds = ecDescr.createConstraint(jcas, begin_lower, begin_upper, end_lower, end_upper); return ecDescr.createFilteredIterator(jcas, mcBounds); } static public FSIterator getEnclosedIterator(JCas jcas, int[] enclosedTypes, int begin_lower, int begin_upper, int end_lower, int end_upper) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { EnclosedConstraintDescriptor ecDescr = new EnclosedConstraintDescriptor(jcas, Annotation.typeIndexID); FSMatchConstraint mcBounds = ecDescr.createConstraint(jcas, begin_lower, begin_upper, end_lower, end_upper); if ((null != enclosedTypes) && (0 < enclosedTypes.length)) { ConstraintFactory cf = jcas.getConstraintFactory(); FSTypeConstraint tc = cf.createTypeConstraint(); for (int i = 0; i < enclosedTypes.length; ++i) { tc.add(jcas.getCasType(enclosedTypes[i])); } mcBounds = cf.and(mcBounds, tc); } return ecDescr.createFilteredIterator(jcas, mcBounds); } static public FSIterator getEnclosedIterator(JCas jcas, Class enclosed, Annotation enclosing) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { if (null == enclosing) { return getEnclosedIterator(jcas, enclosed, 0, Integer.MAX_VALUE); } SubiteratorConstraintDescriptor scd = new SubiteratorConstraintDescriptor(jcas, enclosed); return scd.createSubiterator(jcas, enclosing); } static public FSIterator getEnclosedIterator(JCas jcas, String enclosed_name, Annotation enclosing) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { return getEnclosedIterator(jcas, UIMAAnnotationUtils.forName(enclosed_name), enclosing); } static public FSIterator getEnclosedIterator(JCas jcas, int[] typeIds, Annotation enclosing) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { return getEnclosedIterator(jcas, typeIds, enclosing.getBegin(), enclosing.getEnd()); } static public FSIterator getLeftIterator (JCas jcas, Class feat_ann_class, Annotation enclosing, Annotation target) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { int begin = enclosing.getBegin(); int end = target.getBegin(); FSIterator it = FeatureConstrainedIterator.getEnclosedIterator(jcas, feat_ann_class, begin, end); it.moveToLast(); return it; } static public FSIterator getLeftIterator (JCas jcas, int[] typeIds, Annotation enclosing, Annotation target) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { int begin = enclosing.getBegin(); int end = target.getBegin(); FSIterator it = FeatureConstrainedIterator.getEnclosedIterator(jcas, typeIds, begin, end); it.moveToLast(); return it; } static public FSIterator getRightIterator (JCas jcas, Class feat_ann_class, Annotation enclosing, Annotation target) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { int begin = target.getEnd(); int end = enclosing.getEnd(); return FeatureConstrainedIterator.getEnclosedIterator(jcas, feat_ann_class, begin, end); } static public FSIterator getEnclosedIterator(JCas jcas, Class enclosed, int begin_lower, int begin_upper, int end_lower, int end_upper, String feat_name, Object[] values) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { EnclosedConstraintDescriptor ecDescr = new EnclosedConstraintDescriptor(jcas, enclosed); FeatureConstraintDescriptor fcDescr = new FeatureConstraintDescriptor(jcas, enclosed, Arrays.asList(new String[] {feat_name})); FSMatchConstraint mc_bounds = ecDescr.createConstraint(jcas, begin_lower, begin_upper, end_lower, end_upper); FSMatchConstraint mc_feature = fcDescr.createConstraint(jcas, feat_name, values); return fcDescr.createFilteredIterator(jcas, jcas.getConstraintFactory().and(mc_bounds, mc_feature)); } static public FSIterator getEnclosedIterator(JCas jcas, Class enclosed, int begin, int end, String feat_name, Object[] values) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { return getEnclosedIterator(jcas, enclosed, begin, begin, end, end, feat_name,values); } static public FSIterator getEnclosedIterator(JCas jcas, Class enclosed, Annotation enclosing, String feat_name, Object[] values) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { return getEnclosedIterator(jcas, enclosed, enclosing.getBegin(), enclosing.getEnd(), feat_name, values); } static public List getEnclosingAnnotations (JCas jcas, Class enclosing_class, Annotation enclosed) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { List result = new ArrayList(); for (Iterator enclosing_it = UIMAAnnotationUtils.iterator(jcas, enclosing_class); enclosing_it.hasNext();) { Annotation enclosing = enclosing_it.next(); if ((enclosing.getBegin() <= enclosed.getBegin()) && (enclosing.getEnd() >= enclosed.getEnd())) { result.add(enclosing); } } return result; } static public Annotation getEnclosingAnnotation (JCas jcas, Class enclosing_class, Annotation enclosed) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { for (Iterator enclosing_it = UIMAAnnotationUtils.iterator(jcas, enclosing_class); enclosing_it.hasNext();) { Annotation enclosing = enclosing_it.next(); if ((enclosing.getBegin() <= enclosed.getBegin()) && (enclosing.getEnd() >= enclosed.getEnd())) { return enclosing; } } return null; } static public FSIterator getSameOffsetIterator (JCas jcas, Class enclosed_class, Annotation enclosing) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { return getEnclosedIterator(jcas, enclosed_class, enclosing.getBegin(), enclosing.getBegin() + 1, enclosing.getEnd() - 1, enclosing.getEnd()); } static public FSIterator getSameOffsetIterator (JCas jcas, Class enclosed_class, Annotation enclosing, String feat_name, Object[] values) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException { return getEnclosedIterator(jcas, enclosed_class, enclosing.getBegin(), enclosing.getBegin() + 1, enclosing.getEnd() - 1, enclosing.getEnd(), feat_name, values); } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/SimpleFileBasedDictionary.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/Simpl0000644000175000017500000000717511625126544033461 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.support; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.PrintStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public abstract class SimpleFileBasedDictionary extends FileBasedDictionary implements DictionaryMatcher { private Map m_storage; public final String m_cmtsep; public final String m_fldsep; public SimpleFileBasedDictionary (String name, String path, Map storage, String comment_separator, String filed_separator) { super (name, path); m_cmtsep = comment_separator; m_fldsep = filed_separator; m_storage = storage; if (null == m_storage) { m_storage = new HashMap(); } } public void load () throws IOException { BufferedReader bufReader = new BufferedReader (new FileReader (m_path)); String line = null; int cnt = 0; while ((line = bufReader.readLine ()) != null) { ++cnt; line = line.trim(); if ((null != m_cmtsep) && line.startsWith(m_cmtsep)) { continue; } if (0 == line.length()) { continue; } String[] columns = (null == m_fldsep) ? new String[]{line} : line.split(m_fldsep); if (0 == columns.length) { continue; } addLine(columns, cnt); } bufReader.close(); } public void save () throws IOException { PrintStream ps = new PrintStream(new FileOutputStream (path(), false)); for (Iterator it = m_storage.keySet().iterator(); it.hasNext();) { ps.println(make_line(it.next())); } ps.close(); } protected void addEntry (String key, T value, int linenum) { m_storage.put(key, value); } public Map storage () { return m_storage; } public T getEntry (String key) { return m_storage.get(key); } public int size () { return m_storage.size(); } public boolean matches (String key) { return m_storage.containsKey(key); } private String make_line(String key) { if (null == m_fldsep) { return key.toString(); } else { return key + m_fldsep + getEntry(key); } } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/ComparableArray.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/Compa0000644000175000017500000000542011625126544033423 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.support; public class ComparableArray implements Comparable { public final Comparable[] m_src; public ComparableArray(Comparable[] src) { m_src = src; } private int compare(Comparable[] ia1, Comparable[] ia2) { if (ia1 == ia2) { return 0; } if ((null == ia1) || (null == ia2)) { return null == ia2 ? 1 : -1; } if (ia1.length != ia2.length) { return ia1.length > ia2.length ? 1 : -1; } for (int i = 0; i < ia1.length; ++i) { int res = ia1[i].compareTo(ia2[i]); if (0 != res) { return res; } } return 0; } public int compareTo (Object other) { if (null == other) { return 1; } if (other instanceof ComparableArray) { return compare(m_src, ((ComparableArray)other).m_src); } throw new ClassCastException("Cannot compare ComparableArray to object of type " + other.getClass().getName()); } public boolean equals (Object other) { return 0 == compareTo(other); } public int hashCode() { int result = 0; result += Math.min(m_src.length, 9) * m_src.length; for (int i = 0; i < m_src.length; ++i) { result += Math.min(m_src.length, 9) * m_src[i].hashCode(); } return result; } public String toString () { assert (null != m_src); StringBuilder result = new StringBuilder(m_src.length * 8); result.append("["); for (int i = 0; i < m_src.length; ++i) { if (0 != i) { result.append(","); } result.append(m_src[i]); } result.append("]"); return result.toString(); } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/FileBasedDictionary.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/FileB0000644000175000017500000000251411625126544033346 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * */ package org.apache.uima.tools.cfe.support; /** * @author Igor Sominsky * */ abstract public class FileBasedDictionary extends FileBasedResource { public FileBasedDictionary (String name, String path) { super(name, path); } abstract protected void addEntry(String key, T value, int linenum); abstract protected void addLine(String[] line_columns, int linenum); abstract public T getEntry(String key); abstract public int size(); } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/UIMAAnnotationOffsetComparator.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/support/UIMAA0000644000175000017500000000456111625126544033225 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.support; import java.util.Arrays; import java.util.Comparator; import java.util.List; import org.apache.uima.jcas.tcas.Annotation; public class UIMAAnnotationOffsetComparator implements Comparator { final private List> m_typePriorities; public UIMAAnnotationOffsetComparator (Class[] typePriorities) { if (null == typePriorities) { m_typePriorities = null; } else { m_typePriorities = Arrays.asList(typePriorities); } } public UIMAAnnotationOffsetComparator () { this(null); } public int compare(Annotation a1, Annotation a2) { if (a1.getBegin() < a2.getBegin()) { return -1; } else if (a1.getBegin() > a2.getBegin()) { return 1; } else if (a1.getEnd() < a2.getEnd()) { return -1; } else if (a1.getEnd() > a2.getEnd()) { return 1; } int p1 = 0; int p2 = 0; if (null != m_typePriorities) { p1 = m_typePriorities.indexOf(a1.getClass()); p2 = m_typePriorities.indexOf(a2.getClass()); } return (p1 == p2) ? (a1.getAddress() == a2.getAddress() ? 0 : (a1.getAddress() > a2.getAddress()) ? 1 : -1) : (p1 < p2 ? -1 : 1); } public boolean equal(Annotation a1, Annotation a2) { return 0 == compare(a1, a2); } }././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/EnumFeatureValues.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/EnumFeatureVa0000644000175000017500000000542311625126544033362 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.io.IOException; import java.util.Collection; import java.util.HashSet; import org.apache.uima.tools.cfe.support.EnumeratedEntryDictionary; public class EnumFeatureValues extends CollectionFeatureValues { final public PrimitiveFeatureTransformer m_value_transformer; public EnumFeatureValues (Collection values, boolean case_sensitive) { this((String[])values.toArray(null), case_sensitive); } public EnumFeatureValues (Object[] values, boolean case_sensitive) { super(new HashSet()); m_value_transformer = new PrimitiveFeatureTransformer(case_sensitive); if (null != values) { // values contains strings; if not use converter for (int i = 0; i < values.length; ++i) { m_values.add(getValueNormalizer().normalize(values[i].toString())); } } } public EnumFeatureValues (String path, boolean case_sensitive) throws IOException { super(null); m_value_transformer = new PrimitiveFeatureTransformer(case_sensitive); EnumeratedEntryDictionary fd = new EnumeratedEntryDictionary("enum feature values", path, getValueNormalizer()); fd.load(); m_values = fd.values(); } public EnumFeatureValues () { this((Object[])null, false); } public FeatureValueNormalizer getValueNormalizer () { return m_value_transformer; } public FeatureValueConverter getValueConverter () { return m_value_transformer; } public String getFeatureImage (Object feature) { return m_value_transformer.getValue(feature); } public boolean matches (Object feature) { if (m_values.isEmpty()) { return true; } return m_values.contains(getFeatureImage(feature)); } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/MatchedAnnotationDescriptor.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/MatchedAnnota0000644000175000017500000000465211625126544033364 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.util.Collection; import org.apache.uima.jcas.tcas.Annotation; public class MatchedAnnotationDescriptor { public final FeatureObjectMatcher m_feature_matcher; public final AnnotationMatchedValue m_feature_mv; public final Annotation m_enclosing; public final Collection m_sfms_with_values; public final int m_direction; public final int m_offset; public final int m_orderIndex; public MatchedAnnotationDescriptor(FeatureObjectMatcher fom, Annotation enclosing, AnnotationMatchedValue feature_mv, Collection sfms_with_values, int direction, int offset, int priorityOrder) { m_feature_matcher = fom; m_feature_mv = feature_mv; m_enclosing = enclosing; m_sfms_with_values = sfms_with_values; m_direction = direction; m_offset = offset; m_orderIndex = priorityOrder; } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/ApplierInfoAnnotation_Type.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/ApplierInfoAn0000644000175000017500000002105111625126544033335 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Tue Mar 18 14:49:11 EDT 2008 */ package org.apache.uima.tools.cfe; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Tue Mar 18 14:49:11 EDT 2008 * @generated */ public class ApplierInfoAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (ApplierInfoAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = ApplierInfoAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new ApplierInfoAnnotation(addr, ApplierInfoAnnotation_Type.this); ApplierInfoAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new ApplierInfoAnnotation(addr, ApplierInfoAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = ApplierInfoAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.cfe.ApplierInfoAnnotation"); /** @generated */ final Feature casFeat_Features; /** @generated */ final int casFeatCode_Features; /** @generated */ public int getFeatures(int addr) { if (featOkTst && casFeat_Features == null) jcas.throwFeatMissing("Features", "org.apache.uima.cfe.ApplierInfoAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_Features); } /** @generated */ public void setFeatures(int addr, int v) { if (featOkTst && casFeat_Features == null) jcas.throwFeatMissing("Features", "org.apache.uima.cfe.ApplierInfoAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_Features, v);} /** @generated */ public String getFeatures(int addr, int i) { if (featOkTst && casFeat_Features == null) jcas.throwFeatMissing("Features", "org.apache.uima.cfe.ApplierInfoAnnotation"); if (lowLevelTypeChecks) return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Features), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_Features), i); return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Features), i); } /** @generated */ public void setFeatures(int addr, int i, String v) { if (featOkTst && casFeat_Features == null) jcas.throwFeatMissing("Features", "org.apache.uima.cfe.ApplierInfoAnnotation"); if (lowLevelTypeChecks) ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Features), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_Features), i); ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Features), i, v); } /** @generated */ final Feature casFeat_AppliedAnnotation; /** @generated */ final int casFeatCode_AppliedAnnotation; /** @generated */ public int getAppliedAnnotation(int addr) { if (featOkTst && casFeat_AppliedAnnotation == null) jcas.throwFeatMissing("AppliedAnnotation", "org.apache.uima.cfe.ApplierInfoAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_AppliedAnnotation); } /** @generated */ public void setAppliedAnnotation(int addr, int v) { if (featOkTst && casFeat_AppliedAnnotation == null) jcas.throwFeatMissing("AppliedAnnotation", "org.apache.uima.cfe.ApplierInfoAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_AppliedAnnotation, v);} /** @generated */ final Feature casFeat_Context; /** @generated */ final int casFeatCode_Context; /** @generated */ public int getContext(int addr) { if (featOkTst && casFeat_Context == null) jcas.throwFeatMissing("Context", "org.apache.uima.cfe.ApplierInfoAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_Context); } /** @generated */ public void setContext(int addr, int v) { if (featOkTst && casFeat_Context == null) jcas.throwFeatMissing("Context", "org.apache.uima.cfe.ApplierInfoAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_Context, v);} /** @generated */ public String getContext(int addr, int i) { if (featOkTst && casFeat_Context == null) jcas.throwFeatMissing("Context", "org.apache.uima.cfe.ApplierInfoAnnotation"); if (lowLevelTypeChecks) return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Context), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_Context), i); return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Context), i); } /** @generated */ public void setContext(int addr, int i, String v) { if (featOkTst && casFeat_Context == null) jcas.throwFeatMissing("Context", "org.apache.uima.cfe.ApplierInfoAnnotation"); if (lowLevelTypeChecks) ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Context), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_Context), i); ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_Context), i, v); } /** @generated */ final Feature casFeat_DocumentId; /** @generated */ final int casFeatCode_DocumentId; /** @generated */ public String getDocumentId(int addr) { if (featOkTst && casFeat_DocumentId == null) jcas.throwFeatMissing("DocumentId", "org.apache.uima.cfe.ApplierInfoAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_DocumentId); } /** @generated */ public void setDocumentId(int addr, String v) { if (featOkTst && casFeat_DocumentId == null) jcas.throwFeatMissing("DocumentId", "org.apache.uima.cfe.ApplierInfoAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_DocumentId, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public ApplierInfoAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_Features = jcas.getRequiredFeatureDE(casType, "Features", "uima.cas.StringArray", featOkTst); casFeatCode_Features = (null == casFeat_Features) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Features).getCode(); casFeat_AppliedAnnotation = jcas.getRequiredFeatureDE(casType, "AppliedAnnotation", "org.apache.uima.cfe.AppliedAnnotation", featOkTst); casFeatCode_AppliedAnnotation = (null == casFeat_AppliedAnnotation) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_AppliedAnnotation).getCode(); casFeat_Context = jcas.getRequiredFeatureDE(casType, "Context", "uima.cas.StringArray", featOkTst); casFeatCode_Context = (null == casFeat_Context) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Context).getCode(); casFeat_DocumentId = jcas.getRequiredFeatureDE(casType, "DocumentId", "uima.cas.String", featOkTst); casFeatCode_DocumentId = (null == casFeat_DocumentId) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_DocumentId).getCode(); } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/SenseAnnotation_Type.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/SenseAnnotati0000644000175000017500000000725011625126544033426 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Mar 07 11:37:18 EST 2008 */ package org.apache.uima.tools.cfe; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.tcas.Annotation_Type; /** contains manually preannotated sense, you can derive this with your own type, that might have additional information * Updated by JCasGen Tue Mar 18 14:49:11 EDT 2008 * @generated */ public class SenseAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (SenseAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = SenseAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new SenseAnnotation(addr, SenseAnnotation_Type.this); SenseAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new SenseAnnotation(addr, SenseAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = SenseAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.cfe.SenseAnnotation"); /** @generated */ final Feature casFeat_SENSE; /** @generated */ final int casFeatCode_SENSE; /** @generated */ public String getSENSE(int addr) { if (featOkTst && casFeat_SENSE == null) jcas.throwFeatMissing("SENSE", "org.apache.uima.cfe.SenseAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_SENSE); } /** @generated */ public void setSENSE(int addr, String v) { if (featOkTst && casFeat_SENSE == null) jcas.throwFeatMissing("SENSE", "org.apache.uima.cfe.SenseAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_SENSE, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public SenseAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_SENSE = jcas.getRequiredFeatureDE(casType, "SENSE", "uima.cas.String", featOkTst); casFeatCode_SENSE = (null == casFeat_SENSE) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_SENSE).getCode(); } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/ObjectPathFeatureValues.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/ObjectPathFea0000644000175000017500000000635611625126544033320 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import org.apache.uima.cas.FSIterator; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.tools.cfe.support.FeatureConstrainedIterator; import org.apache.uima.tools.cfe.support.UIMAAnnotationUtils; public class ObjectPathFeatureValues extends CollectionFeatureValues { String m_object_type_name; String m_object_path; public ObjectPathFeatureValues (String object_type_name, String object_path) { super(new HashSet()); m_object_type_name = object_type_name; m_object_path = object_path; } void update (Object source, Annotation enclosing, Collection previosly_matched_objects) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException, InvocationTargetException { m_values.clear(); JCas jcas = (JCas)source; TargetObjectMatcher tom = new TargetObjectMatcher(m_object_type_name, m_object_path, false); Class cls_ann = UIMAAnnotationUtils.getAnnotationClass(tom.getRootClass()); for (FSIterator root_ann_it = FeatureConstrainedIterator.getEnclosedIterator(jcas, cls_ann, enclosing); root_ann_it.hasNext();) { List mfvs = tom.getFeatureValues(new AnnotationMatchedValue((Annotation)root_ann_it.next(), new ArrayList())); // exclude prioritized models (previously specified in config file) if (null != previosly_matched_objects) { MatchedValue.removeAll(mfvs, previosly_matched_objects); if (!tom.isDetached()) { // add annotation only if it is included into a model previosly_matched_objects.addAll(mfvs); } } m_values.addAll(mfvs); } } public String getFeatureImage (Object feature) { return m_object_type_name + "," + m_object_path; } public boolean matches (Object feature) { return m_values.contains(feature); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/AnnotationMatchedValue.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/AnnotationMat0000644000175000017500000000375011625126544033430 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.util.Collection; import java.util.List; import org.apache.uima.jcas.tcas.Annotation; public class AnnotationMatchedValue extends MatchedValue { public AnnotationMatchedValue (MatchedValue mv) { super(mv.m_matchedObject, mv.m_orderedPath); getAnnotation(); // should throw an exception if m_matchedObject is not of Annotation type } public AnnotationMatchedValue (Annotation matchedObject) { super(matchedObject); } public AnnotationMatchedValue (Annotation matchedObject, List orderedPath) { super(matchedObject, orderedPath); } public Annotation getAnnotation() { return (Annotation)super.m_matchedObject; } public static Collection upcast (Collection trg, Collection src) { for (MatchedValue mv : src) { trg.add(new AnnotationMatchedValue(mv)); } return trg; } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CollectionFeatureValues.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CollectionFea0000644000175000017500000000223011625126544033353 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.util.Collection; public abstract class CollectionFeatureValues implements FeatureValues { Collection m_values; public CollectionFeatureValues (Collection values) { m_values = values; } public abstract boolean matches (Object feature); } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CFEConfigFromXML_Ecore.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CFEConfigFrom0000644000175000017500000003034011625126544033216 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.io.IOException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.uima.tools.cfe.config.BitsetFeatureValuesXML; import org.apache.uima.tools.cfe.config.CFEDescriptorXML; import org.apache.uima.tools.cfe.config.DocumentRoot; import org.apache.uima.tools.cfe.config.EnumFeatureValuesXML; import org.apache.uima.tools.cfe.config.FeatureObjectMatcherXML; import org.apache.uima.tools.cfe.config.GroupFeatureMatcherXML; import org.apache.uima.tools.cfe.config.ObjectPathFeatureValuesXML; import org.apache.uima.tools.cfe.config.PartialObjectMatcherXML; import org.apache.uima.tools.cfe.config.PatternFeatureValuesXML; import org.apache.uima.tools.cfe.config.RangeFeatureValuesXML; import org.apache.uima.tools.cfe.config.SingleFeatureMatcherXML; import org.apache.uima.tools.cfe.config.TargetAnnotationXML; import org.apache.uima.tools.cfe.config.impl.ConfigFactoryImpl; import org.apache.uima.tools.cfe.config.impl.ConfigPackageImpl; import org.apache.uima.tools.cfe.config.util.ConfigResourceFactoryImpl; import org.apache.uima.tools.cfe.config.util.ConfigResourceImpl; import org.apache.uima.tools.cfe.config.util.ConfigResourceUtil; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; public class CFEConfigFromXML_Ecore { private CFEDescriptorXML m_CFEDescriptor; public CFEConfigFromXML_Ecore (String path) throws IOException { ConfigResourceUtil cru = ConfigResourceUtil.getInstance(); DocumentRoot r = cru.load("file://" + path); m_CFEDescriptor = r.getCFEConfig(); } private static boolean m_init = false; private DocumentRoot load(String filename) throws IOException { if (!m_init) { Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xml", new ConfigResourceFactoryImpl()); ConfigPackageImpl.init(); ConfigFactoryImpl.init(); m_init = true; } ConfigResourceImpl resource = (ConfigResourceImpl)(new ConfigResourceFactoryImpl()).createResource(URI.createURI("file://" + filename)); resource.load(null); DocumentRoot documentRoot = (DocumentRoot)resource.getContents().get(0); return documentRoot; } public CFEConfigFromXML_Ecore (String path, boolean manual) throws IOException { DocumentRoot r = load(path); m_CFEDescriptor = r.getCFEConfig(); } EnumFeatureValues getEnumFeatureValues(EnumFeatureValuesXML efvs_xml) throws IOException, URISyntaxException { List vals = efvs_xml.getValues(); if ((1 == vals.size()) && (((String)vals.get(0))).startsWith("file://")) { return new EnumFeatureValues(new java.net.URI((String)vals.get(0)).getPath(), efvs_xml.isCaseSensitive()); } return new EnumFeatureValues(vals.toArray(), efvs_xml.isCaseSensitive()); } RangeFeatureValues getRangeFeatureValues(RangeFeatureValuesXML rfvs_xml) { String lb = ((String)rfvs_xml.getLowerBoundary()).trim(); String ub = ((String)rfvs_xml.getUpperBoundary()).trim(); return new RangeFeatureValues(Double.parseDouble(lb), rfvs_xml.isLowerBoundaryInclusive(), Double.parseDouble(ub), rfvs_xml.isUpperBoundaryInclusive()); } BitsetFeatureValues getBitsetFeatureValues(BitsetFeatureValuesXML bfvs_xml) { return new BitsetFeatureValues(Integer.parseInt(bfvs_xml.getBitmask(), 16), bfvs_xml.isExactMatch()); } PatternFeatureValues getPatternFeatureValues(PatternFeatureValuesXML pattern_xml) { return new PatternFeatureValues(pattern_xml.getPattern()); } ObjectPathFeatureValues getObjectPathFeatureValues(ObjectPathFeatureValuesXML opfvs_xml, String feature_class) { return new ObjectPathFeatureValues(feature_class, opfvs_xml.getObjectPath()); } SingleFeatureMatcher getSingleFeatureMatcher(SingleFeatureMatcherXML sfm_xml, String obj_class) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IOException, URISyntaxException { if (null != sfm_xml.getEnumFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.isExclude(), sfm_xml.isQuiet(), getEnumFeatureValues(sfm_xml.getEnumFeatureValues())); } else if (null != sfm_xml.getRangeFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.isExclude(), sfm_xml.isQuiet(), getRangeFeatureValues(sfm_xml.getRangeFeatureValues())); } else if (null != sfm_xml.getBitsetFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.isExclude(), sfm_xml.isQuiet(), getBitsetFeatureValues(sfm_xml.getBitsetFeatureValues())); } else if (null != sfm_xml.getPatternFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.isExclude(), sfm_xml.isQuiet(), getPatternFeatureValues(sfm_xml.getPatternFeatureValues())); } else if (null != sfm_xml.getObjectPathFeatureValues()) { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.isExclude(), sfm_xml.isQuiet(), getObjectPathFeatureValues(sfm_xml.getObjectPathFeatureValues(), sfm_xml.getFeatureTypeName())); } else { return new SingleFeatureMatcher(sfm_xml.getFeatureTypeName(), obj_class + ":" + sfm_xml.getFeaturePath(), sfm_xml.isExclude(), sfm_xml.isQuiet(), new EnumFeatureValues()); // would match any value } } GroupFeatureMatcher getGroupFeatureMatcher(GroupFeatureMatcherXML gfm_xml, String obj_class_name) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IOException, URISyntaxException { List fms_xml = gfm_xml.getFeatureMatchers(); List sfms = new ArrayList(); for (Iterator fm_it = fms_xml.iterator(); fm_it.hasNext();) { sfms.add(getSingleFeatureMatcher((SingleFeatureMatcherXML)fm_it.next(), obj_class_name)); } return new GroupFeatureMatcher(sfms, gfm_xml.isExclude()); } PartialObjectMatcher getPartialObjectMatcher(PartialObjectMatcherXML pom_xml) throws SecurityException, NoSuchMethodException, IOException, URISyntaxException, ClassNotFoundException { List gfms_xml = pom_xml.getGroupFeatureMatchers(); List gfms = new ArrayList(); for (Iterator it = gfms_xml.iterator(); it.hasNext();) { gfms.add(getGroupFeatureMatcher((GroupFeatureMatcherXML)it.next(), pom_xml.getAnnotationTypeName())); } return new PartialObjectMatcher(pom_xml.getAnnotationTypeName(), pom_xml.getFullPath(), gfms); } FeatureObjectMatcher getFeatureObjectMatcher(FeatureObjectMatcherXML fom_xml) throws SecurityException, NoSuchMethodException, IOException, ClassNotFoundException, URISyntaxException { List gfms_xml = fom_xml.getGroupFeatureMatchers(); List gfms = new ArrayList(); for (Iterator it = gfms_xml.iterator(); it.hasNext();) { gfms.add(getGroupFeatureMatcher((GroupFeatureMatcherXML)it.next(), fom_xml.getAnnotationTypeName())); } return new FeatureObjectMatcher(fom_xml.getAnnotationTypeName(), fom_xml.getFullPath(), gfms, fom_xml.getWindowsizeLeft(), fom_xml.getWindowsizeInside(), fom_xml.getWindowsizeRight(), fom_xml.getWindowsizeEnclosed(), fom_xml.getWindowFlags(), fom_xml.isOrientation(), fom_xml.isDistance()); } TargetAnnotationDescriptor getTargetAnnotationDescriptor(TargetAnnotationXML ta_xml, int priorityOrder) throws SecurityException, NoSuchMethodException, IOException, ClassNotFoundException, URISyntaxException { PartialObjectMatcher ta_matcher = getPartialObjectMatcher(ta_xml.getTargetAnnotationMatcher()); List fams_xml = ta_xml.getFeatureAnnotationMatchers(); List fams = new ArrayList(); for (Iterator it = fams_xml.iterator(); it.hasNext();) { fams.add(getFeatureObjectMatcher((FeatureObjectMatcherXML)it.next())); } return new TargetAnnotationDescriptor(ta_xml.getClassName(), ta_xml.getEnclosingAnnotation(), ta_matcher, fams, priorityOrder); } public List getTargetAnnotationDescriptors() throws SecurityException, NoSuchMethodException, IOException, ClassNotFoundException, URISyntaxException { List result = new ArrayList(); List tans = m_CFEDescriptor.getTargetAnnotations(); for (Iterator it = tans.iterator(); it.hasNext();) { result.add(getTargetAnnotationDescriptor((TargetAnnotationXML)it.next(), result.size() + 1)); } return result; } public String getNullValueImage() { return m_CFEDescriptor.getNullValueImage(); } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/SingleFeatureMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/SingleFeature0000644000175000017500000001314311625126544033406 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Iterator; import java.util.List; public class SingleFeatureMatcher { TargetObjectMatcher m_feature_matcher; FeatureValues m_feature_values; final boolean m_exclude; final boolean m_quiet; public SingleFeatureMatcher (String feat_class_name, String feat_full_path, boolean exclude, boolean quiet, FeatureValues fvals) throws SecurityException, NoSuchMethodException, ClassNotFoundException { m_feature_matcher = new TargetObjectMatcher(feat_class_name, feat_full_path, true); m_exclude = exclude; m_feature_values = fvals; m_quiet = quiet; } public SingleFeatureMatcher (String feat_class_name, String full_feat_path, boolean exclude, boolean quiet, Collection values, boolean case_sensitive) throws SecurityException, NoSuchMethodException, ClassNotFoundException { this(feat_class_name, full_feat_path, exclude, quiet, new EnumFeatureValues(values, case_sensitive)); } public SingleFeatureMatcher (String feat_class_name, String full_feat_path, boolean exclude, boolean quiet, String path, boolean case_sensitive) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IOException { this(feat_class_name, full_feat_path, exclude, quiet, new EnumFeatureValues(path, case_sensitive)); } public SingleFeatureMatcher (String feat_class_name, String full_feat_path, boolean exclude, boolean quiet, Double lb, boolean lbi, Double ub, boolean ubi) throws SecurityException, NoSuchMethodException, ClassNotFoundException { this(feat_class_name, full_feat_path, exclude, quiet, new RangeFeatureValues(lb, lbi, ub, ubi)); } public SingleFeatureMatcher (String feat_class_name, String full_feat_path, boolean exclude, boolean quiet, int bitmask, boolean exact_match) throws SecurityException, NoSuchMethodException, ClassNotFoundException { this(feat_class_name, full_feat_path, exclude, quiet, new BitsetFeatureValues(bitmask, exact_match)); } public SingleFeatureMatcher (String feat_class_name, String full_feat_path, boolean exclude, boolean quiet, String pattern) throws SecurityException, NoSuchMethodException, ClassNotFoundException { this(feat_class_name, full_feat_path, exclude, quiet, new PatternFeatureValues(pattern)); } public boolean matches (MatchedValue mv, List matchedValues) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { List vals = m_feature_matcher.getFeatureValues(mv); // if vals is empty that means the feature value is not present (not even null) // null pointers will be added to the list matchedValues.addAll(vals); for (Iterator it = vals.iterator(); it.hasNext();) { if (m_feature_values.matches(it.next().m_matchedObject)) { return !m_exclude; } } return m_exclude; } void update(Object source) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException, InvocationTargetException { if (m_feature_values instanceof ObjectPathFeatureValues) { ((ObjectPathFeatureValues)m_feature_values).update(source, null, null); } } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/FeatureObjectMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/FeatureObject0000644000175000017500000000640611625126544033377 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.util.Collection; public class FeatureObjectMatcher extends PartialObjectMatcher { public final int m_windowsizeLeft; public final int m_windowsizeInside; public final int m_windowsizeRight; public final int m_windowsizeEnclosed; public final int m_windowFlags; public final boolean m_orientation; public final boolean m_distance; public FeatureObjectMatcher (String class_name, String full_path, Collection gfms, int windowsizeLeft, int windowsizeInside, int windowsizeRight, int windowsizeEnclosed, int windowFlags, boolean orientation, boolean distance) throws ClassNotFoundException { super(class_name, full_path, gfms); m_windowsizeLeft = windowsizeLeft; m_windowsizeInside = windowsizeInside; m_windowsizeRight = windowsizeRight; m_windowsizeEnclosed = windowsizeEnclosed; m_windowFlags = windowFlags; m_orientation = orientation; m_distance = distance; } public FeatureObjectMatcher (String class_name, String ful_path, int windowsizeLeft, int windowsizeInside, int windowsizeRight, int windowsizeEnclosed, int windowFlags, boolean orientation, boolean distance) throws ClassNotFoundException { this(class_name, ful_path, null, windowsizeLeft, windowsizeInside, windowsizeRight, windowsizeEnclosed, windowFlags, orientation, distance); } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/TargetObjectMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/TargetObjectM0000644000175000017500000004726111625126544033353 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.jxpath.JXPathContext; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.tools.cfe.support.ArrayComparatorFinder; public class TargetObjectMatcher { private Class m_root_class; private Class m_target_class; private String[] m_target_path_tokens; private final boolean m_delimit_array_values; static private final String KEYWORD_SORT = "sort"; private TargetObjectMatcher (Class target_class, String[] full_target_path_tokens, boolean delimit_array_values) throws ClassNotFoundException { m_delimit_array_values = delimit_array_values; m_target_class = target_class; m_root_class = Class.forName(full_target_path_tokens[0]); m_target_path_tokens = new String[full_target_path_tokens.length - 1]; for (int i = 1; i < full_target_path_tokens.length; ++i) { m_target_path_tokens[i - 1] = full_target_path_tokens[i]; } } public TargetObjectMatcher (Class target_class, String full_target_path, boolean delimit_array_values) throws ClassNotFoundException { this(target_class, full_target_path.split("\\:"), delimit_array_values); } public TargetObjectMatcher (String trg_cls_name, String full_target_path, boolean delimit_array_values) throws ClassNotFoundException { this((null == trg_cls_name) || (0 == trg_cls_name.length()) ? null : Class.forName(trg_cls_name), full_target_path, delimit_array_values); } // private TargetObjectMatcher (PartialObjectMatcher pom, boolean delimit_array_values) // throws ClassNotFoundException // { // this(pom.getMatcherClass(), pom.getObjectPath(), delimit_array_values); // } Class getRootClass () { return m_root_class; } Class getTargetClass () { return m_target_class; } boolean isTargetClassMatches (Class cls, boolean exact) { if (null == m_target_class) { return exact ? (null == cls) : true; } return exact ? m_target_class.equals(cls) : m_target_class.isAssignableFrom(cls); } String getFeaturePathImage () { StringBuilder result = new StringBuilder(); for (int i = 0; i < m_target_path_tokens.length; ++i) { if (0 != i) { result.append("_"); } result.append(m_target_path_tokens[i]); } return result.toString(); } boolean isDetached() { return isTargetClassMatches(m_root_class, true); } static private Method findGetMethod (Class obj_class, String method_name) { return findMethod(obj_class, method_name, (Class[])null, null); } static private Method findMethod (Class obj_class, String method_name, Class[] method_params, Class method_return) { Method[] mtds = obj_class.getMethods(); for (int m_ind = 0; m_ind < mtds.length; ++m_ind) { if (!mtds[m_ind].getName().equals(method_name)) { continue; } if ((null == method_params) && (mtds[m_ind].getParameterTypes().length > 0)) { continue; } else if ((null != method_params) && !Arrays.equals(method_params, mtds[m_ind].getParameterTypes())) { continue; } if ((null != method_return) && !method_return.equals(mtds[m_ind].getReturnType())) { continue; } return mtds[m_ind]; } return null; } static private Pattern m_featname_pattern = Pattern.compile("([^\\[\\]]+)"); static String parseFeatureName(String feature, List postProcOps) { Matcher m = m_featname_pattern.matcher(feature); String result = null; while (m.find()) { String group = m.group(); if (null == result) { result = group; continue; } postProcOps.add(group); } if (null == result) { return feature; } return result; } static Object[] processPostProcOps (Object[] elements, List postProcOps) { List new_elements = new ArrayList(); boolean use_new_elements = false; for (Iterator it = postProcOps.iterator(); it.hasNext();) { String op_name = it.next(); if (op_name.matches("^\\d+")) { use_new_elements = true; int ind = Integer.parseInt(op_name); if (ind < elements.length) { new_elements.add(elements[ind]); } } else { if (op_name.matches("\\d+..(-1|\\d+)")) { use_new_elements = true; String[] boundaries = op_name.split("\\.\\."); assert(2 == boundaries.length); int b = Integer.parseInt(boundaries[0]); int e = Integer.parseInt(boundaries[1]); e = (-1 == e) ? elements.length - 1 : Math.min(e, elements.length - 1); while (b <= e) { new_elements.add(elements[b++]); } } else if (op_name.equals(KEYWORD_SORT)) { if (use_new_elements) { elements = new_elements.toArray(); new_elements.clear(); } Comparator cmptr = ArrayComparatorFinder.find(elements); if (null != cmptr) { Arrays.sort((Annotation[])elements, cmptr); } } } } if (use_new_elements) { elements = new_elements.toArray(); new_elements.clear(); } return elements; } /* private void getMatchedValues (Object[] objs, String[] features, int feat_ind, List matchedValues, int array_level, List orderedPath) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { String toks[] = features[feat_ind].split("\\|"); for (int i = 0; i < objs.length; ++i) { if (null == objs[i]) { continue; } Object result = null; List postProcOps = new ArrayList(); for (int tok_ind = 0; tok_ind < toks.length; ++tok_ind) { postProcOps.clear(); String feat_name = parseFeatureName(toks[tok_ind], postProcOps); Method get_feat_method = findGetMethod(objs[i].getClass(), feat_name); if (null == get_feat_method) { feat_name = "get" + PrimitiveFeatureTransformer.capitalize(feat_name); get_feat_method = findGetMethod(objs[i].getClass(), feat_name); if (null == get_feat_method) { // no such feature System.err.println("Class \"" + objs[i].getClass().getName() + "\": Feature:\"" + feat_name + "\" is not found"); break; } } result = get_feat_method.invoke(objs[i], (Object[])null); if (null != result) { break; } } // increment the feature index now int next_feat_ind = feat_ind + 1; if (null == result) { matchedValues.add(new MatchedValue(null, orderedPath)); if (m_delimit_array_values && (i < (objs.length - 1))) { matchedValues.add(new MatchedValue(new ArrayDelimiterObject(array_level), orderedPath)); } continue; // through the rest of obj } if (result.getClass().isArray()) { Object[] elements = (Object[])result; if (!postProcOps.isEmpty()) { elements = processPostProcOps(elements, postProcOps); } orderedPath.add(elements); for (int j = 0; j < elements.length; ++j) { if (features.length == next_feat_ind) { if ((null == elements[j]) || isTargetClassMatches(elements[j].getClass(), false)) { matchedValues.add(new MatchedValue(elements[j], orderedPath)); if (m_delimit_array_values && (j < (elements.length - 1))) { matchedValues.add(new MatchedValue(new ArrayDelimiterObject(array_level), orderedPath)); } } } } if (features.length == next_feat_ind) { continue; // through the rest of obj } if (m_delimit_array_values) { MatchedValue mv = matchedValues.get(0); mv.m_matchedObject = new ArrayDelimiterObject(array_level + 1); } getMatchedValues(elements, features, next_feat_ind, matchedValues, array_level + 1, orderedPath); } else { if (features.length == next_feat_ind) { if (isTargetClassMatches(result.getClass(), false)) { matchedValues.add(new MatchedValue(result, orderedPath)); if (m_delimit_array_values && (i < (objs.length - 1))) { matchedValues.add(new MatchedValue(new ArrayDelimiterObject(array_level), orderedPath)); } } continue; // through the rest of obj } orderedPath.add(result); getMatchedValues(new Object[] {result}, features, next_feat_ind, matchedValues, array_level, orderedPath); } if (m_delimit_array_values && (i < (objs.length - 1))) { matchedValues.add(new MatchedValue(new ArrayDelimiterObject(array_level), orderedPath)); } } } */ public List getFeatureValues (MatchedValue mv) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { // allows derived classes to be processed List result = new ArrayList(); if (m_delimit_array_values) { // set max array level result.add(new MatchedValue(new ArrayDelimiterObject(0), new ArrayList())); } if (! m_root_class.isAssignableFrom(mv.m_matchedObject.getClass())) { return result; } else if (0 == m_target_path_tokens.length) { if (isTargetClassMatches(mv.m_matchedObject.getClass(), false)) { result.add(mv); } return result; } if ((1 == m_target_path_tokens.length) && m_target_path_tokens[0].contains("/")) { // if the path is an xpath (separator is '/') then it will // be a single "token" as parsing only splits on ':' // WARNING: JXPath is not supported!!! just experimenting // the biggest issue so far is that elements of arrays are not separated // by the objects containing them, // so for the path: // array_feature1/regular_feature/array_feature2/regular_feature2 // all values for regular_feature2 are iterated by a single iterator // and it is not clear to which element of array_feature1 a particular // regular_feature2 belongs JXPathContext ctx = JXPathContext.newContext(mv.m_matchedObject); ctx.setLenient(true); for (Iterator it = ctx.iterate(m_target_path_tokens[0]); it.hasNext();) { // System.out.printf("%s=%s\n", m_target_path_tokens[0], it.next()); if (result.size() > 1 && m_delimit_array_values) { result.add(new MatchedValue(new ArrayDelimiterObject(0), new ArrayList())); } result.add(new MatchedValue(it.next(), new ArrayList())); } } else { getMatchedValues(new Object[] {mv.m_matchedObject}, mv.m_orderedPath, m_target_path_tokens, 0, result, new ArrayList(), -1); } return result; } private void getMatchedValues (Object[] objs, List rootOrderedPath, String[] features, int feat_ind, List matchedValues, List matchedOrderedPath, int array_level) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { String operations[] = feat_ind < features.length ? features[feat_ind].split("\\|") : null; for (int i = 0; i < objs.length; ++i) { if (feat_ind == features.length) { if ((null == objs[i]) || isTargetClassMatches(objs[i].getClass(), false)) { matchedValues.add(new MatchedValue(objs[i], matchedOrderedPath)); } continue; } if (null == objs[i]) { continue; } matchedOrderedPath.add(objs[i]); List mop = (1 == objs.length) ? matchedOrderedPath : new ArrayList(matchedOrderedPath); getMatchedValues(objs[i], rootOrderedPath, features, feat_ind, matchedValues, mop, array_level, operations); if (m_delimit_array_values && (i < (objs.length - 1))) { matchedValues.add(new MatchedValue(new ArrayDelimiterObject(array_level), mop)); } } } static private Pattern m_parentPattern = Pattern.compile("__p([\\d]+)"); Object getOperationResult (Object obj, List rootOrderedPath, String [] operations, List postProcOps) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { Object result = null; for (int tok_ind = 0; tok_ind < operations.length; ++tok_ind) { postProcOps.clear(); String feat_name = parseFeatureName(operations[tok_ind], postProcOps); Matcher m = m_parentPattern.matcher(feat_name); int parInd = Integer.MIN_VALUE; if (m.find()) { parInd = Integer.parseInt(m.group(1)); if (m.find()) { throw new IllegalArgumentException("malformed operation name"); } // no check. an exception to be thrown in case of an error result = rootOrderedPath.get(parInd); break; } Method get_feat_method = findGetMethod(obj.getClass(), feat_name); if (null == get_feat_method) { feat_name = "get" + PrimitiveFeatureTransformer.capitalize(feat_name); get_feat_method = findGetMethod(obj.getClass(), feat_name); if (null == get_feat_method) { // no such feature System.err.println("Class \"" + obj.getClass().getName() + "\": Feature:\"" + feat_name + "\" is not found"); break; } } result = get_feat_method.invoke(obj, (Object[])null); if (null != result) { break; } } return result; } private void getMatchedValues (Object obj, List rootOrderedPath, String[] features, int feat_ind, List matchedValues, List matchedOrderedPath, int array_level, String [] operations) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { List postProcOps = new ArrayList(); Object result = getOperationResult(obj, rootOrderedPath, operations, postProcOps); if (null == result) { matchedValues.add(new MatchedValue(null, matchedOrderedPath)); return; } // increment the feature index now int next_feat_ind = feat_ind + 1; if (result.getClass().isArray()) { Object[] elements = (Object[])result; if (!postProcOps.isEmpty()) { elements = processPostProcOps(elements, postProcOps); } if (m_delimit_array_values) { MatchedValue mv = matchedValues.get(0); mv.m_matchedObject = new ArrayDelimiterObject(array_level + 1); } getMatchedValues(elements, rootOrderedPath, features, next_feat_ind, matchedValues, matchedOrderedPath, array_level + 1); } else { getMatchedValues(new Object[] {result}, rootOrderedPath, features, next_feat_ind, matchedValues, matchedOrderedPath, array_level); } } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/UIMAFeatureTransformer.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/UIMAFeatureTr0000644000175000017500000000272611625126544033233 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.tcas.Annotation; public class UIMAFeatureTransformer extends PrimitiveFeatureTransformer { UIMAFeatureTransformer(boolean case_sensitive) { super(case_sensitive); } public String convert (Object feature) { if (feature instanceof FSArray) { return feature.getClass().getName() + "_" + ((FSArray)feature).size(); } else if (feature instanceof Annotation) { return feature.getClass().getName(); } return super.convert(feature); } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/MatchedSingleFeatureMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/MatchedSingle0000644000175000017500000000465611625126544033371 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.util.Iterator; import java.util.List; public class MatchedSingleFeatureMatcher { final public SingleFeatureMatcher m_matcher; final public List m_values; MatchedSingleFeatureMatcher(SingleFeatureMatcher matcher, List values) { m_matcher = matcher; m_values = values; } String getFeatureImage(boolean feat_name, String[] value_separators) { StringBuilder result = new StringBuilder(); ArrayDelimiterObject max_level = null; if (!m_values.isEmpty()) { // first element must be max_level max_level = (ArrayDelimiterObject) m_values.get(0).m_matchedObject; } for (Iterator it = m_values.iterator(); it.hasNext();) { Object obj = it.next().m_matchedObject; if (max_level == obj) { continue; } if (obj instanceof ArrayDelimiterObject) { ArrayDelimiterObject ado = (ArrayDelimiterObject)obj; int ind = Math.min(max_level.m_level - ado.m_level, value_separators.length - 1); result.append(value_separators[ind]); } else { result.append(m_matcher.m_feature_values.getFeatureImage(obj)); } } if (feat_name) { return m_matcher.m_feature_matcher.getFeaturePathImage() + value_separators[0] + result; } else { return result.toString(); } } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/AppliedAnnotation_Type.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/AppliedAnnota0000644000175000017500000001105011625126544033363 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Tue Mar 18 14:49:11 EDT 2008 */ package org.apache.uima.tools.cfe; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.tcas.Annotation_Type; /** Annotation that contains truth(if available) and assigned senses * Updated by JCasGen Tue Mar 18 14:49:11 EDT 2008 * @generated */ public class AppliedAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (AppliedAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = AppliedAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new AppliedAnnotation(addr, AppliedAnnotation_Type.this); AppliedAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new AppliedAnnotation(addr, AppliedAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = AppliedAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.cfe.AppliedAnnotation"); /** @generated */ final Feature casFeat_Assigned; /** @generated */ final int casFeatCode_Assigned; /** @generated */ public int getAssigned(int addr) { if (featOkTst && casFeat_Assigned == null) jcas.throwFeatMissing("Assigned", "org.apache.uima.cfe.AppliedAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_Assigned); } /** @generated */ public void setAssigned(int addr, int v) { if (featOkTst && casFeat_Assigned == null) jcas.throwFeatMissing("Assigned", "org.apache.uima.cfe.AppliedAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_Assigned, v);} /** @generated */ final Feature casFeat_Truth; /** @generated */ final int casFeatCode_Truth; /** @generated */ public int getTruth(int addr) { if (featOkTst && casFeat_Truth == null) jcas.throwFeatMissing("Truth", "org.apache.uima.cfe.AppliedAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_Truth); } /** @generated */ public void setTruth(int addr, int v) { if (featOkTst && casFeat_Truth == null) jcas.throwFeatMissing("Truth", "org.apache.uima.cfe.AppliedAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_Truth, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public AppliedAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_Assigned = jcas.getRequiredFeatureDE(casType, "Assigned", "org.apache.uima.cfe.SenseAnnotation", featOkTst); casFeatCode_Assigned = (null == casFeat_Assigned) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Assigned).getCode(); casFeat_Truth = jcas.getRequiredFeatureDE(casType, "Truth", "org.apache.uima.cfe.SenseAnnotation", featOkTst); casFeatCode_Truth = (null == casFeat_Truth) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Truth).getCode(); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/FeatureValues.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/FeatureValues0000644000175000017500000000177711625126544033436 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; public interface FeatureValues { abstract public boolean matches (Object feature); abstract public String getFeatureImage (Object feature); } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/SenseAnnotation.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/SenseAnnotati0000644000175000017500000000635511625126544033433 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Fri Mar 07 11:37:18 EST 2008 */ package org.apache.uima.tools.cfe; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** contains manually preannotated sense, you can derive this with your own type, that might have additional information * Updated by JCasGen Tue Mar 18 14:49:11 EDT 2008 * XML source: C:/eclipse/CFE/org/apache/uima/cfe/AppliedSenseAnnotation.xml * @generated */ public class SenseAnnotation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(SenseAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected SenseAnnotation() {} /** Internal - constructor used by generator * @generated */ public SenseAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public SenseAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public SenseAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: SENSE /** getter for SENSE - gets sense name * @generated */ public String getSENSE() { if (SenseAnnotation_Type.featOkTst && ((SenseAnnotation_Type)jcasType).casFeat_SENSE == null) jcasType.jcas.throwFeatMissing("SENSE", "org.apache.uima.cfe.SenseAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((SenseAnnotation_Type)jcasType).casFeatCode_SENSE);} /** setter for SENSE - sets sense name * @generated */ public void setSENSE(String v) { if (SenseAnnotation_Type.featOkTst && ((SenseAnnotation_Type)jcasType).casFeat_SENSE == null) jcasType.jcas.throwFeatMissing("SENSE", "org.apache.uima.cfe.SenseAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((SenseAnnotation_Type)jcasType).casFeatCode_SENSE, v);} } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CommonFeatureMatcher.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/CommonFeature0000644000175000017500000007045411625126544033425 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.uima.cas.FSIterator; import org.apache.uima.examples.SourceDocumentInformation; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.tools.cfe.support.FeatureConstrainedIterator; import org.apache.uima.tools.cfe.support.UIMAAnnotationUtils; import org.apache.xmlbeans.XmlException; public abstract class CommonFeatureMatcher { abstract protected void processFeatureGroup(JCas jcas, Annotation trg, String group_label, Collection features) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException; private Map>> m_feature_annotations; private Collection m_TADescriptors; public final boolean m_isAnnotationName; public final boolean m_isFeatureName; public final boolean m_isTargetId; public final String m_fieldSeparator; public final String[] m_valueSeparators; public static final String PARAM_CONFIGURATIONFILE = "ConfigurationFile"; public static final String PARAM_INCLUDETARGETID = "IncludeTargetId"; public static final String PARAM_INCLUDEANNOTATIONNAME = "IncludeAnnotationName"; public static final String PARAM_INCLUDEFEATURENAME = "IncludeFeatureName"; public static final String PARAM_XMLBEANSPARSER = "XMLBeansParser"; public static final int CONSTANT_INGORE = 0; public static final int CONSTANT_LEFTLEFT = 1 << 0; // 1 public static final int CONSTANT_LEFTINSIDE = 1 << 1; // 2 public static final int CONSTANT_LEFTRIGHT = 1 << 2; // 4 public static final int CONSTANT_INSIDEINSIDE = 1 << 3; // 8 public static final int CONSTANT_INSIDERIGHT = 1 << 4; // 16 public static final int CONSTANT_RIGHTRIGHT = 1 << 5; // 32 public static final int CONSTANT_STARTSLEFT = CONSTANT_LEFTLEFT | CONSTANT_LEFTINSIDE | CONSTANT_LEFTRIGHT; // 7 public static final int CONSTANT_STARTSINSIDE = CONSTANT_INSIDEINSIDE | CONSTANT_INSIDERIGHT; // 24 public static final int CONSTANT_STARTSRIGHT = CONSTANT_RIGHTRIGHT; // 32 public static final int CONSTANT_ANYENCLOSED = CONSTANT_STARTSLEFT | CONSTANT_STARTSINSIDE | CONSTANT_STARTSRIGHT; // 63 CommonFeatureMatcher(boolean isTargetId, boolean isAnnotationName, boolean isFeatureName, String fieldSeparator, String[] valueSeparators) { m_isTargetId = isTargetId; m_isAnnotationName = isAnnotationName; m_isFeatureName = isFeatureName; m_fieldSeparator = fieldSeparator; m_valueSeparators = valueSeparators; } public void initialize (String configfile, boolean isXMLBeansParser) throws SecurityException, ClassNotFoundException, NoSuchMethodException, URISyntaxException, IOException, XmlException { if (isXMLBeansParser) { parseConfigFile_XMLBeans(configfile); } else { parseConfigFile_Ecore(configfile); } } void parseConfigFile_Ecore (String path) throws IOException, ClassNotFoundException, SecurityException, NoSuchMethodException, URISyntaxException { CFEConfigFromXML_Ecore xml2CFE = new CFEConfigFromXML_Ecore(path); if (null != xml2CFE.getNullValueImage()) { PrimitiveFeatureTransformer.nullValueImage = xml2CFE.getNullValueImage(); } m_TADescriptors = xml2CFE.getTargetAnnotationDescriptors(); } void parseConfigFile_XMLBeans (String path) throws IOException, ClassNotFoundException, SecurityException, NoSuchMethodException, URISyntaxException, XmlException { CFEConfigFromXML_XMLBeans xml2CFE = new CFEConfigFromXML_XMLBeans(path); if (null != xml2CFE.getNullValueImage()) { PrimitiveFeatureTransformer.nullValueImage = xml2CFE.getNullValueImage(); } m_TADescriptors = xml2CFE.getTargetAnnotationDescriptors(); } void processSelectedFeatureAnnotation(JCas jcas) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { for (Iterator it = m_feature_annotations.keySet().iterator(); it.hasNext();) { AnnotationMatchedValue trg_mv = it.next(); Map> target_feature_groups = m_feature_annotations.get(trg_mv); for (Map.Entry> entry : target_feature_groups.entrySet()) { String class_label = entry.getKey(); Collection features = entry.getValue(); processFeatureGroup(jcas, trg_mv.getAnnotation(), class_label, features); } } } protected static String make_image_position (MatchedAnnotationDescriptor mad) { StringBuilder strBuf = new StringBuilder(); if (mad.m_feature_matcher.m_orientation) { strBuf.append((CONSTANT_LEFTLEFT == mad.m_direction) ? "L" : (CONSTANT_LEFTINSIDE == mad.m_direction) ? "LI" : (CONSTANT_LEFTRIGHT == mad.m_direction) ? "LR" : (CONSTANT_INSIDEINSIDE == mad.m_direction) ? "I" : (CONSTANT_INSIDERIGHT == mad.m_direction) ? "IR" : (CONSTANT_RIGHTRIGHT == mad.m_direction) ? "R" : "X"); } if (mad.m_feature_matcher.m_distance) { strBuf.append(mad.m_offset); } return strBuf.toString(); } protected String make_image (MatchedAnnotationDescriptor mad, Annotation trg) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { StringBuilder sb = new StringBuilder(mad.m_sfms_with_values.size() * 20); if (m_isAnnotationName) { String[] name_toks = mad.m_feature_mv.m_matchedObject.getClass().getName().split("\\."); sb.append(name_toks[name_toks.length - 1]); } for (Iterator fm_it = mad.m_sfms_with_values.iterator(); fm_it.hasNext();) { MatchedSingleFeatureMatcher sfm_values = fm_it.next(); if (!sfm_values.m_matcher.m_quiet) { if (0 != sb.length()) { sb.append(m_fieldSeparator); } sb.append(sfm_values.getFeatureImage(m_isFeatureName, m_valueSeparators)); } } if (m_isTargetId) { sb.append(m_fieldSeparator); sb.append(trg.getAddress()); } return sb.toString(); } static private Pattern m_featname_pattern = Pattern.compile("\\{([^\\}\\s]+)\\}"); String parseClassLabel (String class_label, MatchedValue trg_mv) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, ClassNotFoundException { Matcher m = m_featname_pattern.matcher(class_label); StringBuilder result = new StringBuilder(); int class_label_ind = 0; while (m.find()) { String featname = m.group(1); int begin = m.start(1); int end = m.end(1); if (begin - 1 > class_label_ind) { // -1 for the '[' result.append(class_label.substring(class_label_ind, begin - 1)); } class_label_ind = end + 1; TargetObjectMatcher tom = new TargetObjectMatcher((Class)null, trg_mv.m_matchedObject.getClass().getName() + ":" + featname, false); List vals = tom.getFeatureValues(trg_mv); StringBuilder feat_image = new StringBuilder(); for (Iterator it = vals.iterator(); it.hasNext();){ feat_image.append(it.next().m_matchedObject); if (it.hasNext()) { feat_image.append(m_fieldSeparator); } } result.append(feat_image); } result.append(class_label.substring(class_label_ind)); return result.toString(); } void collectFeatures (JCas jcas, TargetAnnotationDescriptor tad, AnnotationMatchedValue trg_mv, MatchedAnnotationDescriptor feat_ann_mad) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, ClassNotFoundException { Map> target_feature_groups = null; if (m_feature_annotations.containsKey(trg_mv)) { target_feature_groups = m_feature_annotations.get(trg_mv); } else { target_feature_groups = new HashMap>(); m_feature_annotations.put(trg_mv, target_feature_groups); } Collection features = null; String class_label = parseClassLabel(tad.getClassName(), trg_mv); if (target_feature_groups.containsKey(class_label)) { features = target_feature_groups.get(class_label); } else { features = new ArrayList(); target_feature_groups.put(class_label, features); } features.add(feat_ann_mad); } public static String getDocumentId (JCas jcas, Annotation doc_ann) { // doc_ann contains a span that covers the doc // override this method to extract doc id from doc_ann // for example in WSD it is SnippetAnnotation String doc_id = null; try { Iterator it; it = UIMAAnnotationUtils.iterator(jcas, SourceDocumentInformation.class); while (it.hasNext() && (null == doc_id)) { SourceDocumentInformation sdi = (SourceDocumentInformation)it.next(); String[] toks = sdi.getUri().split("\\/"); doc_id = toks[toks.length - 1]; } } catch (Exception e) { e.printStackTrace(); } return null == doc_id ? "" : doc_id; } boolean processFeatureAnnotation (JCas jcas, Annotation enclosing, AnnotationMatchedValue trg_mv, AnnotationMatchedValue feat_mv, TargetAnnotationDescriptor tad, FeatureObjectMatcher fom, int direction, int offset) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, ClassNotFoundException { // individual features that were matched Collection ann_matched_features = new ArrayList(); if (fom.matches(feat_mv, ann_matched_features)) { MatchedAnnotationDescriptor mad = new MatchedAnnotationDescriptor( fom, enclosing, feat_mv, ann_matched_features, direction, offset, tad.m_priorityOrder); collectFeatures(jcas, tad, trg_mv, mad); return true; } return false; } private int orientationFlags (Annotation ann, Annotation trg) { int result = CONSTANT_INGORE; if ((ann.getEnd() < trg.getBegin()) && (ann.getEnd() < trg.getBegin())) { result = CONSTANT_LEFTLEFT; } else if ((ann.getBegin() < trg.getBegin()) && (ann.getEnd() <= trg.getEnd())) { result = CONSTANT_LEFTINSIDE; } else if ((ann.getBegin() < trg.getBegin()) && (ann.getEnd() > trg.getEnd())) { result = CONSTANT_LEFTRIGHT; } else if ((ann.getBegin() <= trg.getEnd()) && (ann.getEnd() <= trg.getEnd())) { result = CONSTANT_INSIDEINSIDE; } else if ((ann.getBegin() <= trg.getEnd()) && (ann.getEnd() > trg.getEnd())) { result = CONSTANT_INSIDERIGHT; } else if ((ann.getBegin() > trg.getEnd()) && (ann.getEnd() > trg.getEnd())) { result = CONSTANT_RIGHTRIGHT; } else { // never happens } return result; } void processFeatureAnnotationWindow(JCas jcas, Annotation enclosing, AnnotationMatchedValue trg_mv, TargetAnnotationDescriptor tad, FeatureObjectMatcher fom, Collection allowedAnnotations, int begin_lower, int begin_upper, int end_lower, int end_upper, int windowsize, boolean advance_right) throws IllegalArgumentException, SecurityException, NoSuchElementException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException, InvocationTargetException { Class ann_cls = UIMAAnnotationUtils.getAnnotationClass(fom.getMatcherClass()); FSIterator ann_it = FeatureConstrainedIterator.getEnclosedIterator( jcas, ann_cls, begin_lower, begin_upper, end_lower, end_upper); if (!advance_right) { ann_it.moveToLast(); } Annotation trg = (Annotation)trg_mv.m_matchedObject; for (int wc = 1; ann_it.isValid() && (wc <= windowsize);) { Annotation ann = (Annotation)ann_it.get(); AnnotationMatchedValue feat_mv = MatchedValue.get(allowedAnnotations, ann); if (null == feat_mv) { continue; } if (processFeatureAnnotation(jcas, enclosing, trg_mv, feat_mv, tad, fom, orientationFlags(ann, trg), wc)) { ++wc; } if (advance_right) { ann_it.moveToNext(); } else { ann_it.moveToPrevious(); } } } void processFeatureAnnotationWindow (JCas jcas, Annotation enclosing, AnnotationMatchedValue trg_mv, TargetAnnotationDescriptor tad, FeatureObjectMatcher fom, Collection allowedAnnotations, int windowflags, int windowsize, boolean advance_right) throws IllegalArgumentException, SecurityException, NoSuchElementException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException, InvocationTargetException { int bl = Integer.MAX_VALUE, bu = -Integer.MAX_VALUE, el = Integer.MAX_VALUE, eu = -Integer.MAX_VALUE; if (CONSTANT_ANYENCLOSED == (windowflags & CONSTANT_ANYENCLOSED)) { bl = bu = enclosing.getBegin(); el = eu = enclosing.getEnd(); } else { Annotation trg = (Annotation)trg_mv.m_matchedObject; if (0 != (windowflags & CONSTANT_LEFTLEFT)) { bl = Math.min(bl, enclosing.getBegin()); bu = Math.max(bu, trg.getBegin()); el = Math.min(el, enclosing.getBegin()); eu = Math.max(eu, trg.getBegin()); } if (0 != (windowflags & CONSTANT_LEFTINSIDE)) { bl = Math.min(bl, enclosing.getBegin()); bu = Math.max(bu, trg.getBegin()); el = Math.min(el, trg.getBegin()); eu = Math.max(eu, trg.getEnd()); } if (0 != (windowflags & CONSTANT_LEFTRIGHT)) { bl = Math.min(bl, enclosing.getBegin()); bu = Math.max(bu, trg.getBegin()); el = Math.min(el, trg.getEnd()); eu = Math.max(eu, enclosing.getEnd()); } if (0 != (windowflags & CONSTANT_INSIDEINSIDE)) { bl = Math.min(bl, trg.getBegin()); bu = Math.max(bu, trg.getEnd()); el = Math.min(el, trg.getBegin()); eu = Math.max(eu, trg.getEnd()); } if (0 != (windowflags & CONSTANT_INSIDERIGHT)) { bl = Math.min(bl, trg.getBegin()); bu = Math.max(bu, trg.getEnd()); el = Math.min(el, trg.getEnd()); eu = Math.max(eu, enclosing.getEnd()); } if (0 != (windowflags & CONSTANT_RIGHTRIGHT)) { bl = Math.min(bl, trg.getEnd()); bu = Math.max(bu, enclosing.getEnd()); el = Math.min(el, trg.getEnd()); eu = Math.max(eu, enclosing.getEnd()); } if (Integer.MAX_VALUE == bl) { throw new IllegalArgumentException("Invalid windowflags: " + windowflags); } if ((bl == el) && (bu == eu)) { bu = bl; el = eu; } } processFeatureAnnotationWindow(jcas, enclosing, trg_mv, tad, fom, allowedAnnotations, bl, bu, el, eu, windowsize, advance_right); } private Map> createAllowedAnnotationsMap(JCas jcas, Collection poms, Annotation enclosing) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException, InvocationTargetException { Map> per_model_matched = new HashMap>(); Collection all_models_matched = new HashSet(); for (Iterator ta_it = poms.iterator(); ta_it.hasNext();) { PartialObjectMatcher pom = ta_it.next(); if (!per_model_matched.keySet().contains(pom)) { ObjectPathFeatureValues opvfs = new ObjectPathFeatureValues(pom.getMatcherClass().getName(), pom.getObjectPath()); opvfs.update(jcas, enclosing, all_models_matched); if (!opvfs.m_values.isEmpty()) { Collection amvs = new ArrayList(); per_model_matched.put(pom, AnnotationMatchedValue.upcast(amvs, opvfs.m_values)); } } } return per_model_matched; } void processMatchedTargetAnnotation(JCas jcas, Annotation enclosing, AnnotationMatchedValue trg_mv, TargetAnnotationDescriptor tad) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchElementException, ClassNotFoundException, NoSuchFieldException { Map> allowedAnnotationsMap = createAllowedAnnotationsMap(jcas, tad.getFeatureAnnotationMatchers(), enclosing); for (Iterator it = tad.getFeatureAnnotationMatchers().iterator(); it.hasNext();) { // matcher for annotations from whose features are extracted FeatureObjectMatcher fom = it.next(); Collection allowedAnnotations = allowedAnnotationsMap.get(fom); if (fom.m_windowsizeLeft > 0) { int mask = fom.m_windowFlags & CONSTANT_STARTSLEFT; processFeatureAnnotationWindow(jcas, enclosing, trg_mv, tad, fom, allowedAnnotations, 0 == mask ? CONSTANT_LEFTLEFT : mask, fom.m_windowsizeLeft, false); } if ((1 == fom.m_windowsizeInside) && tad.getTargetAnnotationMatcher().getMatcherClass().equals(fom.getMatcherClass())) { processFeatureAnnotation(jcas, enclosing, trg_mv, trg_mv, tad, fom, CONSTANT_INSIDEINSIDE, 1); } else if (fom.m_windowsizeInside > 0) { int mask = fom.m_windowFlags & CONSTANT_STARTSINSIDE; processFeatureAnnotationWindow(jcas, enclosing, trg_mv, tad, fom, allowedAnnotations, 0 == mask ? CONSTANT_INSIDEINSIDE : mask, fom.m_windowsizeInside, true); } if (fom.m_windowsizeRight > 0) { int mask = fom.m_windowFlags & CONSTANT_STARTSRIGHT; processFeatureAnnotationWindow(jcas, enclosing, trg_mv, tad, fom, allowedAnnotations, 0 == mask ? CONSTANT_RIGHTRIGHT : mask, fom.m_windowsizeRight, true); } if (fom.m_windowsizeEnclosed > 0) { processFeatureAnnotationWindow(jcas, enclosing, trg_mv, tad, fom, allowedAnnotations, CONSTANT_ANYENCLOSED, fom.m_windowsizeEnclosed, true); } } } void processEnclosingAnnotation(JCas jcas, Annotation enclosing, Collection targetAnnotations, TargetAnnotationDescriptor tad) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchElementException, ClassNotFoundException, NoSuchFieldException { PartialObjectMatcher targetAnnotationMatcher = tad.getTargetAnnotationMatcher(); Class trg_cls = UIMAAnnotationUtils.getAnnotationClass(targetAnnotationMatcher.getMatcherClass()); for (Iterator it = FeatureConstrainedIterator.getEnclosedIterator( jcas, trg_cls, enclosing.getBegin(), enclosing.getEnd()); it.hasNext();) { Annotation trg = (Annotation)it.next(); AnnotationMatchedValue trg_mv = MatchedValue.get(targetAnnotations, trg); if (null == trg_mv) { continue; } Collection trg_matched_features = new ArrayList(); if (targetAnnotationMatcher.matches(trg_mv, trg_matched_features)) { processMatchedTargetAnnotation(jcas, enclosing, trg_mv, tad); } } } public void processJCas (JCas jcas) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, ClassNotFoundException, SecurityException, NoSuchFieldException { m_feature_annotations = new HashMap>>(); Collection tams = new ArrayList(); for (Iterator tad_it = m_TADescriptors.iterator(); tad_it.hasNext();) { TargetAnnotationDescriptor tad = tad_it.next(); PartialObjectMatcher pom = tad.getTargetAnnotationMatcher(); tams.add(pom); pom.update(jcas); } Map> allowedAnnotationsMap = createAllowedAnnotationsMap(jcas, tams, null); for (Iterator ta_it = m_TADescriptors.iterator(); ta_it.hasNext();) { TargetAnnotationDescriptor tad = ta_it.next(); if (!allowedAnnotationsMap.containsKey(tad.getTargetAnnotationMatcher())) { continue; } Collection allowedAnnotations = allowedAnnotationsMap.get(tad.getTargetAnnotationMatcher()); Class cls = UIMAAnnotationUtils.forName(tad.getEnclosingAnnotationName()); for (Iterator eg_it = UIMAAnnotationUtils.iterator(jcas, cls); eg_it.hasNext();) { processEnclosingAnnotation(jcas, (Annotation)eg_it.next(), allowedAnnotations, tad); } } processSelectedFeatureAnnotation(jcas); } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/UIMAFeatureConsumer.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/main/java/org/apache/uima/tools/cfe/UIMAFeatureCo0000644000175000017500000000730011625126544033200 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; import org.apache.uima.cas.CAS; import org.apache.uima.collection.CasConsumer_ImplBase; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceProcessException; import org.apache.uima.tools.cfe.support.ComparableArray; ; public class UIMAFeatureConsumer extends CasConsumer_ImplBase { public static final String PARAM_OUTPUTDIRECTORY = "OutputDirectory"; private String m_outdir; private UIMAFeatureMatcher m_uimaFM; public void initialize () throws ResourceInitializationException { super.initialize(); try { m_uimaFM = new UIMAFeatureMatcher( ((Boolean)getConfigParameterValue(CommonFeatureMatcher.PARAM_INCLUDETARGETID)).booleanValue()); String cfgFile = (String)getConfigParameterValue(CommonFeatureMatcher.PARAM_CONFIGURATIONFILE); if (null != cfgFile) { Boolean isXMLBeansarser = (Boolean)getConfigParameterValue(CommonFeatureMatcher.PARAM_XMLBEANSPARSER); m_uimaFM.initialize(cfgFile, null == isXMLBeansarser ? false : isXMLBeansarser.booleanValue());; } m_outdir = (String)getConfigParameterValue(PARAM_OUTPUTDIRECTORY); } catch (Exception e) { e.printStackTrace(); throw new ResourceInitializationException(e); } } public void processCas (CAS cas) throws ResourceProcessException { try { JCas jcas = cas.getJCas(); String docId = CommonFeatureMatcher.getDocumentId(jcas, null); System.out.println("Processing " + docId); m_uimaFM.processJCas(jcas); if (m_uimaFM.m_featureImages.isEmpty()) { return; } File f = new File(m_outdir); if (!f.exists()) { System.err.println("Directory " + m_outdir + " does not exist, creating"); if (!f.mkdirs()) { throw new IOException( String.format("failed to create an output directory \"%s\"", m_outdir)); } } FileOutputStream fos = new FileOutputStream(m_outdir + "/" + docId + ".fve"); for (Iterator it = m_uimaFM.m_featureImages.keySet().iterator(); it.hasNext();) { fos.write((m_uimaFM.m_featureImages.get(it.next()) + "\n").getBytes()); } fos.close(); } catch (Exception e) { throw new ResourceProcessException(e); } } } uima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/0000755000175000017500000000000011625126536023177 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/resources/0000755000175000017500000000000011625126536025211 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/resources/testData.txt0000644000175000017500000000012111625126536027515 0ustar drazzibdrazzibTest Data. Dr. George Smith arrived late. Col. Jones and Capt. Mark greeted him.uima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/resources/testDataRef.txt.fve0000644000175000017500000000006711625126536030742 0ustar drazzibdrazzibMilitary_Person|43|47|col. Military_Person|58|63|capt. uima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/resources/UIMAFeatureConsumer.xml0000644000175000017500000000725411625126536031526 0ustar drazzibdrazzib org.apache.uima.java org.apache.uima.tools.cfe.UIMAFeatureConsumer UIMAFeatureConsumer extracts UIMA features according to specification given in the configuration file 1.0 IBM OutputDirectory output directory String false false ConfigurationFile configuration file String false false IncludeTargetId Specifies whether the Id of target annotation object should be included in the extracted feature set Boolean false false XMLBeansParser Boolean false false IncludeTargetId false XMLBeansParser false false true false uima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/resources/CFEConfig.xml0000644000175000017500000000425011625126536027457 0ustar drazzibdrazzib Military ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/resources/PersonTitlePlusFeatureExtraction.xmluima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/resources/PersonTitlePlusFeatureExtraction.x0000644000175000017500000001047111625126536034076 0ustar drazzibdrazzib org.apache.uima.java false aeDescriptor 1.0 OutputDirectory output directory String false false UIMAFeatureConsumer/OutputDirectory ConfigurationFile configuration file String false false UIMAFeatureConsumer/ConfigurationFile IncludeTargetId Specifies whether the Id of target annotation object should be included in the extracted feature set Boolean false false UIMAFeatureConsumer/IncludeTargetId OutputDirectory tempTestOut ConfigurationFile src/test/resources/CFEConfig.xml IncludeTargetId false PersonTitleAnnotator UIMAFeatureConsumer example.PersonTitle en true true false uima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/resources/PersonTitleAnnotator.xml0000644000175000017500000001463011625126536032075 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.examples.cas.PersonTitleAnnotator Person Title Annotator An example annotator that discovers Person Titles in text and classifies them into three categories - Civilian (e.g. Mr.,Ms.), Military (e.g. Lt. Col.) , and Government (e.g. Gov., Sen.). This annotator can be configured to only look for titles within existing annotations of a particular type (for example, Person Name annotations). 1.0 The Apache Software Foundation CivilianTitles List of Civilian Titles to be annotated. String true true MilitaryTitles List of Military Titles to be annotated. String true true GovernmentTitles List of Government Titles to be annotated. String true true ContainingAnnotationType Annotation type within which to search for Person Titles. If no value is specified, the entire document will be searched. String false false CivilianTitles Mr. Ms. Mrs. Dr. MilitaryTitles Gen. Col. Maj. Capt. Lt. Gen. Lt Col. Lt. GovernmentTitles Vice President President Vice Pres. Pres. Governor Lt. Governor Gov. Lt. Gov. Senator Sen. example.PersonTitle A Personal Title. uima.tcas.Annotation Kind The kind of title - Civilian, Military, or Government. example.PersonTitleKind example.PersonTitleKind A kind of person title - Civilian, Military, or Government. uima.cas.String Civilian Title of a person not in military or government service. Military Title of a person in the military. Government Title of a government official. example.PersonTitle example.PersonTitle:Kind en true true false uima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/0000755000175000017500000000000011625126536024120 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/0000755000175000017500000000000011625126536024707 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/0000755000175000017500000000000011625126536026130 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/0000755000175000017500000000000011625126536027063 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/tools/0000755000175000017500000000000011625126536030223 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/tools/cfe/0000755000175000017500000000000011625126536030760 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/tools/cfe/test/0000755000175000017500000000000011625126536031737 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/tools/cfe/test/CFETest.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/tools/cfe/test/CFETest.0000644000175000017500000000730511625126536033202 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tools.cfe.test; import java.io.File; import junit.framework.TestCase; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.cas.CAS; import org.apache.uima.examples.SourceDocumentInformation; import org.apache.uima.pear.util.FileUtil; import org.apache.uima.test.junit_extension.FileCompare; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.util.FileUtils; import org.apache.uima.util.XMLInputSource; /** * The CFE tests installs a pear file */ public class CFETest extends TestCase { // Temporary working directory, used to install the pear package private File tempInstallDir = null; /** * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { // create temporary working directory File tempFile = File.createTempFile("pear_cfe_test_", "tmp"); if (tempFile.delete()) { File tempDir = tempFile; if (tempDir.mkdirs()) this.tempInstallDir = tempDir; } } /** * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { if (this.tempInstallDir != null) { FileUtil.deleteDirectory(this.tempInstallDir); } } public void testCFE() throws Exception { // Run an aggregate with a person-title annotator and // a CFE Cas Consumer XMLInputSource in = new XMLInputSource(JUnitExtension.getFile("PersonTitlePlusFeatureExtraction.xml")); AnalysisEngineDescription specifier = (AnalysisEngineDescription) UIMAFramework.getXMLParser().parseResourceSpecifier(in); // CFE currently requires that the config file be specified as an absolute path. File configFile = JUnitExtension.getFile("CFEConfig.xml"); specifier.getAnalysisEngineMetaData().getConfigurationParameterSettings().setParameterValue("ConfigurationFile", configFile.getAbsolutePath()); AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier); ae.setConfigParameterValue("ConfigurationFile", configFile.getAbsolutePath()); ae.reconfigure(); CAS cas = ae.newCAS(); File docFile = JUnitExtension.getFile("testData.txt"); String document = FileUtils.file2String(docFile); cas.setDocumentText(document); cas.setDocumentLanguage("en"); SourceDocumentInformation sdi_ann = new SourceDocumentInformation(cas.getJCas(), 0, document.length()); sdi_ann.setUri(docFile.toURI().toString()); sdi_ann.addToIndexes(); ae.process(cas); File outFile = new File("tempTestOut/testData.txt.fve"); File outFileRef = JUnitExtension.getFile("testDataRef.txt.fve"); assertTrue(FileCompare.compare(outFile, outFileRef)); outFile.delete(); new File("tempTestOut").delete(); } } uima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/examples/0000755000175000017500000000000011625126536030701 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/examples/SourceDocumentInformation_Type.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/examples/SourceDocument0000644000175000017500000001422511625126536033567 0ustar drazzibdrazzib /* First created by JCasGen Wed Sep 30 00:32:34 EDT 2009 */ package org.apache.uima.examples; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.Annotation_Type; /** Stores detailed information about the original source document from which the current CAS was initialized. All information (like size) refers to the source document and not to the document in the CAS which may be converted and filtered by a CAS Initializer. For example this information will be written to the Semantic Search index so that the original document contents can be retrieved by queries. * Updated by JCasGen Wed Sep 30 00:32:34 EDT 2009 * @generated */ public class SourceDocumentInformation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (SourceDocumentInformation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = SourceDocumentInformation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new SourceDocumentInformation(addr, SourceDocumentInformation_Type.this); SourceDocumentInformation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new SourceDocumentInformation(addr, SourceDocumentInformation_Type.this); } }; /** @generated */ public final static int typeIndexID = SourceDocumentInformation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.examples.SourceDocumentInformation"); /** @generated */ final Feature casFeat_uri; /** @generated */ final int casFeatCode_uri; /** @generated */ public String getUri(int addr) { if (featOkTst && casFeat_uri == null) jcas.throwFeatMissing("uri", "org.apache.uima.examples.SourceDocumentInformation"); return ll_cas.ll_getStringValue(addr, casFeatCode_uri); } /** @generated */ public void setUri(int addr, String v) { if (featOkTst && casFeat_uri == null) jcas.throwFeatMissing("uri", "org.apache.uima.examples.SourceDocumentInformation"); ll_cas.ll_setStringValue(addr, casFeatCode_uri, v);} /** @generated */ final Feature casFeat_offsetInSource; /** @generated */ final int casFeatCode_offsetInSource; /** @generated */ public int getOffsetInSource(int addr) { if (featOkTst && casFeat_offsetInSource == null) jcas.throwFeatMissing("offsetInSource", "org.apache.uima.examples.SourceDocumentInformation"); return ll_cas.ll_getIntValue(addr, casFeatCode_offsetInSource); } /** @generated */ public void setOffsetInSource(int addr, int v) { if (featOkTst && casFeat_offsetInSource == null) jcas.throwFeatMissing("offsetInSource", "org.apache.uima.examples.SourceDocumentInformation"); ll_cas.ll_setIntValue(addr, casFeatCode_offsetInSource, v);} /** @generated */ final Feature casFeat_documentSize; /** @generated */ final int casFeatCode_documentSize; /** @generated */ public int getDocumentSize(int addr) { if (featOkTst && casFeat_documentSize == null) jcas.throwFeatMissing("documentSize", "org.apache.uima.examples.SourceDocumentInformation"); return ll_cas.ll_getIntValue(addr, casFeatCode_documentSize); } /** @generated */ public void setDocumentSize(int addr, int v) { if (featOkTst && casFeat_documentSize == null) jcas.throwFeatMissing("documentSize", "org.apache.uima.examples.SourceDocumentInformation"); ll_cas.ll_setIntValue(addr, casFeatCode_documentSize, v);} /** @generated */ final Feature casFeat_lastSegment; /** @generated */ final int casFeatCode_lastSegment; /** @generated */ public boolean getLastSegment(int addr) { if (featOkTst && casFeat_lastSegment == null) jcas.throwFeatMissing("lastSegment", "org.apache.uima.examples.SourceDocumentInformation"); return ll_cas.ll_getBooleanValue(addr, casFeatCode_lastSegment); } /** @generated */ public void setLastSegment(int addr, boolean v) { if (featOkTst && casFeat_lastSegment == null) jcas.throwFeatMissing("lastSegment", "org.apache.uima.examples.SourceDocumentInformation"); ll_cas.ll_setBooleanValue(addr, casFeatCode_lastSegment, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public SourceDocumentInformation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_uri = jcas.getRequiredFeatureDE(casType, "uri", "uima.cas.String", featOkTst); casFeatCode_uri = (null == casFeat_uri) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_uri).getCode(); casFeat_offsetInSource = jcas.getRequiredFeatureDE(casType, "offsetInSource", "uima.cas.Integer", featOkTst); casFeatCode_offsetInSource = (null == casFeat_offsetInSource) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_offsetInSource).getCode(); casFeat_documentSize = jcas.getRequiredFeatureDE(casType, "documentSize", "uima.cas.Integer", featOkTst); casFeatCode_documentSize = (null == casFeat_documentSize) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_documentSize).getCode(); casFeat_lastSegment = jcas.getRequiredFeatureDE(casType, "lastSegment", "uima.cas.Boolean", featOkTst); casFeatCode_lastSegment = (null == casFeat_lastSegment) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_lastSegment).getCode(); } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/examples/SourceDocumentInformation.javauima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/org/apache/uima/examples/SourceDocument0000644000175000017500000001650611625126536033573 0ustar drazzibdrazzib /* First created by JCasGen Wed Sep 30 00:32:34 EDT 2009 */ package org.apache.uima.examples; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** Stores detailed information about the original source document from which the current CAS was initialized. All information (like size) refers to the source document and not to the document in the CAS which may be converted and filtered by a CAS Initializer. For example this information will be written to the Semantic Search index so that the original document contents can be retrieved by queries. * Updated by JCasGen Wed Sep 30 00:32:34 EDT 2009 * XML source: C:/a/Eclipse/apache/ConfigurableFeatureExtractor/src/test/resources/UIMAFeatureConsumer.xml * @generated */ public class SourceDocumentInformation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(SourceDocumentInformation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected SourceDocumentInformation() {} /** Internal - constructor used by generator * @generated */ public SourceDocumentInformation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public SourceDocumentInformation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public SourceDocumentInformation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: uri /** getter for uri - gets URI of document. (For example, file:///MyDirectory/myFile.txt for a simple file or http://incubator.apache.org/uima/index.html for content from a web source.) * @generated */ public String getUri() { if (SourceDocumentInformation_Type.featOkTst && ((SourceDocumentInformation_Type)jcasType).casFeat_uri == null) jcasType.jcas.throwFeatMissing("uri", "org.apache.uima.examples.SourceDocumentInformation"); return jcasType.ll_cas.ll_getStringValue(addr, ((SourceDocumentInformation_Type)jcasType).casFeatCode_uri);} /** setter for uri - sets URI of document. (For example, file:///MyDirectory/myFile.txt for a simple file or http://incubator.apache.org/uima/index.html for content from a web source.) * @generated */ public void setUri(String v) { if (SourceDocumentInformation_Type.featOkTst && ((SourceDocumentInformation_Type)jcasType).casFeat_uri == null) jcasType.jcas.throwFeatMissing("uri", "org.apache.uima.examples.SourceDocumentInformation"); jcasType.ll_cas.ll_setStringValue(addr, ((SourceDocumentInformation_Type)jcasType).casFeatCode_uri, v);} //*--------------* //* Feature: offsetInSource /** getter for offsetInSource - gets Byte offset of the start of document content within original source file or other input source. Only used if the CAS document was retrieved from an source where one physical source file contained several conceptual documents. Zero otherwise. * @generated */ public int getOffsetInSource() { if (SourceDocumentInformation_Type.featOkTst && ((SourceDocumentInformation_Type)jcasType).casFeat_offsetInSource == null) jcasType.jcas.throwFeatMissing("offsetInSource", "org.apache.uima.examples.SourceDocumentInformation"); return jcasType.ll_cas.ll_getIntValue(addr, ((SourceDocumentInformation_Type)jcasType).casFeatCode_offsetInSource);} /** setter for offsetInSource - sets Byte offset of the start of document content within original source file or other input source. Only used if the CAS document was retrieved from an source where one physical source file contained several conceptual documents. Zero otherwise. * @generated */ public void setOffsetInSource(int v) { if (SourceDocumentInformation_Type.featOkTst && ((SourceDocumentInformation_Type)jcasType).casFeat_offsetInSource == null) jcasType.jcas.throwFeatMissing("offsetInSource", "org.apache.uima.examples.SourceDocumentInformation"); jcasType.ll_cas.ll_setIntValue(addr, ((SourceDocumentInformation_Type)jcasType).casFeatCode_offsetInSource, v);} //*--------------* //* Feature: documentSize /** getter for documentSize - gets Size of original document in bytes before processing by CAS Initializer. Either absolute file size of size within file or other source. * @generated */ public int getDocumentSize() { if (SourceDocumentInformation_Type.featOkTst && ((SourceDocumentInformation_Type)jcasType).casFeat_documentSize == null) jcasType.jcas.throwFeatMissing("documentSize", "org.apache.uima.examples.SourceDocumentInformation"); return jcasType.ll_cas.ll_getIntValue(addr, ((SourceDocumentInformation_Type)jcasType).casFeatCode_documentSize);} /** setter for documentSize - sets Size of original document in bytes before processing by CAS Initializer. Either absolute file size of size within file or other source. * @generated */ public void setDocumentSize(int v) { if (SourceDocumentInformation_Type.featOkTst && ((SourceDocumentInformation_Type)jcasType).casFeat_documentSize == null) jcasType.jcas.throwFeatMissing("documentSize", "org.apache.uima.examples.SourceDocumentInformation"); jcasType.ll_cas.ll_setIntValue(addr, ((SourceDocumentInformation_Type)jcasType).casFeatCode_documentSize, v);} //*--------------* //* Feature: lastSegment /** getter for lastSegment - gets For a CAS that represents a segment of a larger source document, this flag indicates whether this CAS is the final segment of the source document. This is useful for downstream components that want to take some action after having seen all of the segments of a particular source document. * @generated */ public boolean getLastSegment() { if (SourceDocumentInformation_Type.featOkTst && ((SourceDocumentInformation_Type)jcasType).casFeat_lastSegment == null) jcasType.jcas.throwFeatMissing("lastSegment", "org.apache.uima.examples.SourceDocumentInformation"); return jcasType.ll_cas.ll_getBooleanValue(addr, ((SourceDocumentInformation_Type)jcasType).casFeatCode_lastSegment);} /** setter for lastSegment - sets For a CAS that represents a segment of a larger source document, this flag indicates whether this CAS is the final segment of the source document. This is useful for downstream components that want to take some action after having seen all of the segments of a particular source document. * @generated */ public void setLastSegment(boolean v) { if (SourceDocumentInformation_Type.featOkTst && ((SourceDocumentInformation_Type)jcasType).casFeat_lastSegment == null) jcasType.jcas.throwFeatMissing("lastSegment", "org.apache.uima.examples.SourceDocumentInformation"); jcasType.ll_cas.ll_setBooleanValue(addr, ((SourceDocumentInformation_Type)jcasType).casFeatCode_lastSegment, v);} } uima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/example/0000755000175000017500000000000011625126536025553 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/example/PersonTitle.java0000644000175000017500000000452111625126536030670 0ustar drazzibdrazzib /* First created by JCasGen Mon Sep 28 09:59:34 EDT 2009 */ package example; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** A Personal Title. * Updated by JCasGen Mon Sep 28 09:59:34 EDT 2009 * XML source: C:/a/Eclipse/apache/ConfigurableFeatureExtractor/src/test/resources/aeDescriptor.xml * @generated */ public class PersonTitle extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(PersonTitle.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected PersonTitle() {} /** Internal - constructor used by generator * @generated */ public PersonTitle(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public PersonTitle(JCas jcas) { super(jcas); readObject(); } /** @generated */ public PersonTitle(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: Kind /** getter for Kind - gets The kind of title - Civilian, Military, or Government. * @generated */ public String getKind() { if (PersonTitle_Type.featOkTst && ((PersonTitle_Type)jcasType).casFeat_Kind == null) jcasType.jcas.throwFeatMissing("Kind", "example.PersonTitle"); return jcasType.ll_cas.ll_getStringValue(addr, ((PersonTitle_Type)jcasType).casFeatCode_Kind);} /** setter for Kind - sets The kind of title - Civilian, Military, or Government. * @generated */ public void setKind(String v) { if (PersonTitle_Type.featOkTst && ((PersonTitle_Type)jcasType).casFeat_Kind == null) jcasType.jcas.throwFeatMissing("Kind", "example.PersonTitle"); jcasType.ll_cas.ll_setStringValue(addr, ((PersonTitle_Type)jcasType).casFeatCode_Kind, v);} } uima-addons-2.3.1/ConfigurableFeatureExtractor/src/test/java/example/PersonTitle_Type.java0000644000175000017500000000522611625126536031674 0ustar drazzibdrazzib /* First created by JCasGen Mon Sep 28 09:59:34 EDT 2009 */ package example; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.Annotation_Type; /** A Personal Title. * Updated by JCasGen Mon Sep 28 09:59:34 EDT 2009 * @generated */ public class PersonTitle_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (PersonTitle_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = PersonTitle_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new PersonTitle(addr, PersonTitle_Type.this); PersonTitle_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new PersonTitle(addr, PersonTitle_Type.this); } }; /** @generated */ public final static int typeIndexID = PersonTitle.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("example.PersonTitle"); /** @generated */ final Feature casFeat_Kind; /** @generated */ final int casFeatCode_Kind; /** @generated */ public String getKind(int addr) { if (featOkTst && casFeat_Kind == null) jcas.throwFeatMissing("Kind", "example.PersonTitle"); return ll_cas.ll_getStringValue(addr, casFeatCode_Kind); } /** @generated */ public void setKind(int addr, String v) { if (featOkTst && casFeat_Kind == null) jcas.throwFeatMissing("Kind", "example.PersonTitle"); ll_cas.ll_setStringValue(addr, casFeatCode_Kind, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public PersonTitle_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_Kind = jcas.getRequiredFeatureDE(casType, "Kind", "example.PersonTitleKind", featOkTst); casFeatCode_Kind = (null == casFeat_Kind) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_Kind).getCode(); } } uima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/0000755000175000017500000000000011625126536023640 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/CFE_UG.xml0000644000175000017500000025053211625126536025361 0ustar drazzibdrazzib ]> CFE User Guide Overview
Motivation Feature extraction, the extraction of information from data sources, is a common task frequently required to be performed by many different types of applications, such as machine learning, performance evaluation, and statistical analysis. This guide describes a tool that can be used to facilitate this extraction process, in conjunction with the Unstructured Information Management Architecture (UIMA), particularly focusing on text processing applications. UIMA provides a mechanism for executing modules called Analysis Engines that analyze artifacts (text documents in our case) and store the results of the analysis in a data structure called the Common Analysis Structure (CAS). These results are stored as Feature Structures, which are simply data structures that have an associated type and a set of properties in the form of attribute/value pairs. Feature Structures that are attached to a particular span of a text document are called Annotations. They usually represent a concept that the analysis engine computes based on the text. The attributes are called Features in UIMA terminology. This sense of feature will always be referred to as UIMA feature in this document, so as not to be confused with the general sense of feature when discussing feature extraction, referring to the process of extracting values from data sources (in our case, the CAS). Values that are extracted are not required to be values of attributes (i.e., UIMA Features) of Annotations, but can be computed by other methods, as will be shown later. The terms features and feature values in this document refer to any value extracted from the CAS, regardless of the particular source. As an example, Figure 1 depicts annotation objects of the type Token that are associated with individual words, each having attributes Index and POS (part of speech). A feature extraction task could be "extract token indexes for the words that are nouns". Such a task is translated to the following execution steps: find an annotation of a type Token examine the value of POS attribute extract the value of Index attribute only if the value of POS attribute is NN The expression "word that is a noun" defines a concept, and its implementation is that it has to be found in the CAS. Token index is the information (i.e., feature) to be extracted. The resulting values for the task will be values 3 and 9, which are the values of the attribute Index for the words car and finish. Figure 1: Annotated text sample While Figure 1 shows a fairly simple example of annotations types associated with some text, real world applications could have quite sophisticated annotation types, storing various kinds of computed information. Consider an annotation type Car that has, for illustration purposes, just two attributes: Color and Engine. While the attribute Color is of type string, the Engine attribute is a complex annotation type with attributes Cylinders and Size. This is represented by a UML diagram in Figure 2, illustrating a class hierarchy on the left and sample instance of this class structure on the right. Figure 2: Composite object sample If a requirement is to extract the number of cylinders of the car's engine, then the application needs to find any object(s) that represent the concept of a car (CarAnnotation in this case) and traverse the object's structure to access the Cylinders attribute of EngineAnnotation. Once the attribute's value is accessed, the application outputs it to the desired destination, such as a text file or a database.
Approaches to feature extraction
Custom CAS Consumers When working with UIMA, feature extraction is usually implemented by writing a special UIMA component called a CAS Consumer that contains custom code for accessing the annotations and their attributes, outputting them to a file, memory or database as required. The CAS consumer contains explicit logic for traversing the object's structure and examining values of specific attributes. Also, the CAS consumer would likely have code for outputting the accessed values to a particular destination, as required by the application. Writing CAS consumers can be labor intensive and requires Java programming. While this approach allows powerful control and customization to an application's needs, supporting the code can become problematic, especially as application requirements change. This can have a negative effect on many different aspects of code support, such as maintenance, evolution, bug fixing, reusability etc.
CFE approach CFE is a multipurpose tool that enables feature extraction from a UIMA CAS in a very generalized and application independent way. The extraction process is performed according to rules expressed using the Feature Extraction Specification Language (FESL) that are stored in configuration files. Using CFE eliminates the need for creating customized CAS consumers and writing Java code for every application. Instead, by using FESL rules in XML format, users can customize the information extraction process to suit their application. FESL's rule semantics allow the precise identification of the information that is required to be extracted by specifying precise multi-parameter criteria. The FESL syntax and semantics are defined further in this guide.
CFE Basics The feature extraction process involves three major steps: locating a concept of interest that is represented by a UIMA annotation object; examples of such concepts could be "word that is a noun" or "a car that has a six cylinder engine" etc. The annotation object that represents such a concept is referred to as the Target Annotation (TA) locating concepts, relative to the TAs, specifying the information to extract. These are also represented by UIMA annotations, that are within some context of the TAs. Some examples of context could be "to the left of the TA" or "within the TA" etc. The annotation object that corresponds to such a concept is referred to as the Feature Annotation (FA). In relation to Figure 1, an example FA could be the expression "two words to the left from word finish that is a noun", assuming that "word finish that is a noun", describes the TA. The result of such a specification will be tokens at and the extraction of the specified information from FAs Just to illustrate the process, suppose the requirement is "to extract indexes of two words to the left of the word finish that is a noun". In such a scenario, in the first step, CFE locates a TA that is represented by an annotation object corresponding to a word finish and also has its POS attribute equal to NN. For the second step, FAs that correspond to two words to the left from TA are located. On the third step, values of the Index attribute for each of FAs that were found are extracted. It is possible, however, that the requirement is to extract the value of the Index attribute from the annotation for the word finish itself. In such a case, the TA and FA are represented by the same UIMA annotation object. This is usually the case when extracting features for evaluation or testing. The specification for a TA or FA can be specified by complex multi-parameter conditions that are also expressed using FESL, as will be shown later.
Components
FESL XSD The specification for FESL is written in XSD format and stored in the file <CFE_HOME>/src/main/xsdForEmf/CFEConfigModel.xsd to be used by EMF-based parser generator and in <CFE_HOME>/src/main/xsdForXMLBeans for XMLBeans parser generator). Using this XSD in conjunction with an XML editor that provides syntax validation can help to provide more efficient editing of FESL configuration files.
Source Code CFE is implemented in Java 5.0 for Apache UIMA, and resides in the org.apache.uima.tools.cfe package. CFE is dependent on Eclipse EMF, Apache UIMA, and the Apache XMLBeans and JXPath libraries. The source code contains the complete implementation of CFE, including auxiliary utility classes that wrap some UIMA functionality (located in org.apache.uima.tools.cfe.support package)
Descriptors A sample descriptor file that defines a type system for machine learning processing is located in <CFE_HOME>src/main/resources/descriptors/type_system/AppliedSenseAnnotation.xml A sample descriptor that uses CFE in a CAS Consumer is located in <CFE_HOME>src/main/resources/descriptors/cas_consumers/UIMAFeatureConsumer.xml
Type Dependencies CFE code uses UIMA example annotation type org.apache.uima.examples.SourceDocumentInformation to retrieve the name of a document that is being processed. Typically, annotations of this type are produces by a file collection reader, provided by UIMA examples. If a UIMA application uses a different type of a reader, an annotation of this type should be created and initialized for each document prior to execution of TAE. Please see <CFE_HOME>src/test/java/org/apache/uima/tools/cfe/test/CFEtest.java for an example.
Configuration Files
Common notations and tags CFE configuration files are written using FESL semantic rules, as defined in CFEConfig.xsd. These rules describe the information extraction process and are independent of the application from which the information is to be extracted. There are several common notations and tags that are used in different elements of FESL
Feature path A "feature path" is a mechanism used by FESL to identify a particular feature (not necessarily a UIMA feature) of an annotation. The value associated with the feature, indicated by the feature path, can be either evaluated to match a certain criteria or extracted to the final output or both. The syntax of a feature path is an indexed sequence of attribute/method names separated by the colon character. Such a sequence mimics the sequence of Java method calls required to extract the feature value. For example, a value of the EngineAnnotation attribute Cylinders from Figure 2 can be written as CarAnnotation:Engine:Cylinders, where Engine is an attribute of CarAnnotation. The intermediate results of each step of the call sequence can be referred from different FESL structural elements by their zero-based index. For instance, the Parent Tag notation (see below) uses the index to access intermediate values. The feature path can be used to identify feature values that are either primitives or complex object types.
Full path and partial path There are two different ways of using feature path notation to identify an object: full path and partial path. The object can be one of the following: an annotation value of an annotation's attribute value of a result of an annotation's method; only get-style methods (methods that return a value and take no parameters) are supported. A full path specifies a path to an object starting from its type. For instance, if EngineAnnotation is specified as a full path, it would refer to all instances of annotations of that type. If CarAnnotation:Engine is specified, it would refer only to instances of the EngineAnnotation type that are attributes of instances of the CarAnnotation type. Full path notation is usually used for TA or FA identification. A partial path specifies a path to an object starting from a previously located annotation object (whether TA or FA). For example, if an instance of CarAnnotation is located as a TA, then the size of its engine can be specified as Engine:Size. Partial path notation is usually used for specification of feature values that are being examined or extracted. The distinction between "full path" and "partial path" is very similar to the concepts of "absolute path" and "relative path" when discussing a computer's file system.
TAM and FAM Each FESL rule is represented by a1 XML element with the tag targetAnnotation , as specified in the XSD by the TargetAnnotationXML type. Each element of this type is a composition of: a single target annotation matcher ( TAM ) that is denoted by an XML element with the tag targetAnnotationMatcher , of the type PartialObjectMatcherXML optional feature annotation matchers ( FAM ) denoted by XML elements with the tag featureAnnotationMatchers, of the type FeatureObjectMatcherXML The TAM specifies search criteria for locating Target Annotations ( TA s), while FAM s contain criteria for locating Feature Annotations ( FA s) and the specification of features for extraction from the FA s. The criteria for the search and the features to be extracted are specified using the feature path notation, as explained earlier. The XML tags representing the matchers are detailed below.
Arrays Since UIMA annotations may have arrays as attributes, FESL provides the ability to perform feature extraction from array objects. In particular, going back to Figure 2, if the implementation for the Wheels attribute is a UIMA FSArray type, then using feature path notation: the feature value for the Wheels attribute of FSArray type can be specified as CarAnnotation:Wheels. the feature value for the number of elements in the FSArray can be specified as CarAnnotation:Wheels:size, where size is a method of FSArray ; such value corresponds to a concept of how many wheels the car has. the feature values for individual elements of Wheels attribute of type WheelAnnotation can be accessed as CarAnnotation:Wheels:toArray. It should be noted that toArray is a name of a method of the FSArray type rather than a name of an attribute. the feature values for Diameter attribute of each WheelAnnotation can be specified as CarAnnotation:Wheels:toArray:Diameter The result of using toArray as an accessor is an array of values. FESL also provides syntax for accessing individual elements of arrays by index. the feature for the diameter of the first wheel can be specified as CarAnnotation:Wheels:toArray[0]:Diameter the feature for the diameter of the first and second wheels can be specified as CarAnnotation:Wheels:toArray[0][1]:Diameter the feature for the diameter of first three wheels can be specified as CarAnnotation:Wheels:toArray[0-2]:Diameter The specification of individual elements can be mixed for example: CarAnnotation:Wheels:toArray[0][2-3]:Diameter refers to all elements of Wheels attribute except the second. If the index specified falls outside the range of the matched data, a null value will be assigned. If required, FESL allows sorting extracted features by an offset in the text of the annotations that these features are extracted from. For instance CarAnnotation:Wheels:toArray[sort]:Diameter would ensure such an order.
Parent tag The parent tag is used to access a specific element of a feature path of a TA or FA by index. If a parent tag is used within a TAM specification, it is applied to the full path of the corresponding TA. Likewise, parent tags contained in FAMs are applied to the full a path of the corresponding FA. The tag consists of __p prefix followed by the index of an element that is being accessed. For instance, __p0 addresses the first element of a feature path. The tag can be a part of a feature path. For example, if a TA is specified as CarAnnotation:Wheels:toArray, corresponding to a concept of "wheels of a car" then the value of the Color attribute of a CarAnnotation object can be accessed by specifying __p0:Color. Such a specification can be used when it is required to examine/extract features of a containing annotation along with features of contained annotations. Samples of using parent tags are provided in the sections that detail FESL syntax, below.
Null values CFE allows comparing feature values for equality to null. The root XML element CFEConfig has a string attribute nullValueImage that sets a literal representation of a null value. If an extracted feature value is null, it will be converted to a string that is assigned the nullValueImage attribute. The example below illustrates the usage of this attribute.
Implicit TA exclusion While all FAM specifications for a single TAM are independent from each other, there is an implicit dependency between TAMs. In particular, they are dependent on the order in which they are specified in a configuration file. Annotations corresponding to certain concepts that were identified by a TAM that appear earlier in the configuration file will be excluded from further processing by FESL. This rule only applies to TAMs that use the fullPath attribute in their specification (see PartialObjectMatcherXML ). Having the implicit exclusion helps to separate the processing of same type annotations in the case when these annotations have different semantic meaning. For instance, the set of features that is required to be extracted from annotations of type EngineAnnotation that are attributes of CarAnnotation objects can be different than a set of features that is required to be extracted from annotations of the same EngineAnnotation type that are attributes of some other type or are not attached to any annotations of other types. To implement such a behavior in FESL, the fist TAM would contain criteria for locating EngineAnnotation objects that are attached to objects of the CarAnnotation type, while the second TAM would not specify any restriction on containment of objects of the EngineAnnotation type. If such a specification is given, all EngineAnnotation objects located according to the rule in the first TAM will be excluded from further processing and, hence, will not be available for processing by rules given in the second TAM
FESL Elements FESL's XSD defines several elements that allow specify rules for feature extraction. These elements may contains attributes and other elements in their definition
BitsetFeatureValuesXML Attribute: bitmask[1]: Integer Attribute: exact_match[0..1]: boolean: default false The specification enables comparing a feature value to an integer bitmask. The feature value is considered to be matched if it is of an Integer type and: if the exact_match attribute is set to true and all "1" bits specified in bitmask are also set in feature value if the exact_match attribute is set to false and any of "1" bits specified in bitmask is also set in feature value Example: <bitsetFeatureValues bitmask="3" exact_match="false" /> <bitsetFeatureValues bitmask="3" exact_match="true" /> The first line of the example specifies a test whether either of the two less significant bits of a feature value is set. To be successful, the test specified by the second line requires both less significant bits to be set.
EnumFeatureValuesXML Attribute: caseSensitive[0..1]: boolean: default false Element: values[0..*]: String EnumFeatureValuesXML element allow to test if a feature value belongs to a finite set of values. According to EnumFeatureValuesXML specification, if a feature value is equal to either one of the elements of values then the feature is considered to be successfully evaluated. The caseSensitive attribute indicates whether the comparison between the feature value and members of the values element is case sensitive. The FESL fragment below shows how to specify such a comparison: <enumFeatureValues caseSensitive="true"> <values>red</values> <values>green</values> <values>blue</values> </enumFeatureValues> This fragment specifies a case sensitive comparison of a feature value to a set of strings: red, green and blue. Special processing occurs when the array has only a single element that starts with file://, enabling the use of external dictionaries for comparison. In this case, the text within the values element is treated as a URI. The contents of the file referenced by the URI will be loaded and used as a set of values against which the feature value is going to be tested. The file should contain one dictionary entry per line, with each line starting with the # character considered to be a comment and thus will not be loaded. The dictionary handling is implemented in org.apache.uima.tools.cfe.EnumeratedEntryDictionary. The default implementation supports single token (whitespace separated) dictionary entries. If a more sophisticated dictionary format is desired, then either the constructor's parameters can be changed or methods for initializing and loading the dictionary from a file can be overridden.
ObjectPathFeatureValuesXML Attribute: objectPath[1]: String According to ObjectPathFeatureValuesXML specification, the TA or FA itself (depending on whether this element is in TAM or in FAM ) is tested whether it is at the location defined by the objectPath. This ability to evaluate whether a feature belongs to some CAS object is useful specifically in the cases where a particular feature value is the property of several different objects. For instance, this element can be used when features from annotations should be extracted only if they are attributes of other annotations. The FESL fragment below specifies a test that checks if an object's full path is org.apache.uima.tools.cfe.sample.CarAnnotation:Wheels:toArray. Such a test, for instance, can be used to check if an instance of a WheelAnnotation belongs to an instance CarAnnotation: <objectFeatureValues objectPath="org.apache.uima.tools.cfe.sample.CarAnotation:Wheels:toArray"b>
PatternFeatureValuesXML Attribute: pattern[1]: String The PatternFeatureValuesXML element enables comparing a feature value against a regular expression specified by the pattern attribute using Java Regular Expression syntax and considered to be successfully evaluated if the value matches the pattern. The FESL fragment below defines a test that checks if a feature value conforms to the hex number format: <patternFeatureValues pattern="(0[Xx][0-9A-Fa-f]+)" />
RangeFeatureValuesXML Attribute: lowerBoundary[0..1]: Comparable: default 0 Attribute: lowerBoundaryInclusive[0..1]: boolean default false Attribute: upperBoundary[0..1]: Comparable default 0 Attribute: upperBoundaryInclusive[0..1]: boolean default false According to RangeFeatureValuesXML specification the feature value is evaluated whether it is of a Comparable type and belongs to the interval specified by the attributes lowerBoundary and upperBoundary. The attributes lowerBoundaryInclusive and upperBoundaryInclusive indicate whether the corresponding boundaries should be included in the range for comparison. FESL fragment below specifies a test that checks if feature value is in the numeric range between 1 and 5, including 1 and excluding 5: <rangeFeatureValues lowerBoundary="1.8" upperBoundaryInclusive="true" upperBoundary="3.0" />
SingleFeatureMatcherXML Attribute: featurePath[1]: String Attribute: featureTypeName[0..1]: String: no default value Attribute: exclude[0..1]: boolean: default false Attribute: quiet[0..1]: boolean: default false Element: featureValues one of: bitsetFeatureValues: BitsetFeatureValuesXML enumFeatureValues: EnumFeatureValuesXML objectPathFeatureValues: ObjectPathFeatureValuesXML patternFeatureValues: PatternFeatureValuesXML rangeFeatureValues: RangeFeatureValuesXML The SingleFeatureMatcherXML defines rules for matching of a feature value to the featureValues element. The featureValues can be one of the elements in the bullet list above. The previous section detailed rules for matching a feature value to each of these elements. According to the specification for matching of a single feature value, first, a value of a feature denoted by the required featurePath attribute is located. For features that have arrays in their featurePath multiple values can be found. If such value(s) is found and optional featureTypeName attribute specifies a type name of the feature value, every found feature value is tested to be of that type. If the test is successful, then feature values are evaluated according to a specification given in featureValues. After the evaluation is performed a single feature is considered to be successfully evaluated if: the exclude attribute value is set to false and at least one feature value is matched to featureValues specification. the exclude attribute value is set to true and none of the feature values is matched to featureValues specification. For SingleFeatureMatcherXML elements that are parts of TAM element only evaluation of feature values is performed. If a SingleFeatureMatcherXML element is a part of FAM then the feature value is output only if the quiet attribute is set to false. If the value of the quiet attribute is set to true, then, even if the feature is matched, only an evaluation is performed, but no value is written into the final output. A featurePath attribute uses feature path notation explained earlier. FESL fragment below defines a test that checks if a value of the Size attribute is in a range defined by rangeFeatureVulues element: <featureMatchers featurePath="Size" featureTypeName="java.lang.Float"> <rangeFeatureValues lowerBoundary="1.8" upperBoundaryInclusive="true" upperBoundary="3.0"/> </featureMatchers> In addition it is allowed to use the parent tag (see Parent tag ) in the featurePath attribute. A sample in the PartialObjectMatcherXML section detail on how use the parent tag notation.
GroupFeatureMatcherXML Attribute: exclude[0..1]: boolean: default false Element: featureMatchers[1..*]: SingleFeatureMatcherXML This is a specification for matching a group of features. It can be applied to both types of annotations, TAs and FAs. Each element in featureMatchers is evaluated against either a TA or a FA annotation. The group is considered to be matched if: the exclude attribute value is set ao false and all elements in featureMatchers have been successfully evaluated. the exclude attribute value is set to true and evaluation of either of the elements in featureMatchers is unsuccessful The FESL fragment below defines a group with the two features Color and Wheels:Size to be matched. The entire group is to be successfully evaluated if both features are matched. The first feature is successfully evaluated if its value is one of the values listed by its enumFeatureValues element and the second feature is matched if its value is not in the set contained in its enumFeatureValues element, as specified by its exclude attribute. It should be noted that if the optional attribute featureTypeName is omitted then a feature value is assumed to be of a string type. Otherwise a feature value's type will be evaluated if it is the same or derived from the type specified by the featureTypeName attribute. Assuming the groupFeatureMatcher is specified for the CarAnnotation type, the test defined by a FESL fragment below is successful is a car is ether red, green or blue and it does not have 1 or 3 wheels: <groupFeatureMatchers> <featureMatchers featurePath="Color" featureTypeName="java.lang.Stting"> <enumFeatureValues caseSensitive="true"> <values>red</values> <values>green</values> <values>blue</values> </enumFeatureValues> </featureMatcher> <featureMatchers featurePath="Wheels:Size" exclude="true"> <enumFeatureValues caseSensitive="true"> <values>1</values> <values>3</values> </enumFeatureValues> </featureMatchers> <groupFeatureMatchers>
PartialObjectMatcherXML Attribute: annotationTypeName[1]: String Attribute: fullPath[0..1]: String: no default value Element: groupFeatureMatchers[0..*]: GroupFeatureMatcherXML This is a base specification for an annotation matcher that will search annotations of a type specified by annotationTypeName located on a path specified by fullPath. If fullPath is omitted or just contains the type name of an annotation (same as annotationTypeName attribute) then all instances of that type are considered for further feature value evaluation. If fullPath contains a path to an object from an attribute of a different object, then only instances of annotationTypeName that located on that path will be considered for further evaluation Once an annotation is successfully evaluated to match a type/path, its features are evaluated according to specification given in all elements of groupFeatureMatchers. If evaluation of any groupFeatureMatchers is successful or if no groupFeatureMatchers is given, then the annotation is considered to be successfully evaluated. The fullPath attribute should be specified using syntax described in the feature path section above, with the exception that it can not contain any parent tags. For instance, a specification where a value of the fullPath attribute is CarAnnotation:Engine and a value of the annotationTypeName is EngineAnnotation would address only engines that are car engines. PartialAnnotationMatcherXML is used to specify search rules in TAM specifications. To illustrate the use of parent tag notation let's consider an example where it is required to identify engines of blue cars that have a size more than 1.8 l but not greater then 3.0 l. According to a class diagram in Figure 2, the FESL fragment below defines rules for the task. It should be noted that the second feature matcher uses the parent tag notation to access a value of the CarAnnotation's attribute Color: <targetAnnotationMatcher annotationTypeName="EngineAnnotation" fullPath="CarAnnotation:EngineAnnotation" > <groupFeatureMatchers> <featureMatchers featurePath="Size" featureTypeName="java.lang.Float"> <rangeFeatureValues lowerBoundary="1.8" upperBoundaryInclusive="true" upperBoundary="3.0"/> </featureMatchers> <featureMatchers featurePath="__p0:Color" featureTypeName="java.lang.String" <enumFeatureValues caseSensitive="true"> <values>red</values> <values>green</values> <values>blue</values> </enumFeatureValues> </featureMatcher> <groupFeatureMatchers> </targetAnnotationMatcher>
FeatureObjectMatcherXML extends PartialAnnotationMatcherXML Attribute: windowsizeLeft[0..1]: Integer: default 0 Attribute: windowsizeInside[0..L]: Integer: default 0 Attribute: windowsizeRight[0..1]: Integer: default 0 Attribute: windowsizeEnclosed[0..1]: Integer: default 0 Attribute: windowFlags[0..1]: Integer: default 0 Attribute: orientation[0..1]: boolean: default false Attribute: distance[0..1]: boolean: default false The FeatureObjectMatcherXML element contains rules that specify how FeatureAnnotations (FA) should be located and which features should be extracted from them. It inherits its properties from PartialObjectMatcherXML. In addition it has semantics for specifying: a size of a search window a direction for the search relative to a corresponding Target Annotation (TA). It is done by using boolean attributes windowsizeLeft, windowsizeInside, windowsizeRight, windowsizeEnclosed and the bitmask windowFlags attribute that indicate FA's search rules: windowsizeLeft - a size of the search window to the left from TA windowsizeRight - a size of the search window to the right from TA windowsizeInside - a size of the search window within TA boundaries; if the value of this attribute is 1, then the TA is considered to be an FA at the same time windowFlags - more precise criteria for search window; the value if this attribute is a bitmask with a combination of the following values: 1 - FA starts to the left from the TA and ends to the left from the TA 2 - FA starts to the left from the TA and ends inside of TA boundaries 4 - FA starts to the left from the TA and ends to the right from the TA 8 - FA starts inside of the TA and ends inside of the TA boundaries 16 - FA starts inside of the TA boundaries and ends to the right from the TA 32 - FA starts to the right from the TA and ends to the right from the TA The location of a FA is included in the generated output according to optional orientation and distance attributes. For example, if values of both of these attributes are set to true and the FA is a first annotation of required type to the left from TA, then the generated feature value will start with the prefix L1. If the values are set to false, then the feature value's prefix will be X0. This allows generating unique feature names for model building and evaluation for machine learning. FeatureObjectMatcherXML is used to specify search rules in FAM specifications. The FESL fragment below adds rules to the previous sample to extract a number of cylinders from engines of cars whose wheels diameter is at least 20.0": <targetAnnotationMatcher annotationTypeName="EngineAnnotation" fullPath="CarAnnotation:EngineAnnotation" > <groupFeatureMatchers> <featureMatchers featurePath="Size" featureTypeName="java.lang.Float"> <rangeFeatureValues lowerBoundary="1.8" upperBoundaryInclusive="true" upperBoundary="3.0"/> </featureMatchers> <featureMatchers featurePath="__p0:Color" featureTypeName="java.lang.String"> <enumFeatureValues caseSensitive="true"> <values>red</values> <values>green</values> <values>blue</values> </enumFeatureValues> </featureMatcher> <groupFeatureMatchers> </targetAnnotationMatcher> <featureAnnotationMatcher annotationTypeName="EngineAnnotation" fullPath="CarAnnotation:EngineAnnotation" windowsizeInside=1 > <groupFeatureMatchers> <featureMatchers featurePath="__p0:Wheels:toArray:Diameter" featureTypeName="java.lang.Float" quiet="true" > <rangeFeatureValues lowerBoundary="20.0" lowerBoundaryInclusive="true"/> </featureMatcher> <featureMatchers featurePath="Cylinders" featureTypeName="java.lang.Float" /> <groupFeatureMatchers> </featureAnnotationMatcher>
TargetAntotationXML Attribute: className[1]: String Attribute: enclosingAnnotation[1]: String Element targetAnnotationMatcher[1..1]: PartialObjectMatcherXML Element featureAnnotationMatchers[0..*]: FeatureObjectMatcherXML This is a root specification for a class (group) of annotations of all extracted instances, which are assigned the same label (className) in the final output. The label can be a literal string or a feature path in curly brackets or a combination of the two (i.e. SomeText_{__p0:SomeProperty}). If using a feature path in a class name label it is required to use the parent tag notation. In such a case the parent tag refers to the TA specified by the targetAnnotationMatcher element. Annotations that belong to the group are searched within a span of enclosingAnnotation according to the specification given in the targetAnnotationMatcher (TAM) and features from matched annotations are extracted according to specification given in featureAnnotationMatchers (FAM). In general, the annotation that features are extracted from could be different from annotations that are matched during the search This is useful when extracting features for machine learning model building and evaluation where features are selected from annotations that could be located in a specific location relatively to the annotation that satisfy a search criteria. For instance, POS tags of 5 words to the left and right from a specific word. Only if an annotation is successfully evaluated (matched) by a TAM further feature extraction is allowed and rules specified by corresponding FAMs are executed.
Configuration file sample
Task definition The sample configuration file below has been created for extracting features in order to build models for a machine learning application. The type system for this sample defines several UIMA annotation types: org.apache.uima.tools.cfe.sample.Sentence - type that marks a sentence org.apache.uima.tools.cfe.sample.Token - type that marks a token with features: pennTag: String - POS tag of a token org.apache.uima.tools.cfe.sample.NamedEntity - named entity type with features: Code: String - specific code assigned to a named entity SemanticClass: String - semantic class of a named entity Tokens: FSArray - array of org.apache.uima.tools.cfe.sample.Token annotations, ordered by their offset, that are included in the named entity The classification task is defined as follows: classify first token of each named entities that has semantic class Car Maker with a class label that is a composite of the string CMBegin and a value of the Code attribute that named entity classify all other tokens of named entities of a semantic class Car Maker with a class label that is a composite of the string CMInside and a value of the Code property of that named entity classify all other tokens with a class label Other_Token To build a model for machine learning it is required to extract features from surrounding tokens for all classes listed above. In particular the following features are required to be extracted: a string literal of the token to which the class label is assigned (class token) a string literal of each token that is located with in a window of 5 tokens from the class token with the exception of prepositions (POS tag is IN), conjunctions (CC), delimiters (DT), punctuation (POS tag is not defined - null) and numbers (CD) all extracted features have to be unique with their position information relative to the location of the class token.
Implementation Line 1 - a standard XML declaration that defines the XML version of the document and its encoding Line 2, 87 - FESL root element that references the schema and defines global variables, such as nullValueImage (see Null values ) Line 3-32 - rules for extracting features for first tokens of named entities. Line 3 - extracted features for those tokens are assigned a composite label that includes prefix CMBegin_ pl s a value of a Code attribute of the first element of the TA's path. The search for FA is going to be performed within boundaries of enclosing org.apache.uima.tools.cfe.sample.Sentence annotation Line 4-12 - TAM that defines rules for identifying the fist TA Line 4 - defines TA's type (org.apache.uima.tools.cfe.sample.Token) and a full path to it (org.apache.uima.tools.cfe.sample.NamedEntity:Tokens:toArray[0]). According to this path notion, the CFE will: search for annotations of type org.apache.uima.tools.cfe.sample.NamedEntity for annotations that were found it accesses the value of their attribute Tokens and if the value is not null, the method toArray is called to convert the value to an array if the resulted array is not empty, its first element will be considered to be a TA Line 5-11 - defines rules for matching a group of features for TA Line 6-10 - defines rules for matching a feature for this group Line 6 - defines that the feature value is of the type java.lang.String and has the feature the path __p0:SemanticClass, which translates to a value of the attribute SemanticClass of the first element of the TA's path (org.apache.uima.tools.cfe.sample.NamedEntity) Line 7-9 - defines an explicit list of values that the feature value should be in Line 8 - defines the value Car Maker as the only possible value for the feature Line 13-17 - FAM that defines rules for identifying first FA and its feature extraction Line 13 - defines FA's type to be org.apache.uima.tools.cfe.sample.Token; the attribute windowsizeInside with the value 1 tells CFE to extract features from TA itself (TA=FA) and setting orientation and distance attributes to true tells CFE to include position information into the generated feature value Line 14-16 - defines rules for matching a group of features for the first FA. Line 15 - defines rules for matching the only feature for this group of the type java.lang.String and with feature path coveredText that eventually will be translated by CFE to a method call of a org.apache.uima.tools.cfe.sample.Token annotation object; according to this specification the feature value will be unconditionally extracted Line 18-31 - FAM that defines rules for identifying second type of FA and its feature extraction Line 18 - defines FA's type to be org.apache.uima.tools.cfe.sample.Token; the attributes windowsizeLeft and windowsizeRight with the values 5 tell CFE to extract features from 5 nearest annotations of this type to the left and to the right from TA and having orientation and distance attributes set to true tells CFE to include position information into the generated feature value. Line 19-30 - defines rules for matching a group of features for the second FA. Line 20 - defines rules for matching the first feature of the group to be of the type java.lang.String and with the feature path coveredText that eventually will be translated by CFE to a method call of a org.apache.uima.tools.cfe.sample.Token annotation object; according to this specification the feature value will be unconditionally extracted Line 21-29 - define rules for matching the second feature of the group Line 21 - defines rules for matching the second feature of the group to be of the type java.lang.String and with the feature path pennTag that eventually will be translated by CFE to getPennTag method call of a org.apache.uima.tools.cfe.sample.Token annotation object; according to this specification the feature will be evaluated against enumFeatureValues and, as the exclude attribute is set to true: if the evaluation is successful, the feature matcher will cause the parent group to be unmatched and since it is the only group in the FAM, no output for this FA will be produced if the evaluation is unsuccessful, this feature matcher will not affect matching status of the group, so the output for FA will be generated as the first matcher of the group unconditionally produces output As the quiet attribute is set to true, the feature value extracted by the second matcher will not be added to the generated for this FA output Line 22-28 - defines an explicit list of values that the value of the second feature should be in Line 23-27 - defines values IN, CC, DT, CD, null as possible values for the second feature; if the feature value is equal to one of these values, evaluation of the enclosing feature matcher is successful; if the feature value is null it will be converted to the string defined by nullValueImage (null as set in line 2 of this sample) and as null is one of the list's elements, it will be successfully evaluated. Line 34-63 - rules for extracting features for all tokens of named entities except the first. These rules are the same as the rules defined for first tokens of named entities (lines 3-32) with the following exceptions: Line 34 - defines that TAs matched by these rules will be assigned a composite label that includes prefix CMInside_ plus a value of the Code attribute of a first element of the TA's path Line 35 - sets the fullPath attribute to org.apache.uima.tools.cfe.sample.NamedEntity:Tokens:toArray that can be translated as any token of a named entity, but because of implicit TA exclusion , the TAs that were matched for first tokens of named entities by the rules for previous TAM are not included into the set of TAs that will be evaluated by rules for this TAM Line 65-86 - rules for extracting features for all tokens other than tokens of named entities. These rules are the same as the rules defined for previous categories with the following exceptions: Line 65 - defines that TAs matched by the enclosed rules will be assigned the string label Other_token Line 66 - only defines a type of TAs that should be processed by the corresponding TAM without fullPath attribute. Such a notation can be translated as all tokens, but because of the implicit TA exclusion , the TAs, which were matched for tokens of named entities by rules defined by the previous TAMs, are not included into the set of TAs that will be evaluated by rules for this TAM. So, the actual translation will be all tokens other than tokens of named entities. <?xml version="1.0" encoding="UTF-8"?> <tns:CFEConfig nullValueImage="null" xmlns:tns="http://www.apache.org/uima/cfe/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.apache.org/uima/cfe/config CFEConfig.xsd "> <tns:targetAnnotations className="CMBegin_{__p0:Code}" enclosingAnnotation="org.apache.uima.tools.cfe.sample.Sentence"> <tns:targetAnnotationMatcher annotationTypeName="org.apache.uima.tools.cfe.sample.Token" fullPath="org.apache.uima.tools.cfe.sample.NamedEntity:Tokens:toArray[0]"> <tns:groupFeatureMatchers> <tns:featureMatchers featurePath="__p0:SemanticClass" featureTypeName="java.lang.String"> <tns:enumFeatureValues> <tns:values>Car Maker</tns:values> </tns:enumFeatureValues> </tns:featureMatchers> </tns:groupFeatureMatchers> </tns:targetAnnotationMatcher> <tns:featureAnnotationMatchers annotationTypeName= "org.apache.uima.tools.cfe.sample.Token" windowsizeInside="1" orientation="true" distance="true"> <tns:groupFeatureMatchers> <tns:featureMatchers featurePath="coveredText" featureTypeName="java.lang.String"/> </tns:groupFeatureMatchers> </tns:featureAnnotationMatchers> <tns:featureAnnotationMatchers annotationTypeName= "org.apache.uima.tools.cfe.sample.Token" windowsizeLeft="5" windowsizeRight="5" orientation="true" distance="true"> <tns:groupFeatureMatchers> <tns:featureMatchers featurePath="coveredText" featureTypeName="java.lang.String"/> <tns:featureMatchers featurePath="pennTag" featureTypeName="java.lang.String" exclude="true" quiet="true"> <tns:enumFeatureValues caseSensitive="true"> <tns:values>IN</tns:values> <tns:values>CC</tns:values> <tns:values>DT</tns:values> <tns:values>CD</tns:values> <tns:values>null</tns:values> </tns:enumFeatureValues> </tns:featureMatchers> </tns:groupFeatureMatchers> < tns:featureAnnotationMatchers> </tns:targetAnnotations> <tns:targetAnnotations className="CMInside_{__p0:Code}" enclosingAnnotation="org.apache.uima.tools.cfe.sample.Sentence"> <tns:targetAnnotationMatcher annotationTypeName="org.apache.uima.tools.cfe.sample.Token" fullPath="org.apache.uima.tools.cfe.sample.NamedEntity:Tokens:toArray"> <tns:groupFeatureMatchers> <tns:featureMatchers featurePath="__p0:SemanticClass" featureTypeName="java.lang.String"> <tns:enumFeatureValues> <tns:values>Car Maker</tns:values> </tns:enumFeatureValues> </tns:featureMatchers> </tns:groupFeatureMatchers> </tns:targetAnnotationMatcher> <tns:featureAnnotationMatchers annotationTypeName="org.apache.uima.tools.cfe.sample.Token" windowsizeInside="1" orientation="true" distance="true"> <tns:groupFeatureMatchers> <tns:featureMatchers featurePath="coveredText" featureTypeName="java.lang.String"/> </tns:groupFeatureMatchers> </tns:featureAnnotationMatchers> <tns:featureAnnotationMatchers annotationTypeName="org.apache.uima.tools.cfe.sample.Token" windowsizeLeft="5" windowsizeRight="5" orientation="true" distance="true"> <tns:groupFeatureMatchers> <tns:featureMatchers featurePath="coveredText" featureTypeName="java.lang.String"/> <tns:featureMatchers featurePath="pennTag" featureTypeName="java.lang.String" exclude="true" quiet="true"> <tns:enumFeatureValues caseSensitive="true"> <tns:values>IN</tns:values> <tns:values>CC</tns:values> <tns:values>DT</tns:values> <tns:values>CD</tns:values> <tns:values>null</tns:values> </tns:enumFeatureValues> </tns:featureMatchers> </tns:groupFeatureMatchers> </tns:featureAnnotationMatchers> </tns:targetAnnotations> <tns:targetAnnotations className="Other_token" enclosingAnnotation="org.apache.uima.tools.cfe.sample.Sentence"> <tns:targetAnnotationMatcher annotationTypeName="org.apache.uima.tools.cfe.sample.Token"/> <tns:featureAnnotationMatchers annotationTypeName="org.apache.uima.tools.cfe.sample.Token" windowsizeInside="1" orientation="true" distance="true"> <tns:groupFeatureMatchers> <tns:featureMatchers featurePath="coveredText" featureTypeName="java.lang.String"/> </tns:groupFeatureMatchers> </tns:featureAnnotationMatchers> <tns:featureAnnotationMatchers annotationTypeName="org.apache.uima.tools.cfe.sample.Token" windowsizeLeft="c" windowsizeRight="5" orientation="true" distance="true"> <tns:groupFeatureMatchers> <tns:featureMatchers featurePath="coveredText" featureTypeName="java.lang.String"/> <tns:featureMatchers featurePath="pennTag" featureTypeName="java.lang.String" exclude="true" quiet="true"> <tns:enumFeatureValues caseSensitive="true"> <tns:values>IN</tns:values> <tns:values>CC</tns:values> <tns:values>DT</tns:values> <tns:values>CD</tns:values> <tns:values>null</tns:values> </tns:enumFeatureValues> </tns:featureMatchers> </tns:groupFeatureMatchers> </tns:featureAnnotationMatchers> </tns:targetAnnotations> </tns:CFEConfig>
Using CFE for evaluation Comparison of results produced by a pipeline of UIMA annotators to a gold standard or results of two different NLP systems is a frequent task. With CFE this task can be automated. The paper "CFE a system for testing, evaluation and machine learning of UIMA based applications" by Sominsky, Coden and Tanenblatt describes details of the evaluation process.
uima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/0000755000175000017500000000000011625126536025105 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/0000755000175000017500000000000011625126536026075 5ustar drazzibdrazzibuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-16.jpg0000644000175000017500000004702111625126536030017 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀËE"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ö]?M·¸±I¤RÎå‹3;NãïV¿±í?çÿ¾›üiÚ?ü‚áÿèF¯Pö=§üò÷ÓØöŸóÈßMþ5¡EgÿcÚÏ!ÿ}7øÑýiÿ<‡ýôßãZPö=§üò÷ÓØöŸóÈßMþ5¡EgÿcÚÏ!ÿ}7øÑýiÿ<‡ýôßãZPö=§üò÷Óej³iZ9ÿI¶… ΀ ¶ÑÕÇzék–ñV›¨ß>,`gÝ©a°…*á¹ ËùÒ® 9Y‘;¥¡r-&»Ïc$2g]ï@ ºçûª[j¹g_1­ÊÈ!&îíÁŒ„M ¶9Ú9«=¥ÔZ‚¼¶—Ä‘È7NèÄ–d ®Çø_Ö™ªxBÛT‚⽺‰..y á‹ B ƒ€¨<Ô¾ƒZ’«x}çXþÄÊÌȱ‹Ÿ˜°î ‘ïTåÕ|- \1Ô-\An._Ê‘äÌ{ŠåB“»æR0¹9ǨÍ{ÿ›«¨­ã™—N’/.ì™@wÊÊù|Ì~mÃè{؇ÀÖ‘±Ý{rcsMJ LlÏ&5RfÎAàv¤QqÛÃñ¼‰%õŠ4H@×8(§'æà˃î=j»Ï XÃæÜjH˜‰óÉÂÈÁQŽ…%‡ÍÓ¾qÍEl HnnXC˜ÁäzÕÂÝHÖÆ¡k,u«»VD±ŒË'•+>å ¿ŒãœU[}cÃrE¾áÞÍ”0Yþe%Ãô4û/ìÙ4ÝBÊþúÅ »È)⓳fÓÎx<š/ôŸ ê7Kq5媸„ÀWJ‹³l‹Œé+ôõÏa‰e-ˆÓZðãI2°¹!$’7( ÇÞ<ȼÇ|q”mgCó§Tµ»–+b Äñ|ÑÃ8YîåN ùA )$Í:÷Fð¦¡u%Äú„%ÙÙÀ£ÌP±=üµþ˜¥M‘ðš„JŒª’ ¿ÂÌ«÷UÆ~`=;äƒH¤1‘kž’ewx„™Þ²1S·ÍÏ9Ú@ÛœqœI&±áu§{:DŒyß Ç8èGuê=*¤þðìò[£k6íid{ÒªëWÝòªùŽØ œsÔi¥øj2Å5»¤YŽÛð•váñœg £Ó  Ö^"ðÍê#¢Ü¢CvìèÇË]ápÀweÀÏ„fV×|0"¹uy\ÂXPÙ—¡èTîQ» e‡¨ËåÑü%-µ¬lµEµ‰bŒ¥Ò‚Bùx-ÏÌØ†1“Ùj5Ðü+^Tz¨ ~ITÔ0 mU*y䋟§¹s«xM#俊?01Ýë‘ÛÛ={f«Ýkš¯›[çò•]¶FÜÆÅU\dŒ«3`w%_å5-Þ‘áKÙ§–]B÷Rb— o]¸Áç öõ=Ž*y¬ü5=ù½}Fßí,èÌÿl! 2¯_º5 z–?ÄÙf™¨hZ¾¥5œs;ÄÒ¯˜OÈÞ_•¸©Ï#÷˃ßÛ;_ØÖ_óÍ¿ï³þ5—†­õ¾µÔ ¶”6vÃtŠ›vÄ»6ô ˆ#‡Ö¶¿¶´¯ú Ùÿßõÿoö5—üóoûìÿØÖ_óÍ¿ï³þ4ïí­+þ‚v÷ýÆí­+þ‚v÷ýÆ€ýeÿ<Ûþû?ãGö5—üóoûìÿ;ûkJÿ Ÿýÿ_ñ£ûkJÿ Ÿýÿ_ñ ÿcYÏ6ÿ¾ÏøÑýeÿ<Ûþû?ãNþÚÒ¿è'gÿ×ühþÚÒ¿è'gÿ×üh¿ØÖ_óÍ¿ï³þ4cYÏ6ÿ¾ÏøÓ¿¶´¯ú Ùÿßõÿ?¶´¯ú ÙÿßõÿÀ•MŸŠ/ ‚IR/±[¾Á#cq’pN3×~CÒŠd×V÷~-½kiâ™E…°&7 ó'ô¢€5´í'Mº±Žk>ÖY[;žHU˜à2Hô«_Ø:?ý¬ð?£ÿÈ.øþ„jõgÿ`èÿô ±ÿÀdÿ Á¾›F¶º0á鮋(„É**“•p’2-´dž¸ë«™Ôü4÷7m%¼ùo!—d¥Ç–çnHÚyUlã®Êý •í¡&ß ¦5)ôÛ8 'iY-Tº¾vìÚ%·|¸ç¥Wûg„¶Oi§ÀäJȲZ¯ï7(J0Ä•áGÍ‚8­?ìH_IŽÅîfŽe1>É¥‹3‚:d³qÓŒT¦ð^5ËÜ0›Íuu-æçïoÏPsþ±¸9ÝsH¤WšÿÂ1K kcg!–t€”³\#2‰ç®ÜŒâœ·žÚ|Ë[¤G9‰í}ŽT)oÍË(ùsËÜTðx7F·e $›B®Ée,¤š,6~÷Èì9Î;`qIgàíÆénb󌪑ǹæ,HO+“É?¸9ô>¦€"KïÉömŸÙí2ù0%1#aHÇ‚0zëƒÈÎÇöÿ@«üOð¬èü!£Äö.‹"½Ay™;UQBœõ‰=ø<òsÐo_ï΀(ÿ`èÿô ±ÿÀdÿ ?°túXÿà2…^Þ¿Þ×ûÃó  ?Ø:?ý¬ð?ÂìþV?ø ŸáW·¯÷‡çFõþðüèöÿ@«üOð£ûGÿ Uþ'øUíëýáùѽ¼?:£ýƒ£ÿÐ*Çÿ“ü(þÁÑÿècÿ€Éþ{zÿx~to_ï΀(ÿ`èÿô ±ÿÀdÿ ?°túXÿà2…^óûËùÑæ'÷×ó nò_ XÞ}–[6ŸÍŽH샕gû á}'Ð0'‚*(¯ü,жžÙV'6ɉ3ŽGÇ#’ç=9«÷Óî5Y56šdº`€ UO Z¢¨UW˜kð+o΋þz'ýô+Áßò,[ÿ×I¿ôkÐíQ@Us3Ìqo‚½å?wðõþ_Ê€$–e‹Éfûª9-ô¨ü—œæ|í<À§O­>(,žYÛ«·$ÿŸJ–€00+ Åÿòõûgÿ¥1Víax¿þ@þ¿lÿô¦*ÝÀô£ÒŠ(½õÔV3ÝÊ HP¹ 2N; ·ñÀÔšÚê+–DŽTˆ¶èK¶Õäðãvàuέû»h¯-%¶wE*”aœpkÛÃ) ð¸šëÌU3 Æ‘Ü œ~`å Ï5.ý •ï¡cRñF•¥j?`»•Öãìír"g%9À\’pçsPi;Â1ºSµ˜æÒNß”é÷ÿvÿ/_—ÜfõΦÝÝ›©àß+&ÃûÆ FÉPqœ1ÆpqšI4-&a ’ÑHÌî <–ß“×þš?ýõTQ?´‹V¹{¨î­ííÒ6y¥”ÌêWœ©FÈö8ÍMŒlÙæYlïËžX¬ï!I UPI\FÍŸlu«/ámDUkg¦̋‰a–$± –'{䜓½$1Ëåðæ‹8›}¯úé ‰\a‰$íÁùs–Èsg;Ž@(Ýx ­¥Úlj°ÂBÐ+.ò…‘Šà0ãÖ¬Ëâ‹hÑn#ŸíY)%½¼/3#€Ä”gF àd ÕÅÑô¤R«k®`üÃÿsTï<3¦ßÜÍ=Ã;®Vâ@®Sv!1%pvà“ל‘ÓŠ©ÿ Þ-Ù·³Ý4S¬W ‹•b_'¨]‡>ƒ'µI´™$6íç ÁmË[$Eßl›oS™~>™ÆŒz.•í*[™‹yeØÆ¤†jµr³€3œœšŠ×ú-”ˆöö¡ h‘ ó\ª…ÙŒ)8ê£ç©Ú3š¦ž;ðûÉeÚ^öQº¼¥ò†ÁÚD‰Ïû^Ç ²£Ðtˆ~ÏäÛù_gÛåùrºðªªàüË„O”ä ã"µ<ÅõìJ0=)¾bÿxQæ/÷…;Ò¢žhí­äž^#K± I ž'ð§y‰ýáL”Ã,O„u*Ã8àÐ?mãm:îí!†Úõ–XãxeìVBþg°‰Žzc½O‹tÙFË£+*”D¶‘¼Â@%c;~r23Žƒèq=®ƒ£YÜE<4jT;LìO.rÙ's~òO˜äüçžj-CÃúuÞž¶°9³dÿU4Gç•'i= Øù4­iqíœ7PóѬˆHÆTŒŽ;pj|J«g½”‘8ò cLžv¨ÀþU7Ÿüô_΀$Àô£Ò£óâÿž‹ùÑçÅÿ=ó  0=(Àô¨üø¿ç¢þtyñÏEüèLJ0=*?>/ùè¿|_óÑ:“ÒŒJÏ‹þz/çGŸüô_΀9‹ÿù/?ëÂÛÿFOE%ëñ}áS‘ö ní¥Å½£ÿÈ.øþ„jõQÑÿäü ÿB5z€ æµ/OÙK"8Dÿg*3ùòƒÐ ?1ÎxÀÉékÿÃ1^]¼ṉ̃‡bÌp¬q–N˜'œäeAÆz̯Й^Ú¸ñ5†Ÿáÿí}M…¤*Æ9Åd P Ç_˜žœg¥Dž1Ò&Â×R–]ѳ”™ºgË~lnRqÐqƒ‹çD³}%téD üÛüÖY7ç;÷©199“QÍá½*xR7·6ÇY]wbC† (¼ƒž=ÍR)4¸c‘®¼è|¶•[÷Ê “Œ*…¶ž@ëRÿÂ]¥¤„Lf‰Òdhb+"°260™Ü'¯ã‹ á ÊdÎŽU—tsÈ„I,0Ãó0>` €qNOiQ[=¼VQˆcVS’&6ç=q´uëß4LøºÃí6pçV¸œÂÂxÌ- ‚Uðyia\ŸÞÐ-¼g£ÝǵÓ,älͤƒ BÇåáq"|ÇŽ}©tïé¶pt§P¹Üí7_;©ÚTžT«È9ùG< ^ƒÃúU²ªÃf¨%…pÇ„}#OÊ€3á5ÒÌ‘íŠìÂÐK9™­Q°c¸•ƒ|§¡#jv~Uù‡'Œ¿sáý6îõ¯'†F¸;pþ|ƒfÒ§äÃa2Qs·¶€sNM LŒå-~èAøuôUü¨Ó5‹=\HÖžaTÁÜñ2VÎÖ\™N8#ƒZ‚²´M- \ùSË/Ÿ&àü±¨ÎÔAÙFx=00+Z€ÐQè)h Àô`z Z(0=‚–ŠLAF ¥¢€ÐVƒÿäX·ÿ®“è×­ÚÂð·ÿ®“è×  ÚŽY’ 3’Í÷T –ú ŒÌÓ[àŽòŸº>ž¿ËÞŸ '–vûÎÜ“þ}(žKÏÌü'hãþ{ý:}jÀ ( Š( °¼_ÿ ÿ_¶úSnÖŒ/‡·1 ¢òÐ’NiŽ€7¨ª¿ÚVóûmÿWühþÒ°ÿŸÛoûú¿ã@¥x4ý6âð¡q eöƒŒ‘Ú¹Ûm~õ5F‚yb˜G,q̫󿗔mÇ8|lô#¿5æ™qÍujñÈ¥]L«‚QÖ²-´½Þõn›RI™r eƒØ–3žŸ|·@zóRïЙ'}ÞxŽ[Kg=«‹(탉T)/!Yç°·y'¨œilí!âÉr¤pàdŠéà†#o1¡%G%G¥a\øeç»yÖÇËæ€”‘Y7J’’ ŽƒŽ•p忼Dù­î‰8Ьô伺ÐíÈkŸ³m¶²óˆo0ÆsŒŒçY5OHHKKRÊòÆËýšÛ•£Û¼³#ï ûÅÔ.K ÚM)%Ò¾Å{/˜Lærð³E†óLƒŒwçõª#Â:]¾-µ‚˜_Êd…äžYDˆñœ0É‹YHÛÁš†RØÍŸ_ð<åKi.LFQmšÆb#fÌî”üØRq€jÁ¾ð²½Ð“GE»ª|ºw˜eܬ~EE,pRE €AF«VžÓ ´òæšâYž6YäK©c³KïÇ Ia…ù‰ÔöžÐì/òÖÎ(nw3É2<ÌÙËHzÈß3`¶HÜqÖ”÷ÂÒ(²¶‘“DZkHe>‘mCæã©Ù»“ÍDº·ƒ‹D­§Â‚k‡¶…ÛLm“:ÿqÂm`ÙH?18öâA©ÓÚBÛ=»¬“Dê„÷RJJ€à.Y‰À0üh–“sáwÊ:eÀ‘ –À€ 1_˜”NU°ààVÇöÿ@«üOð¢ÃN³Óra’VfPŒóܼ¬@,@Ë’z»Uï1?¾¿QþÁÑÿècÿ€éþ§ýì"mÚ9/lÚö2-•‘P-ó~ñN{óÓ=7˜Ÿß_ΰ­ü;i6K5Üí-¥£YÆðÜÉòÈ•VÆìùºä1Å-Íž‹o¨[XÕæ¹I6û*ù`¨ ØàœñÁ=}*]?LÑïôë{¿ì{ó£·ÈCŒöÎ9©$Ò­îÞì\ÏçÛ4¯ë¹Iœî]ØaÏðgOŠ+ >ÞÐN¯äÆq gñ@ÍÖ©á{-fçM¸Ñ" m›$‘ÚÅ'7ŸÝ¡2ãųnxÎp(—Wð‚G‘i‘ÜÆàði…š2ûvŒ¦'ŒŒâ·®´­2ò¸æPEÓ¤’²LU‹&ݤ09اJ¬|9¢ý“ìÁYbÞéÁ$D!äîɽO<ÐdúŸ„ãžâôËig¶œ[ͲâFûŠçåVi'®3I¡á±qö{½ZN0¯– !Ï!XÄA ®>o˜°QóqZ)á39Ÿß6æÍÓü§.ß/Íò`»·'# Gð¯o; ¨þt–âêYCÈ9V•wƒ.ҀǠ00›¹ày¡Kk6¹X£™­’ÀÉ.URY€#!rG|Ufñ„ÇÚq 7îC†ÓÒ3##²mMøÉ;‡l)ÉX ˆ|-£Cl‹‹UwG}$Xe]»Ô+ŒGR g'=NlÅ èÐý³jçía–]÷ Ü1rÛrNÜ™ñ¼h*MWÁÑ_ËfÖþln?âZÀ@B–Ü䦧÷N<EÕ¼ ´i°ÚÇ ~i’çMh†6î îAµ°áˆ€E_>Ð ›(Ø™ËÈ¿k“iÏ™•Æì>l™QÇ=8—þý­Œ´²©må弑äÝ´¨;ËnÈ psÇt•ý±àײ[Û{ k‹Ri¢°Ê¦rT|Ű»~öHÈ$A>»á{xî_{s?›ÙaÜ¢(ÙÙ¾ö0v2Žy`{Fÿö&ÖŸe”™â-¹ÅÅËÉæ¥FâÌKpxÏB„—AѧӤ±•CC'™¼›†ÜÞbº¶[9äHýø'"€-ÿ`èÿô ±ÿÀtÿ ?°túXÿà:…Ieµª[Çrò*g =Á•ÎNyf$š±öˆçªßB€3äÑôX±*ij}ÕÉ“ôâ¨øNÖ3á»hÕ³l¯(XÂmë‚=Lt­ï>Ö¦Þàïù-ÿë¤ßú5èpJZ( Š( Š( °|aÿ"ñÈ}²Óƒÿ_Öõsþ4’8|3$³H±ÅÕ«É#° Š.#%‰<I4+]iqºÇ6£ rœåŒ“ÆÞÕzÓìÓ[,›a`IÚÛGÌ2pŠç¿á,ðqÁmÃÃ?3_C“‘‚z÷,-ð\QoøyŽIâú œà|ÝJÚÔ [ §Ž( ¢ä ŠÅ¶×!º¿¹¶†(ßì· ŽlÊ£ F Û žãó¦^ø£ÁW–S[¯Š4ŒŠTH·Ðe}þõfÇ«x=/$¹0ðêÉ,©,Íð+HUƒ ýʌ֑嶦r澇A¨ëšn™v`šÎVšXáˆÞM½rX¬lx¶q‘”·×´Û‹ä´63E,…–?2%Ô8 û…>猎kïUðþ»«sâ­Þ8LB{m±²rOß'k°Æí¼ôÏ5<ÚÏˉg–mcÃO%Ã+JÍ{ ,Tä½êfh6ÿÆvqY¬4‰.%mžRÉ*É’›±å¤ŽJù‰ÀC׎ŒC‡Ž4d´¸šk Ã[„·ùKœïT.±B ¨o”áx8ŠËSøuaq-ÄZÿ‡Ì²H;_A”Æ6ªóÀGÃÐT“êÿ çÕü5#NÁ¤-{ Ü}~÷|œúçœÐë_ØÍÔ³é²[¬ ,ˆÂ@&0«®BGC‚9üj?Œ´çg†ÏI¹šå'òÚ‹ûÆL.î@}²#`ÿx ƒ#m[á³O綯á£.ó&ï¶Ã÷‰Ÿ½Ô•ëÏRjE×~-ÊÜ.·áÁ2ª(q}p„þ.ÛWØP´ÅY i¬s+Ço°)óTF’#pT>ðÁ#$f¬ÂÐÁ"x~ð—Ú$O.<«÷ìv€*}0O9æ×¾\]ý®moÃ’O¿˜×°’[ 3÷½GáQÛk,æI­µ Å" Ee¾„ `½éôvrßÅz5åܶö–w”u]-~Iç!IÇÝÚsœtã<Öž‘{e­X-å½°HËE]Üø'N£¡äV:ïÃË{ƒq·áÄ”ãæ[è{ {ÐãÞ¬Xø«Àºm¿‘eâ-·Ú—ðŒ“Üüßç±~ÉlÖ‰¼§œDK/ 0XŸÉZ£áÝV=vÔÎútVÛ’9¢PÁ÷E"îBNWà‘ÍU»ñƒ®ü’|]£FÐÊ%FMFä;’0A#ñª±k?!FHµ F¬ÌÄ%ì ØÏñz* µhFu’O3HŽÒö;e2ËTrõã¦HüN Õ¾{=>ÂâòhWÊ·‰¥}±äíPIÀîp+ óž ½òDž-ÑÕb•fÚºŒ?1S‘œž™Áã*ÉñσÈÁñN†Aíý¡ÿ@"ñ4}¡uM:%…ZWKg3ùq*†,ùEÁÁè»è 5cþ])c˜Ëg,RB¹š'…KFq!ÚpHÎ"n„ŽWš¡m¬|7´GK}_Ã1££FÈ/ ÚQ¸+ØÛŽ6ôö¨&¿øk-·’ºÏ‡""$KØ7¢¸`Ø$ž~wäçï7©Èî áå¬2CµáµŠX¼™í°é–%XnäeØó×q¨¥ðÌ kxhþí¢æöJ°`Ã%»‡pÞ4®ú%6r$vM‚%%J— žqå¹<ôóXçÇ3ÅæÙhÓKE)C4f"Ò.ÒƒNƒgðô#9ž½ðòÒá® Öü9ÌÛŒ‹}IÁÎïFoû螤ÒZë¿ìcxíu¿BެŒ©}[{§c ‚€'Œt¤»{uÓ¥&eŽâEXöF…$s&wrÊ`Ãï }Þ€¬¾-±´¾’+ý&âÒµ[2HT²“笪OU€‘Œç888í†þc¿ö¿†·É"ÊÇí°äº’AûÞ¬ß÷Óxå#Õ¾E’š·†|¢»JÈH+óðAnF$cÑLþ1ÓÁ¯¿³.ÞR{“4"34?y·#p8 d• ¾,û;ÜC6„‹5»0 AM¢ä†Ù‚Cü˜ôù½©ðkßm•:!R¿éñAb-ÉØóÜæœž!ø§Ù]ðè·ÿžn‡wg÷¿»ÇÒ€:h¢‚H‘üˆÆåG§}šùãýò+šÓüSà]*Ô[Yx“B†I5?‹U¿øN¼!ÿCV‡ÿƒ¿øª¥z‹‹ï(Qö nÇü´žŠ©­¦ë^*¿›JÔ-/âK+dwµ™e Ûç8%IÁæŠÜ²²ŽêÂ#5¥µÂáÀ.väqx#а4è I,í`Q]± ù°àt¤OÓ"T-Õ‡÷]óáÿž±ÿßB€!·¹€[Å™ãÎÁücÒ°/¼PÖwqCþ±®.(’ F”…Rv!Çpè3í]›oýø¿1Xw:ÌÅä»…ÔN׬°Æþ[ž¥I«‡-ýâ'ÍöIo5›ÛMíPÙ­åѺ«7–¹3y[‰9À{ÿZÎ_ˆš<¶ðÍ W޳ÈÑÄ-…ÎiÃv±t±€XÛ[¶Ö¶°Y­¼³¤ø”ÌYÈåË™3èÇ ª±ø{üm…’œ<{@H ŒzUp: qPÊ[Zø¾Ò}>+—´»ŠWØ ¾ÀΖ6 ÁÁâTªW_4‹x'—lˆ ¹X®G’„aÙʱᶬRð9%@èÁ«ZßBðý¤‰$v‘¼jª¬1‚£ðÚ¿÷Êú =4} 'šu³³ó'ÝæîÝ÷¸éÉ$ŸRIêM*Oã +s:›[ç1JÑçÌ+æî+ÏAäÉר¦Oãd¾´¶†Êêe¸¹h]¡ª«—#*¥0zr21!§iTy6ø\ã‘Æwçóóþú5Ð|<Ï#›"Ò:ÈÄ’Ã8?«g×sg99̓ÇvW14ñÚ\%¬h­5Ä¥BE™pNx!\‚;аþ2²BÈö—©,gl©$XòXíÚä»zcûã8ÃbÜZ&ƒÃ¥ªìŽySÏ<òŠyô¥‡EÐmíÌZZ$D‚Tcœ0aŸ¡ò”޾>¶ŠÂ[ÛÛ †aw Á›ÌmûÑAÆà¡3‘’ÜàqSOã5ŠÏQ‘4»¶šÉn“å+²2ê®XB¹€àœƒ‘ŽN­Ö•¢ÞÀ°ÜÛZ˪ VÁW ¦‡ÑˆèjtÍ+Ë%•£;—,xù‹Œ>~½ýÉ=Nh“øïIŽqÅz%òå’E弯,¸*Ädd˜Ü duägWLÖ Õ..àŽ)¢–Õ•eYB‚ 0 #¡ëŒõš6…,þsÚZ4„8-ÆNòųë˹ç¦ãަ¬ÛZé¶—76és\eu#/ŒãðÉ'¤ž¤Ðêæl|S=ÍÖ• –(©} r4‹7ú¶‘$tP¸ù†ØÛ'#ŒÎ:/´Cÿ=cÿ¾…càh‰Í-¹µŽY¶—`®Ü€:+0Ï\3zœ€\»¾º‡R·µ†ÅåŠeb×±Ð0Ç~ØüqÁ2é—m¥Û]ºi£T€Hõ¢5´‚)#·xáÎ䣼ĒÜ÷É&‹$¶±²†Ö9Ã$(q“Žç¨øËû/X½·¹±±Z"î¸E™™Ý‚íE//$¸2ïŒsI/l~ѽ­ÝÍÄžCÕUNÙç-ò•ó*Ø?0ÇÖäöšeÔ7O¼‰pCJ˜€?Qµp{`U?øGü< eh”)`yÀ*G9ë˜Ðç®TPðšéF8&/³-Ó0‹…Œ pO>Œ£¹ÅCoã·žÏOا–.žáŒRÄÎå,eNü’w‚6ïa€rƒ ~¸g©Ž(%> [&œo¯,f‚‚)+†o1³¹o 9°'б'ŒÐY^ÌšeãIl'r¡AR‘— ä‚HV(@ã9Œ ÖΓ¢^[Çŵ¬±F‹#`…P{`‘ô$t5š‡åÈöv…‹;Ç%†¿|r=yëÍSiQ\-¼‘^¬Þ\’: rÞVÂà« òßGyŽãÆ-o%ÄgK”Ëjð­ÄfQ¹¬»09m¥‰Šã$Õ§.‘¡Í?Ÿ%­«K‡¸ÉÜI9õå˜óÓqÇSRµ†’Ò¬¦s"¹6Fw Ÿ®UOà(¦â/í{é­¾ÈbÇæ«—Îå.ʧÈPØíœv­ÊËm/G}F=@ûŒ’²«àòI9Áç’zÖ‡Ú!ÿž±ÿßB€åŽ,y’*g¦ãŒÖ7„_ Û‚>dÜÿM^¶<øç¬÷Ь/ Eþ¶‘Ñ]Œ“|øçk÷ ‡4T?gîI*Ÿ÷Éþy£Ë~ìàÿ¾™þX  ¨¨7\/XãaêƒùcúÒý ¿ª=pù@QPý®â!ô”þµ*°a• Q@ ESRÔmô«¼º."Bª|¸ÙØ–`ª¨$’Hzк+ þ»?ùðÖ¿ðSqÿÄQÿ ]Ÿüøk_ø)¸ÿâ(vŠÂÿ„®Ïþ|5¯üÜñÂWgÿ>×þ n?øŠÝ¢°¿á+³ÿŸ kÿ7üEð•Ùÿφµÿ‚›þ"€7h¬/øJìÿçÃZÿÁMÇÿGü%vóá­à¦ãÿˆ  Ú+ þ»?ùðÖ¿ðSqÿÄQÿ ]Ÿüøk_ø)¸ÿâ(vŠÂÿ„®Ïþ|5¯üÜñÂWgÿ>×þ n?øŠÝ¢°¿á+³ÿŸ kÿ7üEð•Ùÿφµÿ‚›þ"€7h¬/øJìÿçÃZÿÁMÇÿGü%vóá­à¦ãÿˆ  Ú+ þ»?ùðÖ¿ðSqÿÄVŽ™©ÛjöBîÓÌò÷¼dKFÁ‘а*À‚é@(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÈ—ÂÞžW–m K’Y³»ÙÆK1ä’qÉ&›ÿ†¿è^Òð ?þ&¶h  oøD|5ÿBö“ÿ€Qÿñ4Â#á¯ú´Ÿüÿ‰­š(þ н¤ÿàüMðˆøkþ…í'ÿ£ÿâkfŠÆÿ„GÃ_ô/i?øÿGü">ÿ¡{IÿÀ(ÿøšÙ¢€1¿áð×ý ÚOþGÿÄÑÿ†¿è^Òð ?þ&¶h  oøD|5ÿBö“ÿ€Qÿñ4Â#á¯ú´Ÿüÿ‰­š(þ н¤ÿàüMðˆøkþ…í'ÿ£ÿâkfŠÆÿ„GÃ_ô/i?øÿGü">ÿ¡{IÿÀ(ÿøšÙ¢€1¿áð×ý ÚOþGÿÄÑÿ†¿è^Òð ?þ&¶h  oøD|5ÿBö“ÿ€Qÿñ4Â#á¯ú´Ÿüÿ‰­š(þ н¤ÿàüMðˆøkþ…í'ÿ£ÿâkfŠÆÿ„GÃ_ô/i?øÿGü">ÿ¡{IÿÀ(ÿøšÙ¢€1¿áð×ý ÚOþGÿÄÑÿ†¿è^Òð ?þ&¶h  oøD|5ÿBö“ÿ€Qÿñ4Â#á¯ú´Ÿüÿ‰­š(þ н¤ÿàüMðˆøkþ…í'ÿ£ÿâkfŠÆÿ„GÃ_ô/i?øÿGü">ÿ¡{IÿÀ(ÿøšÙ¢€1¿áð×ý ÚOþGÿÄÖ­½¼6–éoo pÃÚ‘Æ¡UG RQ@Q@Q@Bm`c“gÔ.çSQ@}˜¹,ªß'ùæ¹Ï[ÜÇc,³ÎÏl×–€ o˜Ÿ> Lzã¯ê:ªÁñ‰+áÒÁYȼ´!W?é1ð3ùÐîÕô•&Åô•QþѺÿ 5÷ý÷ÿ£ûFëþ€×ß÷Üür€9ýsP¹µÖ"DŸµÊDÑï`Å<½Ä R2Ùõö«1_Íž¯énD¥ ~VØÚ4‡f”)C†Zü(Þ2§Œ÷XoAùчþêÿß_ýj¢ŽGû{Äfâê8´Å—lþT`ÚMïã,N$@K®ÎÖ»ø_{‰3i40Vu ¥Nå¦à’7°È4ÊŸ˜´vØî¯ýõÿÖ£çþêÿß_ýjà#ñ?ŠH~Óh‹l#‰å’ 6íeoÞ.ò¨Q€K)BwðXp@«š·‰5mRâÊÆ5±ÓØÀaì®|⥱9 Ì0:íäw·ùÿº¿÷×ÿZŸû«ÿ}õ¨3ÃW×^²—R}÷¥19û+[üàFÆ$ŒcèzŒ+Z™óá_ûëÿ­FdþêÿßGü(ôS3/÷þû?áI™¿¸Ÿ÷Ùÿ ä5mGÄÑ®¢š|@,qÈ!&ÍÙÏœ©È\)HÎ9ÝÔdê´ùd›N¶–W#Ä¬Ì hrHëå¹,Ÿî’HèjOÞÿÏ4ÿ¾ÏøRæoî'ýö€$¢£ÌßÜOûìÿ…›û‰ÿ}Ÿð  + Ÿò »ÿ°÷þ”É[9›û‰ÿ}Ÿð¬o È2ïþÂwßúS%nÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV‹ÿä?ëöÏÿJb­ÚÂñü€ý~ÙÿéLT?ˆw = ßöo5>Õ³9ò³ótç3ŽÙ®kÂŒçSO)a –2ý—Êòü¢ƒ¼£´°ºN ÷¹v¥™‚¨$ôZÖúÖø1´»·¸ pÆ® KZÜ–µ¹Ïj°ø¦YbmeH¶˜Ãse9=ò#õã>õŸ¬Yx¾}.þÙ%½¸[”p«µWBÞp –yxò²y~x=qÝÞ£ò¦³BìèªI#€?:¢ŽKgŒ^âéc–HÕ§*0€¢¡ÞwG·æÚŒaþl“Ú ‘|^÷GŠý“ÈY¼¨ÞÕr$Æ„ä³8Üø^ É®Ûýåÿ¾úô‡xþ%ÿ¾úôç7ž7º²¸‚ëûJâÞM=•`òí"•¦#‚ÒÇ2í`Ü€ ®À2w[7pø®"ïo=ìª÷A–$£ËÌÜÃ…ÙåHvã’qÖüÿÞ_ûçÿ¯GÏýåÿ¾úôç×>4Ûí)<>\N~Ï$jÇÉݱK+4Ÿ,¿|„ÎÜÍwH¼E˜ÔžóÉ_9š5B_’ªÌ ç°b= XVfWB=@ÿëÒâ_ï§ýòÆ€E3ÿ}?ïƒþ4˜›ûéÿ|ñ CVÓ¼Orº”vWwÅ$r$( _ηYHÌ$`¡æº­?ÍþζóþÐ%ò—Úvy™Ç;ü¿“w®Þ=8©?}¾Ÿ÷ÁÿP&?òÑ?ïƒþ4%&ÿž‘ÿßühÄßóÒ?ûàÿIX^ÿeßý„ï¿ô¦JÙÄßóÒ?ûàÿcxSþA—ö¾ÿÒ™(vŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( °¼_ÿ ÿ_¶úSnÖ‹ÿä?ëöÏÿJb  ô2McØšx£™$šŒˆ#ðpqßö¬C}&©³ù’´eÙî> å꤂ãxàÝúë™âµçžeŠ$gb«ZêV·“b™ÄÁwyrÄѹ_P¬#ÜqRÖ¤µ­Ì-SC×o'¾X¯³e!y[î´d‚xÿž‡çå…PÕ|-®Ýé×¶±Þ<év­¾9uo4g °òÆàç¾îÚWXbyeœG)gv ’I=2iÚÞIç¹òáK»¾ª’Iìª(åÿ°¼DóÝ©<)5Ç2 Çrc;òÊ¥@Œ€cTã*Ns’jÜøÄ—´Ò¼S3DŽQµ)” z²¦¨%€p7àŽ@¯m±ÿç«~B™#¶ù—;7¶ÕÝ´n>ƒÔПÏàÏß[­­ÕôlÐGÃ=ù¸ŒbEfÜ’FÞi8,p§ rûýVÒl-míVGýصl¤–"e )I”˜D¿Õ±XÆqœ(Ïuwq …¬—W—©ooÜòÌʈ£Ô“À¢ÒæBÒ;«+èîm¤I¡etaêàÐ0¾½‡V±¹Y^X`¼7 ¿™BóCŒa¢ù8S†õ;»Ò¡F—XîwÛkƒ´àC‚ãKåKÿ? ÿ|ð  ¨ªÑ:Šðº†e%BžA ŽA~ï&oùúûå€9M[ÂÚž º’GvcK˜äŽ42$x“Î YW‚Hxù9#oÇ=NŸÁ§[E"2:DªÊÓ´Ä:æ÷'­0°É1ÔqYóìÂc®N8Çz“É›þ~¤ÿ¾Wü(Å‘7üýÉÿ|¯øQäMÿ?rß+þ=axSþA—ö¾ÿÒ™+WÈ›þ~äÿ¾Wü++Ÿò »ÿ°÷þ”É@´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…âÿùúý³ÿÒ˜«v°¼_ÿ ÿ_¶úS[Öm§žÚ·O1à&ò²˜ôçŒ÷îNµáÍ.öØÚXäDí+I*Éb *’N Éé:õMåÔ6Ví<ìÊ‹ò©bI8É$NÃY·¾ŸÈòç‚bªKƒ¸)°T‘Á##9ÅKJä´¯s+Pð½åÝåÜÑjF8æ*ÅóaFqߨ”–úqT5Ü]Z]AÜ;nC`ì¥ÛÍýæ}à$@3ÇÉì¸ìf¸‚d–I0‘©f9'uàTWWÖv6sÝÜ\‚ÝKJû‰ÚÉàsœvëTQÍŸ]<×Eõ‘Ï>ç1y¤Œïݸ–ÆâW#ŒF=‚Åÿ–§ö—¹7Ö²Ë$H²ÆÌ’ÊTîÏ9î$íÎ0Ç¡ÉnÃ|Yaæ}Ó†ùúgŸÀƒøÕ 5Ý.-AìZâO´#"2¬rVr‚Àmî^3Þ€8æø{|b/£B HÕi•P««mH ¥²0U€Fƒø6öHüÁz#¹$+nžiCD&fm̬ÁIÉÎ>‚ºá=»*2Î¥\ᓆ>ƒžiñ´r xßzžŒ¯h—ÁײIGyÛÄBEò0ªˆ†n µ‰9ÛŒ`Õ8ü©#Ã!Õ´vÆ!Þ‘¹‰M¨T`@<™¦Þû`õoûèÒycÕ¿ï£@4-9´­&;71#~éJ ÜìÀI8±øV•3Ê_Wÿ¾'’¾¯ÿ}Ÿñ WVðkêÍ|d»ÜFñ!`Ì#Wóƒ|¹ÁÈ•Güé]-„×N¶·1Ê%Bçbàc žqéQMycoo=Ä×>\Piä#hPK½ò«‘HŠé#20ÈeGç@QQù+ýçÿ¾ÏøÑä¯÷Ÿþû?ã@V…?äwÿa;ïý)’¶|•þóÿßgükŸò »ÿ°÷þ”É@´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…âÿùúý³ÿÒ˜«v°¼_ÿ ÿ_¶úS]Õ­&»·ˆÛ”óà•fŒ9±‰ÁÆA<ààãƒÒ°ô òÒí$™(#s.%e2<›<±÷Ivûõèâº;ëÈìmüÙœ–‘§Þv'G¿ÿ¬ñYÚf»ýÀá»nÉ(‘€ \Ž‚;ŽA<Ô»\–•Êwþ ‚úòêçíL†ãÌ]žX*ªÑ•ÇýöL™õ8ªw¿ín`ž8f‚#8a&ëEpK²øÈùÿ}Ãuï“] ºÖÄÖój–qÍÑ,or¡£Ý÷w äg¶zÔMâ 8Œ“j¶p…‰&q-Ê¡Dlm, à޾¢¨£'þ[Wšá¦¸SÓùŒ±À¨Î™•vþ2L¬ qÀÉ2Zx*ÚÛΙ® ßJð;]ˆ€|ǰ¶#æd-ìXõ­¼G Í;ÀšµŸš³6›…¹PÀyÈ ŒSlüM ß[ÛO©jbº*¶ìÓæ³ …\ž[¶:çŠåãø}5”––öïi< p&¸–XŽbÚclG¹™b‡w̓žØ×èHÐôxl<Ô“ËÜr‘ì^I8’qÏrO½Oc§ê‘<º}ìq£lg·˜H° ó‚=êÖÅ÷üÍ:Šo–¾ÿ™¤ò—ßó4ú)žR{ÿßF“ÉOö¿ï£@Þ£à‹-N[Ég¹Cÿ%K¢·›¸)>¾qü½ë¡³­¬`ÌE£P˜còÓ cå\£Û'šuí ?µ‰õ;h ›m¸\ª¹Ú e¸ô'­HÚ¾. º_C,Èʲ$s†h·)`\ò‚rhVŠÉæ‚Q_û^ËcDÓûZàÆ¹ÜùÝ÷FOAƒW-e³¾¶K›IÒâ RX¥Þ­Û‚ Z¬/ È2ïþÂwßúS%lù)þ×ýôkŸò »ÿ°÷þ”É@´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…âÿùúý³ÿÒ˜«v°¼_ÿ ÿ_¶úShj–-}l«‚)â‘e‰ÈÈ =@# ‚G^üsXú'‡f°»Y¥tXЗX–C!i ìÞXªÿÁÏRI­FðY@¬"óe‘Ö(£Î79è3Øu$úÖ²ôí÷""‡ íÉ b¨ Qƒ( í9Cœ²í}Iv¾¤á‹VÕEû]]’ùÑA”òãbC>>]ÇqPNIÆ8Ç5VÇÀÚVŸªh@dmI1C¸ìÚ.Ì9ع¶ñÀbïÅ]¦¤öroÄHÏ4æ""i@Fò¶7ó´’1Í@þ3СIe¸–ðGå–š}:tA¿;rJqÓœãêŠ#“À¶2Ídï}|ÑÙÉ ±BÞS hÄ`cÈ'ÊNA|Àƒ"x.Í¿¿c˜˜“ï!ùtß'Ý ÈÃ|£æäæÓx—EYe‹Ì•¤Šo ¢ÙÊÌÍ–( —£å— m9#§Ò5½_[†Ò[y R”^øŽAìG±46›¥A¥ÅåÂò0òã.Aá(èaÍ^¦ùiýÅü¨òÓû‹ùP¨¦ùiýÅü©<˜¿çšß"€E3É‹þy§ýò)<ˆç”÷È  9ü)÷Ïz5;ø®­<¯ôRä6vwîÆ8Å@žÒ–ÐÙnžÅax"µfR£Þ;wÇî-‚8ÀÈ« â-)®`ž9Rh—Ë[9¥Ãm>XU>f8ÈL•ÈÎ)ĺX¥‰ã3Oå•‹fÒYÕÈÚê¸Ã'i ¡ý&'ŸÃ$J©¼c瀑(S‰vàA#5ÓÙÙÇe E1V–INî¹w. ±Çµ`Åã/ Ï 3Gv†9¡–t²ÈXó¼goÞIÛ÷°3ŠÙ±šÇQ´K«hÁ‰É|%H «T‚ €x  µ…áOù]ÿØNûÿJd­Ÿ³ÃÿM6åfi•„cÇ2 8Û¸îf$…ùG Æ*—ü+ ÿϽÿþ n¿øåð­ü3ÿ>÷ÿø5ºÿ㔬¯qY^æ£øoM’òK¶[6MÙÛu UÜT’ªIE9\óÞ©¿t¶[v‚çÊ Wh¼˜g;Á' Ô‰Üv_þ¿†çÞÿÿ·_ürøVþÿŸ{ÿüÝñÊc5fðÞ›;¬…&IüÅ’+‰#`w;2°8&GÈèAÇaV4Í&×H…¡´ó–"xI&yÀU NÕ …ÿ ßÃ?óïÿƒ[¯þ9Gü+ ÿϽÿþ n¿øåutW)ÿ ßÃ?óïÿƒ[¯þ9Gü+ ÿϽÿþ n¿øåutW)ÿ ßÃ?óïÿƒ[¯þ9Gü+ ÿϽÿþ n¿øåutW)ÿ ßÃ?óïÿƒ[¯þ9Gü+ ÿϽÿþ n¿øåhÏám.âæ[—[‘<„‘"]J­',c!¿w»ŒíÆqÍ1<¡ÆÙŸ$¡ŒBfs)`‹œ(n§Éžjü+ ÿϽÿþ n¿øåð­ü3ÿ>÷ÿø5ºÿã”xøCHi’-ܯå˜ËKy3–8ç-ÉGž™­{kX­#há]ªÒ<„dŸ™Ø³}É®kþ¿†çÞÿÿ·_ürøVþÿŸ{ÿüÝñÊêë Ÿò »ÿ°÷þ”ÉTá\xgþ}ïÿðkuÿÇ+wIÒl´==,4øš+tf`­#HrÌY‰f$’I'“@¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-9.jpg0000644000175000017500000000631711625126536027744 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ0"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ô]+KÓÃZeþ£q{æÜÄ¥¤mNäor 8ý‰ãÒ¬?ààÜ_gþÂWŸüUG§9O ø5ÇU|üž¨ø*ù£²‚9Í›]83M>_rÜevžgq»¥GªÇmm¨¨ïØCjÏûÓtçw q” ‚x#¦M+ßx§Ì»2Ü_DêïæD–2:àN»:Äp y_0àä€A¢àtGÃ:X K^§iÿ‰½ÏŽ?Öuä~tŸðiXSºó÷Oö½ÏÍßÞsXö××ZÜiWËj>Ì·ÑÊ2Ò\ío.R¡Fñô°9*N •‘oã[GÓD³¬‘]’o0B<Ñ*Ûà .Jä Ã84Ê6¿¶mç•÷þOÿÄQý³kÿ<¯¿ðþ"©¿‹´dyTÏ9(H\ZÊ|â!ò¾_Þaˆnq‘YšŽRØÝGoe*É Û({ä’ÚLʹgdùHÝÓ©Á÷  ÿí›_ùå}ÿ€ÿñlÚÿÏ+ïüŸÿˆ¬Í;ÅÖ—V–’]G$/s#FrMnÌ$df †+òçäqÈÍ]7Çvw¢Ök‹{«[{‹XfKY~Fv#æ;p¦àžx  ßí›_ùå}ÿ€ÿñlÚÿÏ+ïüŸÿˆ­ (?ûf×þy_àÿüEÛ6¿óÊûÿ'ÿâ+B¹ÛïØÚ"·¿¹ìZ»Åg3(l°m¤!‚¤¹æ€4¿¶mç•÷þOÿÄQý³kÿ<¯¿ðþ"¨Iâí29sæÈ O4Hío0%£q0øcƒƒéŒÒËã9åºÀó  ³˜ÉË ]ÈG$r1Ö€/lÚÿÏ+ïüŸÿˆ£ûf×þy_àÿüEhQ@ÿÛ6¿óÊûÿ'ÿâ+ŸðõÂ\üEñL‘¬Š¿d°’&ŒÿË~̮¹MþJWŠ¿ëÓOÿÚô£áùôúõOå[UçzW‹îôÏN>Ö¤{hV'capaÁÆØ˜èsÍ[ÿ…ƒwÿB¶³ÿ€7_üb€5|C¤]\O%ͤo2\[ k˜¢G!UbÈÑ–ùr >A Þ9©¢hWk}×Omkm+ÜÇï•çu(XˆþU\3q“’Ý±Š«ÿ ïþ…mgÿn¿øÅð°nÿèVÖðëÿŒT¸«ÜžE{¡áË}GPûSÝÝD$X’âŠlcbè*X`±û¥rx¬›ÏJ¶Ë¥ä·,O’†ñÑE¬-"É&À‘‚ä˜Ó†=ºŽsWþ ßý ÚÏþÝñŠ?á`ÝÿЭ¬ÿà ×ÿª(»Ãý2Òâyí.'¶‘äóbxa·W…·îÈ/ss‘‡,0O*䞆{6ãR¾ŸqåGm–Hœ2»a `c°<Ö7ü,¿úµŸüºÿãÂÁ»ÿ¡[YÿÀ¯þ1@ƒ´ýO^ƒWšY„ð´,ˆ2‰÷.ºƒÐ…`üé ðu¤:t–M}{,Mn–ª\ǘâF,ª0ƒ8Î2rHêIæ²?á`ÝÿЭ¬ÿà ×ÿ£þ ßý ÚÏþÝñŠîh®þ ßý ÚÏþÝñŠ?á`ÝÿЭ¬ÿà ×ÿ æ¹—ðU«_Ýß&¡y Üò¬¢X£Le[péÓ2o ‚2IÌÿ…ƒwÿB¶³ÿ€7_übøX7ô+k?øuÿÆ(n_ ÙMHÓÜLÀ†\“,Ë3gåìÊöõ<Öf¿á+»™§}&á¢{Õž;©$T‘P`'”û€ÛœCþ×QC(Q Q ICC Profileÿâ,ICC_PROFILEapplmntrRGB XYZ Ø40acspAPPLöÖÓ-appl²íÌÕÎ! Æ^~¯… 9nÇrXYZ,gXYZ@bXYZTwtpthchad|,rTRC¨gTRC¸bTRCÈvcgtØndinì>desc,ddscm>mmodÐ(cprtø$XYZ d÷:ÚXYZ j!­µ!XYZ '¾a°*XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgt/Nh}™°Â Ø ë ò !-:ALTW^cipstux{€ „!„"‡#Š$Ž%•&›' (¨)¯*¸+Ç,Õ-á.ö0 1"233U4{5 6Ê7ø9):a;›<Ý>?i@·B C]D³FGrHÑJ/KLñNLO®QRlSÊUVlW¾YZ_[¨\ô^C_Š`ÍbcOd’eÏg hAiuj®kámnDowp¬qÚst0u_vŒw¼xèz{>|p}Ÿ~ÇÜ€âå‚ìƒð„ò…ö†ýˆ‰ Š‹Œ(Ž3;A‘H’Q“V”Z•^–c—i˜k™kši›iœjhžaŸZ S¡K¢@£1¤)¥'¦%§"¨ ©ª«¬­® ¯¯þ°ø±ó²í³å´ÛµÑ¶Ì·Ã¸¹¹±º¬»©¼¡½–¾Ž¿ŠÀ„ÁÂzÃrÄnÅnÆlÇaÈCÉÉâʲËÌJÍÍæÎ´Ï„ÐRÑÑíÒÀÓ‘Ô_Õ-ÕúÖË×—ØaÙ-ÙùÚÆÛÜVÝÝäÞ­ßrà6àùáºâ{ã:ãöä¶å|æAççÉèŒéNêêÓë—ìXííØî˜ïXððÕñ‘òNó óÉô„õAõÿö¾÷zø5øðù­úkû)ûæü¢ý`þþÚÿqÿÿ  ý ù ï ä ÙÍÁ±¢”…wk]OC96,/.6> E!?"8#-$,%,&*'0(,)0*6+C,J-X.i/y0‰12¶3Ï4î6748S9z:§;×=>5?q@­AèC+DkE¯FøHEI‹JØL1M|NÑPQgR¶TUMV’WÜY)Zp[²\÷^8_}`¿aýc;dve·fóh.ijjªkêm&n\o˜pÖrsTt‘uÊwxLyŽzÅ{ã|ë}ï~õù€úþƒ„ …†‡ˆ$‰0Š:‹BŒIOŽX\`‘d’j“o”p•r–o—n˜p™mšf›`œXPžEŸ6 -¡-¢,£)¤)¥(¦&§$¨#©$ª#«¬­®¯°±²³´µ ¶ ·¸¹º»¼ ½'¾.¿5À9ÁBÂNÃZÄ[ÅGÆ ÆòÇÉÈœÉmÊAËËíÌÅÍ™ÎmÏCÐÐöÑÍÒ¢ÓwÔNÕ"ÕõÖÉלØoÙAÚÚÝÛ¬Ü|ÝHÞÞÛߢàjá.áðâ¸ãähå?ææíçÄè™énêEëëêì¼íî]ï.ïûðÇñ’ò^ó)óòô»õ†öP÷÷Üø¢ùiú0úøû¼ü€ýEþþÏÿmÿÿ÷ðôïííí Þ Û Ô Ë ½®Ÿ‹wdL0óÑ«„\0×¥uEÝ ¥!m":##Ö$©%~&U',((ç)Ç*¨+,t-[.B/.01 1÷2å3Ñ4À5°67‰8v9a:L;<< ==ð>Õ?µ@“AvBiCWDFE8F&GHHöIéJÙKÈL¶M¦N˜O‰PxQgRVSLT;U,VWX YYôZé[â\Ú]Ô^Í_Ã`¾a½bºc²d£e‰frg_hHi/jkkõlämÑn¾o®p¢q–rˆsxthu^vNw>x/y!z{{ó|à}Î~¾«€”‚fƒO„4…††÷‡íˆã‰ÚŠÐ‹ÇŒº¯Ž¨œ‹‘’p“d”U•F–4—$˜™™ôšå›ØœÍ¾ž¬Ÿ “¡…¢|£o¤a¥W¦Q§I¨;©"ªªÜ«¼¬˜­r®O¯.°°î±Í²©³‹´oµS¶5··÷¸Ü¹½º»~¼a½C¾%¿¿ãÀÃÁ¦Â„ÃaÄ=ÅÅöÆÐǥȋɜÊÁËâÌÿÎÏ9ÐZÑ|ÒœÓÈÔíÖ×OØ‹ÙÌÛÜ`ݹßàáôãåæ§èPêëÖí®ï–ñ‘óõ±÷æú ü`þ~ÿÿndin6˜uXáR¥ý( ¨P T9«…B-?Tl†£Äå 2\ˆ¸éUŽÊH‹Ñd±ÿO£ùPªaÀ!ƒè M ±  „ ì W  2  u âO½+˜sáP½+˜uåSÁ0 …ùlàYÏGÀ<¶6º>ÂHÐXårÿ Œ!!³"I"á#{$$±%P%ò&—'>'ã(Œ)9)æ*•+D+ó,¦-^..Ð/‰0E11½23B44Â5…6L788î9×:Â;³<¥=”>…?w@jAcB]CSDHEBF?G@H@I@JGKPLZMeNpOƒP—Q±RÉSáUV'WMXwY¢Z×\]:^c_”`Âaóc'd^e—fÍhiGj‰kÍmnVo pïrAs‹tßv4w‰xÜz-{‡|è~D€û‚Vƒ¹…†~‡Ú‰?еŒ\ŽÕ‘™“b•#–꘮š~œMžŸá¡¶£‘¥d§H©.«¬û®î°ç²ä´Þ¶è¸õ» ½#¿NÁoÊǺÉÞÌÎ0ÐXÒÔÈ×ÙCÛ‹ÝÜà&â|äÕç*é}ëãîJð©ó õs÷äúFü¼ÿÿ $6Le¡Ãé>mŸÕ H†Æ O—á+zÇhºiÇ)‰ëP´  ‡ ñ Z È 5 ¢  ƒ ö g ÚOÁ5ª#š‡þvòiá[ÖNÊFÁ=¸7·3®1¯1¸>ÃKÕ_î| ˜!*!À"U"ì#†$$¹%V%ö&—';'Û(€)')Ï*x+ +È,s-!-Ô.„/3/ä0—1H1ý2¶3n4$4Ø56M77ö8â9Ë:¶;§<š=‰>z?l@_AWBQCHD=E7F4G4H6I5J=KFLPMZNfOyPŒQ¦R¿S×T÷VWBXmY˜ZÌ\]0^W_‡`´aâcdHe~f±gæi#jakŸlÞno_p¥qîs2tyuÄwxVyœzå|6}†~Ò€l‚¹„ …a†®‡ú‰MвŒIý¨‘^“”Ì–ƒ˜7™õ›¶nŸ( è¢°¤w¦@¨©ç«¼­•¯v±b³Kµ6·1¹.»4½=¿XÁdÃAÅ1ÇÉ ÊýÌøÎîÐéÒôÔü× ÙÛ4ÝWß{á¢ãÓæè4êkì´î÷ñ=óõÒø)úrüÔÿÿ &9Oh„¥ÇíCs¦ÞU—Þ&tÆwÕ8  {íhâ`Þ ] Þ b å i ð w ÿ ‰¢/¿Qå}®Mí‘7ÜŒ<ì¤b$ÕŽHÀ~B  Ç!"[#(#õ$Ã%–&k'C((ñ)Ì*§+,\->."//å0É1­2—34f5N6<71879=:@;Ik?v@ƒA•B§C³DÂEÕFëHIJ5KTLsM’N´OÛQR4S_TUÉWXAYZÇ\]L^~_¸`îb)cdd¦eèg&hliºklTm¡nôpKq¦rÿtYu¹wxwyÒ{4|Ÿ~h€Ð‚4ƒŸ…†v‡Û‰GŠÁŒV÷‘‘3’Ý”–"—Å™k›œÁžc  ¡¹£j¥¦È¨€ª6«ì­¥¯d±)²î´­¶y¸Kº»ò½Î¿·ÁyÂèÄNżÇ0ȪÊË“ÍÎyÏóÑYÒÎÔ8ÕŸ×ØYÙ°ÛÜUÝžÞÞà$á\âã»äØåõçè+é@êNëRìOíMîJï?ð2ñ ò òïóÑô®õŒöi÷BøøÞù¬úzûIüüÝýþÃÿÿdesc Color LCDmluc nbNOèptPTúsvSEfiFI daDK0zhCN LfrFRXjaJPjenUSxplPLŠptBRœesES´zhTWÆruRU$ÔkoKR ødeDEnlNLitIT*Farge-LCDLCD a CoresFärg-LCDVäri-LCDLCD-farveskærm_i‚r LCDÉcran LCD0«0é0ü LCDColor LCDKolor LCDLCD ColoridoLCD color_i‚rm²fv˜oy:Vh&25B=>9 -48A?;59Îì·ì LCDFarb-LCDKleuren-LCDLCD colorimmodœ`¿ø{€textCopyright Apple, Inc., 2008ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ—"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¢€ (¢€ (¢€ (¢€ ÇñeõÆ™àÝrþÎO.ê×O¸šÚ×XØ©ÁààÖ¶+Ÿñßü“ÏÿØ*ëÿE5yü&>/ÿ¡¢óÿmøÍð˜ø¿þ†‹Ïüµÿã5Tµ+»‹+g¸†Þ9£Ž6’Mò” œ”äž}:W¤éSJö>&ì\䢦ît¿ð˜ø¿þ†‹Ïüµÿã4Âcâÿú/?ð×ÿŒ×-c¨Ëqf·—PÃmnñ‰üýØûÙQÖs©¬3Xˆ•&†îM‚E“§pr8=é{:V½‹úÖ;›—ßÕt:øL|_ÿCEçþÚÿñš?á1ñý Ÿø kÿÆkŸ]BÉâ­Ý»F[`q ·¦sÖ†¾´IZ&ºdR”Èô{ÓöTûõÜoó3 ÿ„ÇÅÿô4^à-¯ÿ£þÿÐÑyÿ€¶¿üf±±´­‘LŠdLŠ}?cO±?ÚµöÙ±ÿ ‹ÿèh¼ÿÀ[_þ3Gü&>/ÿ¡¢óÿmøÍcÑG±‡ah⿞»ðÇZÕ5­S}Zùïf·Ô 1ÊñÆ„'“ãª:»vï]½y×ÁïùkŸö?úOz-yÓV“Hû,œ¨BRÝ¥ùQRnQEQEcø²úãLðn¹g'—uk§ÜM ík¬lTàðp@ë^7ÿ ‹ÿèh¼ÿÀ[_þ3^¹ã¿ù'ž%ÿ°U×þŠjðºéÃB2½Ñáç8Š´y=œ­{þ†Çü&>/ÿ¡¢óÿmøÍð˜ø¿þ†‹Ïüµÿã5Ìj—·Ò\Çm±D…ßt¥Ð §?¥:ÚöV¶7‘ÃmÅuq6áƒêHÇt{:wµ#ëxÞN~}=Wå¹ÒÿÂcâÿú/?ð×ÿŒÑÿ ‹ÿèh¼ÿÀ[_þ3\ÅΤ ¹±$ŠéЉŸw9éÈãÖ§ömH.à(í±H0Íèy4ý>ÂxÌjIó=¯Ðè?á1ñý Ÿø kÿÆhÿ„ÇÅÿô4^à-¯ÿ®|ßZ Œ&ê(`¥ ƒ žƒµ0’6‘£WRéÊ#=2(öTûñøÅ¼Ùµÿ ‹ÿèh¼ÿÀ[_þ3Gü&>/ÿ¡¢óÿmøÍcÑOØÃ±?Ú8¯çfÇü&>/ÿ¡¢óÿmøÍð˜ø¿þ†‹Ïüµÿã5EƃûGüìØÿ„ÇÅÿô4^à-¯ÿ¯Uø{ª_k> ³½Ô®MÍÛMp3"©`“È‹ º£ âUì_ ÿäžÙ×Íçþ•K\øˆF)YÎOŠ­ZrU%{#²¢Š+÷Š(  Ô?ŽÄªó„fíwù›¿ð˜ø¿þ†‹Ïüµÿã4Âcâÿú/?ð×ÿŒ×'¦jwZ†\ÙÅ+#DÌ',A^øÚ8Ͻ?PÕâ´Òç½·1\ˆH «(õÆ2çš|”­{ñ8å?gÌïꎧþÿÐÑyÿ€¶¿üføL|_ÿCEçþÚÿñšÀ¶¿¼æb”yƒäíz~4fŠŒ÷p(‘K¡2¹G$Žyý•>Ä}wüÌè?á1ñý Ÿø kÿÆhÿ„ÇÅÿô4^à-¯ÿ¬1<,cT&A”‡Ì=G­IOÙSìKÌ1ky³cþÿÐÑyÿ€¶¿üføL|_ÿCEçþÚÿñšÇ¢cÂþÑÅ;;&ñ§ã#a©ë^Ú¶Ÿ4Á$‚ì€ADSÑÚ½Z¼Wáü”5ÿ°UÏþ·¯j®ÉFm#ê²Ú“©…ŒæîÝÿ6âËë3Áºåýœž]Õ®Ÿq4/´®±±SƒÁÁ­lW?ã¿ù'ž%ÿ°U×þŠjÈî<þÿÐÑyÿ€¶¿üføL|_ÿCEçþÚÿñšÇªZ•ÝÅ•³ÜCoÑÇI&ùJÎÊrO>+Òt©¥{ v.rQSw:_øL|_ÿCEçþÚÿñš?á1ñý Ÿø kÿÆk–±Ôe¸³[˨a¶·xÄŠþ~ìýì¨ÇëN¹ÔÖ¬DJ“Cw&Á"ÉÓŒ‚89ô½+^ÅýkÍËÎïêº?ü&>/ÿ¡¢óÿmøÍð˜ø¿þ†‹Ïüµÿã5Ï®¡dñ VîÝ£-°8[Ó9ëC_Z$­]@²) Êd‚z=éû*}‰úî7ù™ÐÂcâÿú/?ð×ÿŒÑÿ ‹ÿèh¼ÿÀ[_þ3X‚XÚVˆH¦E²È¦E>Ÿ±§ØŸí ZûlØÿ„ÇÅÿô4^à-¯ÿ£þÿÐÑyÿ€¶¿üf±è£ØÃ°¿´q_ÎÍøL|_ÿCEçþÚÿñšõ_‡º¥ö³à«;ÝJäÜÝ´×ó2*– <ˆ¹ ûª:^%^Åð¯þIí—ý|ÞéTµÏˆ„b•‘ìäøªÕ§%RW²;*(¢¹|(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ÿñßü“ÏÿØ*ëÿE5tÏøïþIç‰ìuÿ¢š€<.©êÑË6“w 14²Ë"ª9#ÈêåPÔf»…í…³À¢YDmæÆ[äa‡¥zÒØüþùÕŒÿ°^Iáý:%ÒkI"w„²þð'P8÷=ª±Òõ-ŠÆàµô—k!ò²äàžsÆ{Öì:œò"E8rå‚ÒGQž™öªÃXGÔÄ*SìÞCJd!$d`ŽzŒæ³qs²5«Ý®^ïgÖæl–:•ߨÌÖÓD¨’A2Âñd†ÇÎ3‘Ï~þ™¨uM+P•¯ÒÞÑܼ0G†Dä£zNÕ¾5k3³÷’ò€0¸!Ï@F2½{⦂î+•£ó ¸%KDËÓ×#Ç­‘z\*µ6¥Éky>÷ïä6-ÆòVkEŒ_ßdnsÏÊqÏÖ¬ÕFâêÖ .!XÌp®öV³Žà`ð:¼FkEØâšvRþ´ (¢™§üÿ&¹ÿaSÿ¤ðW¢×|ÿ&¹ÿaSÿ¤ðW¢×—Sã~§ÝàÿÝéÿ…~AET!EPEP?ã¿ù'ž%ÿ°U×þŠjðº÷OÿÉ<ñ/ý‚®¿ôSW…×f©ó¹ÿü»ùþ†~·×=Ìð´²Ê…A¯~HªÓZÝM§iÌ!u’ÖDy ,¹m£8÷þUfúæê Û(áxDsÈQ÷ÆIRÙ0ôÇJ’ RÊé‘aœ>ðÅX)Úq×­ÚMêxñ•HS\ªë~¾šýÆiz€K ‘ÈŒ.e™™ „>qÔòFsÆ{Òͧßß5«\[My/m2Bñg0É#¿zÔ‹XŽkæU+öQ˜$*À±Èdr9àŒæ¦µ‘h—ÌpÒHcPbpCœ”ãžqÅO,;›ºø„ïɯ£ëó0¯ôË÷ºÔ+Gq)·òßzs³ïH®Š ßj˜›UŒ¸—#2qÐãÒ– ¸®V6‹Ì+"–RÑ2Œ¨ãñëPjWíe˜Ð;—@sÑUœ.^?úÕI(ësÔ©VÔÜuÛ¯’ïä^¢Š+C(¢Š+ؾÿÉ=²ÿ¯›Ïý*–¼v½‹á_ü“Û/úù¼ÿÒ©k—²=܇ø“ô;*(¢¸§ (¢€>p½ÿÞ³ÿa[ßý(’¡bB’± êjkßù ë?ö½ÿÒ‰+7V¸žÏLžæÜǾ$/‰° vàŠôàíM?#áq1rÅN+¬Ÿæfé¶7ŸØú…œ°½´³<ŒŽÌ¤|ùÇÝ'¥S»Òoç°» jÊïm ºÅ½>b§%³œcÓ¿µnÿj[BL3Ü+O_7ËF–èO\©¦ÜêKäñmfiDr NÆ öÍ'Ú×6zênJ;ë³¶–äeÜÙêws[ù/½'I’mу(¤dŒŽƒ# YtˈçÓZ+yåHžieó=À¸éÁ©íÅjɬXÄ$/+î'Ê~W8$qóÜŒâ¦KØdß³Ì;U±u8ÇoqôïG,_Q{zÑ_–½Uo×ñ3ô{{‹k> ‹ $‰^Fe&?Lc9ϵlUMBôXÀ)y]¶F€¹°O`O@OÓìgûM¢MæÇ.ìüÈ…@ç¦ ÎGN!W/tæ«ÏS÷­ZïþõÿX¢Š*ŒN«áü”5ÿ°UÏþ·¯j¯øcÿ% ìsÿ£mëګίüF}žSþçŸæÂ¹ÿÿÉ<ñ/ý‚®¿ôSWA\ÿŽÿäžx—þÁW_ú)«Ñ<.©êÑË6“w 14²Ë"ª9#ÈêåPÔf»…í…³À¢YDmæÆ[äa‡¥zÒØüþùÕŒÿ°^Iáý:%ÒkI"w„²þð'P8÷=ª±Òõ-ŠÆàµô—k!ò²äàžsÆ{Öì:œò"E8rå‚ÒGQž™öªÃXGÔÄ*SìÞCJd!$d`ŽzŒæ³qs²5«Ý®^ïgÖæl–:•ߨÌÖÓD¨’A2Âñd†ÇÎ3‘Ï~þ™¨uM+P•¯ÒÞÑܼ0G†Dä£zNÕ¾5k3³÷’ò€0¸!Ï@F2½{⦂î+„ãó É¥¢eéë‘ÇãÖŽH½. Z›Räµ¼Ÿ{÷òãy+5¢Æ /ï²79çå8çëVk+SÔn-nPˆƒyFD)>sùf¸#óëÒµ’ ‘‚G#Ò­>‡HI%'ÔZ(¢¨Ì+ؾÿÉ=²ÿ¯›Ïý*–¼v½‹á_ü“Û/úù¼ÿÒ©k—²=܇ø“ô;*(¢¸§ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çüwÿ$óÄ¿ö ºÿÑM]sþ;ÿ’yâ_û]覠 ªŒ7s=±¶HE(‘¼Ù çŒ )õ«õŸ©ÜÝ[Ëf¶ò@‚y¼¦2Æ[) Œ0þî?õe±ðoϧâQM/P&"[[©f}³1;_wäê7ŸË߆͢ß]ERÉl« mã*T‘Æ9A‘Ïõâ[]bâîO±¢Â.„’+I‚cÚ˜ù€ÎNKŒúóÅ>}ZkAsè†hUÌE; 1Æâ3‘ŒFzµ¡c·›¥¢Wÿƒ¿ÞÇ 5ÚÐ[}ŠÊ¤?¾XŽƒ‚ÑÎqôõ«v"õ Š;µ€²‚£rzcmùéúð[ܳB$‘ã™hI-ÔÙïœÇñ¦ê×3Yéw6æ=ñ!|H¤‚n«²Jç3”æý›êü÷ µ½yTC¼ŽH’fB[èñW;FìnÇ8éYÍqz𥱒ܤ±3¹09]¹ÇÍÆw{ôïZT×S:ŠÊ+@¢Š*ŒOø=ÿ Msþ§ÿIà¯E¯:ø=ÿ Msþ§ÿIà¯E¯.§ÆýO»Áÿ»Óÿ ü‚Š(¨:BŠ( Š( ÇòOQÈÝúUÍBâîË8­ävd&X‹`…-žzb«Újóß …"K†s–EÛrA9=}kgËëÈò¡íU4Õ­ù|_ðH®4{ÛÈãIÞÔâ•°rXg=ÛÈæ§m1äµßa²‚%¥X |¤|ƒ'8ôÆ;ÒO«OkÌS,Bx dȶlcäuç#=ºÕë{‡0«ÊñʬT$)*ùïœÇô%Ç)ÖŒS{tüÿÈ,þÚ°Ä—kð¤;FäóÛhªÚ¦—ÈYE•ž6?¿uR<ŒàqÖŸªÜÝÚ$2ÀЈ¼ÅIŒˆXª“ŒŒÒ£Ôî¯­Öæ[i-Äp[™Yd‰˜’2qî? §kY™ÓSçSƒJþ½Í5T(ÎÇ'4µi©Ísp°GwgrÏmð!ÄGŒnŽzúƒÅ3ûCQƒM„ÆÚXTn’8ãd`¹ä‚Xç˜s¢^w³zÿŸõÔÛ¢‘He :‘KVs…{¿ù'¶_õóyÿ¥R׎ױ|+ÿ’{eÿ_7ŸúU-râ¶G»ÿ~‡eEWôáEPοòÖì+{ÿ¥Vn­o=æ™=µ¸|¨S21PïÀ5¥{ÿ!½gþ·¿úQ%fê×3ÙésÜÛ˜÷Ä¥ñ"–Ü^œ†¯Øøz×úä¹wæ™BæÃQïGj<ø#Œ~ù¸*I?ÁÓæ?—¿g_ F¯Œ\ý£sfä’ËŒ^ kkÛ\Mk2Å4Êb4@ª±r@qŒg¯J²×wV—PÅwåJ³îÑ!R í “œ€yý){¥·U+Yyyè¿B­¦“5…³Eog§ùŠžZÏ÷ZEÿkä88úäÕ« k»ä·T…­Õÿq™Nà„ó»åê9ÇåžôÝ2þkØDÍ$„éÑîI$þéW÷4°nˆíf\©‘™^áÅ8¥º2­R¥Ügóßúÿ‡ ¾¶’g·š¾u¼…Õ\á[*T‚pqÁëŠu±¶•Š—yFÛÐ$à~ušoõì‹k¯2×ÍšdB<–À Á¿Ôu­±œ õïT¬ÝȨ§r·¥í÷Ã…QT`u_ 䡯ý‚®ôm½{Ux¯Ãù(kÿ`«Ÿýo^Õ^uâ3ìòŸ÷8|ÿ6ÏøïþIç‰ìuÿ¢šº çüwÿ$óÄ¿ö ºÿÑMXž‰áuCQ†îg¶6É¥7›!\à…>µ~³õ;›«ylÖÞHO7”ÆXËcå$†ÝÇã^¬¶>ùôüJ)¥êÀ$K`«u,϶f'kîà|Fóù{ðÙ´[먠ŠY-•a€ÃÀ-¼eJ’8Ç(29ã>¼Kk¬\]Éö4XEÐ’Ei0L{S0ÉÉ`1Ÿ^x§Ï«Mh.bÍ £ùˆ§aF8ÜFr1‚HÏAÖ³´,vób´JÿðwûØá¦»Z o±YA‡÷ËÐpAÚ9Î>žµnÈ^ÇowKu3Fäð:q´~=(·¹c–GŽhÎݲ[©!³ß8ý}sMÔf¹…!6Ï —•co22ÝN20®ÉjsJR›ävßÏúþ‘§§Ü^HÛ<§£ØŒTÄÙÎõÀ<ôôè9­4QT¶â =ë3íwÑ^ |ƒ4±—†eBàŒ‚¹Ïƒ×Ÿj,gÔg¹d–Õ£‚)‚ÂÊXm —8ûÝ1Ú„ÕÂP›‚M«-¯ëÔÔ¢Š*Î`¯bøWÿ$öËþ¾o?ôªZñÚö/…òOl¿ëæóÿJ¥®\VÈ÷râOÐ쨢Šâ>œ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ÿñßü“ÏÿØ*ëÿE5tÏøïþIç‰ìuÿ¢š€<.³uk)ošÑVyaŠo2E™Ž‚1§?{?…Ký³¥ÿÐJÏþÿ¯øÑý³¥ÿÐJÏþÿ¯ø×ªÜZµÏ‚§ °—2‹û˜É´óŽ͊ÅÀ”FÔd88àqÈãð¤ŽÎè\Mxí¹"dTSœg‚IÉç·'öΗÿA+?ûþ¿ãGöΗÿA+?ûþ¿ãKÝîWïínW÷yßó"²²šÒK‰–#3²“nv.:¶vŽH>ƒ úÔÚ•´×–k–#™JHÌĸàçéÅ'öΗÿA+?ûþ¿ãGöΗÿA+?ûþ¿ãG»k\¬çÏÊïèij¾ª—2ùk1ºGµ‰-»o^8Æß|çµ^ª_Û:_ý¬ÿïúÿÛ:_ý¬ÿïúÿ4⺑(U•¯§‘vŠ¥ý³¥ÿÐJÏþÿ¯øÑý³¥ÿÐJÏþÿ¯øÓæ]Éö5?•ýÇ®|ÿ&¹ÿaSÿ¤ðW¢×›üš+ëRÃ*Ij§Œ?èðwéæTøÙ÷DÖš}—äQEAÐQEQEsþ;ÿ’yâ_û]覯 ¯tñßü“ÏÿØ*ëÿE5|ýý³¥ÿÐJÏþÿ¯ø×^¥{Ÿ?žÂRö|ªûþ„:Œ·×Vy‚Ú[x\¼‹3›*GM¤g?‡ãRObñÝCud"WŽ3‰¾Td'8Èè{Ó¿¶t¿ú Yÿßõÿ?¶t¿ú Yÿßõÿé÷{ž"öÉ%Ê켟Q‘YܬÓ]³Eö™¶©Q’Š‹Ÿ—8ÉêyÇáIcg5§œë ùÒ0Ç!؃¡ íêzã:“ûgKÿ •Ÿýÿ_ñ£ûgKÿ •Ÿýÿ_ñ£ÝîÛ4ÓŽþO¡bæÝ.­e·”e%Bô"³ÚÆõ´)í]á–òxÙÉ*¼¹èOL~5cûgKÿ •Ÿýÿ_ñ£ûgKÿ •Ÿýÿ_ñ¡ò¾¢‚­e½ö*ýŽú[Ëk™#¶­‘‚„•˜ÈHÆ m^ý 0Xj3i«§Î-¢„²IŒìËž@F3Ó95wûgKÿ •Ÿýÿ_ñ£ûgKÿ •Ÿýÿ_ñ¥h÷4ç­¥¡¶Ú=7ÿ2‪ 0)j—öΗÿA+?ûþ¿ãGöΗÿA+?ûþ¿ãWÌ»œþƧò¿¸»^Åð¯þIí—ý|ÞéTµâÛ:_ý¬ÿïúÿ{o‡I>Ø:0dk‹²¬§ ƒs/"¹q-4¬{™%“æVÐí(¢Šã>(¢ŠùÂ÷þCzÏý…oô¢JÍÕ­§¼Òç¶·ï•JfF*=ø¬jz…¿ˆ5¸¦½¶ŽEÕor*‚?Ò$ìMWþÙÒÿè%gÿ×ükÒƒN 7ÐøœD*G9Æ/âoo29t¸ä°H¡ŠIUÖUò—åWSŸA‘Û·[««ˆf¹ÇänhÖ7-–#$Ž ãõ©?¶t¿ú Yÿßõÿ?¶t¿ú Yÿßõÿ¯w¹•ëÿ+ûŸ]È’Ês©-ÛÇ:!Rñ±ÌÙþðÇ~5rF¹û0h£ˆÏÆQœ…÷±Ÿ^qPléô³ÿ¿ëþ4léô³ÿ¿ëþ4'ÔRY4ÜvòdÙÓ}–ÒИÌ12;¾HmÊÛ°:zÖ¥RþÙÒÿè%gÿ×ühþÙÒÿè%gÿ×üi§ÔSiï÷hª_Û:_ý¬ÿïúÿÛ:_ý¬ÿïúÿ>eÜcSù_Üvÿ 䡯ý‚®ôm½{Uxw›Ë[¿ˆgì×0Í·J¸ÝåÈ–ßÅ{yÕÝê3ì2¤ã„‚~› çüwÿ$óÄ¿ö ºÿÑM]sþ;ÿ’yâ_û]覬@ðºÍÕ¬¥¾kEXmå†)¼Éf8nÆ6œýìþ/öΗÿA+?ûþ¿ãGöΗÿA+?ûþ¿ã^«qj×> œ*Â\Ê/îc&ÓÌw÷6+o4~QQàãÇ sÂ’;;¡q5ã´Bæ@ˆe‘QNqž ''œÜTŸÛ:_ý¬ÿïúÿÛ:_ý¬ÿïúÿ/w¹_¿µ¹_ÝçÌŠÊÊkI.fX`ŒÌÊ|ˆÜìulíêAôì>µ.£ ÌɶHX¤«#y’ès…4léô³ÿ¿ëþ4léô³ÿ¿ëþ4{¶µÁª®|î:ú1Ú\K¨­íá‰Z8ÊELX.HÉ,@Éàv¥Ó­î šñ®³Í毗!b>P¸9QýßÖý³¥ÿÐJÏþÿ¯øÑý³¥ÿÐJÏþÿ¯øÑî÷íšk—Ëgê]¢©léô³ÿ¿ëþ4léô³ÿ¿ëþ5\˹—±©ü¯î.×±|+ÿ’{eÿ_7ŸúU-x‡öΗÿA+?ûþ¿ã^Ûð¡ÒO‡6Œâì«)È ÜËÈ®\KM+æG F¤ù•´;J(¢¸Ï¤ (¢€ (¢€ (¢€ (¢€ (¢€<ãį4ê:M¾ƒÊY:!šKórÑ$ŸtDØÆüuíYÿð·µOú,ÿðjßüb¹¯ÿÉBñý|Ãÿ¤°Ö$²¬14ª2p ?ä×m:pMŸ3‹Í14ëÊœ-dûÿ {Tÿ¡bÏÿ­ÿÆ(ÿ…½ªбgÿƒVÿãæ1ëv2ÎУÌdVUu6Ò „ôÝ•ã>õzYVžWÎÄŽ'ØsT¨S{Ë5ÆÅÚJß#Ð?áojŸô,YÿàÕ¿øÅð·µOú,ÿðjßüb¼úÞx®­ãžÝŠ[d~5%?«Ó%ç´ìí÷ïü-íSþ…‹?ü·ÿ£þö©ÿBÅŸþ [ÿŒWEV€¿¶q]×Üw¿ð·µOú,ÿðjßübø[Ú§ý ø5oþ1\}Zý³Šî¾ãÐìþ-_Üjv6³xrÚ8î®á¶2&¤ÎSÌ‘SvÓÎ7gê5ó…—ü†ôoû ÙéDuô}rׂ„¬w+ÄÔÄÑs©½íø ¢Š+Ò Äðü‹p×Y¿ôkÖÝbxGþE¸?ë¬ßú5ènŠ( ³õÝOûÃÚž­äùßa´–çÊÝ·~Ä-·88Î1œЮÇòOJ9¾2NÑÕú‘ÿ {Tÿ¡bÏÿ­ÿÆ(ÿ…½ªбgÿƒVÿãçv×Ý«¼Î1ñ2zpÀQ%ä^EhîDÒ‚QvŸ˜¼ô£ØSíleí×ÐôOø[Ú§ý ø5oþ1Gü-íSþ…‹?ü·ÿ® ŠV?Û8®ëî;ßø[Ú§ý ø5oþ1Gü-íSþ…‹?ü·ÿ® Š>­þÙÅw_qÞÿÂÞÕ?èX³ÿÁ«ñŠ?áojŸô,YÿàÕ¿øÅpTQõhöÎ+ºûyð–¾þ'ðÕ¾¬ö‚ÑåyQ¡Y|À¦9Z>jç;3Ðu­ºã~ÿÉ=²ÿ¯›Ïý*–»*àjÌúÊrr‚oª (¢‘e]OþAWŸõÁÿôPxþE½/þ¼âÿÐO©ÿÈ*óþ¸?þ‚jÿÈ·¥ÿל_ú  (¢€1<[¯¿†<5q«% »xž$XZ_,1’U–ÚØÆüô=+ƒÿ…½ªбgÿƒVÿãÒüTÿ’{{ÿ_6úUxítÐ¥§sÅÍqÕ°ÓŠ§Õïü-íSþ…‹?ü·ÿ£þö©ÿBÅŸþ [ÿŒWšÝê¶–,EÃH¸À,!v\žƒ ŸjžÞæ;¤gx vñ²zô`zÛØS½5æ¸Õf´ô=þö©ÿBÅŸþ [ÿŒQÿ {Tÿ¡bÏÿ­ÿÆ+ÎþÙ۾żý£Ëó6í?w8Îq޵=W¦KÎ1k{}Ç{ÿ {Tÿ¡bÏÿ­ÿÆ(ÿ…½ªбgÿƒVÿãÁQOêÐöÎ+ºûŽ÷þö©ÿBÅŸþ [ÿŒQÿ {Tÿ¡bÏÿ­ÿÆ+‚¢«@?¶q]×Üw¿ð·µOú,ÿðjßüb»Ï kïâ [êÏh-W•—Ì c•£á¶®s³=Zðjö/…òOl¿ëæóÿJ¥¬+ÒŒ±êeXêØ™ÉTèŽÊ¹­;þJ?ˆ?ì§ÿèwUÒ×5§ÉGñýƒtÿýê¹léh¢Šò;oŒÚÕ¬7 á{P’¢º†Õ[ žqRÿÂÞÕ?èX³ÿÁ«ñŠó]þ@zý{Gÿ Šžâê;TV—Ì!›hÆÎIÆz('µw¬=;]Ÿ)<Ûícmû‡ÿ {Tÿ¡bÏÿ­ÿÆ(ÿ…½ªбgÿƒVÿãæ¶zµž WìÏ#†«]Tã® T×WYF²\9DgRy=:(ö­q<×¥ÈÖ½¬z'ü-íSþ…‹?ü·ÿ£þö©ÿBÅŸþ [ÿŒWE?«@íœWu÷ïü-íSþ…‹?ü·ÿ£þö©ÿBÅŸþ [ÿŒWEV€l⻯¸ïáojŸô,YÿàÕ¿øÅð·µOú,ÿðjßüb¸*(ú´ûgÝ}DZø#Æóø¶ëR·¸Òã±{$…ÁŽèÌHdÑq/ß­kjßò2xþºÏÿ¢š¸?„?òñý{YèWÞjßò2xþºÏÿ¢š¸ªEFM#é°ueV„g-Ú6袊ƒ¤(¢Š+ƒñÄ+¯ x„i6Ú47Ÿè‘Ü´²^˜q½äP Û?êóœ÷®ò¼Wâwü”6ÿ°U·þ¸­)EJi3Zt0ò© Õ¿4iÿÂÞÕ?èX³ÿÁ«ñŠ?áojŸô,YÿàÕ¿øÅpU›ý½§ù¢-Óù…<ÀŸe—;½½=ë­Ð¦·>~®6 ¿Èôÿø[Ú§ý ø5oþ1Gü-íSþ…‹?ü·ÿ®X2†‚2*KÈ/¡2Û¹d TåJGQ‚£êôÉþØÅÚú}Ç¢ÂÞÕ?èX³ÿÁ«ñŠ?áojŸô,YÿàÕ¿øÅpTSú´ý³Šî¾ã½ÿ…½ªбgÿƒVÿãÂÞÕ?èX³ÿÁ«ñŠà¨£êÐíœWu÷ïü-íSþ…‹?ü·ÿ©¬þ-_Üjv6³xrÚ8î®á¶2&¤ÎSÌ‘SvÓÎ7gç•-—ü†ôoû ÙéDu3¡Ѷ6ÄÔ­I«6–ÞgÑôQEpŸRxŒä¡xþ¾aÿÒXk¶Øee¼[!ödI‹+ŽrvtÜ=»TÒÜÏŸg!¾9o¢˜®™ð„|ÊÌqžA89Æk®¢fí¸Þ6.Wäë}ÿàZ÷9ý*î9ì15츎øÇ,…‹|ß*±äG­tÉdÄò0bd…RÄýëMµ¸K»X®#ÎÉT:äsƒWmj²öÍ++’ÑEF$¶_òÑ¿ì+eÿ¥×Ñõó…—ü†ôoû ÙéDuô}pâ¾5è}VEþï/ñ?ÉQ\Ç´‰áùàÿ®³è×­ºÄðü‹p×Y¿ôkÐÝQ@sþ;ÿ’yâ_û]覮‚¹ÿÿÉ<ñ/ý‚®¿ôSP…Ö?Š%Ž?݇uRëµA8ÜsÐ{ÖÅT¸¾û=äßfžC7 é·hÇ\åàsÒ½Ymcà(7ŠI^ÚöÛR…åÖl4çŽ|Y»¨žhäÀ ´ÿ< Œf±ä»¸ûV—$Ÿ¼˜%ÖÀϵ™:)Ï©¯|WeP%Üo{- æFŠí•ÀÁÎ0{ô52…ú±*)Úµÿ¯×ò9©¯e–[8ôë£öi &§¸q™sÑŽ bðž:ûTSj- íÉî z„JÎH GÎ0OLçŽØí]½›î5Œ‚ûû-Z¹¼ÜK#‰‘œFvŽŽ˜çñ«uZ{Áo4hÐÊQØ'šÚ¤ôœþ@՚ѓOFQE2bøWÿ$öËþ¾o?ôªZì«øWÿ$öËþ¾o?ôªZì«É–ìýðã肊(¤hUÔÿäyÿ\ÿA5‡ÿä[ÒÿëÎ/ýTúŸü‚¯?ëƒÿè& ðÿü‹z_ýyÅÿ  Ñ¢Š(ø©ÿ$ö÷þ¾lÿôª*ñÚö/ŠŸòOoëæÏÿJ¢¯®Ü.Ìùœûøô0¼Y,qé ERÓF@'ÃiÚ­Ñóí[í;'‰ÜK›C>ѸÈw÷­¿ ©%—Ùæ,è\H6íÀÆO\õ t«u³ÛÔòãWÙÆ)ǻ߾Ÿ+Xãn/fMBÞkœ‰¿³žMŽ£p,F?‹8«Ou<Ú¼1Yݯ#­ÞK†Äƒ??>aÇô®Š¤žyâPá¡`­¹pFxõ©©*~f²Å¥£†¶ïßËúÐãìu[øs~í»Qš-9`cÇúãÞºk&‰–o*y&f d$ínê=…Z¨à‹‘ A+â‘JíO®N zÕF<»³*Õ•o†6ùÿÀ'¢Š*ÎP¯bøWÿ$öËþ¾o?ôªZñÚö/…òOl¿ëæóÿJ¥®\VÈ÷râOÐì«šÓ¿ä£øƒþÁºþ‡u]-sZwü”Ø7OÿÐús¥¢Š(åíþ@zý{Gÿ Šµ,‰M$ލРfc€UÑ¿ä§ÿ×´ú©/¯¿œ`–UÜíÈÉÀêGzõS´Oœ\«4»œæ‡q*xCdÁ®¢Y0«Ë)É==qÍC}wþpãͲ[˜dywe³—‰ç¦}¹®Á´jÅ *ØÈö8⡚ò8.míÜ>û†*„/€O'·¡Ó÷R¹Õ]êÊJ»¾ÿ>Þ_‹9ÛH‹g0Èâ_µí¼F¹lD¼ôa«Ó?.Í»¹š+›hîoö9³˜·•pÁ[Ø{sŽøçÖQG³}ÈX¸¯±ß¯—§OòìcéWQÝG§I%Ürö™1ƒò?MÌxÆAãñ5±P\NðíÙm4äöhÇÔ±–Öáníc¸EeYp Œãð$UÇMz¾÷¾•—ü95QTdw¿ä9â/úö²ÿЮ+¼Õ¿ädðÿýuŸÿE5pä9â/úö²ÿЮ+¼Õ¿ädðÿýuŸÿE5y•¾6}¾]þëCnŠ(¬ÎТŠ(¯øÿ% ¿ìmÿ£n+Ú«Å~'ÉCoû[èÛŠÚ‡ñçfßîsù~håk{ˆG|ÔÏØ¼¼n{vqõÇ8®ˆð:gÚªXß}´J~Í4"7(|ݼ‘×Ié]òW²>NŒ¹¥kémû˜²Ý]^E¿Úâ"A¼àÁ–ÛÓ~o^ýª®“}n²Æ²LUæ)ÒrßvB°‘ŒŸëÏY,‚žF B)bxô­6Úá.­b¸;%@랸#5šîn±+ÙÛ“Mïåèr&öùô;Û‰®DN±ánH’†ãg`}ù«–wÑÈúÌS_Ì-£Ž'Y’RÌ¡“æ*yïéë]=2YR^Y,h¥™`(ömkpx¸É8¨oÙù¯/+|Ç.6. #OzZ­mx·ù´WßcžŽ)Ñ P\ÇpÖs!w…ÇÍ‘³sìqŸëNšÞFšo°ÙÜà Áò"Úx‘‹€rÄCŸÇž€ê6‚Þ9Ö]ñËÊyj\·ÐI¥þжû?ž$%3·íÞ›qœûc5Ÿ"îuýf¥ïÉý^ÿðÆ–­´fÖ;—–2òÆóەڸà çrFxfÀÛôÓWz™Ê5b¹_õ¯ÝÔ±EUžÅð¯þIí—ý|ÞéTµÙWð¯þIí—ý|ÞéTµÙW“-ÙúáÇÑQHЫ©ÿÈ*óþ¸?þ‚jÿÈ·¥ÿל_ú©õ?ù^×ÿÐMAáÿùô¿úó‹ÿ@£EPñSþIíïý|ÙÿéTUãµì_?äžÞÿ×ÍŸþ•E^;]¸]™ó9÷ñ!èbj$>®Šä ³•£‰ñ’T€¸¥RŽ)R–¶×Ïi›˜K•o˜d½·"·.5KK[ƒ­(.ü]†Þç c¥:MFÖ$Fó ‚EÜ¢$i _\('õ«Šmêyð«R1ŠPç×±5³<Ò,—0éæTg åvÄlã#m>æÊŠ&† ©Þ(Nó,tÑþ¯…>ƒ‚âFëßÛ$ 7˜]á<µ.Xû ©¢š9ãDá’2=AÁýE‹¸œéh¢Šù{FÿŸÿ^Ñÿè"£Öœ®œÊ#–FgLãg<0' =…I£ÈOÿ¯hÿôRÝÞÁc–à¸BÁr±³òz}ÐkÔûÁ¶Ö!´®ïúœôÄ‹™ÒÚðŸ¶Ã$LÖò’ ¿†þ^•#C1¹·t³˜Þ¥Ìžl»0ep§qà¨ÈéÓùíǨÚI ’‰v¬gk‡R…O¡)bÔ-¦W"BžZîa*4d\0õ<«¹»¯4­ÈôÓð·õæsðiÖÏa"O ëË(T’9-À &~öUyÏÍÏkOLY&´+:ÎK¿ÙÈ??¼wõíëWໆàâ2ÙÆpÈÊqë‚ º­¬7 nþy•FâÞFã×!HÅ5nLêÔ«xò¾þŸ& eû‰o2LF¥FJî8Ýøg?…O,q¬h0ªÐ ¬u;AgØwx%ÀFŽ6|ç§=9ïÅ[ê*Õ®rÉIFÍ[Wý|‚Š(¦AÞü!ÿ爿ëÚËÿB¸®óVÿ‘“ÃÿõÖýÕÁü!ÿ爿ëÚËÿB¸®óVÿ‘“ÃÿõÖýÕæVøÙöùwû¬= º(¢³;BŠ( ¼Wâwü”6ÿ°U·þ¸¯j¯øÿ% ¿ìmÿ£n+jÄG›¹Ïåù£•'5ÌnMnÚ÷ow`må c`Üž0FvõÿéÉÀÍQƒX²¸•cI$ ÌQwÂè «–gƒÇZî’O©ò”%(¦Ô[ý71­´0%ÅÃ[©™ ò1|¡ÁoCÐ{TV¶RIö5½Žö¼K—¶Ö^'i)’ê25ÐÿiÙù›<Ó÷¶oØÛ7gß¹ÏÍ=ï­ã˜ÄÎw/Þ! è Æç¥O"ît«pUÓáŽî'%ð%ºŒ2:žlQ^´•ÕÏ©MB\Ö¾æ Ñ躌o<¿èÆQ4˜ ®\³g°ÎGåLh ¹»»»2¼Vò<~DéÐ:«fAÛ8Éàâº*y:ýiß™îôüoØËÓ®MÄ-ö™cb“…Žx˜¢ÏÀ ŽyëŒr8§jbÒym­.dŒXíRÀ6ppG¾qøÖ•ùt±Ÿµ\üéXçþÐ𦡠ʭ1Çç9e|©î=sRÇÙj6vñ ö2Êd”äGû·Êý;ÄzVݹ x‹ßMÿÊß×ÜQEYÌ{¿ù'¶_õóyÿ¥R×e\o¿ù'¶_õóyÿ¥R×e^L·gè‡DQE#B®§ÿ «Ïúàÿú ¨ßJèè¡Âã†!E$—ã¾ï·˜QEg0W±|+ÿ’{eÿ_7ŸúU-xí{¿ù'¶_õóyÿ¥R×.+d{¹ñ'èvUÍißòQüAÿ`Ý?ÿCº®–¹­;þJ?ˆ?ì§ÿèwUÄ}9ÒÑEòöÿ =?þ½£ÿÐEVñ©Á¦H™¥‹isÜH§§|OáVtoùéÿõíþ‚*íz–¼,|Ÿ%~v¯gÄçî,$·ž-IæûA{„’sav`¤ œ€NzŸÒŸxÖºìrFDö±A*Ï$MC6‚:ž3ÇLVírt)b]ÔžëNÚ[–wški/VêÕ!$ÜnÚðàà«°#ç‚1N’úÎ=jek¸T‹@>i©?ËšÙ¢ŽV'Z-¶×õ÷èSk ¬¶˜–ÊêHw„ ˆäÞ¿0ö=ýþ¦º*(§ØŠµ}¦è(¢Š£#½øCÿ!Ï×µ—þ…q]æ­ÿ#'‡ÿë¬ÿú)«ƒøCÿ!Ï×µ—þ…q]Þ©óx£AAØÜIøñÿ³ ó+|lû|»ýÖ†åQY¡EP^+ñ;þJØ*ÛÿFÜWµWŠüNÿ’†ßö ¶ÿÑ·µâ#ÎÍ¿ÜçòüÑÊ’É8¹› _íXæ){Aô³"F¿6íä©-žú~5ÓQ]òÞ§ÉR¬éŨîÎoψøXé§þ?¾ÏäýœýýøÆqéžsÓÞ¤ºo°K$¶÷Cí ´Ki(ȸ!@%;確 *y<Í~²¯¶¶þvòòõó2õ9¬£·q5Ä`4ñ Irܧ'Ž9ÇãPÀ_N¾KYØý–8áÏ8ùXžã×Ò¶¨ªqÖæq¬”ymýyÜÛXÚ\Z~öÒäD²ªB>To–õçÖºJ(¢1±5jûMl-—ü†ôoû ÙéDuKeÿ!½þ¶_úQ*Ÿô/þñOüKó>¢Š+Ë>ðæ5O‡¾ÖuKJöÊv»¸*ex杻1 ¨à}Õ§j©ÿ ¯ÂóáyÿƒK¯þ9]•ùŸr(7wq¿ðªü!ÿ>Ÿø4ºÿ㔫ð‡üø^àÒëÿŽWeEϸ½?å_qÆÿ«ð‡üø^àÒëÿŽVÿ¼2ž9ÓôÕµ¼’é·S¼ÚW<ºK©Ï™ž·Ç?Jôêæ®¿ä¦é_ö½ÿÑÖ´s>áìiÿ*ûŠ_ðªü!ÿ>Ÿø4ºÿ㔫ð‡üø^àÒëÿŽWeEϸ{ʾãÿ…Wáùð¼ÿÁ¥×ÿ£þ_„?çÂóÿ—_ür»*(æ}ÃØÓþU÷·Ã/ Ú^[ÝEasç[Ê“F_P¹p2­!Èí]uPÛ{•Æ*ÑV (¢‘AXžÿ‘núë7þzÛ¬OÿÈ·ýu›ÿF½mÑEU{û}ON¹°¼Ìµº‰á™7¹Ã#‘OJ±Eq¿ðªü!ÿ>Ÿø4ºÿ㔫ð‡üø^àÒëÿŽWeE>gÜÏØÓþU÷oü*¿Ï…çþ .¿øåðªü!ÿ>Ÿø4ºÿã•ÙQG3îÆŸò¯¸à5†^µÑ/î!²¼Yb¶‘Ñ¿´îŽ) ó%Kcð¿ÂSiöÒÉcx]âVcý§uÉ gþZWSâùõOúó—ÿ@5>™ÿ «?úàŸú£™÷cOùWÜrÿðªü!ÿ>Ÿø4ºÿ㔫ð‡üø^àÒëÿŽWeEϸ{ʾãÿ…Wáùð¼ÿÁ¥×ÿ£þ_„?çÂóÿ—_ür»*(æ}ÃØÓþU÷t}Ç@ÒâÓtØL6‘(#HrÌY‰f$œ³ÉïW¨¢‘ QEWSÿUçýpýÔÿ‘oKÿ¯8¿ôRk´Kù$%´Œq즛¢FbÐ4èÛ’Ö%8õ (ýQ@uÇ_ÒåÓu(LÖ’•.‹#Fr¬He Œ2ƒÁí\ßü*¿Ï…çþ .¿øåvTSM­‰”#/‰\ãáUøCþ|/?ðiuÿÇ(ÿ…Wáùð¼ÿÁ¥×ÿ®ÊŠ9Ÿr}?å_qÆÿ«ð‡üø^àÒëÿŽTW? ü! ¤Òý†ðlFlÿiÝqÿ]+·ªºŸü‚¯?ëƒÿè&ŽgÜ=?å_qÁxká—‡.¼+£Üj6W}-Œ/pßÚw#2Ë&:ç§«ÿ ¯ÂóáyÿƒK¯þ9]‡ÿä[ÒÿëÎ/ýVϸ{ʾãÿ…Wáùð¼ÿÁ¥×ÿ£þ_„?çÂóÿ—_ür»*(æ}ÃØÓþU÷oü*¿Ï…çþ .¿øåtš>c iqiºl&H‹F‘¤9f,ijNY‰ä÷«ÔPÛ{•F? °W5§ÉGñýƒtÿýêºZæ´ïù(þ ÿ°nŸÿ¡ÝR(éh¢ŠâÓáGƒcQ4ë¥E*®§t°ýå;þ_„?çÂóÿ—_ür»*)ó>æ~ÆŸò¯¸ãáUøCþ|/?ðiuÿÇ(ÿ…Wáùð¼ÿÁ¥×ÿ®ÊŠ9Ÿpö4ÿ•}Çÿ ¯ÂóáyÿƒK¯þ9YZà ϭëòZ^4VòD"_í+‘´Á?òÓžOzôzÄÒädñýuƒÿE-ϸ{ʾã#þ_„?çÂóÿ—_ürøU~ÿŸ Ïü]ñÊ쨣™÷cOùWÜq¿ðªü!ÿ>Ÿø4ºÿ㔫ð‡üø^àÒëÿŽWeEϸ{ʾã@ð–‹á‰._Iµ’º&i.e˜°MÛGï±íÓÖGþFÝþ¹\ÿ$­ºÄÔämÐÿë•ÏòJE¤’²6袊QEÏkžðÿˆµ¿Ôìæ’ébXCÇw4? ,@!‚Íù×CE°šRVgÿ ¯ÂóáyÿƒK¯þ9Gü*¿Ï…çþ .¿øåvTSæ}Èö4ÿ•}Çÿ ¯ÂóáyÿƒK¯þ9Gü*¿Ï…çþ .¿øåvTQÌû‡±§ü«î<â÷á¿…âñ•j–—‚ãœÈ¿ÚW?1P¸çÌÈêkWþ_„?çÂóÿ—_ür´5þvl/¤#ý Öàɛ󮊎gÜ=?å_qÆÿ«ð‡üø^àÒëÿŽQÿ ¯ÂóáyÿƒK¯þ9]•s>áìiÿ*ûŽ7þ_„?çÂóÿ—_ür¤¶øeá;KË{¨¬.|ëyRhËê.£Sµ¤ à€y«®¢ŽgÜ*iÝE}ÁER4 ̽ÑÞòäÌ5mFÜ—Šª?¦´è  OøGdÿ þ±ÿ“ÿˆ£þÙ?è?¬ßäÿâ+nŠÄÿ„vOúë÷ù?øŠ¬Þõ(µÖõƒs/?žœ#•fsÕò®’ŠÄÿ„vOúë÷ù?øŠŠ_ ݹOеØpgþû‰¿Jè( kþmGþ‡OþVŸüWt½ïOº3Oâ-WPB¥|›±Àxç÷q)ÏãŽkbŠ¥¨ií~±…¿¼´ØIÿFu]ß\ƒTá“þƒúÇýþOþ"¶è  OøGdÿ þ±ÿ“ÿˆ£þÙ?è?¬ßäÿâ+nŠÄÿ„vOúë÷ù?øŠ‚ÓÂKcl¶öúæ°±©bžI$ÿ©5ÑQ@ŸðŽÉÿAýcþÿ'ÿL“Ãs´dGâMn&ìë,LGàÑ‘ùŠÞ¢€9¯øEµúUr¥‡ÜîQ*³ÿìŸôÖ?ïòñ·EbÂ;'ýõûüŸüEC/†/ó‹5èÚnÀŸ_ž?­t4P5ÿ¶£ÿC§ˆ+OþG£þmGþ‡OþVŸü]-CJÓ§Óa’9õkíE™²ðE¹}‡–ˆ1õŠ¿EçÓë?5kšŽƒ™e0Š;EfSµIcã=pãšôŽ"·W.ÐîÎÜõbrMiNjv¿¨š$Ó|1¦ý·R•‚³ˆâŠ5ß$Îz"(êMc¹;-ÆkQ^sªüJÖ|?ö޵àkûM }¨^E$ƒ=7D>ïkIQœRmhþ®:+ÎGÄ­jþÁµ} À×Ú†Š¡ÚÞî8Â’ H°Y‡c¯Jèüã]3Æšêšz΋˜æ†DùÑ€Î03œ‚ÇóâœèT„yšÓåøö ££¢¸ø©b¾:·ð»iw¶ò¾ã-Åæ!XÔFϸIñßÒ²õïèWñ—ð¶®ÚC¾Á¨Ë…d8ÏîÃ.§vUG ZM%ÕÙ¥EqÚïÄ+M>ÆÞMN¾×îî`[ˆ­´ø™ÊÆÃåi`=:׎*/üH³ñÇÚ픺v§hs5¤¯» œdpx ‚j}…NG;h‚ëc¶¢²µÿYxvÅno<ÙGAoo–yDEîO\WªüLÕ¼:éu¯ø&úÇHw /î9™sÓr/ÝïÕ½©BŒê|+úòî ¤z5[O¿µÕ4ø/ì¦Y­g@ñȽØ"3œ£'h$þrk&­ ÎVçþOøX¶¿gû'ü"žAó·mß¿÷Öìãùqœó]ep|Mµºø…káô‹è®%/¾k " m *¼–n9ÇZ½ãoZx&Ëí7Zn¡t¥‚†,FŒ€\àvíšè•*’”cË«ZyùŠèëh¯<Ô>)ˆt+;½3ÃÚ†­=¬W3ZÙ«:Z‡Pûd”)ÁÁÎ1œ`³àOXxïF{ÛHžÞxX%ų°c‘ƒÜpp:*e‡©óµ ]UU=FöâÊ{}2ïPflíš%e§ÌtúÖI]Øg!7ˆµ_x“WÐ<1¨ÛiÉ¥K­BK´1•· ˆ„…ãiÉ9äcWAã `©'‘Â-NîßTñ|Ñh:…ì“ê¤0=¸1Ò­¾UÉäôÈëÍwþ1ømàÍ2;ËÍ'R—~ÕÂF#‘¬ùÛŸ÷wW£(û:žÊ0RÚÛ^ú|þDn®tšWÛÿ²,ÿµ|Ÿí%~ÑäýÏ36ßlÕÊDzׅ߅l5³ep~×kÀ¶·S+èhÀÆq“Ö¸Í#ã%†³¯-¶‰©3YÒd]÷ Ûò<µÎС2NO_ÏQ©;´¶Ü«£Òè®Aø›g©ø2÷ÄZ–›s¦-œÆ oÞ~T8‰$ ``ä{ÔW_µ­&Ò}KYð.§k¥F7 Ṇiú¼`‚žüœSú½K¸Û]·_ÓùÑßÓVDvuWV(v°;NÁôàƒøÖ©®ß[xY5m;G–þâHÂÝ&D ”Ý–g#ì ö® à÷Š5m[GÕ/n´›ëéouw’[¨Š<ÇÁ"¶ÑOÆOF„¥NU: ¾¶=nŠ+Å~+Ó<£GRg*XG1 ¼®z*ŠÊ1r|±Üfå溟ÄíoÃð.¡®øúÏHgÚ.c¼ŽWû»£w>ç¯×wmªÃ¨hqjº|r^C<xR<+HÈq©õs£8$ÞÏÍ?ÈW.™H±—Pì Ï$ dãÛ#óêñ}ÆZö§ñ£S[ÝéšÇN’Þ-:ÚXYáS$D³3HªIÀÎ ì1Á5ìvò¼öÑË$[»¨-¥K!ô;Iú)Ö¡*VOª¸'rZjȎΪêÅÖçiÀ8>œËñ§}¤hó]éÚLº•Â)"$•# €Næ.ÃŽ;dûW|ñF­«hú¥íÖ“}}-î®òKu@±G˜â!äV€:)ãÉâœ(JTÝNˆ/­‰ð†¥s- $*e êKqÐõu¯W¯ø¶@ø™àN¼Ní´u³â_Œ1ès¬–žÔïô•“dºžÆŠ¸ýÛ!û÷à`s] êS§ìã«OóìÝÏM¢©húµ¦»£Úê–.^Öê1$dŒÄv#¡úV¯ã Ô§Ò´ç\ÔàPÓG ‰P“ÈW•ÎÎMqªro–Å\êh®@ø—ÿˆÏ‡5Ý"ãBÖHÌpM ‘%ô à œ{`óÍwtT§*nÒBNá\$Þ"Õ|UâM_@ðÆ£m§&”.µ -þÐÆVÜ6"§$瑌q]~£{qe =¾™w¨36 vͲSæ: }kÇ>jwvú§‹æ‹AÔ/dŸPÝ!íÁŒîímò®O'¦G^kzï Tê­m»ù‰½lié>%ø‰­­øJú{­V GžÃRòB$‡wÊX˜+ƒžkÐ|%ý¿ÿÅ—ü$þOö¾ÓçùXÇSŒíùwcÇéPxŸÅðxWD:æ›¨ÊŠÝ ˆ7—“™³´rppOò¥ð¿Šãñ/ƒ­¼D,¦…'ó1n™•ð²2ƒ’vç§öÍ\§u•÷]ì s¡¢¼ïNø»¥_x—QÒ¦Óîì"Óày&šï ûÕÑ,c$’_ŽrN9ªCãdzeÏŸöY¾Í°\lo+ÝÝŽ3íšç| ÿ oö$¿ð˜ýŸíþ{ù~VÜù}³·åëœcœc<æµ5ín-KšþkKˤ‰Ù-!ódžÀ~$VO€ükŽôk­NÞÊKXa»keY30¸àq÷ñŽzu©Œeì›¶šjN¦ŠäuÞE«Üé>ðôúåõ Su¶á-â‡pÈRíձΩ<=ã3®k·:-Æ‹}¦_Z@&.Š‘Év'p<óÇNý—±Ÿ/7ù~[…ÎKÆ^4ñn…ãïèÀéðXjW0‚С’B¦P®¤·PZõzñŸ‹d‰ž$à ÄçþÛG[>%øÃ‡:Éiá­NÿIY6K©ìh ëݱR¿p 5Õ:¥:~Î:´ÿ1^ÍÜôÚ*–«Zkº=®©båín£FHÁÁìGb:¥ÂÓNÌ¢íS%–8"yeuŽ4RÎîpI'°¤ˆüVÿ’Ëàúëoÿ¥î5ó¯Äßh×ß|3ygͦžÐ4÷H&Ü@#ƒÏã^ý¦êún³lnt»û[ØCm2[ʲ؃ÁÁ{×~*Ti]t™1Ýœ7Çù%×ÿõÚý WCðú­þxya# §Àìc,È ?RI5ÇüvÖôØ< >’÷°ÿhO,L–ÁÁ“hlî+Ô”òx­ßø§@ô‡}kOAeaoÖû„_%¶…Ãäü¹ ž½©8Kê‘Óí?ÉÚ8ïƒj!ñ÷!N#[¼ÒÊ\Ó®uW㯉VÒöÂÞæÊÊ8 û]£Oˆ¾RÁBȘù›$óÖ°¾øƒH‡â‹ŒÚ´K¨Ýhe ›2¾ç©;†^ißmµ¯|G‹ÇšLm•ʪ\ŽJîÀRè úþ½Sƒx‰Gfâ­~öD­Žóž×|g¡'R×´¸à2,àÒ\:°ô-pGsÚºo èïáÿ éúCÝ£g ÃçÙ¸8ãëά¾=i:¡†ÓOÐ5{V–+dXʳúnÝœ{í¯PÓcºMoœ=Ù]Óé¼ò@öà{ ᮫B*–öÐ¥gª-Wü†-ž'›ËO7íÁ7í¶òqŸJöJðÏ…:öŸàí_Ä'‰&þɼšëÎíƒËF\‘÷B:UA9Q¨£¾Ÿ˜=ѱñÿG‚ãÂÚª­å•Ê(”˜£dÏ×iü+¾·»’ÿÀq^L¥eŸL¸=Ah²pž8¸âmæŸáO\}ªÅ.ãRÔ-Ø41"‚ä3䞃¶qÝø—SÒ¼=á{“}yœÙâˆHà!GV84çeN›Þïîv»gû<ÿÈÿaI?ôTU ¿òs°ÿØ<ÿè£P~Ϛƛ…îô™/­ÓQ“Pyc¶y’Eò“•SÉûÓ¦*¿54ðgÇ/Ä:’:é—›U]ØùYô%I†º§ñUb–­;öQÕüoÿ’[¨×XôbÖ7ˆµ ´ïÙ¶Ñàm¯6›k?ì¾Õaø©#ñªÿ<_c⯆:„šKs§¤± od¢MÛ× €,}xzö­-.ÎÓÇ¿môKw\®)eeUš>€±ûÉŽ;VtâéуšÑO_ÀoW¡ÑxrËÄ+á(iúΆ¶d‹ÈI”á6 r.yã½Pð÷Ãkâß‹'Ö¡š[µq5´F%±È&F=@=ëÎ|ñzY ø¯K¼c`Lq´J<ØÇdeb±ÏLu¯RðŒ¥ñÕßÛ´ý>òÏD· ®€V¹”ñ€#jŒääóJšÔ±yŸÙ}tÕi¥y7Å‹±7< £\¶4ûAe™;HC¢¨>ܟνf¼«ãw…5 cH°×4…‘ït—gdïÎåÊ•èMaƒqöË™ÛÈrØõ ›xo-¥¶¹‰&‚T)$n¹WR0AÁ™¤x[EÐ4Yt}*Ém¬e.^5vbņ ,I$ã¯aé^[¡þКkipE«é:ƒê{B7ØÑ$n™`F}0z÷®Îy5íKáþ»ª}–kMNþÖG´´ÿ–F§ý³Ëض;Q<=j^ìôM…ÓØg„bÒô ü;àøæÔ’ÚáÍÅÔó&)IFp>f*©éÉæ¹?†)$_üp’˜Ëïf)J©c!$€Iõ=ê·Â/ˆÚ›àë_η'VŽY+h-ÚF¹ÜņÒ\|Ätôª¾ ñ :7ÆoǪÛÍåü…!¶‰fgݸ(*1Óœœ:×\©T‹­žß7ªÔWZáŽãâ—€á™H¤ºd03  ״ׂüSñ'ÅO£o,zuÒ5ÛE q&RCЀ§#¨Å{†£eªY¥ÞŸwݳçl°HN8<ŠçÄÆJ+®óÝ–kɼAv/¿ho i·m›k[GšûJÈwûäß"½f¼Wã>…«éšö™ãÍYžÅU.6Œù{X•b?ºw?‡­N 'QÅ»]4½Z lzö«¥Xëzdún¥l—6s®Ù"~„uê9G ŒŠÏ›Âº0ð|¾Ž²é‹do‚Šy'qÏ9ÉÉÏ=s^y§þÐEìÂ4Z]N@·¶D‘YýîÜïšÔø¸> ê²H¤j3=âDsåÆ\@{…L)=“Oêõ¡(Â~íßôÂéêløVæÚ=ÛIðŒ-u¥Ù©…u+§ýÓNí¸îÎpyá¸ÅqßËÓüGKà0£¡è;Uï‡4{¯ èú%”77Ü˱Šç`ÆòøØ«Ü’xÏL×=ðKÄšn¡®è×k*ê7žb‘³Qå›P½Ëíϼ©N4êŮ޻ïýh+«¢ßˆ¡ŠoÚcAIcWCl« ‚BJAüÀü«µø» sü-ÖÄ‹±£¯±)æú׉ô9h}TU´}>R], Ä¬RA÷ºc,9é]¿ÅŸhƒáÆ£lºµ›Ü^ÛÆÖÑG:³L¥Æ@9+ÁùºpiÎö”4è¿0èÍ/„°ÅÃ-Ò4G’"Ò2Œ!ˆÉõ8~Æxq/ÚcÄJƒh6„;’°“ú×EðŸÄš'ü+6Ùµ{$žÎÝÞæ'U¡Pç,Àœ…ärxäW¢x£C‹ö†ÖuI5[DÓî 1GtÒ0HÿˆñÕO4Bö•´èÿ4ÒøŽêîûãÖ‹§AuiÚé²Ijn­ÌÊ$mÛˆPèsµ}xÇJê5ÿ ø‹ÄzÞ‘{®iÞé69H0ç9¸#9•Ä|dÑõm?ZÒ|{ ©y,,ìƒvÕ•bU!˜銗Ný¡4[‹XRçEÕ?´ äÛ*HŒç€–“íùÒöUgN(«ÙyhÓ «´ÎûÀÞx^¯ÍðŠGu—ÊòðçÜ{“ß½t•™ É¨O¥%Ö© ·»¸&V·ÝŸ º™õ ûæ´™‚©f ($ž¯>¤¥)·-ËGj_òtZ?ýy·þˆ–·¾9ÿÉ1ºÿ¯ˆô*âõèr~ÑÚf¨š­£iÐÀb’ìJ< Æùúc,sŠèþ9ëÚKx ´ôÔm¤¼¹–b‚9;&s¿øp:ô5éòKÛPÓ¢üÙÚü>‚+‡žXcHÃið;Ë2OÔ’MyßÁµxÿÇ‘ ÛÝà(è–P+±ð/Štøw¤;ëZz + xî·Ü¢ù ´.'åÉ õí^{ð“Ä:Dü\Óê6Ю¡tZÑ¥ ›2¾ç©;†^k8Â\•ôþ®y¢Š¡«kZ^…iö­VþÚÎpyn8Îzœƒšó’mÙyÁ/ùøÓþÂ_ÕëWã§ü“¯úø‡ÿB®3àÇŒ4[-[Å ¨ê¶)yp·0=Ô¢0ãsäeˆ^=ë¤øí­i©àY4³}¿šh-ƒƒ!\“»hä/“Åz“§5ŽŽWèEýÓ¹ð?üˆÿ°]·þŠZó?‚ÆÞ,ñÄåÊ—Hªøäó×hü…vþ ñ6„Ÿ4{‡Ö,R++ xnYçQä¸@»_'å9zö¯8ø/â-ÓÅ^,ŽçQ¶€êQµ§› O;ç—…ÏSó¯y¬ã {:úvüê='âw‡µ/ø6K}!¿âaoTŠ×+)(UxËc àzÔá×4*A¸·£[¦7äwÓÅ –+i<ÈĬo¸6å €r89ç_³Ïüˆÿö“ÿEE]'t­RÃá=–©+}»ìrgr,QO¸R£ºWüñ–“¡hW>¼kíiõx-#ÙäÊ"ã8Âà¡Îâ1Nß±«ëf¿]Bú£Þ«“ñö‰áÍSI·¼ñ5ÛÚYéÓ­À•dÙÏ÷O9éÏ¥u•ã?ï.ôÍ[Â:“Äòév—žt¨:4ŠÊÀr¡±ø×>u”S³¶7>&^_êß 5™¿³Å¥”Œ>×þºLH¸!ù: 9õQ[Ÿ É? ô œÿ¢æk“ñ¿Ž4ï|6ÖÓÃÜßD°+\Îbh£€nRA,æö\ñÎEküñŽ©àm;O´óžk|»–10HÛqÂî#sœ¸â·9¬5šµ¥÷h+êsž ÿ“ñoýy¿þ‡{5x%·ˆtïþÐ$½×¦{K[‹r‰!‰Øe¼¦ ÆóŠ÷->ñuo)¢I—z¤É±öž„¯Q‘Î<òâ§xJÚr¯È"3Wÿ-÷ý{Éÿ šóÙçþD ÿû Iÿ¢¢¯PÔ£y´»¸eÞU¤©¯ø%ã-'BЮ|?x×ÚÓê,ðZG³É”EÆq…ÁCÄbŠrÃTQWÕ~ ÷F—Æc¸øà8fE’).•d2™£é^…ñ$o‡> B£jéò1ÀÂ’?¯+ø­âM‰¾0ê6ò¦›tvñ¸e‡÷ËÄpÚr:Šôx£@o‡Z³&µ`âöÆhív\#y킸L›àã§zÖPŸ- ?«‹¹GàÔæ/„vRžDFàô‘cü:æ¥á­BÇUÒ¢–ëPš[¯?Ny¤2œK,è:@Çz»ð?UÓ.~Ûiòݯ£iŒ¶¾`ó';zãæûץ뺷Á_éWö2\è—R"ÁÁeuÑㇷҴtå:•¡Š÷^j︯¢g¤x‹á¦©âézÍÿˆl¢¸Ó™LdÓ7pÀÓ·ç^‘^k£üS‡Ç7餸kKԑ؃uwrˆ‰my9V9b2㓞ÕéUÃ_Ú«B¯Nš~…«t ò/‚_òñ§ý„¿«×§jÚÖ—¡Z}«U¿¶³„œž@›Ž3ž§ æ¼OàÇŒ4[-[Å ¨ê¶)yp·0=Ô¢0ãsäeˆ^=ëZå*]¿17ª=Gâ_ü“_×›ÖoÁù$Ú'ý·ÿÑòSþ+kZm‡ÃíZÚêú®.í™-ágå$ò¯R9#§zËø7¯éü0±¶“S³Ž{î£y•Z3;n`O †ôæ…}Méö¿FhÀðœMûHø•¥Åo#ÆXgkf!‘èpHüjßíŸér7­øP}óü…`øKÄú_üEªMªÚÅaq±Ås,#v F< `÷­/Ú ZÓ.|=c¦A¨[K}è’Kxå ñ¯–ܰ>ðëë]ŠXºZt_‘?ežµtKxZrÜ“dÙÏ’¼ãöyÿ‘ÿþÂ’訫«¹ñ‡?á–ÿûnÀÛý”ŸN¤ùž^v`ïÇðõö®#ö{Õ´ôðµî”÷°. ÷ï2[4€HéåÆ7êGÊztÅrBXj—]WêUõDZίâ/…~6ÖugÒÛQðÖ­:Îò!ǔ玸ùO$`ðß.Zï<#âÏ øÚìêÚLì/â·òf·”m‘P°a‘ÜЂG&©i´7Öu \Ô-¬î¬îå‰MÓ,qËã·æ8\€qƒÉÇzät=#K—ã¤7þ 0ÞÑŽ¢öŸñc ŠGÊsû³ÇÕÊ p~Ò<²K~×Ô[l;ã1Ü|Fð3"É—JŽŒ2LÑ‚ô¯Bøƒ7ß!QµtùHàaIÈW•üVñ&?ÄߘuySMºG»xÜ2ÃûåÈb8m9Ez¼Q 7íY“Z°q{c4v».¼öÁ\&Í‚pqÓ½9B|´4þ®Ê¿˜Ÿ…šh'$À{~ñ¨¬ÿúÞ–ÞµÓ´-…ô3IneERù ·9ÇÌ9÷¢¹qiªó¿wù•S¢Š+œaEPEPMtY£¨e<à ÑE v£hîï¦i6-&›kdˆ¶:ghê:Ñ¢ŠèÄÿŠ;RÔt}3X‰bÔôëKØÐîU¹dú€ÀóÉ¢Šœ?ñ=‰ím-¬mÒÞÒÞ+x‘Ä@ìàTÔQYÏâc «¦Øê¶ÆÛQ²¶¼€œ˜®"Y?FQEUâGÔO`“L°–Í,ä±¶{T*R‰J)SBã‘VUB¨U(¢Š%·ÍŸ¨è6°èúž“a|Ñä!¹¶IJç®7Žƒò«è‹E £€` (­* 0[Ž¢Š+œftz¢ÚŒzM‚_7Þ¹[d«c=‡åZ4Q[×Ýz!"•¾¥Ú^Ë{m¦ÙÃw7úÉãVGú°?HºuŠ_½úYÛ­äŠîJ$`:ØÉQU=ߢýY¢Š+˜ ¤ 0 €AàƒEBÏBÑôë©.¬t«k‰Nd– tGsî@Éê:¾@`AƒÁŠ+|GÇ÷ ìt3Ki[OÓ­-fÝ!·c.}NÉ©-ôë9çžÚÎÞ ®tÒE«H}X’~´QUSâ—ËôY¢Š+˜aEP@ ‚2j͵ðö‹c|÷Öš>Ÿow&wϲ$““–''š(®Š?ýÍ*(¢¹ÆQEQEQEQEQE1âŽB†HÕŠÊXgiÁ‡ÄÕ¼?¢Ã¨B-OŽôõ¹Kdø3ØQEtQÚ^‚f•T‡JÓ­ïæ¿‚ÂÖ+ÉÿÖÜ$*²Iþó“øÑEE=¥éú eº†îÎÖþÙí¯-¡¸Æ):°÷ƒE4þ$1iÖ6¶?a·³·ŠÓi_"8•cÁê6ŒS­,­tûd¶²¶†Úáb†0Š¿@8QW=¥ê$Gs¥i×·p]ÝXZÏsoŸ&iaVxó×k‘øUº(¥Sá§êU!Ò´ë{ù¯à°µŠòõ· ¬’¼Àdþ4QE=¥éú eº(¢²Ukí:ÇT¶6Ú…½Ü ‚b¸‰dSƒ‘ÁQEiKø‘õØ,të.Ø[iövö.HŠÞ%FNOVh¢Š¿Ä—¨-‚Š(¬ÆQEQEQER»Ñô½BÜÛÞé¶w0,bšu$ÄàŒg<ýjk;+M>Ùm¬­a¶~ìPÆGÐ(¢º%ü˜º“ÑEÎ0¢Š(ÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-8.jpg0000644000175000017500000001205211625126536027734 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀDÒ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ôÝB¶Ô´ç»¹{ùf{Ë Íý¥pƒyð JÑÿ„OOþí÷þ nøº—Â_ò?õùwÿ¥2Våsßð‰éÿݾÿÁ­ÏÿGü"z÷o¿ðksÿÅ×CE09ïøDôÿîßàÖçÿ‹¨.¼?£ÙF¯r÷±«6Õ'Uº98'èå]Eckìô×,T-Ä„‘ÛýjqÕ“'esû?ã¬÷ßø1¼ÿâªÚøsI{e¹W»02‡Y?µîv•=wÖ7ƒ/m-`¶“Ï´k‡ifËõã àŽ6ô œ“‘ZIsð¾Î(¢’F6–§lqÆI Ý€ ÆJrI6’ÙŠ-»_©n/ iS¦øZîEÎ2š½Éü$§ÿÂ'§ÿvûÿ·?ü]bÝi­œï£O©"Acs:§}ŸÍ¸]†5(Ñ‚sÈÀ7=qÃï/ü@|ëX¢³Æ×›¤[RT)™|¬Wk~ìñŒô9äT–k7…´äRÎ/U@É'V¹ãôȼ5¥N¥¡{¹š½Éü$¬=V×]“KÕíš]Fî)!½·H¤„0e daA$’@=óŽx«ÄÞ“4vú}Ìënñ¼‹5½oßåB‡Xã<`wÀ99a€ øE4ÿîßàÖçÿ‹£þM?û·ßø5¹ÿâë—Ô%×µ«è$·ÕÈ?šÉå32®¢ ¡òÀ'ËÞB©|€9$U˽K^ûŽšê†xÖéÒF´nPÆL•Ál‘ÇPAÅm·…´ÔRÎ/U@É'V¹ãôÂ-¦ïÙþ›»Ûý­sœßu•so«\kÓéW“]˦ÌÞN×€ºOnÐá÷:¦Õmåú°#h`óNíIJ7·V÷Éze‡Mi"VÈŽ$}ÓaQØ«È[„3@ëá-äxÔÞ3¦7¨ÕîI\ò2<Î)ÿð‰éÿݾÿÁ­ÏÿXZ]Ö³i=½ýí­þnRÜÞyv¥™Ÿì¼åTq‰88ภ½çŠÏ–../ ˜Ú©\X´ æÔÄÛ¼M“‚Àåv‚2Ð i€°&ð›:µÏÔüý8?•'ü#ZVÒÛ®öƒ‚µîp§úÏq\ÕÄž¥ɦê}Ÿq½2nÍݦä& 3C6Ò¹ùs¶@K¯¼7{5¾£qrýžmE®^ÓËmòJ³â9î»O¼hGC@2ø[Nq•¬3ŒZäÿìô¿ð‰éÿݾÿÁ­ÏÿIáK¤º|–÷q\Guu!ómdD*×À‡*² ®Š€9ïøDôÿîßàÖçÿ‹£þ=?û·ßø5¹ÿâë¡¢€9ïøDôÿîßàÖçÿ‹¥_ éÛ†å¿þ—'ÿg®‚Š@q¾º¸¸ðVƒ<÷I,šu»»¼„³1I$ž¤š*/ȇáßû[襢€4|7¨Ci¢ùr%Ë1»»lÅm$ƒþ>eîªGáZßÛ6¿óÊûÿ'ÿâ*Ÿ„¿äëòïÿJd­ÊÏþÙµÿžWßø?ÿGöͯüò¾ÿÀ ÿøŠÐ¢€3ÿ¶mç•÷þOÿÄU=BæÃQŠ4jq˜ßzÞxªÌ€ío”’T©+‘“÷‡4”¬Ém=F+: η %”Šõâ*Ö´Ô,l¬àµ†ñ1¬h Œç ðz |šõ’_Of«u,¶êLÞE¬’*»ö–U#qR\ç‘Ç#5 ñf•s-¼0µÓÏ;ºy"ÖMñ”eV2.Ü —“È=9ªropQKbçöͯüò¾ÿÀ ÿøŠ?¶mç•÷þOÿÄV÷ެVÏÎÓñ'Ïi®ÃÁQ8b'g*vv2W$š»Šì7Z[ÝMÚn2ZмöàÈqïv…ùÎ1œg#Ôe_þÙµÿžWßø?ÿGöͯüò¾ÿÀ ÿøŠÍ‹ÆÚ,öé,OvÞ`ˆÅØ¥J$Vd(¥rÀ„s‘ýÃUî¼iµÜðy2K{™üï&]‘ùJ‡|™ççÓÉ8  ¯í›_ùå}ÿ€ÿñlÚÿÏ+ïüŸÿˆª²ø«I–v ZTØ"bÅ£‘c`'{ ÞÞ¸Îjþ›©[j¶bêÕ˜¡fB 22œe8 ‚(/í›_ùå}ÿ€ÿñlÚÿÏ+ïüŸÿˆ­ (?ûf×þy_àÿüEÛ6¿óÊûÿ'ÿâ+BŠÏþÙµÿžWßø?ÿGöͯüò¾ÿÀ ÿøŠÐ®þ«;}^þÊýšÝmî<¨ç1?•!%ù¤ÆÕ?3ðHè;‘ í›_ùå}ÿ€ÿñlÚÿÏ+ïüŸÿˆª_ð—é&<¶™K-¾Ã7žA†íÝ·üØÇuâ«GãM=ZòI¤/n“lÖÑ<­,^D2™PNÑæŽzr½ÍklÚÿÏ+ïüŸÿˆ£ûf×þy_àÿüEU¸ñV•k,‘Í$ê:¸¶¤¨6äÆÁpÿyx\“ž3ƒ‹Úv§mªC$–Þ`òä1H’ÄѺ0ÁÁVŽ#Ô{ÐÛ6¿óÊûÿ'ÿâ(ͱ8_à ÿüEhQ@G‚¿äCðïýƒ-¿ôRÑG‚¿äCðïýƒ-¿ôRÑ@~ÿ ÿ¯Ë¿ý)’·+˜ðÜ—é¢âÚÞÚHþ×w––á£9ûL¼`#qÓ½kyú¿üùXàkÿñªÑ¢³üÝcþ|lð5ÿøÕn±ÿ>6?øÿüj€15­ðÝÜÍk ÓÛÝIò%¼¨³$È¡C/™ò2•UÛ#9©¼;£\ÚL“ÜDÐE- ¬êò*»råFÜåW€:œñ©çkóãcÿ¯ÿƨóµùñ±ÿÀ×ÿãU<ª÷'‘^å CÂv÷òêûBö5›«h¼³±P9Ü„çj Û‡o*rsB?‡zZEmÚîš(.þ׳ʷ]ÒeOb?¸?Õ”<žkÍÖ?çÆÇÿ_ÿQæëóãcÿ¯ÿƪŠ1ôïÛèÖÒÁ¥ê·ÖA¶h!¶ ¨ .L?8Áë&æàç9m¿€4«MNÚþ fY¢`ònŠóÜ9}ìZ2ÊK1?»(=¸µæëóãcÿ¯ÿƨóuùñ±ÿÀ×ÿãT‘qà{ 9,~Õr±-¥½™Ý‡Žûw,‘²’wœñØcÇð=‰·h#¾Ô"‰ážÝº1xåDF²“Ç–¤ç#’A"µüÝcþ|lð5ÿøÕn±ÿ>6?øÿüj€3o<¥ßI©I;NÆüB\¬±´EJ²+)%° «lg:z>•‹¦Çe ­*!'{GdäçîÆª£ðQIæëóãcÿ¯ÿƨóuùñ±ÿÀ×ÿãT¡EgùºÇüøØÿàkÿñª<Ýcþ|lð5ÿøÕhQYþn±ÿ>6?øÿüj7XÿŸü þ5@ÏÞxJÓP¾ºšêîò[[©<Ù¬IA ¿”"É!wýÕnÆyÇLhyºÇüøØÿàkÿñª<Ýcþ|lð5ÿøÕf(”]mê‡RU¿&(ŒgãËØWæ'•''9ÈVãáæ4Q¤rO ˆ)ŠC6ÄEÀ%G\g$È8 VÏþ¿ÿ£ÍÖ?çÆÇÿ_ÿP'ü aÔg½7^dÁaÜTŸ˜G½¹Q€Ì@ è,ôø¬§½š7vkÉüù€Û08é„sÎj/7XÿŸü þ5G›¬Ïþ¿ÿ  +?ÍÖ?çÆÇÿ_ÿP%Ö23ccúüþ5@Ç‚¿äCðïýƒ-¿ôRÑG‚¿äCðïýƒ-¿ôRÑ@tK»; ®¯vˆ’êèd®pMÔ¿áW‰|>òOô&RŽïþ!¿*g†cvÑw£• ÝØ*ç?i“«`£üÄXùŽI,9>§Šz […­åºZB²\Ä"† ÎqÞ¦ûu§üýAÿ>Œ6ñÄNJ(\úàT”†qzö²šl7÷…nn_íÐÚÀ‘ÝI ñFGÝ=2Äð;Õý éî&°•Òx{YšH^éæ•ã‚Iõ>üÓï|?ww6 >Ó§Éi{*Êö÷v 6DN¢EîÓ½M¦h×VWK-Å‘‚ÞÞHb‚ÖÌÂ{!'™û1Þ¶æ%ºÿÀ1´¹ŠÚ‡‹©\ØÍm¼ÌYæ!E¨…œÎØR@óÇ“œø¬/øN.åºóÞÉá6m<»äU‘±lÊß¼ag25ÜͧXÜÊòÏg²<-ní$a‹DÝP“ÕOqÒ«CáíÞ‚"Æ8Y]ݰeU`F9ʪƒêzV&Ç=«xê}?RšÆ×Fšöhž_–/5˪,GO†&\Ø^9aš×ÑuùµMKP³¸³olÇËGi<É#ÜÊ ®Ü‚ŒãžHï3ø[Ãò[¥»èzkA—HͪV @ÇRÏÐU«='NÓ¦ž[+ ki.|Ï J†CÉË9äŸÌúÐÊ(¢€ (¢€3|C<¶¾Õn sÑYÌè㪰BAüë•’ÿRÓîãŽBèÁhtÔ0ÊVCp.n nîÌ ðË‚0Pç#Šìõ 8õ6êÆVeŽæ…ÊuüÕKmÎ?±Íww÷Ö‹²+Ûˆ#óTsЪ€:ã€(Ýòܵœ‚Í‘n1û²ÿt÷àñþr:Ž}#Õ-§ðÓêr}²YšÞê8¤>TƒÈ•þï®ä_R1Œž§vÛJÓ¬äŽKkh^4hÑ£‰Tª³ne…¹#ךŽïK7z­ëÞN©fÍ"[(MŒå71Û»…và(B¸Ïx«T³¾ºÓí, †E’µšêY\åâß·2`a÷‹ ¤íÇ5ÙÖtº=ÍÍ̺UŒ“Ý'—<­n¥¥\µŽ2FúJçõßZ;<Ö¢[\É ®óæºY¼äÅ÷rré•6#ñF¥%ðÓ“j5†ù¼¯+`}Åü¼îçBŸ\ã8ÛþÆÓ<ö}¯” !<¥À;<¼ãÜ%~œtªšÏ†¬µ˜N±À|ÔȶÐÈXª•뇜d}2­RþÙÐtíSÊò~ÙkÇ—»vÍèÀÎ3ׯÕ{(4ë {dÙomÃäœ*€Éöb€ (¢€8ȇáßû[襢ȇáßû[襢€%] úÑçŠÏŽ´ydXR+FT.删-Œ±êM;û/Xÿ¡ÇZÿ¿_üE¿ÙšÇý:×ýø²ÿäz?³5úu¯ûñeÿÈôQ@ ý—¬Ðã¬ÿß‹/þG£û/Xÿ¡ÇZÿ¿_üE¿ÙšÇý:×ýø²ÿäz?³5úu¯ûñeÿÈôQ@öf±ÿC޵ÿ~,¿ùìÍcþ‡kþüYò=Pý™¬Ðã­ß‹/þG£û3Xÿ¡ÇZÿ¿_üEfkô8ë_÷âËÿ‘èþÌÖ?èqÖ¿ïÅ—ÿ#ÑEÙšÇý:×ýø²ÿäz?³5úu¯ûñeÿÈôQ@öf±ÿC޵ÿ~,¿ùìÍcþ‡kþüYò=Pý™¬Ðã­ß‹/þG£û3Xÿ¡ÇZÿ¿_üEfkô8ë_÷âËÿ‘èþÌÖ?èqÖ¿ïÅ—ÿ#ÑEÙšÇý:×ýø²ÿäz?³5úu¯ûñeÿÈôQ@öf±ÿC޵ÿ~,¿ù“û3Xÿ¡ÇZÿ¿_üE¯£èVÚf‰aa“4V¶ÑÂ…Ê–*ªÎ\ (¢€?ÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-6.jpg0000644000175000017500000000407411625126536027737 0ustar drazzibdrazzibÿØÿàJFIF``ÿÛCÿÛCÿÀzY"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þþ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+üA¿à¬_ò”ßø)gýŸÿí‘ÿ­ñ¿Ûæ¿Äþ Åÿ)Mÿ‚–ÙÿþÙúÑ_«üýµ¿ò‹ÿiÂßúî¼U?ÇÿÛ[ÿ(±À?ö-ÿ®ëÅSý¾h¢Šÿ`ö(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+üA¿à¬_ò”ßø)gýŸÿí‘ÿ­ñ¿Ûæ¿Äþ Åÿ)Mÿ‚–ÙÿþÙúÑ_«üýµ¿ò‹ÿiÂßúî¼U?ÇÿÛ[ÿ(±À?ö-ÿ®ëÅSý¾h¢Šÿ`ö(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+üA¿à¬_ò”ßø)gýŸÿí‘ÿ­ñ¿Ûæ¿Äþ Åÿ)Mÿ‚–ÙÿþÙúÑ_«üýµ¿ò‹ÿiÂßúî¼U?ÇÿÛ[ÿ(±À?ö-ÿ®ëÅSý¾h¢Šÿ`ö(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+üA¿à¬_ò”ßø)gýŸÿí‘ÿ­ñ¿Ûæ¿Äþ Åÿ)Mÿ‚–ÙÿþÙúÑ_«üýµ¿ò‹ÿiÂßúî¼U?ÇÿÛ[ÿ(±À?ö-ÿ®ëÅSý¾h¢Šÿ`ö(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+üA¿à¬_ò”ßø)gýŸÿí‘ÿ­ñ¿Ûæ¿Äþ Åÿ)Mÿ‚–ÙÿþÙúÑ_«üýµ¿ò‹ÿiÂßúî¼U?ÇÿÛ[ÿ(±À?ö-ÿ®ëÅSý¾h¢Šÿ`ö(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+üA¿à¬_ò”ßø)gýŸÿí‘ÿ­ñ¿Ûæ¿Äþ Åÿ)Mÿ‚–ÙÿþÙúÑ_«üýµ¿ò‹ÿiÂßúî¼U?ÇÿÛ[ÿ(±À?ö-ÿ®ëÅSý¾h¢Šÿ`ö(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+üA¿à¬_ò”ßø)gýŸÿí‘ÿ­ñ¿Ûæ¿Äþ Åÿ)Mÿ‚–ÙÿþÙúÑ_«üýµ¿ò‹ÿiÂßúî¼U?ÇÿÛ[ÿ(±À?ö-ÿ®ëÅSý¾h¢Šÿ`ö(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+üA¿à¬_ò”ßø)gýŸÿí‘ÿ­ñ¿Ûæ¿Äþ Åÿ)Mÿ‚–ÙÿþÙúÑ_«üýµ¿ò‹ÿiÂßúî¼U?ÇÿÛ[ÿ(±À?ö-ÿ®ëÅSÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-14.jpg0000644000175000017500000002712411625126536030017 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀMy"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ôýC‹U´¹»¹¼ÕVÔ/PíÕn£P«s*¨ ²Uv­øD¬¿çëVÿÁÍçÿ©<'ÿ {û êúW5nP?ÿ•—üýjßø9¼ÿã´Â%eÿ?Z·þo?øítP?ÿ•—üýjßø9¼ÿã´Â%eÿ?Z·þo?øítP?ÿ•—üýjßø9¼ÿã´Â%eÿ?Z·þo?øítP?ÿ•—üýjßø9¼ÿã´Â%eÿ?Z·þo?øítP?ÿ•—üýjßø9¼ÿãµF}+F·¸xï]i…a£¨H 2²œqï]up>$ÍÔˆ’\2jÐÈ !q!æ`ã¯qWN*N̉ÉÅVú6“sqä%Öº²”.]KP*Ò ã#ó§A¢èwWrÚ[ê÷ÒÜÃþ¶õë¶tç2‰²9õ©4§µ«Arᦷ!vç燶T›ÃÂ;‹¸åi.þÕ1‚.ÔŽ)'åJmmåTpÌFxèH©è¬8»—ßÂÖ€^óU\£:ÕàÉ=úÚ‰ô !,Zõµ-DZ* ßÛ—›ŽIÏŒV\Ö[OŒê/%ÕÌ7ΩöéQ0 nëÉžæ«Oá¿Ü[%™\5¤97nÂ]Ѓ ó0rÀÁä“„Q¬úg‡£–âÖîĶÊ^xÿ·î·D£°ó²#¯¨«gÃ:p™a7Ú •”²§öÝæâ €Hw@HçÜV>£áZóHbÁn>Ì÷R¥È˜ƒ?𲏯TŸ7sõQŒç"´½r]@Û[O{Ë$¹••bó¡+šx.@˜ðNÈ\ß iñ.é/5T\–Ö¯ÉàËZ®4m ã½éÌæØÄúï™Fsúï½ÁùzñY“xkZžÊ[{Ÿ:豉áiu'Z! b ‰Sóï Ÿø|w Ô \ÿh=È·’L &va!<þ^Ä>ÀúÐÁðµ€Fo5Pì ýµy’2ÖûΚ<5¦µËÛ‹íP̈®È5«Ìª±!IoBU¿#\ü^ñ#ošI¸òfŠÜýºOÜ4‘Ä7K»ã~2Çæ“ÓAü=ªµÔ—–~eŒû-c‡uô“m 4¦Bù8o‘ø#œ PŒÞÓm ’yïµ8¡K¼­Þ*ª’I3pïPÿaè¿l[Oíkÿ´¶vÃý½w¼àp¾vz~†©éº¹o$R]5ÅÂà „Á.¢Ì²Í¶0¼ã”%[ïg®v‚NjÚxõÒÖk…Ž;U›eõ»)/äボaRH‡'¿@ {] F¾´ÕoîÁ'îµë·ùI 7t%XþÉô«ð‰YÏÖ­ÿƒ›Ïþ;Tü=£ßèzœŸèQ›Y`HTÅ  ³Ü?CÛl©ÓßÒºÊçÿá²ÿŸ­[ÿ7ŸüvøD¬¿çëVÿÁÍçÿ®‚Šçÿá²ÿŸ­[ÿ7ŸüvøD¬¿çëVÿÁÍçÿ®‚Šçÿá²ÿŸ­[ÿ7ŸüvøD¬¿çëVÿÁÍçÿ®‚Šçÿá²ÿŸ­[ÿ7ŸüvøD¬¿çëVÿÁÍçÿ®‚Šçÿá²ÿŸ­[ÿ7ŸüvøDìÜêøÏýo?øítÓñÊü4»¹¿øq¡Ý^\Kqq-°i%™Ë»œžI<šêëŽøSÿ$»Ãßõê?ô#]QEQEQE…‚Œ“M–T…7ÈÁGO©ô¦³o¬eÕ#RTBü›¹ldŸO§ò  «]-ZÿU¸¹ºÔÁ…#jW1 @‰ª’*œôoþ+/ùúÕÿðsyÿÇ©þb}^$ÎÔ¿e=¼¸ër€0?á²ÿŸ­_ÿ7ŸüzøD¬¿çëWÿÁÍçÿ­ú(þ+/ùúÕÿðsyÿǨÿ„JËþ~µüÞñêߢ€0?á²ÿŸ­_ÿ7ŸüzøD¬¿çëWÿÁÍçÿ­ú(þ+/ùúÕÿðsyÿÇ«;SÓ4)€žãY?»23 nåU2KΣ«]…qž9uU’6X¥²xãI¥X՛̌ðX‘ÃéWMsJ̉¾XÝ ›§¼–êã_'`±Èu»†RH$}Û‚yóŠ–ëKÐì®VÞ}KVYЇ*ºµólRp±)Ú¤‚lƒéT´Ë¸¥¹Ó [è§>2°¤Ñ¹Œ|ã d8­¨èš“ê—7ZuÒD·b1ÙÙ^##‡R­÷9ÉÏ ¦·V»õ%ÿ„NËþ~µü^ñÚOøDì¿çëWÿÁÅçÿ¬”ðLð­ŠÄmEAåÁ ˆášXøå@Cœp«Ô µJo j‰ý—¶š}òC6›$f1Š ÐHù^2dS´ƒÆФ³b-Gžþ[(¯5Çš&Û!•þÅlÁ3npAÆ{Õ‰ü5¦ZÛËq=ö«1!yµ›À@É$ùݪ-àËì›»·¼·2Ë ‰^FÛ2ƱYårþSv·Þä7 ç]x P»Hâ3YG‚X³€Ìâ•vgË”4ŠÃ•PƒÐEÿüýjÿø8¼ÿãµ^ÿCÑô»ooµV h€/#k¸\œÏ_SY× ¿¸2Ä©§ÚÚÉ1œC±ZŒ @Ú6ž3» Ç+?çmFêHÚÛÈ’Dhó…ÛxÏ”T'*x1”rhB G¹½º³‡QÕâ×gŸÖ/r›†W?½î9©bðÖ™:³C}ª¸GdbºÍáÂ?×u±µ/NÖÓZi³Áöy!HÁºÃÈyß>âÈóF0``2ã›QøJx5Cr¶zTñùóJD Í#«‰HÚ~tÃ(ççæ^A¹gáí/P±·½µ¾Õä·¸‰e‰ÿµïFåapeÈàŽµæ¢iä ½OTƒ1I6_Y½bXçÍÇçéŸCXÇáõÚXÚÛE%¡Š+h#šÜ|‰4«£ÊIFÃr¤6Üœu_¸ð\óY,+%ªL·rß‚›ÚIC±€>FJ çw9= hÂÓÃŒ?ä1©ƒö±eƒ¬^‚'#"<sœUëo é—–°Ý[ßjÒC2,‘¸Ö/pÊFAÿ[èjªø4™ÞõäAz÷«9ÉŒ ¹Yºcïà2ƒèq[µ¿Óô[K è­”ÚÁ ðLÏæP¹ ¢íéÓŸ­Vÿ„JËþ~µüÞñê?á²ÿŸ­_ÿ7Ÿüz·è  øD¬¿çëWÿÁÍçÿ£þ+/ùúÕÿðsyÿÇ«~ŠÀÿ„JËþ~µüÞñê?á²ÿŸ­_ÿ7Ÿüz·è  øD¬¿çëWÿÁÍçÿ£þ+/ùúÕÿðsyÿÇ«~Šá|]¢E¤xRþþÒûWŽâV¿µîÛpìe ý®çÐW5ñþD=[þ¹¯þ†µÓP7á¡xt©þÎÐþѿϘ¤œý²oCZøÔÿ¿iÿ|7øÕ ÿÈãþÂz‡þ•Í[”KŸ÷í?ï†ÿ1©ÿ~Óþøoñ«µ“âYæ¶Ðn$Ú3”Y$^±Æ]DŽ=6¡fÏlf†&ì®YƧýûOûá¿ÆŒjß´ÿ¾ükƒ’3c{{5­‡Ùš›9–$¢@©|~ðH=Y·g?)àtž.Õ5m6“k<óòa i¶c÷mµ‚Ù8û í?:ñ™Œ®(ÊæÆ5?ïÚß þ4cSòÒÏþøoñ®z;¯Éx i%Hç“h³ÿP»å^3ÇÝXÎNy9è@¬»ý[Å7zTÑ/ ºšÅ°Y8Û›Bþb¿;dóÿv9·!ªŠ;\jß´ÿ¾ühƧýû?ûá¿Æ¸«Í[ÄW3Û[jÇd°¤Ÿj6³’Á’«åw#JJå‰ÚFÕÁÇö·ˆ!.ÛÝn)†3`äN¦yC3¾0„ FŒç€w n5?ïÚß þ5RãJ{É|Û›M*i1ò[î8úšÄ¸²¿Õlu4¸šh/í„RD’@LN`ixSÊŒÈ3Î ò ,¹Ö5;;‰ì–G†ÞÎémLÑ[™ÖO(É,‘íSÁÉlE®tÚlÖLÍkm¥ÀÌ0LVåIüYƧÿ=,ÿï†ÿá5-WÅ—vWV²Yº$ºd¸ò œI)6ìC.ØÈŽBøL€ŽF *jK­GĺM¶¨°[_Oy ÀŽ’9Õ!OÊŒ~~3´¸2îSƒ@ZÇoOûöŸ÷ÃÔÿ¿iÿ|7ø×>·¾#þÒ9/ö´}ϱœlF,nôòŽüûû¹o jZî ×ŸÛVÉP…c ((çvåËDŠÊ0¸*_¿ÌAZÚÆ§ýûOûá¿ÆºŸ÷ìÿï†ÿ»ERƧýûOûá¿ÆŒjß´ÿ¾üjíKŸ÷í?ï†ÿ1©ÿ~Ïþøoñ«µÈx²óZ[™ì´áwåͧËå5¤ Y%Ù! \®ÑÊ P6ã÷H €‹Ÿ÷ìÿï†ÿ1©ÿ~Óþøoñ®bâ÷]û;\[›’ºÛ™ld,— rd;q€;u¦Ýë:å•âA3α¥ä0Ç7ØI[óª6æjmF§úu¦âk¯½º»œ;}Oð×éV4‰"…QÐÅE¸Wódc$¿Þ#îûÛüõ©è¢€9ÝÞio5¦ŽòXGöƒ|¨¨Gú¸ýTšÕûÏýî?ïÜüMSÐ?ãç[ÿ°‹è¸ëf€)}Žçþ‚w÷î?þ&±ÜÿÐNãþýÇÿÄÕÚÉñ(c \€¦SÎ &ëæcýÍÝ9¡‰è„‚xn®ÞßÄ"iãÎø£hY— .EZûÏýî?ïÜüMp·\¼³TòØÿÄ¥c(Áe<³S÷vrp ÙÁ'¢ñI×üë£<±ÂCù­I!ß”òÁ GË÷óÈí’:ÔÆW&2æ6>ÇsÿA;û÷ÿH¶· 2º¤äz„ÿ‰®eßÄ¢I„ÇRû0¹Ìmhù¦ßlÈqÛ¶ƒþÏ—œ3 ˆx–Æ ­l¬æÞÏ$°ù`™'8cœòLGè~¸¢Î¤ZÜ@Õ'%N øí/Øîè'qÿ~ãÿâk†òQձ巖]-¼ãsµp—ÉÝ»‘ÎsÎݦ€:õµ¸a•Õ'#8á#ÿâi~ÇsÿA;û÷ÿ\rÅâ» ×[HfÂk™£‚4Œ‰™®'rØü™S àg¡åiöÿð—Ii;4תaYä·"b‰_+œdÌ¿Âppq@wØîè'qÿ~ãÿâhûÏýî?ïÜüM]P/±ÜÿÐNãþýÇÿÄÑö;Ÿú Ü߸ÿøš»ERûÏýî?ïÜüMc¹ÿ Çýûÿ‰«´P/±ÜÿÐNãþýÇÿÄÑö;Ÿú Ü߸ÿøš»ERûÏýî?ïÜüMc¹ÿ Çýûÿ‰«´PãËYãð>¨Ï4Š#\£"~uô\×a\ÏÄùõoúæ¿ú×M@~ÿ=Çý„õý+š·+Âò¸ÿ°ž¡ÿ¥sVåÖUe*ÊHÁ¡êÎ×/äÓt§žV™ž8b ÷CÈë“ì }… MÙ\m¾ƒ¥Z\$ðY"º«ä•ýÅ' éÀV–Ù5Âÿm^Ù]Þ¸½¸¸hÓIæ•hæD}²FÆëŒ3c¡­oëwšEÅ«B™µH./.в‡) ©Ø79ÝÏCÇQSžÂ‹Oc¤ÝþÉ£qþéý+“Õ|Iw®¶Ö»Q#vŽ@êâ g>ÃU,|cm£Ãy©Û=ÂJDhí^ [TÈþQÜv«0ŽÕç’8-E¶ãýÓúQ¸ÿq¿JäbñN¥è7–1ˆ<É#a  íçÉWäO<èO ®Â€¸ÿq¿J‡ìðo/öTÜd“µr\}pÏ «Pwî7éFãýÆý)ÔPwî7éFãýÆý)ÔPwî7éFãýÆý)ÔPwî7éFãýÆý?ÆE3yÿžmúÏüóoÓüiõÍø—ÄÓh¢æ8l÷H–ROÓ±<ŠŽÂ0@ù›’FAÁgœt;ÏüóoÓüj´ÖV—P]O§Å-;|™ž4g‹=v±ägÚ±.üS=žöŸOd6ò4r$r+ïu·3RqÆ02qÏlsJ|ZË1€é²y°Ï7CÍ\EæJ"BñdäöÀ¾è÷·üòÌcÏüÇøÓè yÿ<_óãG˜ßóÅÿ1þ4ú(žcÏüÇøÑæ7üñÌ>Šg˜ßóÅÿ1þ4yÿ<_óãO¢€æ7üñÌcÏüÇøÓè yÿ<_óã@v$)ǾGøÓè ;áOü’ïרÿÐv5Ç|)ÿ’]áïúõú®Æ€ )’J¡y*Žæ ýõ×]ÐÃéÑÛÿ‰¯Ò€%ÏÎb|ÉG^p«õ?Ó­,vÛ\K+y²öb0ýÑÛùûԱƑ HÔ*Ž€ uQEQEsšEü6׺Ú:\ý Ç1ÛHãý\}ÕH­_íkoùç{ÿ€Sñ5‘¥\Ãþ·ö‰ü¨þß…Ëc,Q¢ÿ:¾5[ ØïÒY Š +îÏ##òÍ –?µ­¿çïþMÿÄÑý­mÿ<¯ð oþ&¯U=Ny-ìÃDÁ]¦Š0ÄgäU?¡¡jBœi·\[éÒC<™ß,zlŠÍ“žHLžj×öµ·üò½ÿÀ)¿øšçbñA»:šÚMv~²:KeHÈpÀÏ_\g¡â/I¢^Y©@¶f)nnî„qG°ÌŠA%À c¸ÁÈ©AÇrc$ö4¿µ­¿çïþMÿÄÑý­mÿ<ïð oþ&±añæ“:X2ÿM€O&à¡p$;òHMÊ3’@‡iþ2‚çC‡P»±¹´v·Žw„”r¡Õ˜`«FžÇ‘J6?µ­¿çïþMÿÄÑý­mÿ<ïð oþ&¹ÝOâ¢^[E.¥ ¬Ó$¼c‘4ª¬ªåðPÈàß->?k¹®--m­Ð¿ï‘ÏÞRDÝ#*a[åÉ#%[Û ÿÚÖßóÎ÷ÿ¦ÿâhþÖ¶ÿžw¿ø7ÿXÖ>2Kösm¥ÞϼbÑ¢1¤#Â’–¸Ú8Îìu\dœTmã{[k‡Ôáx&–8IhãK€²º|¬î#hÎò£ž2(wûZÛþyÞÿàßüMÚÖßóÎ÷ÿ¦ÿâkOéÉj·Imtöí$q,¹‰³Æ²¨Üî |ŒNFIôôGûZÛþyÞÿàßüMÚÖßóÎ÷ÿ¦ÿâi··i©X[ÛÉ $¬í7™rU@ápÃiç©ÏN”Ý P¸ÔôÃqu PηÂÉ—QåÊè0Äx\ô'öµ·üó½ÿÀ)¿øš?µ­¿çïþMÿÄÖ}¬ºœPZCm½°–Þò`eIœ‚”ô£yÍlÚÊg´†VEb¸ÍVþÖ¶ÿžw¿ø7ÿGöµ·üó½ÿÀ)¿øšÎÕ5»« n _)!´eCö‰¢‘–Wf*P:ü±°Âà?ß.c­CŒ­4ßmvwF›$¨Y¤eŒˆÐn$1óW¯Ÿ›ƒ@ÿÚÖßóÎ÷ÿ¦ÿâhþÖ¶ÿžw¿ø7ÿ\ìž>³¶’Y.âkx@XãŠi"ŽC0–tu,Òð<‚GÍÏ©$ oü&É ×÷—2*ivå/ô9ɼG³÷ÎD@“ N1ÜŒé?µ­¿çïþMÿÄÑý­mÿ<ïð oþ&¹ë߈Zdѽ¼Oq,ö’Ü[ƳCûÆ]Špäôþp pÇ#:Mâ›HâfšÖî)Ìo UfV ŒGÊÄóÁ<æ€/ÿk[Ï;ßü›ÿ‰£ûZÛþyÞÿàßüMs·þ<€=ÕŽ›—U‡ËQo4±¼ÈˆÈÛX²\rFÓØµ#xúÖÞÍBî-ºbyMžb#²0}ÌË#/ ÆØUËŒ@öµ·üó½ÿÀ)¿øš?µ­¿çïþMÿÄÖuŸ‰^æäÛ&ðJng‰v4ELqIå™s¿…Î8?7' @&²âø‰am¡ÙÝê°Ému4QHb-o ˦çÆÞ¿);øÆÒq—ûZÛþyÞÿàßüMÚÖßóÎ÷ÿ¦ÿâkSñkÚAÕµ‘’ÞK–²F•Õ7Ï’©·’voRã 0nŠÕY|_{öÆ´kHL©~!, 6þo“æöüÎ6ç§4Ñÿk[Ï;ßü›ÿ‰£ûZÛþyÞÿàßüM;I¼}CF±½u÷ñÌʽeó«”ÇxóQ‚oj‘ª]hÔö’¨ûëÔ•À®Æ¹Ÿˆ?ò!êßõÍô5®š€0ü'ÿ {û êúW5nW+áëd¸°œy;Ùu ü“3 ÇÛ&ÇOƵÂ(€g¶7JÝ9#'Þ´­P^ZCi-­ÂoŠU*Ã8ý{~ÕöMŸ÷þþ¿øÔ––6vþsC3èRVÉ,Á@å€êE¸Ÿ™F/ Áö¡-ÍÁw‰#F‚óTäïŽsÒ¶ç³¶¹9žÞ)NÆ÷ˆåo¼9ìp2;â±d’Æ!1}>ìy ºP.P”¤ sZÙVÜûúÿãG-„­ÐH´=&Ö8tË8ÑrURgíì?!Ks£i—‘ÁÖŸk:@6²¬#ÆÇtô£û*Ïûÿ_ühþ˳þãÿß×ÿ t}1WM>ÕZgó$"Û!·99çÔWk _G}Y´ÄŽñ®áÊÅpbS·v  lÏ#ÔUã¦Y($«€sæ¿øÐê+: :æç‡sÅ"F¾HÈ=j;Û}/N°¹¾ºó#¶¶‰¦•ÃÈÛQFIÀ$žAÍjÑXÖãF»¼–ÒÞS,ÑEÎW #çiÎps´ñœã¸ÍˆìtéžTs4O²@&•°>Œã@4Ve­žyn&…dhÉ #Ž„ƒÔúƒSeYÿqÿïëÿ]¢©eYÿqÿïëÿT½L°–Ò)£¸/w7‘ŒÈùl瀒Iàb€6(¬M1´]b–Åä•°IiS¨È 6 R!‡r ¦ÜË£[MsyÒOošHbi@„Prz”»Tî4:îì]ÜXZÍr#1 d…YÂA\‘œÍǹõ¨ °°¸‚9âWhäPê|×dwªwÒhºtéÁ¸2ºîÙšVU鹂gjÿ´p=èúhÚdvënšuªÂ¿v1 í&ΘþïËôã¥TÔ<1§j:…¥Ü¨ªÖÒùÁR¾w ¬±Bã”Sò°Î9È«ŸÙVÜûúÿãGöUŸ÷þþ¿øÐÚ+ dÑßV}1#¼k˜Î¬W$;C`Ë€í à¶yµvM>Â(žY*"–f2¾“Ö€4(ª ¦ØÈŠè®U€ ‰_‘ùÔ7Öú^›§Üß]ù‘Û[DÓJûäm¨£$àO æ€5h¬kq£]ÞÍgo)–xcŽYÊä|ì9Îvžôõ±Ž3J±îf‰ö8?ÊØŸB?:Ñ¢²í-tëëH® 42¨tc#ŒƒìM6æ &Íá[—h¼æ*…¥p Xóœ•XóèhZŠæãÔ¼7*3-Ëåf‚Ý•Œ¡„“*4ciçêsŒs­[=6öÒ+«}ï ÈÌq•<ƒÉ  :*—öMŸ÷þþ¿øÓ[N±ˆo`êêfñ wáOü’ïרÿÐuR\üæ(WÌ”uÀ_÷o§ZäþÚÏíÔÍ—¾Ö’ ï99ÚÃŒvÈëÛÔö1Æ‘ HÔ*ŽÂ€"ŽÛ%™¼ÉGCŒÿtvþu=PEPEPEP7¥Û,×ÚËIkÂhÀ;YQ0F~µ|i–à ‡K¶€«îÞÞAl`u8ÅU½ðW‡õ é¯nl \NÁ¤užDÜpp¬@?*ƒþÿ†èÿø7ÿ@ÿcµÿŸhïØªºŽ–·6ž]¨† „±H²²>Ið@ àíÇ^õ•ÿ ÿÃ?ôü ›ÿ‹£þÿ†èÿø7ÿM;j&®¬BÞ˜ö…ôè%¾FI¤ŽÞLüÝHLzð9=k¢»Ó­/›uÔ !òž˜Ÿ¸åKĪþU‡ÿ ÿÃ?ôü ›ÿ‹£þÿ†èÿø7ÿNRrÜQ‚ŽÅõðÆ”%†SÄ’E³-ÜÎ[cïMå˜ïÚÜÙÆN1“Q'„48Ò4[I6G”ˆ×2• ó``¶8ÁºWþÿ†èÿø7ÿGü+ÿ ÿÐ=ÿð*oþ.¤£JçÃÚeä’´ÐÈDÑ42¢Ï"$ŠË°î@ÁXíãq K{£Øê ®"s2íÛ"Jñºà’0ÊAHã¨$ ‘ÿ ÿÃ?ôü ›ÿ‹£þÿ†èÿø7ÿ@?áÑ–%-¥PFEu*mØ›¬0v|¤ŽX ži— µíØ¿kÇ+£¡wÞÅYH*KsAíÒ³?á_øgþïÿSñt¿ðÏýßÿ¦ÿâèFoé—’ZËÆ]^P.dBGó0l°* Iæµ t¹¯øWþÿ {ÿàTßü]ð¯ü3ÿ@÷ÿÀ©¿øºÙ»³–{ë;˜§Xü†mêÑîÞ¬0@ä`ð9çéUí|=§YÚµ´"èDÒI) y3Òä¹<äž½NG<Öwü+ÿ ÿÐ=ÿð*oþ.øWþÿ {ÿàTßü]m_ÚKq¥Mgm2Âï–²H†@£¡ÈÈ'z±B xâŠßÎÿ¿ðÏýßÿ¦ÿâèÿ…áŸú¿þMÿÅн֋c{z—w +È€¾{ˆÎT´a¶±H$񻆿gN–Á­ "!qÇËmª ðÀä\Ayª_ð¯ü3ÿ@÷ÿÀ©¿øº?á_øgþïÿSñt=§„4Û{·”M$Û‹µÂÏ$rn/#’®­¹yšA÷²CI­ÑlÎkV€ùS8‘ñ#Þ6í`ÙÈaµH ‚­d¿ðÏýßÿ¦ÿâèÿ…áŸú¿þMÿÅÐÖð¦#†’ÚYR’æW J4e˜Ã1GeÜrØÀÏ žÒc7Ùåy …-%Äœ;˜åˆUËu;FIª?ð¯ü3ÿ@÷ÿÀ©¿øº?á_øgþïÿSñt¨ú%̳´R••ÝòË+ å†Ú*à2qɦêÒõIK»vw‘<·d™Ð²`§iRätùcŸ ^†Ek{ ØDÁRPì)¾WÌ™þz€#=ð<ßþkþ¥ü©öª?ᦿêQÿÊ—ÿj MÀhºE屸Qw*Ew¤‰hP®qµ¶0Ç?+cš§ÿÄŸbF’Î(!R ,aÊni ¨b€•e“ùTm?/ÍÇŸÃMÔ£ÿ•/þÕGü4×ýJ?ùRÿíTè²x&õôÙlc:u´ï¤1° #Yµ¶`¼«úòG¹’ÿÀ­6§¨ÜZ=¼1ÜÁ"E…Ûäï‡ÊØG)œ¿\dŸ—8jóoøi¯ú”ò¥ÿÚ¨ÿ†šÿ©Gÿ*_ýª€=7Rð?ž“Ág$?fŸËÌbN›€YN‰.@Œ.Fr‚åŠçÎkm&è–äûL%„®"D.ú”fRs‘#—;«ÍᦿêQÿÊ—ÿj£þkþ¥ü©öªôiüM¯— ZŒÇoçEå…K—ÎÉ“å=|Õ9*NP{U—ðBͤK¦É$IÃÄ×*n‘–(‘clç¾lädóóøi¯ú”ò¥ÿÚ¨ÿ†šÿ©Gÿ*_ýª€=TxNYï&Ôn¦íòÝAp|­Â?@ƒÉ#Ê)ì%oSZ¾´Ô4í2+ Õ¶ÙmE;1p2À¨Úzp ï^+ÿ 5ÿRþT¿ûUðÓ_õ(ÿåKÿµPÐCL²°Ë¨Âäð>ƒ×Þ¼þkþ¥ü©öª?ᦿêQÿÊ—ÿj OøSÿ$»Ãßõê?ô#]qß ¿ä—x{þ½Gó5ØÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-2.jpg0000644000175000017500000000470311625126536027732 0ustar drazzibdrazzibÿØÿàJFIF``ÿÛCÿÛCÿÀ´p"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þþ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-3.jpg0000644000175000017500000003521211625126536027732 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÄ”"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª7»Œ±*»¨*Äíb3ÓÒ€/QXÓ†=û§rX(U”ä’p:ŸzŽI.#PòÁt©¸)o<dÙ½é¤Ø›HÝ¢±ÙÕ%Xšé–Fû¨g!Ðgš–ÿóÖoûúßãHf­fe[‰ /ÞQ1ÈúóÅ;Ëùë7ýüoñ  Z++Ëùë7ýýoñ¤P]C$ò2žC,¤ƒúе¹rÚ›%¶çž[Ç^¸íOòßþzÍÿühVŠÊòßþzÍÿ[üjÅ‘`Ò«;0#süèíQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V™w]D?Øæµf«Mæ}¦//nv7Þú­TÔՒ̲d0’6ÈíózåYÓ\O2¢yîá¥åÊœüãÑó­C|Uˆ.2 9yÅ$×â 3rî¦=Û@Xس6q´/RsÆ*ÓåZ¢»ÑœÀÒ.íüS«ÝM Mnî`šÎᤈ-¸DQ‚Xï\2–Tç5Ïiº/ޝ3Óž€× yÎ̓|€²/9`1’9ç¨üë2çÄ––QÝKs'—mlËrñ0…Jœ¿¦sÇÖ€9 'Hñ¬—Ú¯z%&s0½ƒÈ ,Eù”É“¼)öaYŸØ>1Ó<§èÚ6›}õ¼o¾q¨‰T®Í€Î†î@Ç1óšô“®ÙI?´ôó ‰Ãolsžù­­Ø¤vÒ>«¦ª]Ç»Ô ¿Ü9ù¿ óé<'âkK@i\ÛÏ6·=ìwO{ºÛH¨J'"B¹sÓ¨YÓôM«X –Õmô;÷ñ>¨LÃýñu’­)B 1œ-z?úO¬_‘£ý'Ö/ÈÐ/„íuH|)¦Ã­ï:¢@äÈáÛpõ`H'ç&¶`]·eþ´¿é>±~F›ÿ´MæmÝ…û¿Y¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªÒÈ‘]D]‚Ž2OºÕš­4±Åu‘ÕG±Çu vîÞåñáû…™3 gå³À)ÁÆ{žiºz\^if9¦ÍË-£N 2•çæRCÎF äq]/Ûmçâûø(ûe¯üüÃÿ ¶îB¦“º9ÛÝ"mBÞxn5{P.‘~Òc· —_ºS÷‡jð2§vyäfh€½º>©¶µ˜M ˆH|ïÁ›~q€1ïŠèþÛmÿ?0ÿßÁGÛ-¿çæûø(,…å®ã\Àƒ)PX“Œa³ÇCÛž=+ëEK«ëÙþßk ÜÄñþâŽr82ø|vùA÷®‡í¶ßóóýü}²Ûþ~aÿ¿‚€9ÇÐÒyí§›S·i"»û[ì‡ çäàÇsÔõöª×ºMȺ’;;Èéwܳ(Ä`HdP¿?_™;NxûµÖ}²Ûþ~aÿ¿‚¶[ÏÌ?÷ðPý®ßþ{Gÿ}Qö»ùíýõIöËoùù‡þþ >Ûmÿ?0ÿßÁ@ ö»ùíýõM†D’âVF 0£ ýi~Ûmÿ?0ÿßÁI ‰,ò´n®¸Q•9õ  4QEQEQEQEQEQEQEQEQEQEÚaÿžÑÿßb¥¬ˆ!Þ3´}Áü¨Gí0Ïxÿï±GÚ`ÿžñÿßb¹Ó¨¤ºßöT?,áKöÌÀŽI`sÁïüìÌæÇÏ’òHŒ0Û™ÝÒ"6¨ÎxËgÚ©Å­ÉSOckí0Ïxÿï±GÚ`ÿžñÿßb¹Sâ¯ý“KºþҀê8ŽÉ€$ÊÇÛ\w'ïWµ KNÓ#u:†™ÂEjdy‚@UPIàÀíRQ¹ö˜?ç¼÷Ø£í0Ïxÿï±X–úŽŸr°”¸ ìËs~êF*H`°ÙñSE5¤ð4ðÜ[É Œ´‰"²ŒòAÀãšÕûLóÞ?ûìQö˜?ç¼÷ج;ÝOOÓí ¸že1Ü0H<¤2™XŒ€A-ÇÓü÷þû}¦ùïýö+ûVÒ´Ë[»‹Ëëx㳋͸ùƒ4kØ•óÛŽ{f›³£ÜÂóEl`H’fœ¸„bBçŽ Ž½¨ ûLóÞ?ûìQö˜?ç¼÷جw½Ó£‘#’öÍ”V`ÙÚ@Ï9ÁÇ®*×?º(E]]rŒzƒšuT±czH¥[ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  Z•á±´2ª†l€¬íI®î¥¸Ë•\ ôô~òÛíåb-ˆ‘²ç¹>‚«i-Þ¥dÖKn,¦X•–Mþj”V xûÝ9  Š(¢€+_.ë€:ùmü«JÕn ñÛH|Åc€Çªÿ_±»¹»½Ôm5·˜${¶ä([ sÉàp=M6M$™.-²ŒŒgPGµkQMV ¡”äiÔQEQEQEQEQEQEQEQEQEQEQEU[Xói ãýZÿ*µYm/Ùl`wžb@Bqò“ÜzBWìT¼³»þÐ’Xáy€W°§úÄîOc֫ͦ]\ØêqIÂ'³xŠî Ü€‰ëÓŠÐìÅWÃsËDƒ©ÓÞ›5Õßöˆ³´6ÅW¸w‘b± mãÁ8à{Õ¹I+35·tqwþЧžÞk &úÒ_íon˜é“0˜&r€cåÝ’N8É$ŒÖG‡|9.ioxÖú¤Z¶¢×ëqa$mÕ¡b£ FÏ©¯@ŸÄ6ñËi¶âqÓm2HAËwŸ/Ì2€~?JµmªÁur–«=âÜ0bbxB²Û’ß/y:ƒC†ÖôýO^º´–îî÷ʆx'0ǤLª­¥Î;¶W ótÆ{šÖðä¾ð|:$uÓÌ’Oì™sHF º–ÏÉÉ륹Ôí­o£³šêðO!P¡-™—æ8`…Gâx¦kw7úeŒ×–ß¾Ž$–O1•q´ù{ß wPò×Cx­®à½Ò¥YÐ&•2ÀÍå´l¡zªáŽN8ëY:öŸ©ø‚âÝî®ïDQI ¦ô™•U£—yÇvÊá~n˜Ïzë›ÄP¥Ý¬--ÔffìÑu|¬ÞA,£ïZ§™®Ae<ö^}½ÒL«iºÇ D`Œ6aV(ðǹ8ëÈqžqK^s§Ãy¬kvóéï© ´‹#µùvÁTÈfÆà~ëqŽÜV¯‰SW„OpâÖ9Ùc% ‡ÈW o4̸ä£AÎzvtQEQEQEQEQEQEQEQE%d\À—–Bí4L€ˆ›û¥HéèOJ×¥¡6Кº³8íKK½–d0JÓ¦Ð̯˜Ž~ðÈ'òçŠ×6‘›ˆ®EÕÜs*ªJÑ!p½§¹<ŒqšÙ¥¥m[îL`¢îŽlè\‚!3]I#)$ ÊaAÀ zäð9â¬Ùéö¶w†ðËs=Ó++Í$|¸;z…P8 ` Û¢™fl¶úmÅÊ\Íd’N˜++Û˃‘‚FF 2Øê–w–Lîñº4VÊî\ÓƒƒK,³ÝÌöö®ðùe Îbʰ<•Lõ8Ç<Ÿ^–à·†Ú?.’4Ém¨02NIüèM ÂwYnn/§¹PÜ:aÀÚ>T‚Iu<æ£>Ó%›Ï™®g¸g.óM»88Êóp>èÐ×QE@.¢“þý7øQö¨½$ÿ¿Mþ=N=FÚW‘#rímuTbTã8×ý4ÿ¿Mþ=Úâÿ¦Ÿ÷é¿ÂµÅÿM?ïÓ…OEW¶;¼Ö€Ï‘GaëV(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ )Žáº(ɦ?ï_Ët}ãý(÷®$?p}ÁëïSÕ{»»{ I.®¥Hmâ]Ï#œŸ Ñ\B²Ã"ÉŒ«£ö"€%¢Š(¢Š(¢Š(?1¢2À;Bç’2qøÎ›'îÜJ:t§­bÏjéãk[èô—`lä·–ù|¡÷Tåƒ67bqާä0y´Utad~ˆ7þÏÿZ¬PEPEPEPEPEPEPEPEPEPEQÕ&šßK¹¸·¥… HÎ༕úük™ÕüE©[èú”ñ4JæîlÝ8ar®ry;•Oü PiEssø’[MGû:{#ö¢U‘6õ*¤ƒ•Æ1z¥{â÷—M¸{KK¨_c(y!`bq™óevã·\çµv4Vf•¨¾¡æXE&Ö‹q,¼7p9Áí‘èM^’T‚'–GTff8¤š–²Ä§V¹aöWI ¯!éòž0½yïÛÖœRKù>}ñÛ++ÆÑɃ7ç§ÉǸ©w #%r®@Ò/¡±Òm›_-cK½¤jÄÀèrÃvßç@Ñ IÀI 0e ¤FA넼›T„Çc#ݵëÜmåÍÿ,äã?6PH<~5,Z‰-ôk†YÆ ÒL—"i7"ʼn aAÀ9Žy âŠÈЖùmfkæbZbbVB¥jŒrÌz†<žõ¯@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¤½‚'(Ìû‡\FÇù Oí oYïÓÿ…BɺæsþØÿÐV©Þ41]ÁÅÏ‘G!Üd –03ô&šWvvW4¿´-½eÿ¿OþŸÚ6޲ߧÿ Ëíšö(­/…Ée}Éç‡éŒ}+”O‰ºcÆXÜ}°Ø‹¡m¸nó Â#?ßÜGáÍ X¹èÚÞ²ÿß§ÿ ?´-½eÿ¿OþÅé>;Ó.t˜®µBtùœ\6ÂŽÈË Æ#±öáŽvp9ËWÓÆimã7¬gØTÀàÄÞg•‰>OÞ¿69¤3¤þѶõ“þý?øQý£më'ýúð®Køox¾Y¬$I5ˆRI^7;C#ˆ1<쬸­ñׇÙn^òd…ÃÝ­eM³,-·åùˆvPqëž”ÒÜ_ÄÐvlŽ l;ý)"¼Ý#÷áa~O©8çô¬ñŽƒr³]L -*ÏÙ¤/Œ)‘våUC¡,xù‡­.Ÿâk]CUÖ,¢µº#LhÁ™!gYƒ¢¸+þÐÀç#ž”¹zÚv¥e-ÜM5´ÈRHÞ!ü)ö÷V°$èb†0 `ª=Åq×t”šo"9¦¶L:ˆº1ºÇ´;!V¤98<ñŒÖ…ÏŒü?f—=ë¬pÝ Ê±BÂ0åI’9ô ŸûBÛÖ_ûôÿáKä2°U/“Ó1°™—§jVz£Ý%«Èd´—Éž9"hÙ€!€<‚>†¯ªmxÿßÈÐê(¢€*µü ÅK>A â6?Òí oYïÓÿ…@±çqÿm¿™ªS=²ßÉÕð·4dS09-Ÿ¯AM+‰»ŸÚÞ²ÿß§ÿ ?´-½eÿ¿OþÏꥮ•§jzŒSØ,lžéÑ& NÐÇí*…¯ô·´Šk™íËË“"ió5è RåŠ ÚWzäPÕ;=Åäl¤ÆÎlj‡ëŠ•/àØ»Œ°3û¦ëùW-}ãÎÕçO,`aeXd13ùFP…ÕH`ÝÜÛµ:߯Þž?1¯Z$$m,H±+ǘ뼨('ÜHgUý¡më/ýúð¤þѶõ“þý?øWªøïL°Ñ¿´-`¹¾´ ªFc”žk’¬2ÇóôäcÖ¯7‹´½{Sy!t’šEÌa¦PÑ àmùç©ÅtŸÚÞ²ÿß§ÿ ?´-½eÿ¿OþËCã_OH—rþö(¦…Ú@Ó$­µ jW/–ãŠôû­vÇLµ†æawÒ‰Ö&ŠE‘Æ2¤19Î6àg¨ ŸûBÛÖ_ûôÿáGö…·¬¿÷éÿ¹;Ÿé±^ÚZÃäòÍ|,¥Anêð1ˆÊ )\œ¨z‚OcK§ø×E¿†ûFR˜ã‘㌴­orƒnæBà2zg‚@:¿í oYïÓÿ… nJ¨/– ÆÃ“øW?£x›G×ä†=>âW3[›¨¼È1$A‚–]Àd ¨­‡ý4OýP•TsJ!…ä £8%OíÿôÂOÍÆíÿ<$ü×ühåOíÿôÂOÍÆíúa'æ¿ã@(ªÚôÂOÍÆíúa'æ¿ã@(ªÚôÂOÍÆíúa'æ¿ã@ˆ ¥XÁ«=¤±ùRZÄÑùMÒ€,ã+ô8{S~ßÿL$üÇøÒÿhÓ ?5ÿ[>ÎïÚ-¢—~ÐÅ”íÎ?,ŸÌÓdÓ,%Ë%¤,å<¼”w¦>”¿ÚôÂOÍÆ“íãþxIùñ ­dÓín.­m¢HZ2.Õ|à{·=Ç­D÷Ån'WŽ„ IrsÃ7^pjætûm}纚þÚÁKǸ…‹™Z1÷SåRBÎ}x®\;Y%óšFM­2mC’1‘Ï€-Zß[^Ép–ò‰Ú_*\ í ɇçV«šÑ,ßG–ü´·71ÜJÇ”U‰h?/åzÙþÐÿ¦~kþ4rЧý¡ÿL$ü×üi>ßÿL$üÇøÐÚ*—Ûÿ鄟˜ÿ_íúa'æ¿ã@(¨a˜L¤í*AèqPḠ„Fr;~4vЧý¡ÿL$ü×ühþÐÿ¦~kþ4rŠ¥öÿúa'æ?Æ—íßôÂOÌFöfZk?.)$<á—"AŒ¡Çaš?´¢]>[¹"™!ŒˆÉó½xïõ'ö‡ý0“ó_ñ¬M@êrÝá²³˜¢²Äd•¢e 0Ccp¡Àéõ •Y]©XdÜS«ðäú…¦‡ok©Û(¹‡1þéÃ)@~NÝÇåZßÚôÂOÍÆ€.QT¾ßÿL$üÇøÒÿhÓ ?5ÿ¹ESþÐÿ¦~kþ4Ÿoÿ¦~cühíOûCþ˜Iù¯øÑý¡ÿL$ü×ühåKíÿôÂOÌoÿ¦~cühíOûCþ˜Iù¯øÑý¡ÿL$ü×ühåOûCþ˜Iù¯øÑý¡ÿL$ü×ühå ‰ã.® jš€ (¢€ (¢€ (¢€ (¢€*¡A5Æâ ùƒ©ÿej¥õ˜ºšRåcdV\naÛ{«)þ’êA®¡qµKDÁaž‘ƒYS_É‚ÍÕÊ„wðy8(ž¾ÝÅ8Ýkr'(­zÚÄÁt³½Ø“b|×ÞvþUÿ ÿÃP[Àç.¬up|Áþ¿n1Óîç Q×µ&¯ªÚÿjiµÁ§[Íi<ªSËlŠÑ6º’Äno”sÍb^øê÷NÓ’Y-íùb¸yídAò2‰6ጀ!U»d®A¡¶÷*)%¡³7ÃÏ\éö¶ 4¶Öét¨(çÏ•ebxêA_Lsš–?è‘ÞXÞÿJ´]‚_*½— TGµpÄœ SÉæªÝø‹SÓn.£šÞÒóɸ6ÁmáòØ‘Éæ|òm «!È$}Âwp!_êm-µîÛS–³:X„žáÑð$Y™ÊA#'[$gåC,Z|6ð½¥—ÙöM+…y.˜‚,y{HÀ\žROztßt ¬,lž{¯&ËÌ1beÉó'IÛ<~5ü3õ«>×.u»É"’ÞÚcˆHÜÊ a‘åÈê ¼OÊzdbÖµu$>Õ¦¶š>R7‡áxbA¹ôÇ#Š¥sàm{‹ëƒqu·ï)¹xæQæG*ƲEÈ8F'O˜à Ӯ|£Î×›n.!†ìÀÒAˆcßU°Ês…ER§*GU'š 5ý3T’Öîî+bmb˨È%[Ì”v î1dèØª×þ-»šò{kI¬ì‚¤R™.-Á6Ûf…%YšÞJÆ08-Àèøq ¦œ,bº»Šc%„›%LË »>W 䂸ô9T·¿ô èæ†i®>Ï'šc…eP°´¬FN3–#¹ dà ×YFñ#b6Èr¯Ü{Sü¨ÿçšß"€3lt«->ÿR¼†V2ê,Ò†p@eEA·ÐaE]¡h¶°?¼±©|¨ÿçšß"£•ZªïAìhÅQ@ah²ƒ¹¸ÏûF©]Øù÷FxîÄyEB»Üt$ÿ ¯¯z’éü›•ç2‚OÍô5™&¤mÚ/6@Á†âÚ¾¤l¸çÛŠjés^Æs”VŒšãB‚ûN¿±½»/í³ZɲFÜÙ°yªßðŠÙÈÑ=æ©}xðÚÏiJb]±J0ùAÆÁ‚}úÔ·p¶½jiiŽ7µŒ阶G#-ÑxR:Ö&¯â+Ëk»9áX€xnÉ“!ÓfK ó‡ ??ZoVZI-§øia)ŽÉu9cÒ‡6©ï ·0o.OR¤g9ÒOx}tñ`ï<–ßj–é£y‡ÎÒBв’;v1郞õS]Öï-tíVÎ[í>ÒæÞ9T]y,žiò•ÂÆ<Ì«€ãœ·Lãž%ƒÄ÷·Z·Ø—O‚ Ï噢o(äàIK’@ÏÌ©ÓøC,[x ÃЋd™>Ô¶ÂA ¾ÄUÞO˨'j’ ÆrNi–ÿô-¢šèDóÚ͆œ1ßhŒFq…ÿ:½¦jíy£ê72Éb’Ú´Š\'îbÚ¹åƒàw#iõUÒ"éæO•ø#?6N,±ñUÕôl$ŽËN‹»‘‘«wˆ¬s·Ïé–Rr~^9“Mø{¢éP¢Ú^]Ç*\Et“ˆ2ÉF piÊAÉ$õægðÿA°Hâ‚[#r4Ñ”­ÁŽVš=ügåw$m#<È›eã{û¨¬IÓmâ{ƒh9‹%’4.Kæw  êHëè …‘ c’Ÿ¥sú7„ô­M=ìæ˜›'±„I"œÆî®Iã–Ê}3ÅmÜüµÚÊO˜œþЩü¨ÿçšß"¢¹%!19ý¡@j Ïøó—ýÚž ¼8´”ž˜  _Oʰ4±4——­©ÅÑ,†8LV®Ù Ç8Àã þ=7Ú-óþµ:Éþ˱2;yÑüîÎwE±$òW=êã+&™‹mÍý晤_\h–QÏsöèa‚Ú|Ä­¼DçIÉÁ铚Ɨâ ñjK.‡um£µŒ·.n­ÆäxÕÎÃÑÌäž»Iž¾]6`ðÛOn²™Òáxw"º•ÁØ…?º;õçšÈÕ´ GXImgJK–µšÑ.M“rG ð äêJ–îô*+CVø5² ôí<\[ßC"i;¸k«ˆç0~áVÓ,¼}¬xŸL]2Ú)´{¶ºHÕp$˜ÅNNæ8weÿ€×C†îa¶Ò`Ú#.’²Ý¦ÊLXM™ÿŽxõúõ¦ÙøYôó`m.´8‡œm¶é²þïÍ9“éýé ¥iñ3G¼š­×–ñE,Ï´’&”nQÉW–Àw¨ôÿÿnëz 6ó[ÛÝÎÂo9 #6¯2aÆA^@äƒZž{ Z^èЬ1,*©a8VE(qöœ>2q»8¥µðÌÖsZKþÍ‹[fÎvå a¹!Wk0 8àP@Zéî.àKCŽ50\;)I]ƒd`¤ çÝÅyºüS¸‘RÓ¡ûd¶é`çaÔKª´¾`ß@k·‡NÕa¾¸¾UÑÖæå%“û>_˜&vŒ}£›§­P_ ²J²­Æ‚/[PR4Éx¸#OøøëúPM—Äa¥¤úõ¼‡Ì›PT¸Wk gs·nr>DëÜŠ³7Ä:ÞgÓ¯ ìÓ àîXÕ™GâE§#µ]o ;Goq¡:BóÉɦÊÀ4Û¼Þ Ç;·¶AãšCá{†Š(Χ¦æ&-†ÚçÌ\€ö­ÁHmÎ0:P9{ñP±±¹)¤÷kªßÆ‘Ê|°--›Ÿ«à€=I®€øòÃθ1ÙO-¤YÄ÷(Ë´ý¥T¡9#çÔ–ÞkK¹®£›ÃÂyÚF’FÒäbK¶çëpq–癄Þ`†} 8¥xdu]6` C,ÿÇÇvŒcÒ€*Çñ#OþÏ´½¸Ó®àŠòÕ®mòQ‹âU‹oƒ¹×¯Ô×/¹:®Ÿck¦:MMì/"–A˜Ø@eXpr0sõjAá¶Ð[‰´ ¼m6›) °f^n=TõâžÓ¼’8É<Ž:Pˆþ ŦA¬C§[Gs{ajnP™•¢eYDm§ ‚ÃŽµpxįˆ®4F°‘ïüØâ†Ý ŽLseÉÁ{Ç­5|€Ü?B"â) ‘1]’>÷P¦ç |ÜÏ4öð“3Hí{¤ù²:3Mö;4²¦Å;þÓ»;xÎyh¤_´Û‹{»«}:îKKHm¦š\¨Ú³ .rH=k¹ò°{W#ÿˆò.¡óôŽê8¢™L•C¤_p`\qj롘,(·Äò€7¼jQIî@$à{dжà (ô#ÿA^8÷)?í7ó5bIŠœ‚Ãþ)Í Ç‡‘Cn3îhý/?·­ã+–!7È>ÎÒ9ÀîOCþM¼[-Úks"‘›0²Æ1Ô Õ‹»;;»+L‚lÁDqŒçøõ¦ÛØÙÛÌdFX¡LE>»@ÏJÒêÆ\®çŸIãýz ­äÞÙ|¦ %”çì¾L¬¡][©c»sA'Ž·µ_ˆqˆÞ*ÚOµÃy µÈž €¼þQRŠAgÀ,ê+rçD¼»ÒI›PÑ_OEEX.B ý£<•gÂ;DÜêºTíz·²±ÓåF P›J\6íÌÔuß#ÒVñnì®.M¤w—3,ß¼Œƒ¹-‘°ýj®¯ñÛO³–â->v„½ÜQ\|¤·Vgù22„E_“Â’ÍÔw:†•8º·[iÚ{;‰Hƒ Y®IÀ,{÷¬Û‡ò^êrÝÝêú\°¹”‹OìÙ%2®×8ƒ’3ž{æ€,ÂÄÓâ¶ûUÝ…ÌŸhº·óò­óÛ«3ü ç#b·<9®Ãâ;Y§ŠÖX<§U"LÀ¨`U‡`àã¡VjøQ’â$sËp¨Úl¤y’pn9ÈfqÁ9\Žùª×ÚRjrÚ½Üò“ …³çxêÊûw.OP#Z¤|1k5·“sq5ÆÉÂÒÙîòþ]˜#nÊöÇÖƒc¨7PoûÅ?h8ˆŽC¥¸?@Mb\x¡`Ô.mWMºe·º†ÖK’ñˆ÷Hb ûø©û¸àóÞ´aX­â´†ÜÍ6À/––ä+(R¡~ïpxÇAۊ̸ðö•s=íĹžêê+—›ìÇxòü¬ m¹Ú|¡Ÿ©  ç^Ó…´—FY<˜ÛÞCü ÿr‚wýÜ æ¤Ó5k}Wí>BN¿fàs,,™e$¤Œ0㨬 CÂÖú”¶óß^$~C0·àÄ…R»pJïb ïøVå„1X½ÈWãšf™PÀß!nXgääó@µNöÆßP„Cr£  #'#Ô©úT¿jû³ß—ÿ >Õ÷fÿ¿/þ""ƪ¨¡UFJ}Aö¨ÿ»7ýùð£íQÿvoûòÿá@Õ{Ÿõ#þº'þ†)~Õ÷fÿ¿/þ÷ñª…“&Dë÷‡r(åCwÿ²}*jŠx̰º#‚h#ZÔEͪ5ÂÀ’+’H'¡^p'¯ëTíõ´MIb{£$^h‡xÉ+ŒN73ê=9®ƒý'ÒÌÕ£@oþØm¡ó·nݹ±»ûÛzgÞ‰IÙ$g(Ê÷Läog»‹GÕd±—R}n9ïXÆÒLÉå—gÊNÐ6lÛ·;qÞ®¾­¬Ýx¦ G¼†Æk‡I%hš‰/”Àª¸±ätÎ+±ÿIô‹ó4fëÒ/ÌÐhqVÚçˆÖÚÖKˆØ¬öV—W2¼‡‘eÞ‹ò7¤|HÜryU»×m¯.nši¤š[{W6Ä─%xÉvAì}y^;OôŸH¿3GúO¤_™  -÷T½¼˜_B°#Eµ~VÝ$£%Š©'j¦päúв­âíü8Óÿ²7B7§îÆwc·JÔÍפ_™£ý'Ò/ÌÐ RËO_7Qº+**"g Ày}¹µÌ´—‡N¾k[»©[9ÓÕ&•¶\tXüÍÈCóqó0è+µÿIô‹ó4fëÒ/ÌÐVÚ}µœÓM yŽ\äœüÌßÍÛó«•n½"üÍé>‘~f€'¢ Íפ_™£7^‘~f€'¢ ÿIô‹ó4fëÒ/ÌÐôTºô‹ó4¤úEùšžŠƒ7^‘~fŒÝzEùšX¿×OþðþB©^Ïöm)å2lÃ}âq›Ö®ÄŽ ³•Ëü¿LT 0¶´2•fˆÂã<·¹šÜOcŸ}l*Fc½™UJmVoZ³{s Íå¤÷]®$;¡kv‘s)?ųž˜ÀÊŒmëéZzmþ¦÷z2ÝË+}¢É$š%„.Ù Åþ^@=AÈÆí–£m¨#µ±…8;âtçþeßkWº\&{Ë+XãóYTµàRãøB‚>iœ/:Ð×'Ä#XˆZýƒû3+æyˆÆ\`>œVˆäÔ#¿‰­ä>\qy@Oô‰'fäe  Ùž [Ö5ë6k8á²G[„yK‰$‹i^¬o‚w¸)æ´­¦¼’æQ41,)MÅøãsš»EPEPEPEPEPEP{_ùkÿ]Z¬U{_ùkÿ]Z¬PEPEPEPEPEPEPEPEPEPEPEPEPXî#E*ÌCn6ŸSNû\?ß?÷É«PµÃýóÿ|š>×÷ÏýòjÅ_ípÿ|ÿß&µÃýóÿ|š±EWû\?ß?÷É£ípÿ|ÿß&¬Q@þ×÷Ïýòhû\?ß?÷É«PµÃýóÿ|š>×÷ÏýòjÅ_ípÿ|ÿß&£žâ7EUbXÈœm?ÞrŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠJ˸{yìžÝ®c÷î9Æ<ŒÖ¥„í¨š¾‡©XÊëE{os‚6I&6žÌ7üóéZRÚÁye½Ö±&1é¦ÙÇpÛ”‘õzè)i[Vû“(»£”:ÿiŽMA¦´HkY|§Œ0È)ž‰Á$zƒWôû=#NÒ³c’Ù­Ø0udUó×(Š«Ï°¹E2Ì›´M14ø¬-ÎYmÑc }N1šn¡ž T’Èd–86ʧª¶å?˜Á÷­Š( {kYÐFšÍÄ1’w$r¡ „³æSÇQƒÉçšÐŠêÂR(§…cE ªpUÚ(·Ûìÿçæ/ûèQöû?ùù‹þúfŠ­öû?ùù‹þú}¾Ïþ~bÿ¾…Y¢€+}¾Ïþ~bÿ¾…o³ÿŸ˜¿ï¡Vh  ßo³ÿŸ˜¿ï¡GÛìÿçæ/ûèUš(·Ûìÿçæ/ûèQöû?ùù‹þúfŠ­öû?ùù‹þú}¾Ïþ~bÿ¾…Y¢€*Ú2ºJèÁ”ÈÄr Z¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-12.jpg0000644000175000017500000010642311625126536030015 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ[X"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?õ-@²½ðÞ•u2I$ÓÙÃ$®÷2åOÍÜšÑÿ„[Nÿžÿ%ÿâª_ ÈŸ¢ׄú-k^€0ÿáÓ¿çÿÀ‰øª?áÓ¿çÿÀ‰øªÜ¢ÀÃÿ„[Nÿžÿ%ÿâ¨ÿ„[Nÿžÿ%ÿâ«rŠ.ü"Úwüð?ø/ÿGü"Úwüð?ø/ÿ[”Qp0ÿáÓ¿çÿÀ‰øª?áÓ¿çÿÀ‰øªÜ¢‹‡ÿ¶ÿ<þKÿÅRÂ-§ÏÿÿñU»E”¾Ó´=>B—HA#4Ä*“€IÝÍéº3ÜC ´¹¦b±™u B–Æwz)?…PñÓÇ‹¨dŽ9Z[HÂDòˆ÷!9žÜ›O½Ž}KLˆ_ÃpÂì²¢4yEò&LžçZ8èš_ÕŒyõµË3ØxrÚìÚM4Ip|£u.7u SƒW¿áÓˆÏð"_þ*³õßê×÷7ͦ4bê'I%r~û0”âÚTvüàîÂŽ¸ÅR¿ðåýšÀÑʾtò]B­+ý¥^éd‰DbB¦àp2F ’k;›ñè:<·3ÛF›¦ƒo˜¿h›åÜ2?Š¢¶Ò´ˉ-íÈ–X‹+…¸›‚§k îÆAâ¹ø|­]éñJΰù‘Ö¦äÆÊppK˜ß ¹Àã#9È#{Þ6˜R¦ûC_Íq,mtÞL±¼®áJ²²)ù•îÎJ‘ß4\ ¼;¤ÛÄÒ΋kË;ÝJ }Ijü"Úwüð?ø/ÿ\ÝÇ‚µ«’É,ÖÙ|ŸÞN]¤Äi´H| X‡O¾OL€äOámbi£‰œvi#>Èî•{˜%dÆÀUŽDó‘‚p\ ;½E°‰e»Û lëi.¥³ª>÷RH¶ú‹v÷ o¶V·“ʘ%Ô§Ë|Ú~nƱ›Á7óÜ\Gs,RÙËq¸©Ÿáóƒ…(#A±IvÀàm†ßx+WK+«m6êÜù’¼Éq<›fóL1(”°€bé#¡OÌeäQp6ÿ°´cm%À ÐÇ»{­Ô¬ÒCtn ‚¸5$^Òç…&Ž"Ѻ†VûD܃Èþ*Æ‹ÂZ…¼— ®˜ÐÉ$þRùîžNùYÄ Á}¬¨Ga°Ä.|«y^MµÔin¹1áÌQ§˜Äø`ÈÄ3óîÜA.ÅÖ‘¡Y3-Ó$%ayÈ{©Gî×›ït—>™¢¡6žŒn`ÚòÉ ÿ¦KÌ‘†.¿{ª„lúb ºð–¡4P”k?>Þö}E]Ë4¦bñFä¯ì88É)íæ3àYFnX¾Ö÷R8.v”L2>\î!  ž1Ç}ÅÀÙ‹Ãz\Ñ$±Å¾7PÊÂæ\yïSÿáÓ¿çÿÀ‰øª¹¢Å{o¥Ám} ¼rCÆ<‰š@À(ÉEÇ9ãëZ\ ?øE´ïùàð"_þ*øE´ïùàð"_þ*·(¢àaÿÂ-§ÏÿÿñTÂ-§ÏÿÿñU¹Eþm;þxü—ÿŠ£þm;þxü—ÿŠ­Ê(¸ð‹ißóÀÿàD¿üUð‹ißóÀÿàD¿üUnQEÀÃÿ„[Nÿžÿ%ÿâ¨ÿ„[Nÿžÿ%ÿâ«rŠ.ž|CÒ Ò|«_Y­îaD1ËÌ¡”ùŠ8ù½ ¯CÆüWÿ’c­¹þŒJì©QEQEQEQE×eE,ìG$“€+“ðׇ-.<-¤M{Á»’ÊœË<¡Ì†5-»æëœæµîlÛRºŠtsöt`f8p:•¦{ÿ8üKxÃìNIÓmÉ'þ¹­/ü"ÚWüñ“ÿ%ÿâ¨ÿ„[Jÿž2àD¿üUmQ@¿ð‹i_óÆOü—ÿŠ£þm+þxÉÿÿñUµEbÿÂ-¥Ï?ð"_þ*°£þšé-£ÓîšiȈo0Ì€‘»^™SùWo^jãTµ&6†8mš'™Q–Uo3;~éùx?¼yõÒ éés9ÊÍkc¡¶Òôiá»’KK‹qhØ”=ö>@ù\äa…%…—†µ(žKc(T0™ç…†à ü®AÁƒÐóéSèðµíŽ®ŠÎì#Y$S󣯄òyò5›qàYßL›O‡PÈ› ÿhˆÊ弓ùËnÚ>V92çiD·*:£cþÍçùOÈ2ßé2|£ßç㡨çÐô+kwž\¬h!?h”üª2H²qíX×~ ’t¸ˆ­ÍÄrI$ˆ.n \C(¹ÔDžütÁŽ×À×3Û¬÷ oò#æ2­þŽKJ@M’mÆ%Á_˜›–‘FÍž‘¡_D%Š•V;WÏ7–8ÏÈ'JYtA$1ÈáZy Q´Éó8RÄ}þ¸Õk¿[Ëqe%°·‰ ˆFñùlªX27˜»pß ëœá»Í[oÜEr³Í{m3‰#fÿEÚls#Â’%`6ŽôµÿæÇÊyÆ?Òdç=?ÜUK;Ãv"Îìž]¼—,LÓ#B¶wcŒŒŽ¼Š«mà‰C£]ÞÂì˜Q¡ƒk'îV%u%Žm'>øí’Øü ¶ÒÄbu3ù1¾ÙáØ©$d3œo:qš½6—áø"†GYq,±Ä6C9†²½{ô«'Ú0ÆPŒúLOA÷ë*oÏs}u<×ñbywm%|Òàd·8ä䜓PMà;‹¡ºêòÖf(c1ù2,d£wË ;‡•ëшã­hÞéþÓ™E܆Ûþfžm£b—`Nì´ƒÉ㡪¹ðˆ,­,¨ëq«Fíp®%”‹´œò®00ÙÆÓ„Ï2ÜÀú„1ZÍ7ÚCoó,ªÎêÛ˜’F÷ T’2˜ ¬Éà帹’úy£û{ÝCqæ"€#ÄÅvç“û·õFõ9³c¡èzŒ¶‰$–ó ’7ó¦]ÊFAÁlƧÿ„[Jÿž2àD¿üUIáí:ïHÒ-´ë™ ™-¡H£xЩ!F2A'Û¥kP/ü"ÚWüñ“ÿ%ÿâ¨ÿ„[Jÿž2àD¿üUmQ@¿ð‹i_óÆOü—ÿŠ£þm+þxÉÿÿñUµEqþ#Ñ­4» K«14S.§`–âOº×q+[$èh­ÿÈ×þÂÚoþ–ÃE7ÃQê áMÁsl‘ý‚ß öìÄ~í{‡ʵ<­Wþlÿð¿øåVð§ü‰ú'ýxAÿ¢Öµè•ªÿÏíŸþ7ÿ£ÊÕçöÏÿÿŽUêÄñAÆ™”âÉ®^œày9ç?ìçh>ÄöÍ&ì&ì®KÅÕÓ:ÛêÚdÌŸ|Gb¿\KÅNcÕßY ð?ÑŸü‰\]»].¥›•)¹‹ìÉU y„J ¯ÞO(ƒžŸˆ­_ØjÒkVºŽ–$imm%Tù#eVi" Wr“¿ËÞF:í Œ®(˘è<­Wþlÿð¿øåV«ÿ?¶øßür¸ùÅ—bÖÔ=îÉmåI¥òãŒ8e˜+cʺŸ+¸Îs° ÔŸkñV«ÿ?¶øßür+UÿŸÛ?üoþ9W¨  >V«ÿ?¶øßür+UÿŸÛ?üoþ9W¨  >V«ÿ?¶øßür+UÿŸÛ?üoþ9W¨  >V«ÿ?¶øÿür+UÿŸÛ?üþ9X¾)Ü·P[iuäÍ ‘Ȱ„Q–à1vFÆÑÎ2™ìIâ³ÁsÿAkÏûâþ7\¢i^'pÊf½ˆ—D¹sxšÌ$If‡“±T::©Ç1”Htÿ½ö—4óÉ´Nå`l…!ðIj.ÆŒ6É‚XíÏ5e$aºŠÖ_L—óL`ÿA³&§ûÏý¯?ïˆøÝqRøw[7– Ñ]Í#ZØyòÉ4RGçE+HþirdÀ$ðNAÀ«6ö~)¶$ÞÈ@T–¼Vi&1ʲL¤¶EÚ"#I½Yö Ÿú ^ßÿñºdVÒN…áÖ®¤PÌ„ „€ÊJ°ûAB s’é~"E3$·’;‚³Æ·˜-hŽØòÀ+•Ã-Ë£m£øšÖæÑ-`ž dšæF-t\•’y›ûÝ¥¶´g%\õùØËm%¼O,ÚÕÔq ,Îâz’SŠXíeš$–-féãp]D$0=>_"¹kÍ?Xd»Òã{«¨Î˜g‘}Ì÷ÅååÈ]ŒrØÎNÀŠž]3ÄKqf×PI 1¤/r6ÇÙ Ea*Ÿ˜A'ªž@:¶‘¥x—Zº2 r ôÈÙÆp*Vµ•õ›µ.v¨"¸àœÝòp ü+˜ûµo$—6}ú,±,B¯Qæ$ v‘²2Ÿ¼OÁsÿAkÏûâþ7GØ.è-yÿ|CÿÆë•û‹¥Õ4Û¹åxã’D–x`}ËÞw)ýê†=‹÷dçs¤ä÷Gì?ô¼ÿ¾!ÿãtÃk(•b:ÕБ”²¡ä€H_A‘ùŠÑ®gÄú~£wg6ŸÉ‘-§‰%†àD!•š"Žù`YÆ%pÙÆ šØûÏý¯?ïˆøÝ1-¤‘äDÖ®™£m®BJœƒòppAú\ÉÓüCæLdQx<ÌÝÇðu÷°mÎñä¨ÊdnL€G©jؾ-ŠâÎ<Ë„’áá`YœAn›ÏïcAIA0èvŒv¿`¹ÿ µçýñÿ£ì?ô¼ÿ¾!ÿãuÊÚi>"¹½ošîÞÊYĆ8¯Jü“†Úþk6ÝÆ1°p>Eù…uÚoÚÿ²í>ßÿžJyøÇúÍ£wN:ç¥Gö Ÿú ^ßÿñº>ÁsÿAkÏûâþ7W¨  ?`¹ÿ µçýñÿ£ì?ô¼ÿ¾!ÿãuzŠå•Â^xòåm!´¶K¹-ç$ÞLг<.O“ÐÃ' c›SxÝ­meóa´–ê'eÙÖVE[3q½NÜí$Î=OµQGa¸ÿwõ¤9$ÈÎk‰Õüa¨£êš|V‚ í§Ÿ ÄlâMŠÿ*H<6#¯$c¢·Šu=%­´ëÈÄ׳:€.VxÒWdˆ¿–¾[Êrô=@;PHÀÒå¿»ú× x“R¹¹´ûRÚÍ ãÅ’ò#v·2ü£gÌÓžx-íÏg@ Ëwõ£-ýßÖE7-ýßÖŒ·÷ZuÜ·÷Z2ßÝýiÔPrßÝýhËwõ§Q@ Ëwõ£ssõ§Q@ ÜÿÜýhÜÿÜýkñ?‰'ѦŽÚÞ( Í •’IË'DUXò{œ1œÖ|ž/½‹Hké!¶u€ášÚçrÌßgó»§ÝÇsŸÔ±a¼©h”•9RqÁö¥Üãø?Zä/Šfé?çŸþ=Fé?çŸþ=O¢€ºOùçÿQºOùçÿSè n“þyÿãÔn“þyÿãÔú(ŠøªÌ~ë{“ËœÿÓT®Ö¸ßŠÿòLu¯÷#ÿщ]•QEQEZWyä0BÅ@âIðûåK4¯$†Þ‡þ7ë°§çõ–(’ ÂóùÐÇÅ¢(UQ€juPX~ ÿ‘Ãÿö ¶ÿÑK[•‡àÏù|=ÿ`Ûoý´²Ñ«ÅˆèOjw>ƒó¯8ÍÌ–7W6‚ê{‰ \¼ˆå ýéFH˜«1€x]§+“’Mtvڭ心ü>Ks"¬’ÞlI)Q!Ç\ÆduÎjT®ÈŒ®ìtŸ7 üé>oAùÿõ«ÿ„ºîkûxíå°1Ëp©f6i.c7/hÈnÈ¢MØ#ž#0xïXm&Þî1§L“%»µÚ&Ø-Ýãvh\¼Ê7ª3¸cÌQ´œ¢ÏEËz/ýõÿÖ£çôŸÿZ¼ïÄ:¶©q¼“^A§‡k”…~Ó-¶$@e—&VÏDÛƒƒÁà ñ}úNLñÃHTÏ ÑšÎ14h^f ´Fy SËb;OŸÐ~ýj2ÞƒþúÿëW!ÿ >¬× 4VÐKh’ò–Ë—WkÀâ4<©ÎãÓŠÅêV—÷Éuo}#KæF#¼–T¢Mò­’G‰*çgÊÀzOÍè??þµoAÿ}õ«—mwXŠ{ex­o®æµ· ƒ$„ ß1Ü<¤•ÿ‡îc¸¬½]¿KUû ñÞYÇtªÏ3<òH²^I !~6¨B2ß ¼ùýýõÿÖ£-è?ï¯þµp±øšõ¥Óõ®­Ù<‡û\Q£¤v™šÐ2Ë–?½:òj_5}þø?áO¢€毣ÿßü(óWÑÿïƒþú(žjú?ýðÂ5}þø?áO¢€毣ÿßü(óWÑÿïƒþú(žjú?ýðÂ5}þø?áO¢€毣ÿßü)<ôô“þý·øT”PvhD‘¢bé¬abW=pqÅ1RÑ#òÖßjt@@ü±T5]{û'SŠ)mä{SnóM,kŸ%U”l‘ò€Ù8ÉïŒP/‹¬äذÚ^Ë,ÛZÚ5ssa"ÀÄn~b§Ç̹»§éú‘‹íQ\0‹íC*+0wÀaŽ0sÆGBE^ûBá—þý7øW.¾?Ò’í!¸¸Œ-Ì궬¬ªZ&HÙ\†`NL€aA>؉ǎ4ç‚wŽ ™^ Z9"„Ç#.Ô.X•r màÜc „ÝF?†oûòÿáIö¸ÿ»7ýùð©QÖHÕÔåX¨§Pkû³ß—ÿ >×÷fÿ¿/þ=Úãþìß÷åÿµÇýÙ¿ïËÿ…OEAö¸ÿ»7ýùð£íqÿvoûòÿáSÑ@}®?îÍÿ~_ü(û\Ý›þü¿øTôPkû³ß—ÿ >×÷fÿ¿/þ=Ä|S%øg­ª‰òã?4l£ýjw"»zã~+ÿÉ1Ö¿ÜÿF%vTQEUy¥bþD8óHÉ$d õ?Ðw¥žb¬!ˆ™†@=xû:|0¬)€K19f=Xúš!… bgÔ“É'¹>õ%PEPX~ ÿ‘Ãÿö ¶ÿÑK[•‡àßù|=ÿ`Ûoý´bçAÓ.®$š[f )Ì¢9]^1óªŽ>`xã¥hF‰kq„DUTÅO®ÞÏ-œÿmž¼qåGn¨V$gÙ2’Äœó(êHçaµ‹©<)-ú¬iy ¼/”óS𒤌ö"¥5r#$Þ†àŠ1p×?Þ²/ܨ$úŸÎ’Þ­-¢¶·‡Ë†$Æ‹Œ*€á\áñ¤Aca¦]·ž‚[P ftd‘“7ÊXÇ´Ž]=ÀrxÒÚk«Xm´ûû•¸eÄÛ³„F`Û»vsŒcè t»÷ôÿ7î7éþ5ÄOâýVKë)­l–-6H,î&ócWhÒyY2Ì$ùW#j¿?{´­üe ÒDaqšqæCº&I[‚pH‰†;d~.ãýÆý?ÆÇûúsmãÕ€:uÎ$ù !“÷²nvýî9•y>íš¶~3)åÅ{k#K%ÕÌLbÁ…ždŒ>3ŒˆˆÜz‘ÆyÀRðÅ$ÑLðn’,ùlqòä`ãŸN*]ÇûúbÙx‘nï`³k9¡¸˜,¢6e%ad,$8$c+°ã8b;Öå7qþã~ŸãFãýÆý?ÆE7yþã~ŸãI¼ÿÏ6üÇøÓè o?óÍ¿1þ4ooùäÿ˜ÿ}cë~ ‡D–Õ$†I¼÷„\².å]åzí×' õÎÔóþy?æ?Æ1¿ç“þcükÿ„ÊÞ2Ïug=´ †i¨CæÇ‘–‹n:üéê@ƒþ-N CËÔak3Æ¶ÖæÔ¹ei#R|á&ÒFó•!Hê7Ëu>cÏ'üÇøÑæ7üòÌs#Æ«†wÒ®Ò1\o/ù\¡Àl䘘c·õ8ŽïÆMkv<눖-ñÉnI#ÈL-» ëçŒ\õÀ$ªóþy?æ?Æ1¿ç“þcük–MoZ¼Õ¬¾Ì‰µÍ­ÅÏØîl.…âB›Œ€ ÅÉ W´â¥[˜>Óocsqj!{ƒ2D‹;`œ’<Ü`s”aé“Ìoùäÿ˜ÿ<ÆÿžOùñ¬Äqk“Ü$6W°Å ó@ÉË’2¬FÝÎ=O¨TÎxÅ‹h¶ £/üMtÞN?çöz)Þ3ÿ%¯ý…´ßý-†ŠµáOùôOúðƒÿE­kÖG…?äOÑ?ëÂýµ¯@RÔôõÔmD^cE*8’TcqÐàõô#¸$UÚ«¨_C§Ú™æ Ã!Qe݉ÀUÉ41;[Sǯ ÚI;Û¤Hêæ;3÷…[rƒ½ˆ æ¹õ9Û»Ò­/n¡º”L³C÷^䈑œím„n\ÿ d{Vm§ˆÄ·B›XâVE¾+…˜Fç8WIÆQž3ë­s}ce$Ý][Àó¾ÈVYLè õ>¦6è(Û¡B? hð˜Úyad`Á¢¸• 8PrCAØ»Èb ¶H¤o è€m Mž_&Ãû³JîÁmŒWv3Œ ð1xê{¡Tš<Ü+"ýÒ¬ÁºòF鞇°$WƒÄ-Ííµ¾¥g4÷Q´°,s+yª§ WœzzCTQ~Òâhéd·ù‚ömîxûí¿.>QÃ+b›±º?*6'÷ò QMòÓû‹ùQå§÷ò QMòÓû‹ùQå§÷ò QMòÓû‹ùQå§÷ò QMòÓû‹ùQå§÷ò QMòÓû‹ùQå§÷ò QMòÓû‹ùQå§÷ò  7Ú-†¥s ÅÔR<Œ.ÙŒƒ†U 8ÊŽÅUÿ„SGÃm·™°etº•Z,c`Ù@vT…ÃŽjÍÖ§§YêVö7/ 2Ü©1 ¨s6ŒžX–‡Õ´X¢¸–MBÁ#¶“ÉÚd'鵎~Vö<ÐCÃZRM±[¼ ¼ÒD¤U B° ˜EWŽi–þÑí¡ò£¶}› xyä|)R»Af8X€;•2êúYº{ie‚ Vçìȳ2©–MŠøAŸ›†ýi?¶´ln´ôß!d1|ôÚu\çäqÖ€4£EŠ5@zN¦y1ùfŸ÷ȣɋþy'ýò(ôS<˜¿ç’ß"&/ùäŸ÷È ÑLòbÿžIÿ|Š<˜¿ç’ß"€E3É‹þy'ýò(òbÿžIÿ|Š}Ï&/ùäŸ÷ȣɋþy'ýò(ôS<˜¿ç’ß"&/ùäŸ÷È Câ¿ü“kýÈÿôbWe\WÅXÑ>keQTùqò?åªWk@C<Æ=©ï•þêÿSì)gœB ß#"÷ø{ÒA s»o•þócô€PÁ„NéåÜŽXÿ‡µKEQEQEVƒ?äEðÿýƒm¿ôRÖåaø7þD_ÿØ6ÛÿE-Asá[y'- ÂÅf`o†-Ä–òÙ†TIÇ ÇV´:u”:rXÕ­•vì“æÝÎrÙêIäžæ±&ñDÆh¼v©ò¶ûC¸iðÛs•RÂ’yÈ=ñZðk6²hë©HL1}Ù‚Lnc)ÇpÙSî*U¯¡å¾€š6“JÉaf­,«<„D ´ŠÛ•C|Àú’{Ò6£±·-§ÙnæHI‰vÅ·¼pK|ßQžµž#Òâ¹Kv¸o1åò†!r¡‹˜Àf …Ë‚ ’8õø¿E{a:ÜÊP„eÖ]•Õvîd!XàÕZmFyí§k 3-²"@æ5Ìj§*ÐÈôíL>ÐL/ ÒôóÉæ2°Fqޏ,>„úÖ^µã‹-1àògQæye0¡Ø2U©ç°‰©ÿ .–.M»\”2¦6ÁfuhlmbÕ[i;IÅM.•¤Í Š[;GŒ‚ ´jF3ùí_ÈzTK èI$nºe‚¼YØD( 噎8ã–cÿ>¦“þ]$]‹ctD›Š’b}ŠCº|Ï«–ÔdŒ‘Ær3R߯tÑÝÜ:ÜGgo*Æ'6Òà‚˰Ùò ï·Ëœâ€4ãÓìâÔ…òí­ºÛ ùq$…ã<ü¹ç*ôç7<Äþúþu˜b‚ü¹äZ´ß1?¾¿b}:uß1?¾¿'›üô_ΟE3Íþz/çTï,4½BX¤½¶´¸xy¥EbœƒÆzrúéWêö©k¦˜~ÔÒ"Ìâ5u…Ý’ÜÊA’9bV»Òt«¸,¢ïŽÀ£pŽO0)Èû»»{špÒ´Uº’élì…Ĥ3Ê#]ÌCÉ?ï*Ÿ¨µ2ßĺMÌþLwG~ýƒ|N€œ;pY@#IÈã*FsTm|_åäÑD¬q´j<ÙöÌw²ª³E·r«oIëßhæ€4.4½*{Ymü»xÖHD£ P ¦ÝíLšlz.…·Ù–ÆÀBCžR`îÛœŒwÚ¿÷Èô x»EwÚ.œ|»òÖòªíÚX6Jã+`ô%X @oü%º{\"¡sÙ<Çh]LxQ]Ì[Í]¸äc9¡og¦Zy?g†Ö/!8¶ˆ, %TŸRgÅá½ ‘"ŸìK ÎÀ¼Ž²4„cï—MÙ'Ž˜…üO1Ô ŽÞÎ lf‚[´4î²,q2, Åå’L˜ÙœåH;OroèöòˆÞï$òLq;ª®‹3*ª±’Ä€ šµke¥Ù\Oqk¬3\6é^5U.rNIy$ýI=êןüõOûèU[bÇQ¸ž Y‹É7f6PFHÊ’uÈ#rädu«ÔÎxÆHßEµ êÇûWMàÿËì4Sügÿ K_û i¿ú[ gŸò'èŸõáþ‹Z×®wÃqê áMÁul‘ý‚ß öìÄ~í{‡ʵ<­Wþlÿðÿøå^¬ÝfÆkÛhاÚm§[ˆ–C…fIàO=¸úTžV«ÿ?¶øÿüršé©¢åïìTz›VûR†®&®ŽbÃÃ÷æýŒM RËÜIpcÜÂ9<Å ±›'vA'oã"¶u½êòö;Û9ãWÄqË‘îÞ‹(•²6NF8VÃßjzy'€³ñÚ—ÊÕçöÏÿÿŽRQ°£¶9×ð žÜÛ\jNmÖmŠ-ޱî#mÇ/‹ƒ–À`àf¯é¹ÒîbœßÇ+~÷íŽV2î ´†’W`FÅä–ÈàÆ4ü­WþlÿðÿøåV«ÿ?¶øÿür™Eê*•ªÿÏí—þ7ÿ£ÊÕçöÏÿÿŽPê*•ªÿÏíŸþ7ÿ£ÊÕçöËÿÿŽPê*•ªÿÏí—þ7ÿ£ÊÕçöÏÿÿŽPê*•ªÿÏíŸþ?ÿ£ÊÕçöÏÿÿŽPê*•ªÿÏíŸþ?ÿ£ÊÕçöÏÿÿŽPê*•ªÿÏíŸþ7ÿ£ÊÕçöËÿÿŽPê*•ªÿÏí—þ7ÿ£ÊÕçöÏÿÿŽP-k@“W»ŽEºHb0=´èaÞÏ2“±· òŽp0 gEàéíå·ž J!=Ž+2ö›•bE‘oÛ?Ì óŽ>ðmï+UÿŸÛ/üoþ9G•ªÿÏíŸþ7ÿ h|?†)íZ B_*- r>hÑcPÇP[1– ¼ýÚ’ÛÁ‘Íö½VK©eWV’Df<ÆÑççv#†Éœàq]•ªÿÏíŸþ?ÿ£ÊÕçöËÿÿŽP¨"òmã‹;¶(\úàb¤ª>V«ÿ?¶øßür+UÿŸÛ/üoþ9@¨ª>V«ÿ?¶øßür+UÿŸÛ/üoþ9@¨ª>V«ÿ?¶øßür+UÿŸÛ?üoþ9@¨ª>V«ÿ?¶_øßür+UÿŸÛ/üoþ9@¨ª>V«ÿ?¶øÿür+UÿŸÛ?üþ9@¨ª>V«ÿ?¶øÿür+UÿŸÛ?üþ9@ßÅù&:×û‘ÿèÄ®¶i„)’ 18UXú ã~"ÙjW~ÕmÞöÇkªZ#H¤’ÆBÐô®Â([Ì3Kƒ!áGd_AýMBÊÆYHi˜`‘ÑG öþu=PEPEPEPX~ ÿ‘Ãÿö ¶ÿÑK[•ÆéºŒ´½.ÓO·ñŒ`µ Œ¾“!;UBŒŸ?®%Ç…ï–X£c–sþŒípc1€ÛÐ2ìmÅOpF@Ï5¹…ü#í¥Ï+¿›½å•>Rdv.ξŸ9$@àVwöÿèaÑ?ðQ'ÿ$QýŸãútOüIÿÉ*)¢“¹,^D½YP»x¤Ž„®gLóeÈ^›Ø.ÑÆWŠ¥Ãût‹;}Fæ[›Ëx¡n^(›`J…Td(Wç¼¥¾n¹?³üqÿC‰ÿ‚‰?ù"ìÿÐâà¢OþHª(¹7† xá[{ÛËCJw@S,²Y~e8FÇ¡_éÑ¡Žnb…ú4H˶ռźd’èóî` ìÿÐâà¢OþH£û?Çô0èŸø(“ÿ’(Øð–œmæ‚Vžd•¥Þãç"g›œí#gÛ¨ÞxMÔ-žÛ»Û“&íòLcf`Ѭ}Ó€«†0 üß3eÿÙþ8ÿ¡‡DÿÁDŸü‘GöŽ?èaÑ?ðQ'ÿ$PÙü;—Zs†>]¥Ü×l 9vrÍ´ÿ²ƒà÷=3[uËÿgøãþ†ÿòEÙþ8ÿ¡‡DÿÁDŸü‘@EËÿgøãþ†ÿòEÙþ8ÿ¡‡DÿÁDŸü‘@EËÿgøãþ†ÿòEÙþ8ÿ¡‡DÿÁDŸü‘@Ebë~±×îm'¼i7Z’P.ÒÌ­üJpAE9\ÙÁÅQþÏñÇý :'þ $ÿäŠ?³üqÿC‰ÿ‚‰?ù"€&Ô|%iyfÖèò'’ŽYú´”ÈÀc$3/Ðþvn<7æ ·wW—syn™“l'z¹Û…ÜA(¿xœ*‡öŽ?èaÑ?ðQ'ÿ$QýŸãútOüIÿÉbç–c40É*»ZGl…› Ä› ãÖVϯÉ|§ÝÛº_Mqw,™g–m„–ÌeNÝ»~_&< ¸8;ƒdæ/ìÿÐâà¢OþH£û?Çô0èŸø(“ÿ’(NÃ@µÓšÅâg-g¶ñü¨€¬ŒŒÄª(Psôx¬x<‰m§Ú½Ü‹m¼ñ\Å18•ãc, €›Fm¡Fx©³üqÿC‰ÿ‚‰?ù"ìÿÐâà¢OþH  ÃV ÅÔ¶K´\”òã9'•C7$ýòÄvÅlW/ýŸãútOüIÿÉgøãþ†ÿòEXñŸü-ì-¦ÿél4U ÅZ‘¶‡Q×´§´ŽîÞæDƒLtvò¥I@ f d Á¢€6<)ÿ"~‰ÿ^èµ­zÈð§ü‰ú'ýxAÿ¢Öµè²]ù*Ç­å¾Æ#hÀ=ϽQÕdó%Óc–Ý‚µØI´ƒò?¡5kOÿY{ÿ_'ÿAZ–îÊÚú!Õ¼sÆpW\€}iÅÙŠJëC†ÑäÖ$û[ë¦"—vêˆlÖ5Cöœ|ŽÜ íþ÷ûÜàtšåæ¥k9kE ŽÖICoæ3I•  %°'ÐÛ]JI×N· ŒNÁÁ ýAÖŽO÷M]I)= „ZÜâ¬u_MoóBá¢x¢û+þø5Ô‘1%•HÄA«ŽN |Iâc` ª<³â6ŸÍ±š3Œ¬Å,Nå73´ü¼nÉ ^‰“ýÓU¬¬,ôØL66PZÄX¹H#TRÇ©Àî}k2Î%àñ›¡«Û ’Y®¤Ë1OæE“ïŽdÜ0]°ð' Ç{¬x¦ê?!a»€µ¯ï¥·´—åq™¾-ÑrAL1 žtcèY?Ý?¥›û§ô =u­uÙ-¢‚èȬû¥—Op6á¶pŸ)݈‚@*@¨×Þ&šïPŽæzyiâÅ/™8ŠUÚˆ„le‹vT;rà ¸ w{÷[ô£qþë~”ÁOy¯D-íRÚõ–î '¹ °C(‘‚+8d;—tlñ<º×ˆ-¬ZÚÒÂw¸‚#Ÿ2ÖP¡w‡ۘ#Hp¡ŽWî’®Ûqþë~”n?ÜoÒ€9-W×n5k¯âÃ$•i*ª°/ó;Is…AÆIù1†}7qþë~”n?ÝoÒ€E7qþë~”n?ÝoÒ€0¼EW—†áš4’&ÔÉdq•%m§a}=µføVk«Yåûlz¦d‚Þ9¼øfe7Ÿ½3È8^æ»û éîì­oÒ4¼²ŠácJ‹4já\taž„v5cstþ”Ή ¿ñ0à¿’ÒïMù⸵˜@A`@`ë±X‚r§ ØŽ*ÿ†?äSÑ¿ëÆýµ~â®íä·¸·Y •JIŠ]OPAàŠ!- Ž-ÄPÆ¡4UT èí@ŸŒíõ)u I, ºx¢µ•¤–ÞI¡>d_:"ñ#…ÞB¸# Ê”‡Uñ æ·sh‘ÜÛٵǖ“ÉhÛ£PdŒ \¨AËõÉë¶» íÿ<Ûôÿ7·üóoÓüh—ľ%Hácjé}$+åZ=”‹¬l̤—Á!„¡—Ëv§ ÒÙÁâ gR´¼¹Ú¦Ö&p²Ãp¢\H Œ‘W `’„t8ÆAíE• ¿kña¼dòÍÀ<Âvîëj±½¿ç›~Ÿã@z⻸LŒ)‚rA*:sÍçM&ܶ­tXÞÛQ!wòñ&ç’¼íÍu/ge$b7¶lL`´åxöÇbd¸“ì¶ûîWlíåŒÊ1Œ1ÇÌ1Ç4Åj2¿´Òš#‹©ìçfùƒÚÈa–xєǰ•EïgŒ•ÁÍj_øÌYÆ¢;5šg’x–11á’å \íR@bùèqŒ`“]––SLf–Ú”§–]£¶óòçӓǹ¦½•„†rö¶ìgLL@ù€€n9àÏ   mÅêzªÙO`¶›à2.éY™˜Ü ·~9`üg`5ÒUXlìm¥ó`¶·ŠO-cßaNÁÑrAØUëê(ÔSw¯¨£zúŠÈ×gºKÝ ÞÞêKuºÔ s4j¤²&“oÌ(¹Ç8î+;ÂúÝÅô¬/o#“δ¶º B¯“$¦PÑ ¾XÀ9lîÉèåý…¶¢Ö,’#ÚN'‰¢r¤6Ö_Äv{Ô«kd…ŠÛÀ¥¤ó˜ˆÀËãûXïÖ€3žææç]kHïÑm'°2ÂÐ"ïFÜðÇpnÇËŽ9Îx³áùæ»ðæ—sq!–y­"’I³œ'ÐJúVœ[ÌŽÚ'ù)<1ªÉc+c §²··Óì-ì 'É·‰bMÍ“µ@'¿€0õéõ&ñ™eesu 2C,³}œÀ ÚñŸ5Œ3p¸5§‹æ—P³¶¹Óá‚;§M’­Ñm¨ÑÎÁ˜9ƒÏñƒž0wo,tÝA¢kÛK[–ˆæ34Jå28è?*{ÛØÊ…$‚C·åd|§rþG‘èh‘O^Mgö¨´{s¶óù¾!¸·ŠvòñÂÊ@9ä¨èCS_Õ¬dº½nîã–úk+HY¢Y]Gú¸Ì£åŒŒÙ'§#ˆ‚È.Ñ qŒlÆãò}¢Xl§¶’Úha’ 3¾'@U²rr:žh¾ñíÏÙæKk±´Êe™ÀŠe‰edÝíÀW*Ìzd ñ§'‹e‹Ê…¬ 7)…¢[®„ðÃ×fHÌÀçhà9ãoìzhrÿeµ È#'Ê\•€½:`‘z"²Ó 9†ÒÖ3…\¤J8\mÛF=0=(–>1¼žIŸì"ÖÞÊfûDÌåÇÂ)òYrÎ “œíÎ 7>1½‚Åb4·vóOÃp{mÉ4°©_,¡!#åóœðEv&ÛO3O)··ógP“?–3"Œ1Ç#oa,Âi ·yByaÚ0X/÷séí@í×ÊÝsj³LL‘„òYgŠ ”Æ0Ȫ÷0»’¿fN“È2$“;¸i’bÀ!q‚VL7 šêM®žÏ3{rÓ®ÙIŒfA€0Ür0çÐSRÇK‰Ñã³´FDXÑ–%UH!G@ zŠå-uÍzòH$ƒn a%°OØåyãÔˆŠlRXö´|¬ÝëdÓ_N²J¦ßi ‡´‚Vàµ#ƺÑ»:,jí÷˜(ýj¼z~• Ø»ŠÊÑ.B„,*(v3Œ1@è¦yÑÿ|QçGýñ@¢™çGýñG÷År±sð÷Y·Ü"Ê óeÊ ýâõ5Õ›‡m1ÿ¾ƹ/в#|2Ö°'ËÿF¥v”_íÿϤߚñT¾tÝ­_ñuÿžŠƒÌ¹=-×ñ“ÿ­I¾ïþxCÿÿV( 7]Ÿùeÿ¶„ÿì´¥Ÿùà?3SÑ@m»ÿž°ûdOþÍI²ï¼ÐþŸþ*¬Q@/a|ú‰™nDi’£ïÀz~u„[Áz"lC§[•Lçhò׌÷­ªåü©ÛÇà;²WN·m¤¬?Õ¯B€:Š*öµ·üó¼ÿÀ)¿øš?µ­¿ççþMÿÄÐêÊñü‚Õrv½Ý²0ª™ã~ ‘Sÿk[Ï;Ïü›ÿ‰ªº…Ŧ¡hmßûB/$WŽÊ]ÊÈÁ”Œ¡Tuœ]šb’ºhåô9#¹Y⹉.ɺ™â(€DU)+ßëƒó½j\ZøsÃN·‚<±$òKsä+/Ùäl4˜%~eSÓ“Þ¤ƒH°µV[{ÍZ Ì\ìÒeø÷ëÀ­Ë[ë;KHm¢ŽûË…5ÍœÄà àö«›½õ¹ºÌž-¾²IYÒ{X’Œ®Ò¶Ú9Œ†Oã\3 àt=EHþ/¾žlØ­“Á爄‡s t R8îßr:íkoùçyÿ€Sñ4k[Ï;Ïü›ÿ‰¬ÍGûkX–âÿQX ÂØY‰ZÞ+—Œ4Šó©Ú[vï,pOýÓþ«­ÖQi#Ít°å62ÈŒñ¦å+1©s•S!ùA;q×ÿk[Ï+Ïü›ÿ‰£ûZÛþyÞàßüMq¶6½‹M´K©ìî®ÞÚÑ÷ØÎî]eA?2Æ0O p*i^E”‘í’ €J€N)A­kÒ›/"êy®ÅÚyVì«Û- ç€Òì9<e ÷ŸÚÖßóÎóÿ¦ÿâhþÖ¶ÿžWŸø7ÿ@®­ÜÛëIi­jÑ–d¸\HêŠò‹‚ &qœëŒWqTµ­¿ççþMÿÄÑý­mÿ<ï?ð oþ&€/QTµ­¿ççþMÿÄÑý­mÿ<ï?ð oþ&€/W?yÿ% Fÿ°Uÿþ´­/íkoùçyÿ€Sñ5Œ÷qÝ|BÒ<µ™véWÙóaxÿå­§MÀg𠞊( Š( gA¹{èònr•œj‰´eœ*ç$z‘Wlõ§’Hæ>MÄS„6æTv(q†!yOzÌÒ¬ ÷ƒ4T6ë'ú¤ˆìŠáJª’$pqŽsV´ýeij\éÖ¢âIfHÔ(ùp?Ýü±ÉÅ=,-M[õ—¿õòô£Q¸š³$ ¼Ó·:–å' #ÓÖ¢°µ·/x anQ°p6¯›©iÏ(µ’Æ;tš ĸq´0ŒdýïNÔF×Ô%{hciÞ-MRY–Îò „Eÿ£2† /–H>aÁÎx#=0EjêZêiz¤0O†ÝáiXз—†UËc¢üÜŸÇ 8Ë´ðÝÍžc··¶‚)."•À¼–@eˆË…ÉÏLuö­ËýÇR¹†{¤‘Þ!… 3¢°Èl2©ÆTpÀÌÕÔ忺D9º˜ÑxÞÐ.-gEgŠ8dP ÎrA Ýq¸$­ã½*MTi¶;¯®ÅÉ·’(K& lœ+.ÓœuÈÈ«’øKHšÝíÚ;•‚HÖ)"ŽòdWP á€på89ê1ž‚¥ÓC1E¹@Òy¡RîUT}Û‰E „É';@È$ ™¡…oñ Î )/5¥KL›!ÊÊ»þñ$4ˆŠØ Ÿ·§$®oÞxÒÂÞå­mášîéZÜÄWqŽGU2z|ã®3ž8äiI iòY[Úlš8íÉ1n$‰Ó9ÈÞ¬=3Žž‚«¿…4—2À23?s ŒdY _›å%ÑX‘ŒŸ© ŸØþä"\JóãËDˆ’ÄïÀöÿTýxBÛÇZ>¡t‰aqð¬Â;‰Dƒ†W(çà´l¼àäŽ0Ftm¼9¦Z]‹˜aJ²y‹ºâF ~º¥ˆQû×à sÓ†?…´™të:Xf’ÎãnøêVE r¡oŽ€:(5üi Ãm y•ÄÜ%´ü,W#× 0ÏÎFN*å÷Œô]:Ñ.n®|¤‘Q“~výøbqžOoqV'ðΕq%ì°Hf’A+ââ@…Â… °6ÜíUÇjþM$nÛÊ32°d¼™ZëÇÚLwÚY}yé ÛÂË¿™’8'#k88ÉéÆH¯­­âº¹ÕÑ,­Òåí¡%d_1•¤<ˆ¨ß,e¾V>HÎÃxWJh¦„Gq2°sWs"#E 6õ •ç>§3Ë iòÙÅk²hãŠVš6ŠâHÝ]‹!Õƒs½»ãšË¼ñΛ žMªIyrD$1 $RÉo=𧿯sÇBE÷ñ%ŠF,îÅŠ„H‰bÞg•Œ¿ÇëÒ£èò4ŒÐϹòr.æItrËó|­¾4mÃ#9äæh|7¦Apó¤Rïy<ÓºâF·ùœÄ(ÝÎgÁã}*úü[ØOÂÇr°\È$ˆ>õGã<&ÌB †_[Ça h„W×V†îÚo¾˜,îÁ“ÆÈÉ5§/…ô©¬nìeŠy-.†$®¥( €ƒwîðzlÆ01Ðan|/¤ÝÝËs4%mîy y~Ví¶çgËœgzP7Þ/ÑôÛa=ÕÇ–Œv¦ü&ã¹—b~FêG«Éã]:K»ÛÝ[ÙÃÍăå *¹aß"6>nƒœâáð®”^WÜ+Èû÷¥ÜÊc9còß'ß~ GN)çÃ:c]Çu$wÍP5Ô²m ÊØÿhO©PNMa_øê]>ÖydÓ¹±v¨'ÿXÇ{Øãùi¼ãw 'P žŸK¿:´³Ä~]ÌÐ`6såÈÉŸÇn®¾ÒÒÎæÍm±oq ‚DóYßò¯?(cŒ`šËG´Ó·7 Ó3»£\ÈцfÜÄ!bªIÉঀ/ÑEQEÆ|V ü1Öð‚?ý•Ù×ñ6;X|¬O4 $eÌ$Ù¼y‹ß‘×8íéÅuBçË}“¯–I¾~Vü{cúЊ(¢€ (¢€ (¢€ (¢€ Ãðgüˆ¾ÿ°m·þŠZܬ?È‹áÿûÛ襠 Ê(¢€2u«éíšÚÖÕãŠk‚äÍ ÈK3c#' 8ç'¦>‡®ÝOuK4ÓÁ4æØ‹˜•$ŽO+ÍR € •™Ïr oêš\zœ15¡š&-ªÚH ‚ ¤=}ŽÎÒ¼2–Iq4Ñ;ÅŸ*;x<˜ÔFâ71-‚FsÀ8ÅCNä5.m 7Zôv·iöIžDÌ÷>dI>ÝÁ2îH+Î1ózã-|}§y+4–—qFb•ËI±rÑ´ŠÑ¨-—lÄÜ.p “€xÛ»Ðô»ë†¸º±‚Y™<²ì¼‘Ûñ8=FN1“Q¯†ôUé¦Z‘µÔ«F å‹dw¾Iþûzš²ÌVñUÔ÷6³-»éúk:Ç,·Vo.ç/´¦älF1´‡!”ïÇH¥Ç¶“X¸´­IÓa” ˆ¥£ ¿p,àLäqÎke<9£G43.Ÿ› ®FNAÜ 'ïyÎ#±xH‚7Ž->Ý”©P¼m#iP;.208  ]OÆ‹oè¶´—ϵ2»—lR¸8Þ˜¸b0ç\‹Iâ¨â¼–ÖêÖâ9Ä‹Eµr ‚¤‡ gROþé'HhH–I³íËÈŘ²œ†SÁìC¾G}ÇÔÓ¡Ñ´Û$Åghdócb2Uü¿/vO9ÙòçÒ€*øÄ–Þ#†Im­®¢ETuiãÚ$G«)ŽÝ:Ž29³U,t»08²µŠøÜ``tÐ œÀÉ«tQEVfµq§ÅhöÐÞ[•ˆÆ¸ÜÀƒÓ$xîkN«^ØZê0yp¬±† v#¡±´€\ñº¡¸ñªÚ_¼wW”i…i|ó†pb¸òÎìçõâ·?áÑ·†þË´â/ /”6ìÛ³nÞ˜Ûòý8éÅ4xwG[sÓà}¹ÎsÝssž(,øæÄI³ìw™6Æà.p!˜Ùwekß'sLÔR¶iDÀñÊñI»w+)ÁåI׃ß׊®¾Ñ–C"é¶áŠìÈNÛBè p ­`†Ü8†5Mîdm£«¦€$®~óþJÿ`«ÿýi]s÷ŸòP´oû_ÿèÛJè(¢Š(¢ŠÈð§ü‰ú'ýxAÿ¢Öµë#Ÿò'èŸõáþ‹Z×  ZúËßúù?ú Ô—·BÕaÄM+Ë T9Á=þ†«ZÂòMzVâX€¸#å_Pj R ¨”Ñ}¦ìErã2k ŽÈïN*ìRvZzôH艆)R)„W¹‰™‚ÀŽOèkNYí ’(æ–ÞfÛ»\ã8õ8ô®GðüúI•!µ¼—θ„£KhcŒ\y¹·’p èã¦I®“Xðûê—ÑÜ%ÒD¥)•áó¢¸qå¶áå¶G\7Eã UÔŠOB)¶÷,Úkzmì²Á4mö– ‰¹w+ß´Œðvó޵7öž™äÇ7Û­<©\Çù«‡aœ¨9äŒ=rßðˆ\Æ"³’Eš)aKWžÚ%ƒÈ†4”rìÍ#›1ì;ÙÒ¼s¥ÝGr—öÏ!fù–óI¾3åð¦IÝ•±Œä®ü¼Vf…ûh—s@¶Ó¡#d¹Ž"Ðþð€°RJ‘ƒŽx8$-ω4;dRo­¥i ’x’'V2¤|®88þ‡ÐÖ}—ƒ¼ˆËÏz’Þ%œv¶ó¤%D%…#3)prGcÐ °xæ8®ÑõXdûbγ﷑ò$Š$—•˜`Â%†¯€7dÖìEÕ½¼IvgRÊö±ùˆªi%‡gù³ý¡¦m öËL4ßgÍ^eÎ6uûÞÝk$x>ÆMbKû¸í®~gxíÔ›wb§r1ÎW9rsXgáÅÀÐæÒãÖÊG,F}· Y{9œœ¯ !$逾ÏUÒµ¤’ÒîÚd‰Þ7*Ãåd;XLæ=EHoôðÊ‚æÙœÆ¨$]Ìáwm<œsJ¸ð­ä¬Á5;tžälÉ>TÒ,…sæ}àÊ~l`ƒ¹¨¦ðBÉsa2^à[æ!ª¸ù ¨n<–Þr±¿£É3˜£†[t¹Kò(G8L“ŒçóÁô«0_YÏ%ʨÖòß~ )${|ÚÁ—ÁÓk¸aÔü¿´]òØmƒDGVÀi :‚2 Á·0¤I©Pž\»íK\B8ùÆÓ˜sž~÷N3@ j:dk!{ËEÊ!reQ¶CÑ<7#Ž¼Õ¿-?¸¿•q)ðþXžª©(eÜ:O$± 1–œ©oÞ1û¡NPðq@ú–¡œöQ›Ig’òà[Ä„Îv³’w0žsÇž)šf±§êï*Zn&5Y>xЇFÜ×#•;[uÇÒ¡×`º’óC¹¶µ{‘kæJ‘²ÐKpdRFsŒà•áû½"LǨÃ",PÚ¢µ±·‹~Õ'2~ó—éÀùGZЛQ·Žòk(íæšî(<ñ E·zç+¶œñÜqœdT¶j:uµìQŽâ$•Ôn€ gžk=¬µH5$Õ%¸‚èEdb{k{R’K'”g—j‚G zg–ïV´ y­<;¦ZÜ!Žxm"ŽD$¬28<úPuVÇMš8e†if‘A½³JÁ˜…àd{ž€PǯèÒÁq*\[•€?:åÔ…*ËÏ*w(¹4íGK¼›PŽÿM¾ŠÒàB`ÍnfVBAˆ89#æ9Œs7þžßGº²±‘'‰­ÞÞÖ!IžÜ[î–Rÿ:<*v_i­ÃIuh‚Ø9iyDôÝýÜäu¬«x~uY…Á‹Î3ýž#!€D@¸ Ãëž3YÑøk}Eï­õ(ŒËr÷ÿiŠi•K—,LÛHýã°!Ï ÛOG&¤³_Ï Í¢}£m°…1™£fÞwë”#iÃs·$R}gC¶dIוּÀ¶å׉J–} N*·ü$:SiöwB÷"í•#ŠÞ ò1™6°t… ÿZ¡„oaÕ¦Ô¿µÒ[†%ÍÙUTËò•óq³0Êàòž±s§Çx-®ím`·‰­æµVILQΛˆ$€OœCóÀã_iq$Í4öù¯8•ÕL!ºoÏÝϽ$Ž‘s5„7¯w Q$ ã*qÜ äW<þ™/nç´ÕL"gvŒ0š0ò¬ŽœL)*بÃjòpwKaàûÍ2+µÕ-ÿÐÄL¶lÛž8 OïÚP’PܒÊޒ÷J‰亲EEVbÒ 66“ìr1뚃û_JÂ(¦–]6ì1nÞ[=mêxå}EaËàBÚD6qj;&Šhæ„‘m¶[rG"1ÈðÃÇ#­¡àö…¿òKd†"$DÀF®~öâa„cp#i!²ÙðjmÍëZÂbvòc]v”u“~ݧ¿ú¦?J‘®ôµ2¸³(„Òe×äŒôsè¾ý+œ³ðU̓Ã5¾«Ÿ‡ -»ÈÏr[;¤Ür.ˆ±9@NsŠ‚/‡Í HWQŽL‹™nÇ?˜TÝ©B°ÀùŽ9ÛŸÄ:-¸˜±bV‘„qo%^nñŽ©·£ ùzñBø‹D{˜­Ðîyc†UÄ'em©ž89ÆGP'­g?ƒ.%ŽG—W/w%“iï1ƒƒŒŒmÝÔHwîÎq•÷©ï|"­p×]ÌVr™lK L¦O4HXêpqŒ1Æ8 ‹È‹þy'ýò(ò"ÿžIÿ|ŠKumã[™#’` ;Æ…›¹ I {dýjZâ¾*Ç|2ÖÊ¢©òãòÕ+´*J°=ëˆø£ÿð®õÈÕ^TxÕ×’¸‘ILsÛÚ»Š­äÉ6äÿžNxüo§O¥IÂJÅ0R@2Qø#üG¸â¥¨å†9€¹ÁÈ9ÁÔÔ%[töÿ{3Çýà>qõÿ}M©2oƒ/¨ ÑEQEW%àûåðf†GÚ¿äm’/ePI‰O6æºÚâü9o=σ4Ao«}ˆ.*XÀ˜nH颀:ìø¨Žoüà‹ù#ŸïTßÙ6ßóÒóÿfÿ⪅­Üp‰5qzÛ@£) †c†îyüzš×Ûsÿ=¢ÿ¿GÿŠ  û›[KgŠ2u LíT¼”ž:ÿD±Ú¡‰“SC+”VkÉq¸)lq!즢×DË5¸•¦òÞ)â2Û[;˜Ë(árýUÏxSNm iöB9þÛæHékp‰´[:oc @鎣©æµPN72sjV;?ì›oùëyÿ³ñU´°k׳ÞùéÊËöÉøV$Øê§ò¬ÝcÃw7ÚÅÍ´ð,2@XC*nçcFäAÊAû¨pqƒCKð–£¥%´‘Ifò[¸d„©2rW*€~0€˜À##S§þɶÿž—Ÿø7ÿGöM·üõ¼ÿÀÙ¿øªãcðülþlð\î³H7vŒÅþ­˜¡*_–+–æ6äžÃD±—MÑ­læ0ï‰6‘ *(ણª3µs€ïì›oùéyÿ³ñTdÛÏKÏü ›ÿŠ«ÔPì›oùéyÿ³ñUÕ•¤×SÍz°Â#°»œá@É8 “ÀíZuC\ŠIô FP¼²Zʨ‹Õ‰RŸÚ5ÅÜV©w~³ÊÖ9..c<ÁHb6¾ÐNÆÀ'bî.ÀÄ.¯n!ó[d{ïå›Ð|ýj‡öEìú¯ö±`’ãûER}É ›ìÞ@—.0Äç ‚6œälIañQµ¶—Ê4nÛòŽyçðÅU³‡N¿k•‚]Gu´Æ D“ÜÆC€ˆÈÃdðj×öM·üô½ÿÀÙ¿øª‡HóïW•¡–$’÷äónð±F¥‡¶Tà÷ÅCâ]sF6q$.Þb¶Ù˜8õ Ž§× Œ8ìp@ÂÊÄÅ$©5ë¬eƒl¼ˆ+Ô`6IöÔ£J¶`™{Ï­äßüUsÀäÍx^ßLXnBÍ[ZI¥òÈ‘—(Ø9c‚:Su/ ÉÝÇ ¼ò4ÜÄ#'íjn#‘c|JíW^‡Ž €u_Ù6ßóÒóÿfÿâ¨þɶÿž—Ÿø7ÿU|/g5‡‡á‚xÞC$Òy)ŒF¯+:¨ÇL«b€(ÿdÛÏKÏü ›ÿЬg´Ž×â‘å´Í»J¾Ï›3Éÿ-m:n'…tõÏÞÉBÑ¿ìÿ£m( ¢Š(¢Š(#Ÿò'èŸõáþ‹Z׬ ÈŸ¢ׄú-k^€)iÿë/ëäÿè+SÜÜÅlŠÒ¹PÍ´aI$ú*íî`’sÂVY üÀäpô¬ýf鬎=ôöñ@/4…¶…ù©'â®ì);+šÚVÙP^UÜÁAh]FIÀäŒu5sûƼÓD¹{Y.V÷\‚î{‹ËuŒ.¤“ ?ÒAÊFWå#¿¶8Ít¾!µÔo5«8¬MÚâ"X®^(âq"aAƾRzc‘u!ÈìD'ÌtŒê„“nx g¿ò•Hu ¯•# Œs\ü#ZíÝÜrêg‰n’AzŒ£Ë&9£vRd'n^3ŒŒ¨o””LJ‡Ò$±Dñ$“„i[djÄí‚Ø§ OÐã ðέ"ÚùÒJc–Sâ\Ïæ7Ù÷$€g,XnGLbàuÎìö$¡žêÞÙdiî’1fWÜÊ6 êÇÛÞo,WVñ\[Ü a•Ç"UÔŒ‚pEb< ­Æ™öx޶æterÛ>fÛóqߎµwÃJÉá]!]Y\YB]Jv<ƒ@Ýj6W6ö÷ZŒOrÅ`ŠYQZSÇ ,y=EXl&7LFîqÏJÅÖ´Öµ{f–yc°³Cp‘”ýðfŒì9R@![•*GcXøs]¸žu!3¢Ý$¦8µ G–LrÇ#)2³-ÚXesò‚JéFå ²±R2Ç?¥2y#µ‚Iî.D0Æ¥ä’Bª¨ d’HÀÖ¸ü7âxín/ T°x!EÔˆÛÈdÃÇ?½!Õ±02»v=_ÃZœñj)istËpÒĉ-ô޾CZmkóÀ9ÆG<à@:kÛMRØ\iúŒWpTKo"H¹FFEX#ÎÁˆ$—'ô®[QÑ5ÔÕìÞÆþê[H‚tW™üÎ~deÚ½ŒmÎêȇÃ#xZK‰'ûOúBZ°ÔeßÍ‚ìJ‰cs‚ÌFà@ì=Ëoùìÿ’ÿ…C$ðCçy·ªžD~l»™–œüÍÇånO¡ô®jçJñ¡-õÊÍ-”’Ã?Ù#7¶)(U78ଇ£I#9潿†µVk#4’˜¤”¥âÜÍæI䫬¨ %· Êé‚Çå¹ãhëät‰âI.Š4Ͳ0ÅAvÁl98V?@jO-¿ç³þKþÁ?‡¼Qpfw˜$…šH¿Ó$") ½Ìe³3(Ý$XÆ8çjãvëLñ-Þ¯ ç›qoln‚Þ;¼‡îþöÖR\0œ¸ÕM<å„׫XÚVÞÈ0‹÷˜ät=j?·Yí ý¥ ­>bs"ç)þðÚÙx>•Ç ë“ÚÄ—$k[†¹F¸ºy$¸PyK±Èbqµ~T>XäU‰<rdûJ²ù}5Ç’HØ»äù™êX¡}‚ŸS@„x–5’;†t` ²í ƒÐƒŠw–ßóÙÿ%ÿ Ïð÷ÚÓEµ·¼²{YmâHŠ´Šû¶¨‚¤ñœõæµ(?-¿ç³þKþymÿ=Ÿò_ð©( Câ\÷?5k«{™RhÖ6G\§ÍOA]ø=ˆö55–ÊÏæ#åþú÷úŽõ=X\´?-Ê„ô‘~áÿâÌÕš`Õo³¼<Û0 ÿ<›îþÝü8ö  4T1\¬å°1ËýÆëøz¥M@qºn‘ã/I²Ó¢»ðü‘Z@–èÒZÌXª(POÏ׊쨠a`ñ²ýÛŸ¥¬ßür—ÊñÇüýøwÿgÿã•ÓQ@Ï•ãùûðïþÏÿÇ(ò¼qÿ?~ÿÀiÿøåtÔP3åxãþ~ü;ÿ€³ÿñÊ<¯Ï߇ðþ9]5Ìù^8ÿŸ¿ÿà,ÿür+Çó÷áßüŸÿŽWMEs>WŽ?çïÿø ?ÿ£ÊñÇüýøwÿgÿã•ÓQ@Ï•ãùûðïþÏÿÇ(ò¼qÿ?~ÿÀYÿøåtÔP3åxãþ~ü;ÿ€³ÿñÊ<¯Ï߇ðþ9]5Ìù^8ÿŸ¿ÿà,ÿür+Çó÷áßüŸÿŽWMEs>WŽ?çïÿø ?ÿ£ÊñÇüýøwÿgÿã•ÓQ@Ï•ãùûðïþÏÿÇ(ò¼qÿ?~ÿÀYÿøåtÔP3åxãþ~ü;ÿ€³ÿñÊ]?J×ßÄ–ú®³u¦º[ÚOmvpÈ„™&$–cÓÊýk¥¢€ (¢€ (¢€8­#]Õ´­ÃN—Áºì’ZÛÇ!üíøý'ü%š—ý >!üíøýu4P/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý > üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuP/ÿ f¥ÿBOˆ;_þ?Gü%š—ý >!üíøýuPŸøžæûÅz ÎŽþ×í~Òbá¶#ùÉbH€9Åw±H²Æ²!ʰȧÕUÿFº)ÿ,¦$¯û/Ôǯ×>´ûˆYöËdû¹èGu>ÆŸ Ë<{—#±SÕOpjJ­242}¢%-Æ$AüCÔ{×§¥Y¢šŽ²"º0eaGqN Š( Ks&Ù0ÎG±õ†¡ýý¿LÏþ>?ø¯çõ«4P {n̈%]îHU<Ž£Ö°lnTnÿiëŸô³ÿÁÿãtŸÚšçýìÿð`øÝg^ê6ž³¹ŠïÊ™¥µŒÍ$¡~V™²ä62 ÁëX–ž-Ô’K{èCí–IÝBN ¼ ð˜“wÊp9Rš³±IÝ\ë?µ5ÏúÙÿàÀÿñº?µ5ÏúÙÿàÀÿñºçíüyuuuokµ«<›¹ž4Vg}¥P—Ôà…÷eGÊMUÒ|C­][É©5ÂßÅg¥[ÝÍ ¼¢2ò²…ÙbP2¸#Úu_Úšçýìÿð`øÝÚšçýìÿð`øÝ`ÃãÙkHZ+2òÝGÙqWxÔ:•Œƒ!Ê‚Íò‚B†7Mñ´é§ÙÇ{=”÷’Ãdr­±å‘’UÛŸ¼›r@èO Q ö¦¹ÿ@{?üþ7Gö¦¹ÿ@{?üþ7Xð•ê·ío§Gµ¥Íõª4s‰ÐicfVEvÂ…9ùºc |yqo¦¾²Ê‚)òm%!8…Ή7˜Ì˜É? Ú§š4¦þÔ×?ègÿƒÿÆèþÔ×?ègÿƒÿÆëŸ‡ÆrØ«i‚ÜÌ—n!Bÿ½™MÝÄePwÚ±(õæ–ÓÇs\½ª\%ŒO Fš;¸¤?7—€s!ù°q…$(n ßþÔ×?ègÿƒÿÆèþÔ×?ègÿƒÿÆë”·ñ»/Ù Wo=ÊÝ(Ko-ÞÚ¬ºÈèÓm$²Æ:>×öMkU€Ê|øÀfD"ܲ À@ëŒgš4kûS\ÿ =Ÿþ ÿªºŸˆõm'I¼Ô®t[cœq Žÿ,U±À1Œœ éëŸñßü“ÏÿØ*ëÿE5 :È¢t´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETsD&‰£$Œô#¨=ˆú’ІÚV–2*®cíìz­MUn?ÑåCîãl¿îö?‡ò&­PVÿC”·ü»¹ù¿Øcßè{ú{šµHÀ2• F=ê´DÛJ-Ü“ªcÿ ŸOQô  TQEQEËø?S‚?è(ÑÝ’ºu¸;m%aþ­z¸5ÔVƒ?äEðÿýƒm¿ôRÐ××v—öŽ·Ê“ÆÑ³-”¹Œd|•‰“ióMÖ ’LþdŒ4³ó6IÏú¿ROâ}i³øŠöYmfK¯³Exûm‘m„ )}ˆÒ’ÀüÇ Ç$fµ›^”x^]TBð–ŽX†X CŽHÜ­^(Œí¢3÷dɬ.­,,a´E¾u‰†k)r}ÏÉV?µm¿ç•çþMÿÄÖIñ`mBÞÒ >æYdœA4"ÉĤ–Ëm#÷c¡èÀŒð –ž1°¼{e[{ÈÅʉ¤ˆU£iTõþ%I>›q•Èh•/í[oùåyÿ€Sñ4jÛÏ+Ïü›ÿ‰¬OøNôÛ‹uûi.\L=ñ°VA ²¹ ÷—„,FyÆ6ô}VgMŽöÜî…þìƒîÉÇ%}W9÷ÆFF _í[oùåyÿ€Sñ4ŸÚ¶ßóÊóÿ¦ÿâjýGûVÛþy^àßüMÚÖßóÊóÿ¦ÿâjõGûZÛþy^àßüM'ö­·üò¼ÿÀ)¿øšÆoZ™ƒCcs5¢­ÃK:Æ+ÎxlŽ@Î22'J€(ÿk[Ï+Ïü›ÿ‰¬jpIà¢Çv iw ´•Gú¦êJàWY\ÿ?äžx—þÁW_ú)¨|t´ƒ ¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ‚2*½±0¹µb~A˜É‡OËÖ¬Ô13 xñæÆw&{ú¡éÿê  é’ijFQÇÓ¨÷ôE*ÍÈ™ÃýG±÷§Ðx%mÆ ˆóTg?ß_QýGoÄUІâ5AS¶D9Gô?áê)mæóåvȧ™û§ü(Z(¢€ Ãðgüˆ¾ÿ°m·þŠZܬ?ÿÈ‹áïûÛ襠 w->mî HA>ZËnÎñwa:ŒIPÁ¶žk¦fº7ö[‡’Ü©å]ØÌÅ—ql’F95™7‰ÜÜ(´²†XÊFò܈šbiò×id`* éÆ kÛj6—ZbêÄvû »K…òöýàÙû¥H ú`Ô«t"<·Ð©†t˜•6C0tea/Ú¥ó2›%÷n'.À’yƒ‘Åx_E–Ú;i,•¡Ž¡‘ˆØ#x‚žyù$qϯ¨§YÑæ@ñêVN¬³¡Ø=Øûá½ Fþ!Ð’Ú+ƒªØy2îòœ\&$+÷‚óÉñTY øOG’?.XîeC •ÖKéœHà( ùœ‰ÙÁ5£e§Úéë*ÚÇ嬎deÞHÜ@€OÆN:’Iä’b´Õ4ëÝ"=Z ˜Áâó|ýã`P2I=0séƒQG¯èS Z¶œâ$2HVåÅ<xÏ­jdzÑ‘ëX¿ð“øí2BuK%1Û¥Ñv™ùnÌ¡ÎÊãñ¢¥°×4½FöâÎÞæÝ®!?êĈYÓj6õä®y  \ZLZO-?¸¿•Zq*Å è²™ ‘\;ɸ;µìÅ™XP±|ìÁ?'Ýœf­M¡i—\¼¶ûšê)"˜ùŒ7#ª+¼dFƒOsU­|G¡\YKt×ÖP,$,âY£S ,TçåÉSŒõÅ>ï]Ñí£ŸmÅ´óC™­á‘M‡m¹éó}Ç­G¥hMÕ¯/Àq;7• o ³nnØdž~P£ýœó[y¢³%Öôv—SÓ£IåLZt7çånx<¡ô©¡¿Òî/¤±†êÒK¸2@’)t€IQÈê?1@r=Esþ;#þç‰yÿ˜U×þŠjÞò£ÿžkùVŽ£Eø{âRAþʺè?é“PB: ZAÐRÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_øöºÿ¦SûåÿúÿÌ{ÕªdÑ,Ñ4mчn£Ü{ÔvÒ³¡I1æÆv¾;ûýæ€'ªóÄáÄðŒÊ£¾¾Ÿáÿ×5bŠdR¬Ñ¬ˆr§ôöúÓꬠÚÈ× ”ßëTvÿh_o§6A z@ X~ ÿ‘Ãÿö ¶ÿÑK[•ÁišgÄ]'J³Ó­îü,ÐÚ@FÒApXª(PNÀ  n¼9–Ð-´—ÚôI#–0 ޛà ©•ݸ|VâøyfðÓé7R¶é™æ–HxÄ­!”•Ï`ç€{pk'Ëø—ÿ?>ÿÀ{Ÿþ./â_üüøOÿîøº•ÉQIܰ<ca¨M ÄpÍÍl‚2‚]ÆB½Hl²Ä’ ~gÝ%‡„›O¸kˆu)D³;’P7˜¬*7W”ë’pÇ98"Ÿ—ñ/þ~|'ÿ€÷?ü]_Ä¿ùùðŸþÜÿñuELÖŽÚGe6žöÆÑ¯šé’m…vîò„Ew¾ÆxÎ×Þû]ÝÅÔw÷óJÌÁ¢8*H„c ƒÜpA!˜dpk7Ëø—ÿ?>ÿÀ{Ÿþ./â_üüøOÿîøºšßÁBÏÛR•YNõ/¶$K*ŸqûçR;ŒTŒÖ¥¶„ ¾ŽíU•¥bÊæhÖ3Ó§Ýϵ‹åüKÿŸŸ ÿà=ÏÿG—ñ/þ~|'ÿ€÷?ü]vTWåüKÿŸŸ ÿà=ÏÿG—ñ/þ~|'ÿ€÷?ü][O´rÁpº”Ÿi³blܸˆûƒãÈŽ£ÁÉ,ÁðÛ¥¤W³ý’<4q²©+'”",[?(éêǶ¯åüKÿŸŸ ÿà=ÏÿG—ñ/þ~|'ÿ€÷?ü])ð +o-¼:ÄQ?Éò˜Å‡çæÆòGl€HcœìØèØÝÁp³»˜|ì>aB-ƒó¬_/â_üüøOÿîøº<¿‰óóá?ü¹ÿâ貮ǟòOÉXŽ»PCEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP714‘ƒT;Ÿ_O¡éøÓ¡”OÈêP{ƒî IU[ýëwH¦8oö_±üz}që@¨¢Š§w¦ÁxC²í”t‘zþ>µÃI{4~ÒçÓÜÛªh–óC—*¯ Á(Ac· {â½¼óLÓí5è)1¹ ý•mˆl&ul"° ¨ê ]6”®È¨›Zöw*Ú†äÉx­ö¯*a,Ò•aäÊHÚì‰äÓÖ¡Öõ«ÛmCS ©}šk1 ³°Ø‡í»½wÇsf1´ŒïV--£‚êÖY'ºhíŸzFšd등rsÆþ•²u6ecÙeÎÖ63dg®>JOÖáåc‘³ñ}òÙÆŽèÅ$m$–ò‡‘‘¦xö2íÀc´` 0È#&Öãyï§µ…íôûs:D’_©B¸ŒíA;Ï™À8È\÷ÀÛ´«™ ymoI†Q2*ÚΪ\t,¡@b0ÜsV>ßcŒ}šçïoÿ ~÷¯ÜëïRYÅé~!×õ ­f7a’-:ÊîèD"òT3Íçy™_3qHð:0çŒå·¾7Ô.í/ZÙímV+ ÖÞ²Üé #&G Çå>„:Ýu4$¤J[’EŒ£?øç¹¦ýºÃh_²Üí }‚\Œr€9çÕõ­GÄɦA"Úµ¸œ\$¡W+öfV ñ1ágÆ02{ôªñEÒù¬m‘Œ"â(šíIeØîTã;lÇÍŽ§•"ºÿí+@Û„a°ÍŸýØ~TÓbs›kžNãþ/'×îu kþ;‹îþÛö9ù¢ýîÆýÌê‰êUÆ;œÞ¥¸ñÔ¢>Ü«ÉpµÚ¦R)¼£‚ø\gŽ|ހߨ’I¶º$œ’l%ëŒsÓŠS¨Ù0ÛÝ­¸fÆ^¯Üë@¬>*¿·.—3FòX Mæ(E¸º,Çq!p§Ë_UÄÜô‡ŽÝ£ºº™cÙ:‹‹xå˜ ™†Ðù@ãžgcž¾Üñ×FÍ Ùäƒc7'×î{ O·Øà³]`r?Ð%ãŒsÓŠåÛÇò­¼“µ´QÒ^.äAænÝËîXÈ‘¹¸;k^ëúËÏ}miª¢4wEc3B…n|˨Ñóòò"-å¼üÙ<â»bI&Úè’A$ØKÉÜ¥þѲÀgºùz ËÇþ9@¦™âMQ¼P!ÕnÎÞI]¾Ë(Œy+ä£*Æws“ÏRG@+[Åòðž?è2?ôšzÔ{ë ÖZÜ¿šÂSÿ²Vˆïa¹Õ¼(‘¥Â‘¬ûËy#ñí?vP(¯¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦KÍFã*ßEAm#2´RœËÃïÍøÿ<ŽÕ=V¹S[””p?‰;þ#¨ü»Õ…`ÊH òï@ X~ ÿ‘Ãÿö ¶ÿÑK[•‡àÏù|?ÿ`Ûoý´±4©M!ÂF¥Øã<“\™ñ¦÷–ˆ­o—ˆ$·¶h‹,ªÒnÈbœ… qŸ~ºHÖXÚ7PÈÀ«)î r§ÂW :˜n¡XUŠá•üÔUÎÞ…fPJ†#¡ äd•ú;ô6F¹l4[mI–M— ž\H»Ùº(©ý 8šÍ_Ú´—a e…ðì"ó 6GÊÿ+Œ…ppHUôk94˜tÖGBFRFGB½e ƒÇQïØÖ}Ç„ìÖ"Úyk{¤FòÉ$±«(\Ǽ}¥†âs’IÍR)m¨ÅñÆ„×rÙ‹¿2î$×fbÈ»@çtˆ9ï{6)ê76Žê,’ßmâÚùšŒÆÝ˜<îV;¿‡n;‚3ÒµG…ôß)ã?jØár‚îEPÁ•ƒª†_rƒ¹@9Éîs5¿‡ì-®ÖéÃL®²%Ì—˜÷ÌrvßÒ™sxÞÎ;¯í5‰P%U‘ãCÆz©•AÎ2zw#GI×¢Ô®'µxäŠâ9gP6 ëÍTž½?ï ŠO hòÏ4Æ)ÖIK±)u*ígt‘™@l)/6F9æ¯ÛéVv·+q edQ(y?ëÌ~ýÛŸnƒŠ»EP±â‹M%ï`Xf¹»µ´7o KüãŸ}­ÏlsÔe³øªÎ¾HçÊK¾Ü!rª;ˆœzõ'е¨ø{NÕn÷±Ë)´aLòPÈÈÄ(l*ì7y¤oé²[¤E$Š®dËÌå‹ÚI9É$zÐ)â­:I#VëÌgºù ˜IÄ7ÿw.¸'§5·\íç…b›U‚îÚQo•f¸Q昬¾jŒ‰ãvîŽ1šè¨®gÅŸòðŸý†Gþ“O]5s>,ÿŸ„ÿì2?ôšz騢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*¬èó›c÷Z/§uü;{jµPÜBf‹ vȧr7£éØû@W!gàí[O±·²µñ®¯½¼KIökCµL9<]\ â§£)ê¤u%rÿðŒë¿ô<ëø gÿÆhÿ„g]ÿ¡çXÿÀ[?þ3]EËÿÂ3®ÿÐó¬à-Ÿÿ£þwþ‡cÿlÿøÍuP/ÿλÿCαÿ€¶üføFußúuü³ÿã5ÔQ@¿ü#:ïý:ÇþÙÿñš?á×èyÖ?ðÏÿŒ×QErÿðŒë¿ô<ëø gÿÆhÿ„g]ÿ¡çXÿÀ[?þ3]EËÿÂ3®ÿÐó¬à-Ÿÿ£þwþ‡cÿlÿøÍuP/ÿλÿCαÿ€¶üføFußúuü³ÿã5ÔQ@¿ü#:ïý:ÇþÙÿñšH¼%zú–Ÿw¨ø£RÔÆ´GÐÛ¢—ØÉ’R5=»×SEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeß^.t Æaó'¸ãwåÁú Á²Ôßqÿ@›Ïûîþ9Pëú´š6ž.bµ7¸R>}¨0IfØŽØvSÉÀÉ?ð•ê?Ù·“ÍgkµPš9­®K~êÝö†Lo$¯Ž Èáh¤û}Çýo?ï¸øåo¸ÿ Mçý÷ÿ¬VñdësöeÓPË<ÒÃg›œ 9LMæ¿ à0Æì‚FÀ;ºeéÔtË{ÌʛŠÜãšgÛî?èyÿ}ÃÿÇ+žñíäïð÷ÄjÚeÚ¦ÜÌÑ`~ìòpù®¾¹¿ˆ?òN|Iÿ`ËýÔÒQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVƒ?äEðÿýƒm¿ôRÖÙé\‚|0ðœh¨–wÊŠU]Vè@›@l±¤Ñ•Ïÿ²ð·üûjø6»ÿã´²ð·üûjø6»ÿã´Æn¾ƒ£ÈrúU‹"Ê [!ùÔVéÔ=@¬›B¡M´;@ –09§LŒýk™ÿ…eáoùöÔ?ðmwÿÇhÿ…eáoùöÔ?ðmwÿÇh®¢¹øV^ÿŸmCÿ×üvøV^ÿŸmCÿ×üv€:[Û =Jõ¤P† åÏuÈèpF3LVž$¸XÛ¹Ü'a æ]À¸ãæÈPzàzW;ÿ ËÂßóí¨àÚïÿŽÑÿ ËÂßóí¨àÚïÿŽÐ棡ØêV2ZÉ h²g,°ÆÇ—xue9a“ryëVì­!Óì ³·R°Â’ëÞ¹øV^ÿŸmCÿ×üvøV^ÿŸmCÿ×üv€:êç> É9ñ/ýƒ.?ô[UOøV^ÿŸmCÿ×üv™'Âï ME-•ëÆà«#j·D0ô#Íæ€;(( Š( Š( Š( Š( Š( ÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-15.jpg0000644000175000017500000003430311625126536030015 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ôý A´Ôôé.yžîè3 BuÈ8À«Kþ/û×ÿø2¹ÿã”ïÿÈÿ×åßþ”É[”ƒÿŽ—ýëÿü\ÿñÊ?áÒÿ½ÿƒ+Ÿþ9[ÔPü":_÷¯ÿðesÿÇ(ÿ„GKþõÿþ ®øåoQ@?ðˆéÞ¿ÿÁ•Ïÿ£þ/û×ÿø2¹ÿ㕽E`ÿÂ#¥ÿzÿÿW?ürøDt¿ï_ÿàÊçÿŽVõƒÿŽ—ýëÿü\ÿñÊÂ- æxà† U¥’/=#:´Œdà6 ù»£^en— }nZ9mÒ;…¦Ž7YC†©ùOËÁéëWtÝ®g7fµ±º4Í tûûÙ×T‚;ÆpÚà ‚BFÙH?+Å:ÇLðõóI˨×áĺû*ÝÝËs„o*=Rà¶Öm ÿ¬éýCká4DÓÜß´roÄ‘j7.P20$$“’HØþˆÅ`¾·ÈKu•¾Æ79Šq0e;¾RNAÎîÇ·0Û|;ž"ÒK­ŸrH%Kbš€mrFyT•`)I >šú+2uhnY'¾¹ŒÆT)ù³'pÃd} hÅáíS-ò“#F¡µ;œ¯\~󚣩øëU¸’òïS³{¹Qâ¶žLb6M€*2ŽI<·LqTíü÷sý®âO³;8·bìȾnõ`ÑÈ IÜ“¼d/€^Ôm<-¥E3ÜÞÞnŠ&hãÔ®]ʦ7` 9##Ž´ZÚxZòîâÚÛÂÐGŽçR¹ ‰AdÃ0I8ô"¢ÿ„ o²Á Þéј­d´ß›°²0Œ8“ï/¯B iú‡ÃøæYâÓ¯VÊÚtU’…¤ ƒ9?0ulfq€ ƒ€r-ó™Dw·,b—Éqý«qòÉýßõj-?Jðþ¥¥A©E=òA2+7S¸R»€ 7ïx<Ž* IksÉy§Ê#Þ\iÛÁ¨ŸÞ ¶cùO`Ìlæ«ËðÖ6·µ/ãDDÊmÙRVE™YØ$ŠÄ°›ûÜcœçoR²ðÎ’Ê/.¯£]· Få€(¥ŠœI÷ˆV u;[*šÉá3€gÕþÞ4ó^ÝnØó:uºdÖ®'€Õ4űKõˆ ‡»ó!ƒfë ÌIžpÙ,BäàÒ@\]Ir¨}¬N× §Ú|ó]ÇäÎF žÃÃÚ.¥§Û_[> Ð\ijFN¡r VŽ<Î85cþ/û×ÿø2¹ÿã•cÃÚeî¤[i×W]%¬1ÁÅnb;QBüÙvÉ81ZÔƒÿŽ—ýëÿü\ÿñÊ?áÒÿ½ÿƒ+Ÿþ9[ÔPü":_÷¯ÿðesÿÇ(ÿ„GKþõÿþ ®øåoQ@?ðˆéÞ¿ÿÁ•Ïÿ£þ/û×ÿø2¹ÿ㕽E`ÿÂ#¥ÿzÿÿW?ürøDt¿ï_ÿàÊçÿŽVõƒÿŽ—ýëÿü\ÿñÊËKUÒ|M{ki=Ø„ÙÛɶK©%‹Ì Øã€:z ì«”¿ÿ‘ÆóþÁößú2zw†,®%Ñ™ÓT»…MíÞ"úD2„þµ³ýuÿA›ïûâþ7Tü#ÿ ÿ_—úS%nPöu×ýo¿ïˆ?øÝEqnö<÷ýÜP Ë;ˆSåÖ­cx„2-É¥‚ÞäI2-ÆÆ ÄH Tûc=©=Ý‘”ñj´VÞ!½iTn1´Q#c× ${ÕßìûŸú _ßñºä|:nnoíPÜ}­â¸’9a_)•Ô¿mÍ‚rAÏcW|K§ø’ë]Y´¦x`Kg@érʘä*d sa8xc¢î… ]\è³îè5}ÿ|AÿÆèþϹÿ Õ÷ýñÿ®e´-ye¸T½½òbIi›æ$ÊVÜÄœ°Þ³ü­•ÁÆ1PÉ¡kwqËv—Ò¥½âO"®¤WÎ|¸ßyh×(H`‘—¢ŽªK9¡ä—]¼HÑK32ÀÔ“åð)EÃ(eÖïJ‘BA‚?ïÝp±xÅ•¸¼&Xäg·Hµ “#ÄêÍ–•‹ p„~éáYkRM'Ä“\ʦ{¤W<ùEñ ,_i€AÌe`+cibŒá€´ºŽ›¤4Ù¼d±ß—Tû+Ïj%ÜÀ g$ŽsZ?`¹ÿ Õ÷ýñÿ¬[=R{½<ÞË(Xl/ìÞuŸ2¨’h|¢©o.<îë‘Ï&±`O_ÝiÒÌo¼ûˆÁhgh`ƒ¢«2dRÆ2 Ë@ûÊØKnÐçþƒWß÷Äün—û:ëþƒ7ß÷Äün¹Ký ı´ãM¾ºòÝe\Mvòžt,йpCû@ ¸@,0¥zÃ{m¡ÚèK$—*¤3KØÉÚ²@ÀÎæ'’y ÿg]ÐfûþøƒÿÑýuÿA›ïûâþ7ZPöu×ýo¿ïˆ?øÝÙ×_ô¾ÿ¾ ÿãu¡Egÿg]ÐfûþøƒÿÒgÜÿÐjûþøƒÿÖ‰é^pÞñ ³Ü:ßµÒÇw¼ÃRtuy Èëæ”)¹$-q@œvÒJò¤zõÛ´M²EQ(Ø ƒû¾N==éÿÙ÷?ô¾ÿ¾ ÿãuÎÜhšçÛïZ »ÁmHö#íÏ÷¼»m›²rÃz\pÙ1ÈäSü#%ôšÎ¬·Bü¬j‰#Ü<†)'(cnv„á@ÇÔ€tÙ×_ô¾ÿ¾ ÿãtg]ÐfûþøƒÿÖ…ŸýuÿA›ïûâþ7Göu×ýo¿ïˆ?øÝhQ@ÿÙ×_ô¾ÿ¾ ÿãtg]ÐfûþøƒÿÖ…ŸýuÿA›ïûâþ7Göu×ýo¿ïˆ?øÝhQ@ÿÙ×_ô¾ÿ¾ ÿãtg]ÐfûþøƒÿÖ…ŸýuÿA›ïûâþ7\ôÐI‹oVK©®I°¶!¥ýäü|ª+±®RÿþGÏûÛèÉèÿ„äëòïÿJd­ÊÃðü€Oý~]ÿéL•¹@!<ÒÖ'ˆØyv1LXYËrãkmÜ6±U'°g =óŽô7a7dl†Ý÷YOÒŒŸoʸàÔíÚý’âIñ±mü2/¹@íppqÇ$›ºœw¶~9“Xò'šÒkXAK?8¢»Íæy{T¾r"ܱŒ…qFWGc“íùPKzʼ¶}?XÔ§’âm2c=ÑC"Í ªßÙ»ƒ`p>IÇdoCW¯ÇŠ4Ñý‡¦ý©ÐÙÜ>8›j3$¯”ÅH[ËŒùy2DùÏB¿•Uü«‹ðûjÐëÓÌêk ëß®,Z YÉH!JèSÔc5ÛPpþ«ùQ‡õ_ÊE7ê¿•Uü©ÔPpþ«ùQ‡õ_ÊE7ê¿•Uü©ÔPpþ«ùQ‰?¼¿—ÿ^E3yïŸþ½¼þòÿß'üiç¥yÁÕnA9 ö>%þòß'ühÄßÞOûäÿIEG‰¿¼Ÿ÷Éÿ17÷“þù?ãRQ@âoï'ýòÆŒMýäÿ¾OøÔ”Px›ûÉÿ|Ÿñ£y?ï“þ5%&þòß'ühÄßÞOûäÿIEG‰¿¼Ÿ÷ÉÿåïwÂ_y¸‚~ÁmÐcþZO]er—ÿò8ÞØ>ÛÿFO@x_T±·ÑZ)®âG·yRÜô™+cûkLÿŸè?ïªÅðÜðÅ£7Ÿx _¶]…ƒ‹‰ <ýkZÛyg€ZߥǘNTH­•Áçp(Oí­3þ ÿ¾©“jšEÄM×VÒFà ŽA{ŠÒª•Ô¶Íl±ÉbG`îèXÍÐýÚ¸›±NÊOéÌÍföp³p̘LÕÏí­3þ ÿ¾«DñAÖÖí¤Ý̱öÛ7BÁ”‡#·N£¸¥â=;M¼û,í9.ÑÂì‘î$(fœ þc5(¸èÅ&´'þÚÓ?çúûêí­3þ ÿ¾«:OèñEæÈ×iˆÊÎö’¨A´° Jü¬UI pOÞ\Í{â­/O¼{YÚãÌŒ·™åÛ»„U³3 ÈI÷>†¤¢ßöÖ™ÿ?ÐßTmiŸóýýõ\½¯Äx!ºº×Y[%ÃA òfcqú~Ÿœ~Y¹yñFü«s=ÔÇìî±Á&H¦’4YÔ~õO¾x  Ïí­3þ ÿ¾¨þÚÓ?çúûêªIâ­23†¸‘åÈDŽvb“ê§ùô¬‰¾"hòºfÜEuWKëïÚ ˆ¤æäŒ<¦'§Ê¬}2ÑmiŸóýýõGöÖ™ÿ?ÐßU‹oãk4µ´}J)-f½¸–x‚–$«•UN›mn±ä¨¼®ËÇlœþø?ÃÒI$¤Ûî‘ÙØ€FY‰$õîI?7þßÿÐ*×ühWì6ŸóëýûáT¯ô¦•­žÈ[BðÈYƒÃ•pQ—z«ÿÂáßúAúÿð†øwþP~¿ãM; «èWÓ<3&˜öñÀma¶Ža+$k#…*s€3Ó¥IªxZ-S]ŠþIÙ ¢hºùÅI+’/î¤ñà “þßÿÐ*×ühÿ„7ÿô ƒõÿr““»b£±%Ç…´{©„“Û;þëÊ1ùòÜm( &í¬ÁIˆ$qϪ7‚´¶Ô!¸-xÑÆ’,‘½äÎfgò†]‹å†ØTml©î*øC|;ÿ@¨?_ñ£þßÿÐ*×üjJ,KáÝ6[(m s$pÊÓDÑ\I£±bÄ:°aÍÆzUGð^†þfè.s!'?m›*ÅÒBËóü¬^4mÑœòiÿð†øwþP~¿ãGü!¾ÿ T¯øÐ–þÒ-o¾Ù ¼¢o0È \ÈʬK1Ú¥ˆQ–c€æŸmá½.ÑÅÅ#}ñÅ%Ì’GÈÉ„Fbª»]†ÐäqÀÄð†øwþP~¿ãGü!¾ÿ T¯øÐ’xWH’õnÚ DÁÄ„­ÄЬÂS0Ü¡°Ø–ƒŒžÕ ^ Ña‰"H®ÄJ<³}9V r»|1NH€ïøC|;ÿ@¨?_ñ£þßÿÐ*×üh_øF4¡rn;ˆ¤ffsÔ±‰ ;9€q¹Ü€ÙqƒO‡Ãšd–wIÞeœB+p×2D¡vð…¶çi#v2sÖ«ÿÂáßúAúÿð†øwþP~¿ã@µ„þŽâûS{©Œ–·²Çp©ø¥†UEMË*¸#„<žH8£þßÿÐ*×üj½×„4©Zd $‡¹;@êzÿœŠÖ¶ÑììÄ+n'Ž86ùq­Ä›*nìc¦1œ7P 2ÿMš÷TÒîEÂ$3<í•–‘Œoù·|  ô9ã‘ß>ßÂ^šs¤@£xaÁ}j_øC|;ÿ@¨?_ñ  ÚÄÑ–q0·›"E‘ÜÊc„‹(Ø›¶¯ÎŠpé‘Mÿ„7ÿô ƒõÿ?á ðïý ýÆ€Oh²I4o0y\¾VêUò˜¸˜ð߻˨c³#œÕh|¤G<åÖw·xü¨à7„EòÌgß3-ó˜gƒV?á ðïý ýÆøC|;ÿ@¨?_ñ  —z%íäwR¬Ë4j1\Iu®€už#“êj„~ Ðâ¶ëoqå`© y3nB _%6€6ž8dSÿá ðïý ýÆøC|;ÿ@¨?_ñ §…4tI•­æ—Îã‘§¹–Vep²ÌÄç÷IÎr6ñбi¡XÙÈeg’SˆÉ=Ì“1PK—bz“U?á ðïý ýÆøC|;ÿ@¨?_ñ ãðFf8ífD1ˆÀ[¹€@6`¯Íò¶bŒîl¨9Í[ƒÃze¼þtiq‘+Jª÷R²+°`ÅT±PHwÎ$ç­Aÿo‡èëþ4ÂáßúAúÿI…´›v(®„Bê_/teJ¶ÍÛs”RN2qÎrs#øsJy’f¶c*Èeßæ¾YŒ«.O<áÑH UøC|;ÿ@¨?_ñ£þßÿÐ*×üh{ß é·Î$‘."2°{k©`a…*0caÆ éùV¨@ñëXð†øwþP~¿ãGü!¾ÿ T¯øÐír—ÿò8Þ×…·þŒž¯ÂáßúAúÿZ±ð¼¯g§Á Ê;(å‚çý7ÌÐQ@Q@Q@Q@Q@Q@Q@Q@S™ä‚y.-ȪHnƒ¿ëÊ®Ukÿøñ›ýÚ YVyKG± ÙùºéúÕš( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( «_ÿÇŒßîÕš­ÿ3»@h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(éEaø¤kíÙfš8®5ŽauÓ¸©•Oá@”Vgö<_ß¼ÿÁ„ÿüUØñ~óÿÿñT æ‰wkeb±´ó_1ö"¥å˳6 À Äž?@j©—KXÌ&¬‘’í%ꨤž÷§fÈéh®~ÿûJhÆ£ª3(&1q«Ëð1œnqœdgê*çö<'øï?ða?ÿHw5(¬±¤BzIx{ÈBþ.—û/ïÞàÂþ*€¹§U¯ÿãÆo÷kÎÐÌÓB5}ÒÂë±®­+4lÌò b=êèÓm æ:ᥠ¼ÄÚ„ÄíÎ2T·Lƒ@ôVYÒ \fKÁÛBþ.ªDºDÿgòµ6“í,éÍZSæ²gx\?ÌW8郚æý—ý‘ìy—™ëí ÿøªŠ+ 9åž(®.žKw *F|£ ù¿ºÊÙ¢±çÓìí£OsqT &¥2ÌB¨É~¤îHªÇûI4gT!àF’UþÖ—1¢œ30ßÀ‚OJèh¬kk+Ä/mw<È¢Ôæ` ŽèAúScÅýûÏüOÿÅP4èÍfcÅýûÏüOÿÅVW‰ì‡„õ›Ûk‹Ø®-ì'–)ôÇk¬lAÁlu訢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬={þCÿ°›ÿé%ÍnVˆƒOÃB&UêRmf]À²\õüÅoÑYþN±ÿ?Ö?øÿüv£VÔžF5=9~ò­£>£Í  ¾'eA¦³®å2e}Ѧãñé\–˜d¶ðƒÛ”û4Îe[gL2±f<’I9ëÛïvóYjWìšëN‘?ºö,Gäe¨WF¸V ¿ÙÈ#M ü‰V¤­ffâîÚ©èÒj$Óo Ê–ÖÖ·1¹†vË;ÂT|¤1gŸJådðçŒM…Ä_o–[‰OÏ/ö„¨7&0¤l²eNTÂ’ ž×ÊÕÁÇÛìsÿ^oÿÇi|cþ¬ð ÿøíA¡Æ/†üMe úÙ±ón¢¼RãQ‘W̘£$¡pB²ã€[ƒÔ‹W>ñ¹Šhµ ½¦ââGDÔ$]¤Ïº#ÎW`Œ)Œî¶xê|cþ¬ð ÿøíN±ÿ?Ö?øÿüv€8ëŸ ë3éZfž-­Qt¤DYc¸*× K$¹Lª'$ïÆ3ÕöOˆæ¹’Ò+E[ek¹Â˜Ì’²Æ“67:«G¹”ó·ijíücþ¬ð ÿøí"Å«0Ü·öâÍÿøíqÒx_^¸†%¾k›¹a¸†a)Õ¥MÈ›>@ŠCŒ1ß“Îrxd^Õ,`´¹³’&¾ˆÌÂ%eŽxeF*ˆùØÄN © æ»_'XÿŸëüþ;G“¬Ïõþ?ÿ &? x%7-4Ï9O,1Ôå"([$üÈ]Aä©#ž©¦ð·ˆ¼ŸM¹–Êææäœ6£,ƒÉû(L19ËùŠ¿> ÄÏaäëóýcÿ€OÿÇhòuùþ±ÿÀ'ÿã´Ê'†u™mobº’{„–×ìðCu$ˆ…Þ@ìêϵ]H±ù@ 01~»™öÝʨ ·Kq,m–»A$Ìâ_úê6V õ®¿ÉÖ?çúÇÿŸÿŽÑäëóýcÿ€OÿÇh'š~§£Äöwv©å¶ÇóÒ`FD1¡Æz¡®š³ücþ¬ð ÿøíN±ÿ?Ö?øÿüv€4+ÆŸò"x‡þÁ—?ú)ªç“¬Ïõþ?ÿ¬_ŪkæKÛ6A¦Ün hÀ‘å¶p|ÃÊ€:ª(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ã׿ä1áû ¿þ’\ÖåaëßòðÇý„ßÿI.hLjžXô+–‰~è‘Ó;–-ÃÌ#ä&ãÇÖå®m´ËHn;¥Ž%V9ë’je‘(Ý”çëI½ÿçŸþ<*‹8K§×ÛWší¿´Çöˆ]¢´Gð™ãÚ`I‘Œjç9ÀÈÙS%ߌ¶…16&¡PÊ%ýÚ‘”Ê㑉08®×{ÿÏ?üxQ½ÿçŸþ<(€šóÄx½šh5'hL àµÌRY¬a¡%WûÙdC9¯fñ]ÌvÓ}®êÐZ¡BlÊ<à*1“`Œl¾ñ°¾p0ø¤oùçÿ 7¿üóÿÇ…pzÝÿ‰5[»¨´èï-ôÙ¬åXµdw>[‚HhòŽ.ÝÌ ƒÂ¶r5ü¦ÝiµŒ÷7ÒÛÇ4eIá‰"H¼¥ÿWåÆŠ>`à¨é€p Ý.÷ÿžøð£{ÿÏ?üxP”TFI{BOüRy“Ïÿ}ŠšŠ‡Í›þxûìS|ëùö?÷Ø Ãâ·Ð8^êÕÌ/[Û[ÅÌÚ—§nU¼Ðs¸ñœÜé¬[L¶f–æRcÉuŽV㫨U }FÑô§y×óìï±Gqÿ>ÇþûbНç\ϱÿ¾ÅuÇüûûìPŠÃñ§üˆž!ÿ°eÏþŠjÔó®?çØÿßb±|c$­à‡€ þ̹çx?òɨ¢¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬={þCÿ°›ÿé%ÍnV½ÿ! ØMÿô’æ€-ë—rÙiM”²F®Ã"=îqìîÏá\hÕd³Ô/ÌwO%˜2~öé¤í+#FÄ…-ž6ª`ã—¯¢°"ðªý¨½Íä2D[s¬Vþ[Íónćq2ÁUA>Ù2¿B$¥} gÄ6šF.£˜‰#iF Œ+"‘ÉþówÑXöç"oZZµäiy<0™÷1 Ûj¬òdù— ¸`G'¯KqkgtðÉq R´ ^"à„©BGÕY‡Ðš¢<=¡,cl"0r½¼²‹_¦ÕQôE™“x¼QR:ò[b'Š-‹ë©’TåÆ%Á/´qqÍIÿ ÆœÝmz¯ûÁ°Æ»²ˆ‡ÞëœÆ=]H`›Òx{A•îìm‹ÜdaÁ$°rFr†ÈÇÍÏSšhº*ªªÙZªªÂŠ…‰ËÆ>ŠÄ‘îhümI!ŠÎàˆe’0`€Ùi€ˆIĘ8Þž¥ñí.bµ²»·¿Ž&Û«pâ'*¯åº#ïÜÀã?.íÜVì¾ðôÑÈ’XÛ°åŽãž¹äF@ÔïøGt,äÚBÇ`C¹Ën Éäà¸óŽ3ŠÇ±ñ„¾M™º‰®æ¸Y„1ÚÛyMrÉ* !eyg–Ê¿÷I,1ƒøéâŠþçû*îH’6{qûµ–)Îó†;ã¯#;—‡4F…m¦œîiá]NäbFàÊ 1§8ÏëÍKi hÖš|VbeÍÁÞvÉaÓ•$cÁé@V³=Å´rËm-³º‚a”©t>‡i+Ÿ¡"¦ªÖÉkgk´ «J|àrsRùñÏTÿ¾…IEGöˆGYcÿ¾…'Ú`ÿžÑÿßb€9#ã´‹I{•Óo.af*Ço „ÌBW( Ï `óœÖÛJóÛG,–òÛ»¨- ¥K!ô;I\ý š4 m¾Î-­<œ“å’9ŒÆxÿp•ú»llí-£·‚TX£Pª ™ÀääЪ*/´Áÿ=£ÿ¾Åiƒþ{Gÿ}Š–°üiÿ"'ˆìsÿ¢šµþÓüöþû‰ã)¢x…RTcý™sÀ`å“PAEPEPEPEPEPEPEPXz÷ü†<1ÿa7ÿÒKšÜ¬={þCÿ°›ÿé%ÍißÞEae-Ô¡Š ûª2ÌIÀP=I sXIây#º‘.ìàHâ Lbœ»Â mÜÀ Aኳb¶µKí>Ka'–çkÆøÎ×V ¤Žà0w®a|1{qy;N© \å.dóÄ›£,•FÀy#³ ñÐ ™_¡r¾‡Qu¨Xز­ÝÔ3©e8\€Ê¤óþÓ ú°õª2x›E‚I…Ρe G!ˆ;ΠÜ:ñ´žsÓ¯J—VЭ5—·k½åaÞ ©H¬¸*ÜtÎÖã2)íYGÀÖ-mÛݪVªK~îl Ç a áÚ2Z€7m¼C¦ÝÞ%¬?mÞó4 òZÍlê®Ê‡îÛ•'·­kì_Vÿ¾r²ø*%²e²V·²M<Ó\‹Uo4È“(ÞÞÇß àúÖxöÆm.Ö [k¨ã¹Ža?ÙÐ%ˆK‘3ó eÜ2§jœí_º:zNÅõoûèѰz·ýôkži³Z3ÛyŒˆ¶ðª9=\¹,Ä·8$ã5½@ ò×Õ¿ï£G”¾¯ÿ}Ÿñ§Ñ@ùKêÿ÷Ùÿ<•õûøßãRQ@<ëe²kÉ$’( ŒÓ3¦Õ$Ø#õ?’¾¯ÿükˆÿ…q éÍo+Ú4ì­¸6Á›Ë6¦¼œ‘¸«ã8ùG~k±Ó­¾Ç¦Û[yVÑyQ…òí“dKÑW°ô7’¾¯ÿühòWÕÿïãIEG䯫ÿ߯ÿÄñœj¾ñ ¿äsÕÉÿ–M[õ‡ãOùhÙˆë·nÑû¢ ÇU¢[kk2Ë}<òZÊn‰I$FXñp|€ r3þYäPï‘/üýËÿ|§øV'Œb‘< â×ãû2ç‚þy7 ®Š°üiÿ"'ˆìsÿ¢š€7(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+^ÿdž?ì&ÿúIs[•‡¯ÈcÃöý$¹  ³MÆ !TÔÖwˆ.%¶Ðî$ŠCùUå^±¡`ǦÕ,sÛÆÉæXß_ModÖÍ ÿE˜DêòÉæXÝ¿å ìÙÎFÓÀ—+)Yž‰ózΓ-ýÕÿ¾¿úÕÊøâ÷R†ÈÙØÇ ŠæÒä<±ÚIpŨHÀO¸X3dz޲/u¯bòÒÖ9m€[—FNšV]³Hwf‚Š¡Bî$· b‹= çþêÿß_ýj2ÿÝ_ûëÿ­\4^"ñ%Χ%µ´ììc¸ŸM™ °–$f+ ²Èο6@‚)..ñ€Òd´ØÅÞàÉX\°R³Dÿ(ç8—p<äŽ ê4]KZ¸Öe†þ$Žn¼­¶ÏŒEpcMÌX†Þ˜aÀé‘h3q?ï³þ‰ã3'ü ¾!ܪöeÏFÏü²oj߬?ȉâû\ÿ覠 Ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Áñ ˆõ_ ;*êRqž>Çs[Õ“â ;ûKËH.Q%«4a¶ÈÏC‚F}ÍYmJÉÔ«;F17?¥fÛZx~Òág‚Ü$‰Ÿ/÷nDyãäSÂñÇqÅbÿÂ=¢ÐOÿÀdÿ ?áÑ?è§ÿà2…‘ÖÿjYÿÏFÿ¿mþjYÿÏFÿ¿mþÉÂ=¢ÐOÿÀdÿ ?áÑ?è§ÿà2…:ßíK?ùèß÷í¿ÂíK?ùèß÷í¿Â¹/øG´Oúéÿø ŸáGü#Ú'ýôÿüOð ·ûRÏþz7ýûoð£ûRÏþz7ýûoð®Kþíþ€úþ'øQÿö‰ÿ@}?ÿ“ü(­þÔ³ÿžÿ~Ûü(þÔ³ÿžÿ~Ûü+’ÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ ëµ,ÿç£ß¶ÿ ?µ,ÿç£ß¶ÿ ä¿áÑ?è§ÿà2…ðhŸôÓÿð?€:ßíK?ùèß÷í¿ÂíK?ùèß÷í¿Â¹/øG´Oúéÿø ŸáGü#Ú'ýôÿüOð ·ûRÏþz7ýûoð£ûRÏþz7ýûoð®Kþíþ€úþ'øQÿö‰ÿ@}?ÿ“ü(­þÔ³ÿžÿ~Ûü(þÔ³ÿžÿ~Ûü+’ÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ ëµ,ÿç£ß¶ÿ ÄñŽ£k'õôWbͦ܀<¶òɽ«7þíþ€úþ'øP|9¡¸ØÚ6œÊÜmP‚=:PsEPEPEPEPÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-5.jpg0000644000175000017500000004177511625126536027747 0ustar drazzibdrazzibÿØÿàJFIF``ÿáRExifII* >QC(Q Q ICC Profileÿâ,ICC_PROFILEapplmntrRGB XYZ Ø40acspAPPLöÖÓ-appl²íÌÕÎ! Æ^~¯… 9nÇrXYZ,gXYZ@bXYZTwtpthchad|,rTRC¨gTRC¸bTRCÈvcgtØndinì>desc,ddscm>mmodÐ(cprtø$XYZ d÷:ÚXYZ j!­µ!XYZ '¾a°*XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgt/Nh}™°Â Ø ë ò !-:ALTW^cipstux{€ „!„"‡#Š$Ž%•&›' (¨)¯*¸+Ç,Õ-á.ö0 1"233U4{5 6Ê7ø9):a;›<Ý>?i@·B C]D³FGrHÑJ/KLñNLO®QRlSÊUVlW¾YZ_[¨\ô^C_Š`ÍbcOd’eÏg hAiuj®kámnDowp¬qÚst0u_vŒw¼xèz{>|p}Ÿ~ÇÜ€âå‚ìƒð„ò…ö†ýˆ‰ Š‹Œ(Ž3;A‘H’Q“V”Z•^–c—i˜k™kši›iœjhžaŸZ S¡K¢@£1¤)¥'¦%§"¨ ©ª«¬­® ¯¯þ°ø±ó²í³å´ÛµÑ¶Ì·Ã¸¹¹±º¬»©¼¡½–¾Ž¿ŠÀ„ÁÂzÃrÄnÅnÆlÇaÈCÉÉâʲËÌJÍÍæÎ´Ï„ÐRÑÑíÒÀÓ‘Ô_Õ-ÕúÖË×—ØaÙ-ÙùÚÆÛÜVÝÝäÞ­ßrà6àùáºâ{ã:ãöä¶å|æAççÉèŒéNêêÓë—ìXííØî˜ïXððÕñ‘òNó óÉô„õAõÿö¾÷zø5øðù­úkû)ûæü¢ý`þþÚÿqÿÿ  ý ù ï ä ÙÍÁ±¢”…wk]OC96,/.6> E!?"8#-$,%,&*'0(,)0*6+C,J-X.i/y0‰12¶3Ï4î6748S9z:§;×=>5?q@­AèC+DkE¯FøHEI‹JØL1M|NÑPQgR¶TUMV’WÜY)Zp[²\÷^8_}`¿aýc;dve·fóh.ijjªkêm&n\o˜pÖrsTt‘uÊwxLyŽzÅ{ã|ë}ï~õù€úþƒ„ …†‡ˆ$‰0Š:‹BŒIOŽX\`‘d’j“o”p•r–o—n˜p™mšf›`œXPžEŸ6 -¡-¢,£)¤)¥(¦&§$¨#©$ª#«¬­®¯°±²³´µ ¶ ·¸¹º»¼ ½'¾.¿5À9ÁBÂNÃZÄ[ÅGÆ ÆòÇÉÈœÉmÊAËËíÌÅÍ™ÎmÏCÐÐöÑÍÒ¢ÓwÔNÕ"ÕõÖÉלØoÙAÚÚÝÛ¬Ü|ÝHÞÞÛߢàjá.áðâ¸ãähå?ææíçÄè™énêEëëêì¼íî]ï.ïûðÇñ’ò^ó)óòô»õ†öP÷÷Üø¢ùiú0úøû¼ü€ýEþþÏÿmÿÿ÷ðôïííí Þ Û Ô Ë ½®Ÿ‹wdL0óÑ«„\0×¥uEÝ ¥!m":##Ö$©%~&U',((ç)Ç*¨+,t-[.B/.01 1÷2å3Ñ4À5°67‰8v9a:L;<< ==ð>Õ?µ@“AvBiCWDFE8F&GHHöIéJÙKÈL¶M¦N˜O‰PxQgRVSLT;U,VWX YYôZé[â\Ú]Ô^Í_Ã`¾a½bºc²d£e‰frg_hHi/jkkõlämÑn¾o®p¢q–rˆsxthu^vNw>x/y!z{{ó|à}Î~¾«€”‚fƒO„4…††÷‡íˆã‰ÚŠÐ‹ÇŒº¯Ž¨œ‹‘’p“d”U•F–4—$˜™™ôšå›ØœÍ¾ž¬Ÿ “¡…¢|£o¤a¥W¦Q§I¨;©"ªªÜ«¼¬˜­r®O¯.°°î±Í²©³‹´oµS¶5··÷¸Ü¹½º»~¼a½C¾%¿¿ãÀÃÁ¦Â„ÃaÄ=ÅÅöÆÐǥȋɜÊÁËâÌÿÎÏ9ÐZÑ|ÒœÓÈÔíÖ×OØ‹ÙÌÛÜ`ݹßàáôãåæ§èPêëÖí®ï–ñ‘óõ±÷æú ü`þ~ÿÿndin6˜uXáR¥ý( ¨P T9«…B-?Tl†£Äå 2\ˆ¸éUŽÊH‹Ñd±ÿO£ùPªaÀ!ƒè M ±  „ ì W  2  u âO½+˜sáP½+˜uåSÁ0 …ùlàYÏGÀ<¶6º>ÂHÐXårÿ Œ!!³"I"á#{$$±%P%ò&—'>'ã(Œ)9)æ*•+D+ó,¦-^..Ð/‰0E11½23B44Â5…6L788î9×:Â;³<¥=”>…?w@jAcB]CSDHEBF?G@H@I@JGKPLZMeNpOƒP—Q±RÉSáUV'WMXwY¢Z×\]:^c_”`Âaóc'd^e—fÍhiGj‰kÍmnVo pïrAs‹tßv4w‰xÜz-{‡|è~D€û‚Vƒ¹…†~‡Ú‰?еŒ\ŽÕ‘™“b•#–꘮š~œMžŸá¡¶£‘¥d§H©.«¬û®î°ç²ä´Þ¶è¸õ» ½#¿NÁoÊǺÉÞÌÎ0ÐXÒÔÈ×ÙCÛ‹ÝÜà&â|äÕç*é}ëãîJð©ó õs÷äúFü¼ÿÿ $6Le¡Ãé>mŸÕ H†Æ O—á+zÇhºiÇ)‰ëP´  ‡ ñ Z È 5 ¢  ƒ ö g ÚOÁ5ª#š‡þvòiá[ÖNÊFÁ=¸7·3®1¯1¸>ÃKÕ_î| ˜!*!À"U"ì#†$$¹%V%ö&—';'Û(€)')Ï*x+ +È,s-!-Ô.„/3/ä0—1H1ý2¶3n4$4Ø56M77ö8â9Ë:¶;§<š=‰>z?l@_AWBQCHD=E7F4G4H6I5J=KFLPMZNfOyPŒQ¦R¿S×T÷VWBXmY˜ZÌ\]0^W_‡`´aâcdHe~f±gæi#jakŸlÞno_p¥qîs2tyuÄwxVyœzå|6}†~Ò€l‚¹„ …a†®‡ú‰MвŒIý¨‘^“”Ì–ƒ˜7™õ›¶nŸ( è¢°¤w¦@¨©ç«¼­•¯v±b³Kµ6·1¹.»4½=¿XÁdÃAÅ1ÇÉ ÊýÌøÎîÐéÒôÔü× ÙÛ4ÝWß{á¢ãÓæè4êkì´î÷ñ=óõÒø)úrüÔÿÿ &9Oh„¥ÇíCs¦ÞU—Þ&tÆwÕ8  {íhâ`Þ ] Þ b å i ð w ÿ ‰¢/¿Qå}®Mí‘7ÜŒ<ì¤b$ÕŽHÀ~B  Ç!"[#(#õ$Ã%–&k'C((ñ)Ì*§+,\->."//å0É1­2—34f5N6<71879=:@;Ik?v@ƒA•B§C³DÂEÕFëHIJ5KTLsM’N´OÛQR4S_TUÉWXAYZÇ\]L^~_¸`îb)cdd¦eèg&hliºklTm¡nôpKq¦rÿtYu¹wxwyÒ{4|Ÿ~h€Ð‚4ƒŸ…†v‡Û‰GŠÁŒV÷‘‘3’Ý”–"—Å™k›œÁžc  ¡¹£j¥¦È¨€ª6«ì­¥¯d±)²î´­¶y¸Kº»ò½Î¿·ÁyÂèÄNżÇ0ȪÊË“ÍÎyÏóÑYÒÎÔ8ÕŸ×ØYÙ°ÛÜUÝžÞÞà$á\âã»äØåõçè+é@êNëRìOíMîJï?ð2ñ ò òïóÑô®õŒöi÷BøøÞù¬úzûIüüÝýþÃÿÿdesc Color LCDmluc nbNOèptPTúsvSEfiFI daDK0zhCN LfrFRXjaJPjenUSxplPLŠptBRœesES´zhTWÆruRU$ÔkoKR ødeDEnlNLitIT*Farge-LCDLCD a CoresFärg-LCDVäri-LCDLCD-farveskærm_i‚r LCDÉcran LCD0«0é0ü LCDColor LCDKolor LCDLCD ColoridoLCD color_i‚rm²fv˜oy:Vh&25B=>9 -48A?;59Îì·ì LCDFarb-LCDKleuren-LCDLCD colorimmodœ`¿ø{€textCopyright Apple, Inc., 2008ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ°Þ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +œs+Ï97÷®0# 4Ò²€OÚ.Ž; œŸË4ÒÑ\ƒ_*±v¢ßí"ÎÊ}Á{Š|BáÙæô:€JÈÒ¡ÁïócÒ©ÆK[Ìž—:Ê+›Û/üü\ÿß÷ÿ6Ëÿ??÷ýÿƤ£¤¢¹½²ÿÏÅÏýÿñ£l¿óñsÿßüh¤¢¹½²ÿÏÅÏýÿñ£l¿óñsÿßüh¤¢¹½²ÿÏÅÏýÿñ£l¿óñsÿßüh¤¢¹½²ÿÏÅÏýÿñ£l¿óñsÿßüh¤¢¹½²ÿÏÅÏýÿñ£l¿óñsÿßüh¤¢¹½²ÿÏÅÏýÿñ£l¿óñsÿßüh¤¢¹½²ÿÏÅÏýÿñ£l¿óñsÿßüh¤¢¹½²ÿÏÅÏýÿñ£l¿óñsÿßüh¤¢¹½²ÿÏÅÏýÿñ­-Ý¡]ÝöÉ€]‹`w4¥EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPi¹¦?ôÚOýÕMfÞY4›Ÿ*ëį̀X¾Ü‚É Á8#ÓŸ¯ êZǹe?ôÚOý Ò_ÙµÖun„–'@O@H"ª.ÒL™+¦ŽoÂrɧémý©q{,Ó9B,%Û?ÂOÄöÏOS¢“Ãw®ÌЉB­²æBñŸ¼ý˜L]ø}™¸ÿ¨ÍÇÿVtÍ2æ é®'@ãT ö§œðIÎ\ ué[MÅÝÿ‘”•‘æz¼P-F¦µî«|žv™q‰ãnò]ýxúÑᯉ’ÛxjÚãÄ¡¤žX®e[• ‰#E!_(8ÅvúmÕÖ¦ÛéÐxS]’+d£¼–y`;ÿ®ʸ}KÁ—2éZ‹iá=fM>ËPk¹äºšÐÊT’ÅWl¸ “ƒœp;×9¹­¦ëZÏŠ¼MyaÌÚ46–PO±#ŽI Ê¥°ÅÔŒl}j爼]7ƒ4«y5E³»š8Ü‘v°»’pLqKzãŠ/4뙵‰5[-ÅmäÑ,3=¬–¼Uèy[õ5¨ø*E.Q´D·VÑ[O¶{2,xÚIyIŽpFhÃ~-¹ñ»©XÅ¢IŒÏÞ›…*Yq·äƒžàc­o<×Ã\ŽÑtÒÖ ‘¯¼ådÎ{:œŽsÒ°|?m/‡QkO xŠCtn¥óe²;X€0¸˜qÇ|Õ·¹ÔŸ]Tÿ„Å ÜÁöAqiä6Nw•óþ÷lç¥g\_jº¯¯Ÿogf— $1Fîìçó« }.¿â›èÐË©ýŠòxãÝ;¥ä绌‚XãœqF¡cuy­bÛ@ñFŸ~Ñd–ÖK½@CÊÃñ¨x2=@LBñtf{Qi;,ö,d@s’^RAϦ(WGñÓêú®§ èÒE§ià™¯šáH p6`œöÈ÷¬? øÓ[“R¹}l«Ú^ÚÉ{¦ EO‘3ò’p;äÖ·‡R×NÖ,WÃ>(huR¦ã3Ù6¨\) p)³øOJZ›oêöÛ«5™²ØÚw7Íø÷ ˆÓ;FÔ.´1 ®¬Ž`+w½ƒª–ÁsøSìþ"<–šõöö[-\7•"]yŒ…A'+´q×?…G'†#“GÑ4Ãá¯y:>ï!„Ö;Ÿr•;¿{ƒÁíŠzør!¦è á<:+€4ÖY“ ‚÷܌ؠ :{ÇÒžM$Ci¬3¦Ÿ1¹Ü]€$]¿ 8ìZ ð7ˆõ½KÃZ†£¬%¬‚ÞâtI>Э„lU{9=À¥Ó¼>4ë»)G†üQ<{3YZÍ5‘ŽÜ·]¸”ø“P?…Õô}CHÿ„{ÅCO½›ÏòÖ†BÛ‹!ósÔtbGµfëßµ ü1«O£Gkæ{ÍÊÜDVF(Û0Ùèr>£©ªxæ]_½ƒV¶‘M¾›Á·‚u’##˱B“¶NG$ãýžõð”rYk÷ñTçUxdšG–ÁYZ!ò (·b*[¿ ®¥wqu©øsųÜY-œ,¶ ¯½\l”aÇ=8é@Õþ"Ë Ç}£¢ÔmR …¼w{‘ã‘Âg~Á‚ 鯷4¿Mw⛿ÞéÂÖîe»R“ùªñ³mçå9íÏÖ¹Ëß ®¥ovº†ƒâË«›‘½Ü“Xy#`ʃ…#ž2}k¡²µ‘üjÚóxs]‚ââÕl¥’ÐÃݸ…”¶s韥t¾UM¤Œ}¨Ó_ý”TÞU3M–ðÓ_ý”Pú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€3mcºd”Å,*žt˜ 'ïžû…Eý£ýôÏóÿ«¶ê$ÿ®òÿèf¸}7W±û8û]ÄåVuû=ꀪ±Ã`pÙÈnÕ¤!Ì›} ªTä±×Ãt×2ypj:|¯Œíw~Tõ-v&á`»¾„JWyH¬å”ªÿy¶´{œ çôϬZ¼³*´29Ž1æ»Éò£’Äîä˜ÆkU¯…â]VkË;Éb¾1=¼¶öÏ0ùP!C´¼‚yÀùºÖ|Ñ—Â:uѼ©zÊg¶ ŒÜ·ÿU4»Éõ}*ÛQ·–†â1"€†úáë–šÔ¾¡16Ä-~ ¿³>ÛÍn6åämÏ^Õ§iχÖGLº}PÙÆºKý•ØÛ¿”Þ‘&IÎ8 Ðôß*ûþ{Ûß–ÿâ¨ò¯¿ç½·ýùoþ*±¼a%µô×P2]É}s¹ÝHf_5Šã?ÃÉ#·9ªºï…µSV’êÓZû,,¼Û±Œ #¸Eü”~4¹{5Ý……Åä’BÑÁJÊÄ($€7õâ³´½yµkùìà`’›ÛÍ· ½Óœ÷CøbºR±*±Ü@Ÿ_θZioãIeÖ4«›ËfÓbHLvrL¾g™)#åÁœc=Etv÷“Üê7–),"[Mža0ã#=\ò¯¿ç½·ýùoþ*¼×E¶Õ´}~ÛQÖm¯dXURycå$˜ˆ(%±À8Î)²E©Ïysy%¹‹L–êá–+Ý.k“¸‘†òÑ•†GCÈúPsy«Ëcª[éòÒÏ·k%¹*71Q“¿Ú´ü«ïùïmÿ~[ÿŠªÞ·žßÃöQ]HÒΑáãòÉ甓Ž;dÖ¥Tò¯¿ç½·ýùoþ**ûþ{Ûß–ÿâªÝSʾÿžöß÷å¿øª<«ïùïmÿ~[ÿŠ«tPO*ûþ{Ûß–ÿâ¨ò¯¿ç½·ýùoþ*­Ñ@<«ïùïmÿ~[ÿŠ£Ê¾ÿžöß÷å¿øª·ETò¯¿ç½·ýùoþ*£Óƒ‰o…Kù¼•tvÉ«õNËþ>oë·þÊ(åQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@#¶ÛÑ-¢‘LŽá¼ìpXž›}éíNŒ¦Û²° ƒ7ø hQ@•Ÿ…ÎýnVÐȱ¶è¡’äŒöÇÉ“rk¡óïÿçÊ/ûÿÿØÕÊ)$–ÄÆŠ~}ÿüùEÿÿû<ûÿùò‹þÿÿö5rŠeüûÿùò‹þÿÿö4y÷ÿóåýÿÿìjåbÝ_6ª×šf“va¹‡jÍr#ܱ窩é¼Ë4Õצ“Y}.+$ñǾVY~H³Ð1ÛÔõÀ­>ÿþ|¢ÿ¿ÿýMmn¶Ð¬a™Ø( #œ³`u'¹©¨ŸŸÿ>QßÿþÆ>ÿþ|¢ÿ¿ÿý\¢€)ù÷ÿóåýÿÿìhóïÿçÊ/ûÿÿØÕÊ(ŸŸÿ>QßÿþƳíµù®u;;ìUÔì’\o_ï)Û‚?Zܪ×ÖK}k$>l³®±6×_¡ y÷ÿóåýÿÿìhóïÿçÊ/ûÿÿØÕH5,¯-´»á<³<-ß—òHñÇCúV½SóïÿçÊ/ûÿÿØÑçßÿÏ”_÷ÿÿ±«”P?>ÿþ|¢ÿ¿ÿý}ÿüùEÿÿû¹ESóïÿçÊ/ûÿÿØÒÙE*4ï2*4» Û€ÐzUº(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢šÒ" ê¥ÎÕãqÆp?*uQMYÙÕ]Yá€9*qœN?:Š( Š dœXou.ºðÿe_ì✋™Q~gÛ•OLÔûP=ãë©-¶‘}ä¤Sî.3‘Ýcn™ìO8úÖÌq$K„P2rN:ŸSïDQG a"EDŒ }QEQEQEQE2X’hš7V¡¬?2ãÃVðDÑÞjFB ¹ÞöëØŒ°÷ë[ôPh¬+›It1{¨éMtf`òY‰0¹ÏÌÊFÇnõ¯ksݼsGCma†\ö#±  ¨¢±uýjïJ“O‚ÃM÷7³4I\@ÚŒä– öS@TV~&ŽÎ Š-.í÷2[‰üòÈ07ª;°ãjãĺ=­¼7_Æ"™wFÀÈõàqøÐ­ÏÇã=ù†[èwf"¬\È›Q·`?Ö/à÷«Ïâ *8!™¯¢òæRèÃ'*:ž:P•ˆê讌XdЊZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+€Ô­¯¯/5?ÚÜÉÂóíð¶ò—³xôó¸Ç 5ßÔ"ÒÜ^5à‰~ÐшŒ˜ä¨$ôÉ?yåÔ×Zα¦êV“˜Œº´p[³Êª–s–;}w3ÀU¹|Q«Ùê²h’y×SÅq"«[PÌʱC ù3€}ø vK¥X „-¬j ®"}Ù0fç{~f¢ºÐ´ËÑ8¸³G3È%”ä‚Ì(9ýÕQøP ž.Ög’;F²¾†e·iY¢³3~öDRËŸ—ˆ÷þÕfÛëÚ¼2jºˆÆ9'Ž{æ Z,íŽ çîòÙ#¦wÓøsH¹¶†Þ[$1B1Œ~ äÓgðÆ‹rwM§Âß8sÔBªsƒÏÊŠ1ì(UäSœäg43*)f`ªI' ŒÜÛ¥¯Ú Ñ‹p»¼ÍÃnß\úVZý§Yº¢I Œ´û‡@?ZâãZžÚk ˆ¿²pÆWÆZcÈÚ=¾kV"¶…a‚5Ž4TQ€:8Ò–8ÑQaUFê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+2ëK |ú¥žáz#*P¹ËLJ±ïZtP7PkËxÍÍ»Z]î·Üu#Ô{Ö/ŒtiõY4‰"Ó—PŠÖåä–?’H1:‚ذ­«í*Öþ{k‰U„öϾ)¶°öÏ¡î*-FåYáÕaŽÚQ.Èœ?É09#n{àt  mB–ß\¶½:JiöñZψÜyÇ{m,‡.Ñ©cêqVh¬(£Üf?ôÞ_ý «v²íc݇òÞ_ýÔ—¬Gt4©ÞÎhᕱgà‘»øxïüºŒï j-v¯©Z‘‹Å80¡è¤çôíÓØt:¥œ—ZEí¼K™%Ñ8䩳|½SûºÏý÷k[Ók“•˜Í>~d:)­¯5Û§µ™%Am,‡ ÒWžè?u,ZjZS7ˆ'%±‚!.’A•`yÀïsÆ? ô}.Òì_ÜÜ\­ÈWŠ4SpÑ–Ê—'îq˜~µ‰£jV‘¥i¶fÃXž[Tµ[ƒ¡Ü†*ªÇÈpÆk:–æÐ¸m©Îxcâd¶¼×ÔCvösÞb7XådÚ¹'æàqïPê?µ ÖÔÛ œÛÚÏ£Âñò‰¸Ã òC}:V.¡á[C¢øOÃñØë—–ú}ì²ÝÞâ,BÌ]“nÒNâ@ã=3]f·c¢ë^-Ðõù-µØßKÜ #Dº"aÕ9ÙÆÖ$ô9ö¨,æ}JºµðÍ´ÿÛÏ‹i-£¨Ð®¸Y!¿/=èB‰z+Ás5ÌSÚÇ¿C&ÓæÂ[ha‚q’@ÁÁäVV¹ãÉ.Žo§yö‘ëvV×qI±‰†PÇ v犎ßÃZ2èw5Ì:“ÙÉköex<1K§p¸+œg8ÆxéZw?lí£Õçm2õ­t›³iw8ÙµN@Ü9ÉzÁÿ„?Ã-¡Ibñø¡¯d˜ÜßìÛÐ|ÝÛ·ù{vg·J–M Â_ ø“HyõÒu»¯´´ßðÜþèåN1·æû½r:м¿lb·Õ.¿³/ZÏLºû5ÕÀÙµO0ÉzžëÇšu³ÞH¶—2ØØÊ°ÝÞ ]»c‚ ÉÆFp;Ö šžþñ&æë kW_h2ÿ`\þç•ã~o»×#­-Ö…§Í£gÚìZf§2O{mÿýË3¸Æv¾ß”£±  'ÄÚÿÄcDm?6‘Âñʬ  u's|܃Žé5N§e:j6ö^À’+"/á¸Á䃃UžÞÑ ØyÜMaw½Õ¼·6r8\\,k¸…ÁÈ8äg†š œ–Ú ¥ìúÔöÚ:ËhžºC$O—µŽ s? ÃöRZÚZ]Üë³[iö³[X ðõʘ„‰³s§yá  ý3Ç–zÑ™´ÛËh5‚VÖYvᘠí G×¥uþWµyÕ¶•§ÛØxR×~ºßðËæþÁ¹c~^¾õꨒ5p¬@e þ ò(¼K¶î×ýöþUcU·ˆÓe¦2í½´ÿy¿•M¨ŒÇÿ¦Ë@|¯jäõæÕ ×¬Ò ëh!vܲIÇ”£ïdgœþµÜù^Õ¨Ú^ M.-–ëg“°›fˆîÏ>go¥kF\²2«h»Õ4£§Î¿ÚÌæ&62q\‡‹¼A¬x~ËB:Eš]´ù3ÂA,Ѥ{›o=p­tsÁªK‘…ÕòêWæ{\r;â£Õ­"³¹Ðoî…ããʵ²’à¹höìhëŽhšIh ·©Å^üKžëSÐŽ‰ddÒîîã·¸¸™%˜dƃ#æž•Uø“b4 n4”w¾k)îcI#â#r$ã‘Ò­ëƒJÕæÑ^+]fÑ4Ëõ½Ç Ü‘!ÊýÁŒç9æ¹]+B´‘üd÷Zn·bu“%½±þȸ—ˉ‡/€ŸÄÜã"²56­|w‡µ¨jÖÚža…¤³±· $M!QÉ.rlv­[¯éÚuÆ¡o©Z]YÏg\yr&DfÚ»pO$à`Ö%õ„º§…Ã×·Ú‘µ‰`Xž/ Ý£)”Œär\ûS|S¤éšî¥©êˆ®4ô¶KhtK€ÁÒO1X3(88ôk]ø‰ý˜nm&Óo,/ †ƒæ$rü(AÀqÎO¯sþ-ŠÚ\Þ¾™z¶6×ía5ÁÙµ0\ã9#$t®.]"ûÅZž¡{®C®ÙyÖ¶öèÍ¡L]Œr‰ Ø›€ûǯá[³h:|¾Ôô?7]ûS:‡ýsòeÕöco?wÏ~”¿t©5ØôÕŠm’^¹ùvÀÉLgw¶qŠßÔ¯$ÓÞÉRÂêïí7 "s󿢌r}늰Ҵ­/\šúÖÛPòf»7l²øbw™\œ²”Ê‚}²;èµ=wíodlŸ]²ܬ³ ÜIçÆ3˜ùO—FwoõíŽûV]¾˜ÞK}ÏÄ·×pYKe4©¡Hªñ´†Aäm ±Áºr;U+ÛÉáè-o.5¨.š–r,zÓ…"çíhÏ÷Zô ¿éÚeÆ¡oªZ\ÙKgj·{d |ÈÙ¶¸'’Ä jü}f¾×oE¼^iAVKiˆ'{®cRAÉ>µâ=Fñ.µ}všúÇu¦­‡’ºÏÈVQ }Û9ä1øÔ3hZeýœvwé©‹aqÒÅaᛋQ08V*¤òNsžÜb€&Ó> \ØøKV¿ñ-ž5&x㺷µ\²Ø@'ý¯^Õ¡«üE±ÐŽ¡¡¦^Ã=¼w^QØZXžAaÏf°5¯hzŠjI`þ$²MB¢™dÒ/.2REpùqœü»zô5cÅúŸâÍNöôË®Úý§NŽÇ`Ð._nÉÖmÙÚ3¸Ç¾sÚ€7®üy§i—:…¾«isc%¢Þb@™>ÀW󸃃ÍAªxÚK}+[H´Éíµ‹8ßGms´îá°@#‘œñ޵CÄz6âmnöþí5õŠëKy…4;œ©Y„¢@Û;8ÇãOWw¥Þ±&¹yy§0ËsŽœáv¶X“œçð  ­+ÄW³ø;OÕîô™ÅÄ1¿•Ææ0åÆ[ §œsÐVü@º¾Ö|'ý‹§=άÅrì¬Udc?*’À¤ç‚Z]";;B´¸ºÕ¦81Æá«£Ñì‘÷aŒ†Î9éLÓ´ ]'OðÔvW:мÐMÇ•<¾ºd•f'p(Ç›µlXøî'¸´òg¼¾mZæÂÚÞ8Ö6o(Ç%ˆÀï>‚¥‹â …Åæ›em§ÞMy{5Í¿††X.“Žãž•‰ƒcg|Ú•¤úâj)ªÝj0JþºdA:…xÙvÃs‘Réš—¦ëšN¬^’âÎâòêã: ÈûD· ÜùÀãšì<9®Ûø’Îæx!– -n¤´¸†\nŽTÆàpH=GJØò½«œðE®Ÿq­Cö“¶¡¨Ï©–ºÓ&¶Xü£`g1úžxâ»+Ú€IÿE§ýr_åW*ž“ÿ ‹Oúä¿Ê®PY–°Ü´rç‰PÏ.DXÞ7}´ꮟÿÏÿ]åÿÑ@ÿÚPùiÿ÷Èÿâê[{ŸµHc·Õ,¥p7Hòqë÷ýÅqú^·`-»ši[Fëä_Ú©–]ÁÎå~1Si>"òu[vœ#Å;ù(¢Gw‹Ì*ÜÄîUÏLrkJªß+ÜåX…Ô׺ñ=¥•ýͤ÷®¦ÕÕ.&þ͘Ã(®J>Aò²žO­XäšS([¸€‚–kfU$¨a´–à 0äwÈê sé&›­xžÝôBêKË´’ÝRÑÌS/ÙaNdÆÀ7+“Æ+›MRÓ,§Ñ®´¤¾·{ˆƒ\ϧ½â—ŽÊÚ0ʃy„ƒ~@]§&³:IÙr>ÙmŸO$ÿñTywEw}²ßo¯’qÿ¡W˜èþ¸ŸÃ/s¨é¶¬×šJù²ÄÂaŠÍfÁê<ÐØôlô«×ú%ýŽ­x,íRßD‚öB–ÿÙwÝomµ’eÈÞ'äd'Žà¸’é¢Ômô÷¿·7<Ñ'ÙĮ̈P1ÎìuuúçØÕ.ëŸôË~:þäñÿWc Åm«xfûRÓûËŠê!;i§tóÆð|Ÿ;Fª…$ü£©šÃ¸ÐõÉ4+»YÄ’jQé×kp ÑäF¸v‚EÚn •”*@PI ppê¢ ÃÒêÿlÿGÙï?çæûðøªšÖÞ+[uŠ–4动Ç$ä“îI$žä×+£x7PÓ5ˆ/fÖ¾Ñe‰‹76AÇrëߺŸÃ­ikz•Ƈf·2“:±q¶ lŸ–7“»Ž¡ú‘ULjí¾Ú-Zô£|Ÿ1´ùD^fq³ÌÎÍÙãë]5rZ†¥§­Åcuª–\/î×Kœ¤²+‚¬ÒìÚ0 8àqÅ^·Ö"º¼Kh¯Ð¼…„LÖnB½v¹;[ð4š&©q®[<ñO/åžÛï$ô÷±ô»K±máM)­.Vm"M×R¼L¨BA$\9mÌàŒ]ÅSû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹Eg:J—¶‚YÎæÁTÛÛêj]D3GF ÆeÁ# ~]Çý—ûÍü©×¿òïÿ]×úÐ{‰$´ nuHCñc?›Õí(?è3§ÿß?ýTñuØ´KFó„E¼ÀÊ#ç€ÄŒƱ.õËO.bÓ$Òe·ËxÒ¢€}B öÍhãÞF­ÊÚ:ã$‹hnΡköp¥Ì¾WËß;ª–™¬.¯#¥­ÑT6f°– Êz,Fáî3YqÏ'ˆ¼¨iö±s~W9 Æ}pE]¸Ô?¶ô[¨¡±½³žÞ1*«f‰REäXØ#¨â³ºz£XIJ)¢ÍÎ¥%®±šó,ÑU’Ô²€œ6G.9ÆÎH«â;–8[Ër}¡?üUyΫ¥j7³i7ñØÜH÷(.f)m…®`` Â/þ:jÃøfæÇþmNk]QìŒWR¤e_?fl _¾èp((ìô£YK1^Ýî7ˆ>PªÊ¤Ÿ®\~µs˺Æ~ÙoúâøªóCKk½SÍðÞ‡>™²+q$šsF%ýôLÊWå2¡»Üàšµ¥è·:æŸ4ð4Ö-tÅâSÙ˜·•I1»1䲂Nã­w¢+¢ÅEݹ#¨ž?ñê_³ÞÏÌ÷àÿñUÌx^ÈÙøŸQòì$°‘žò{6†RæL„.x•q’ègÄ^¾Öµ!uo«ý‘a<¼Üõóû»ˆ×¿÷sï@Ôq³½Ýº¢Œ’`8þúªZf Ú¸‘­. 1‰$°’4ps‚ŒÄu\Ñ­i—W> »Ó µÓY˜UÁ ³mÆrI?™'ÜÖo†áeÕüËõX4ï³2ÜE¨ùÙî]»<Þq·~vü½(¡û=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESû=çüüÁÿ~ÿGÙï?çæûðøª¹ESÒäiÿ\—ùUʧ¤ÿÈ"Óþ¹/ò«”V|3Oj¯²ÿ{#B„\‘ü^†´(  /vò##é·,Œ0ÊÁ#ÐüÕ‡cáë õºM;P“Ë9†)2‘nrqÛ$⺪)4™.“»E?·Kÿ@û¯üsÿŠ£íÒÿÐ>ëÿÿâªåÊ)ýº_úÝãŸüUn—þ÷_øçÿW(  n—þ÷_øçÿGÛ¥ÿ }×þ9ÿÅUÊ(ŸÛ¥ÿ }×þ9ÿÅQöéèuÿŽñUrЧöéèuÿŽñT}º_úÝãŸüU\¢€)ýº_úÝãŸüUn—þ÷_øçÿW(  n—þ÷_øçÿGÛ¥ÿ }×þ9ÿÅUÊ(ŸÛ¥ÿ }×þ9ÿÅQöéèuÿŽñUrЧöéèuÿŽñT}º_úÝãŸüU\¢€)ýº_úÝãŸüUn—þ÷_øçÿW(  n—þ÷_øçÿGÛ¥ÿ }×þ9ÿÅUÊ(ŸÛ¥ÿ }×þ9ÿÅQöéèuÿŽñUrŠÏ/5Íå»›Y¢HËeŸoqìMM{ÿ.ÿõÝ­Zª·¿òïÿ]×úЗvÖŠ­sq!Ž‘Âçó¬]]4 j4Œ $gä–)Ð:ûs‘¨¨¼[wöE´o8D[Ì ÆQ8$z÷¬[½vÐG±’tšL¶ù¯žTP¢HA>Ù­"©óËcš­T›‹:«t­ Gi¡•Ð1îÃo÷'½Goâ/Tn±Ý6v†Š{Sr±À8d\÷éêk.Êú×Yðµõ¤ö’̰ ’Çk’_'p)žsßÕ‹(ÕnÒ8Sû_QÓ"¼´6¡bb™JÌ¥€²…’Wñ5’µ´ØÚ›N)ÄôPWoÊF§jp9é^Qm¥‡ÓëHÒNš²^‰oídЦ åaˆ@ŒËƒ‚v“É=F+¶ðu¬öº<¾s³,— $JlšÑQH,LÌÊ2 䃒x¦YÐÕ=OQK¶IäŠY¥H¶Ä9fHàgšæàð~¥¾º‹k› w‘ºóîîÎÞnŠ{}̳Ž+° yQn- µ»ç”/ʽGßS׃WuæÓïãVÔt½e–Êì¤rÙ‰•Ôù|ȾKd!ŠñžsÅOsâÛ;{ѻH¡ZÍápQ Ÿ–@§ Œf·ëÂëvºtßiûW’gch.óçp1¿wÍœîûÜã­º(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š§¤ÿÈ"Óþ¹/ò«•OIÿE§ýr_åW(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ª·ë)Š6†#+$ŠÛC>µjŠ¡öËïúÉÿSük7WÓÛZÆ—p’F~Ibš0ëíÎF>¢º(jû‰ÅIY˜z]´šE¯Ùít™@'s;L…œú“š»öËïúÉÿSüjýI+"‡Û/¿è'ýýOñ£í—ßô “þþ§øÕú(Cí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÑöËïúÉÿSüjýCí—ßô “þþ§øÒ‹ËÜŒé’ß§øÕê(¶Á§[Å"ítŒÎ*ÍPÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-7.jpg0000644000175000017500000000770711625126536027746 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀDŸ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ôÝB¶Ôô绹{ég{Ë Íý¥pƒyð JÑÿ„OOþí÷þ nøº—Â?ò?õûyÿ¥2VÙ N}#A¶œÃ,׫*€JN쑞›™áù¥H’â𻪧v2}9jÍñ¤$:žâX¹·ÃFÅI;9€xÛ¸çc=«[í—2Û­ÊF…o¢Ø]àŒ·|óÛ’^•£ŒU´ÜÉM»ù?†ô˜G»Gs…VÕîAo§ï9§/…´×Îß¶¶5k“ƒé÷ëÇZt—×î¢ÞæA.™,1ùVFpòBÁNÌÿ{+޹ÍAS«\瞟Çìiÿð‰éÿݾÿÁ­Ïÿ\ÔšN¡§jÆòý'½œ½”—6öï .YG  œ„HØžõè6× wl“Ʋª8ÈÄѷ⬈  ?øDôÿîßàÖçÿ‹¬gO]Å^s_D.nçI‘¯æ‘]E´ŒÄuôí]ýqž0ÿ‘³ÁŸõûsÿ¤²Òm4_.D¹bnîÛ1[I ÿ™{ª‘øV¯öͯüò¾ÿÀ ÿøŠ©á/ùŸúý¼ÿÒ™)u}ZæÚàÚټĀÜO4ªÌ°Çœ´`±b#îžze7a7bõ¾—póHuT2m.‹c)RW€pc<Ñ |SÅ+O­Kå¸uI,åÛ¸t'Š]Ä7WñÜÉo<7.ñÅ<´[ePXÆÈK`í‚8=*Å÷‰`ÒõÉ,ïE¶[h¦ó’p…Ô—*EG'Iè)TmZä¨Åê^þÙµÿžWßø?ÿGöͯüò¾ÿÀ ÿøŠÇ‡Æ–‚úîÞæ)Ö;dV3Å®„™ä„/ÝÎìÆ=rIÆq“rÓźUëºAöÃ"Ç#ìk)”Ÿ-‚º€W–R@ sÏÖ‘eÏí›_ùå}ÿ€ÿñlÚÿÏ+ïüŸÿˆª–Þ+Òï.-íà7O<ă´“tXb‡Ì~A¸“ÆzsNðÖ½ˆ4‹{¥½0DóìS嬌™\gÇCÎhÏöͯüò¾ÿÀ ÿøŠ?¶mç•÷þOÿÄV…Ÿý³kÿ<¯¿ðþ"í›_ùå}ÿ€ÿñ¡EgÿlÚÿÏ+ïüŸÿˆ£ûf×þy_àÿüEX¾¾·Ólf¼»“Ë‚.í‚p>ƒ’}…aŸYG$Úê–ÑÎe{9F7»¦Ö]¹)Ç÷·qî©ý³kÿ<¯¿ðþ"í›_ùå}ÿ€ÿñšÞ1Ó­Úãí?i6c²;9ÕV8‹¨L©UüÇ|жž%Ó$Õ#Óã–W–I I"Àæ&p…ʉ1´ªN3íÔ'þÙµÿžWßø?ÿGöͯüò¾ÿÀ ÿøŠÐ¢€3ÿ¶mç•÷þOÿÄW)â{è®ü]àá\)[Û‚|Ûi#ñë/vQšîëñ‡üž ÿ¯ÛŸý%–€5¼%ÿ ÿ_·ŸúS%Câ "êæi.-Q¦IíþÍu H#‘”1dhØü»fá°=xæo Èÿ×íçþ”ÉZ×Ú@óÜ΃/$ŒT{“À¤ÕÄÕÑÌhšâ^Á4ðÍmkÏp±ÜIJó2”,|±µWk79'¶9ÒÕ<3­zóË{wSB¶÷6Ñy~]ÄJÌv>ä,ÞÀí+‘Z6wÖšŒ&k+ÈnbnødW\údU¤ÿý(ŠIh(¤–‡><h&yúùVBXÁl„\4êNS# î8#ƒÎH‹X\ÛMÜ]•®ò‡™¤Y‚¤@d0`k ÚßßoÓü(ÚßßoÓü)”r°ü?Óak ]ݲ¹ûR'•n É¼>r±€2¨#ƒ‘Åjè´ðÝ·Ùl%œ[yq¯’åJ†UÚd†lØÂ’3€K«µ¿¾ß§øQµ¿¾ß§øP¨¦íoï·éþÓqæ7éþ%Íÿ=ôÿ 67üôÓü(û5Ô,'´i^5™ EV fOЂq\ý·,,í£·‚úö8•Bʈ!Q6%iW G…û`&ÑÏCÅt¥ ™\ôÿ <·ÿžÒ~Kþ‘/…ìå¾½¼i®—‹*È\$qFØù} R3žIëÀvž¾¶ñ5¼ëpWH´•® „δFÇg”¥2]˜þñ†z(ÏQF&gü—ü)|·?òÚOÉ€$¢£òßþ{?ä¿áG–ÿóÙÿ%ÿ ’¸ßÈÙàÏúý¹ÿÒYk®òßþ{?ä¿á\‹”¯Šü ÿM¹äãþ}eô  Èÿ×íçþ”ÉYÞ!ø›ÌÒFÒ5®žg²Œ |ÊX‡p§†*<¿¦ãëZ>ÿ ÿ¯ÛÏý)’´/ôËMInaÜc;£ub¯õV*~†“WDÉ]†‹4Í«i²Éÿ²\M Œ#Øe¶–VaµAÃlàcv;ÕŸkÕŸ‰--lš-JDêÓnÅ×`ññ–!BCóg$ŽŽÇG²Óåy¡ÚwZi¥id#Ósqíš¿ŠQVA´µ<õ¼E«k´š{˜œÙÜ$(‚X‰“mû#… TG€‡¬®+>³­jþ¿[»Ë»FM'u­¥­® Ã5 v…@Úa^•Š1TQo>|=ö‹k×½>C«s¡ç3ܪ٪ý‚F·—1®äÇŸqïÑ…z(À   äú‡‡´ÛÛ¤Xîn-bšTU*Ù Èäž hQŒQ@¾0VkjŠYÍ”À¥²vÓô®VãÄ:º4É£?öz¼æ×R!ÚâEHLpí †Þeù@-å…p$ú% 5×5]^óLÕm.«4Ö·Q\i‚ß+m·r’ Ëp£9 ï ©5+x—]Ž÷V7OåÃK‚™­ÀcŠPª… vfw|Ê0¥kÑqI@we®x’ãN’æK–G³MÆ1n\âîh¾bQN h§*«É )ôQIŠ^”Wãù<ÿ_·?úK-vUÆøÃþFÏ×íÇþ’Ë@gðx7lÖ¯–?6FHÚÖÎ@¤g* ÀÍŒ±êOZþïúÝÿàŸÿÈÔQ@ü!ßõ»ÿÀ ?ÿ‘¨ÿ„;þ£wø§ÿò5PÿwýFîÿðOÿäj?áÿ¨ÝßþiÿüEÂÿQ»¿üÓÿùøC¿ê7wÿ€ÿ#QEð‡Ônïÿ4ÿþF£þïúÝÿàŸÿÈÔQ@ü!ßõ»ÿÀ ?ÿ‘¨ÿ„;þ£wø§ÿò5PÿwýFîÿðOÿäj?áÿ¨ÝßþiÿüEÂÿQ»¿üÓÿùøC¿ê7wÿ€ÿ#QEð‡Ônïÿ4ÿþF£þïúÝÿàŸÿÈÔQ@ü!ßõ»ÿÀ ?ÿ‘ª[@šæŸ}6§w;Ù»¼Hmíb\´l‡>T*O xÍPÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-13.jpg0000644000175000017500000004410711625126536030016 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ©]"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?õm/J]Z«»›ÝGÌ7×Qâ;ùãP©3¢€ªà ¥^ÿ„b×þ5_ü\ÿñÊw†?äsÿaßý)’¶hþ‹_ùüÕðisÿÇ(ÿ„b×þ5_ü\ÿñÊÛ¤ÍbÿÂ1kÿ?š¯þ .øåðŒZÿÏæ«ÿƒKŸþ9[tP'ü#¿óùªÿàÒçÿŽQÿůüþj¿ø4¹ÿã•·Eswº%…¹š[½\®ô@S¹$³0U÷ÉAG–Õ®£ºÖ¤·\î–=VgQ޼‰Nõ»â ßÙ@ª¹Ùsní°B¬èIÀç€ ü+Ó¢¸ƒF¸·xÞ%Y•m ü¼¹$cå÷ïéÛ¥Z»{ÊM;º–‹¥Åæ§«#Ȭꉨ]»\nmªäínƒ#=jÒèZk…Û©j'qÂÿÄÚã“éþ²›¯øv}RçíVZœ– jö®ê¬NÂC¥]J²°ëœA2ÇÃô  ô/çË4®ö¡·Î&Êß+‚îçŽÂ Ð×:œ ÔµBukŸü‰U-ì´[©fHµ`ˆ]£yúñc ­µ”9p¤†`Õ…qðâíÒÖÕu ImÒµ/%§1D!t\.sÎ@v­¯‡–—z³Çç ¹îYa-ç,…þI6:³`?]Ã8éÉ¡s¦èÖf1q«êd˜@ ê×'ç9Âÿ¬ã¡ëéV?áÓÆ?âc©sÓþ&×ür°×áã‹Ï´>¨“th–kRÀb@aæ`€¬W€½99Ë"øp¦ŠçTYQ-¬e-v2¯•å+gqù‡\ñÏa@®ÓÃv3I λÅlnÜVäâÛKq'Lñë“SKc¡Á SK¬j Ò$hµnygû£ýg÷¬¡ðÎÒDœOt›ž‰äÄê¨øa¼î‘‰0%s‚T(o‡/&¢—¬+´l­½± ípÀ0ó0@¨Úó’IÎ@6™¤ A,´õ?=Ñœ(Õnq… Ÿ3¯Ì8§\iM­¼ÓͪjK*Í!­ÉÚÉàIœûu¬ßø@TÙ[Û5í¾ëHÖ8&K-®’7ÜÇ.|¼Îî‹4߇ÃL¹†âB&–Þc…äµgmÌ0®Û¤ °Æx    Ëø`\N¿}¼FòÿÈVëcø8 3Ïzµ¦éú6± KaªjsÆ¥C©Ý eC¯ýÖSøÖ|_,•âI¯kKeqm ›œ9ÜÀüÃ;†02«SÃ>ºðàxF¡ ż› ƒlU÷,ICo#&q·¿Zµÿůüþj¿ø4¹ÿã”Â1kÿ?š¯þ .øåmÑ@ŸðŒZÿÏæ«ÿƒKŸþ9Gü#¿óùªÿàÒçÿŽV݉ÿůüþj¿ø4¹ÿã”Â1kÿ?š¯þ .øåmÑ@ŸðŒZÿÏæ«ÿƒKŸþ9Gü#¿óùªÿàÒçÿŽV݃¡DÖºž¯f'¸–e‹ËûDï)\Ƥ€\“ŒóŒÖõbéò0ë¿õÖýµµ@Q@Q@TRN‘†OE“øP„â°õæ7qY[ÛÜJ[ÈÖSm3#l䟙 p;Ö®éæè¢%õn[òè?Zçõ 1,ntùQ‰/¨Æ¶ÕÃq@áµÿŸÍWÿ—?ürøF-çóUÿÁ¥Ïÿ­º(þ‹_ùüÕðisÿÇ(ÿ„b×þ5_ü\ÿñÊÛ¤4‹ÿůüþj¿ø4¹ÿã”Â1kÿ?š¯þ .øåmÑ@ŸðŒZÿÏæ«ÿƒKŸþ9Gü#¿óùªÿàÒçÿŽV݉ÿůüþj¿ø4¹ÿã”Â1kÿ?š¯þ .øåmÑ@ðŒZÏæ«ÿƒKŸþ9YŤM9‚+­eå _`ÕgÝ·%wm3gnF3ŠìyÄPÜ&¬d(öê¶Æ#4q°·šNÓòŸ—è:¸«¦DÛMe£Å§É}q¨jÐC”o3RºÈlíÚä“€É$ŒTéºLêH¿ÖbÀß^ByÎ8wŸ…Koaý§ Ý[´pí¸Ü ¨ ©²Ü©úŒÃo†þtÒÉqª‰àx†ûmÁ2’"ã.NÌ“…Æ{ԽʋºÔÙŸIÒ­¤Š95S|²ˆT.©rHb ç÷œp DÖZ(¿KÔu‰nUñ ýäT’fW!A*Ü’:ÃO‡·W7qÜÞ,04osÆŸ¾“{H؆äüýxéÓ½iYøÚ¶´óÂÍskä#C)…¾lº3»œüÞ½…!šO£iI‘µ]@ Rùþ׸è:ŸõžÔ–ú>•umÄž¤ðÊ¡ÑÆ«s‚Èÿ–ž•„~»¤(Ú¤KJ²´qÛHW'æ˜òBãÀ;¹~»DɩۘBüÈ–;rÞH‹?ë@$c©'<àk^Øhš|+5Þ¯¨ÅIAŽ«r~g!TIÆIô¦Ág¡\Å<°ë:ƒ%¼¯‡ûVäaÓïdçÕI¾Z½õÔ²Ü#ÛÏ1s‰³°¸c|Í¡xÀ‚=é²ü<á:«Gh· 8¡$äy\îÞ2ÇÊä°#æ'ó@å‡@‹KƒR:¶¦Ö³ùF7]RääHÁTãÌÈa×¥_þÁÓrö–£’7ý¯qÈõÿYÒ±í<ök!d×¶ÒB~˹Î|‚˜ß÷XGÈÁù™|UI~$«p­ª+ •€f·rcÈ`&С[¡Sßžp/\Ëá{1!¸×ïâòä1¸mRè;‘yø‘9éóœ³mi¡^_Éco«êR\ÆòFñNë†@…‡ßÇDÿ¾…Càt½¼º›í¨‘ÞÃÁ£ê u¤ê V|-Ô 6C¤*rÞb’Ù‡vO÷Ï©ÿůüþj¿ø4¹ÿã”Â1kÿ?š¯þ .øåmšZÄÿ„b×þ5_ü\ÿñÊ?áµÿŸÍWÿ—?ür¶è  OøF-çóUÿÁ¥Ïÿ£þ‹_ùüÕðisÿÇ+nŠÄÿ„b×þ5_ü\ÿñÊ?áµÿŸÍWÿ—?ür¶è  OøF-çóUÿÁ¥Ïÿ£þ‹_ùüÕðisÿÇ+nŠÄÿ„b×þ5_ü\ÿñÊ‹G€Ùx‡R±[‹™`K[i•n.b¬Í0l$Œ„^3Ž+ ¬kOùµ_úð´ÿÐî(3DÑ£¼¶»¯5ËjŸ$7nŠ1q áAÀÿÒÿ„rúêßø'øÒøcþA·?ö½ÿÒ™+f€1á‡þ‚:·þÉþ5V÷L±ÓÑmOY-#mDŽòWw8Î'ŠéJç|Mis/—4³©·šÝö!r›ÊÛG$|…xçæÏjMÙ NËB;>ÃPó:ž²$drÞL޹ä¤ç±éÁô5sþØ?è#«à|¿ãYÞÓî-åóeÒ¡0¡• 4™‘ŸîžB®BŒõç€:毃õÅ7¹ÕC´³‰V‡˜ I•*¨6îÎÀ ‚Pî‚.ëSyô[(îb·}WTY¦ cC¨K– ŒãžÙM¢ÙÛ˜„º®ª†W¦oåù˜‚qרÖOü#:¢È²«Z-ÄI(˜Nû®‰tuó>O“„*@Üè1òˆ.¼#«ÝycívÉ(Ž@·^l†Kvo4Æ2)ÜH?&0xÃÑÂ9ýuoü“ühÿ„rúêßø'øÓ¼3¦ÜiZ*ZÝ82fÚ%ózƒDÎ=ÎÅbÿÂ9ýuoü“ühÿ„rúêßø'øÖÕ‹ÿä?ôÕ¿ð>Oñ£þÈè#«à|Ÿã[TP/ü#ÿÐGVÿÀù?ÆøG!ÿ Ž­ÿòmQ@áûxÑõ-X*‚Iû|¼Ι‡iuoĦªñJÑÅü¸e# õ­«ˆÌ¶ÒÆШ'¶Ep–¾ Õ¡°¶‡ÏµË<¨î$) mE£2 Œv`œüÜÀš5”WÛ¾«ª¬³nò×íòüØ=ê_øGaÿ Ž­ÿòÿs_ð…êìÌßÚ1Dâ„H’;4®AÌçpù]ò‡Í€£–éL × h¢þ(qi$ ‰÷½m,"RB³)m mÈ€uðŽÃÿA[ÿåÿ?á‡þ‚:·þÉþ5cFÓåÓ-&·y!¸’HT1!#f%WŸ@zt­*Åÿ„rúêßø'øÑÿä?ôÕ¿ð>Oñ­ª(þÈè#«à|ŸãGü#ÿÐGVÿÀù?ƶ¨  _øG!ÿ Ž­ÿòðŽCÿA[ÿäÿÚ¢€1á‡þ‚:·þÉþ4Â9ýuoü“ükjŠç´ E³ÖuÈVYåhNé¥27ú¥îy®†±t¿ùußúëþŠZÚ Š3P5Ê’V%2°þïAõ=(|ІIÑÀK¿÷S“ÿÖüi¢%æY6îGÇæzÿ*•"H—j(Qè(-·™„Kè§-ùöü*H¡H¾êàž§©?SRQ@`x¢q› <±‡Ô"¢rŒ8n„r+~±¼C÷´ŸûÅüš€þÈè#«à|ŸãGü#ÿÐGVÿÀù?ƶ¨  _øG!ÿ Ž­ÿòeHºLR:O]òÑŠ¼Âæs‘ÁËôàðOA]kr¤W&›í°“<¶Ñy ‹laÔ“ ùpwn9䌙6¶"M­ë­*ÂÍ#yõ]YDŽ#L_JŘô“SŸÀ “©jÀ’N¡'­C¨x}ïtÍ&ØÌ‚KGÈeŒ®å÷ÉÍsÖþ Ö<›g½ˆ¤—|ϼà•ÝÈ…rCeFÞO,ÕE,z ¬±¤‘ꚣÆêYu`zsȨo´Ý/K¶ûN¡¯_ZA¾mƨñ®OA’Àf±¡ð†¯—›Å´0$5hça¼†„aBŒv¿^ #œm¿…¯Î©¬H·`Û^ZÉ Ó&ä  Làœï=OÊ3@6º=…õ²\Ùë:żƒ),:›º0éÁ6‡gm“Ï«jqC–y$ÔdU@9$’x¬è:´ÒOöS,Ñ-´% iü´’pB“¸d°ñŽAš£yà}bá˜.¡“%»Æ°™Ûe¾íÿ ù :|À}åû£*xÀM‡g1o+VÔäÛÛu223ÏpA©‡!óÕ¿ð>_ñ®vãÁš¢ÎËg}Û µš’BЍsµ²p6œç‚ §ÁÚ—!‹S\8`— #’…„¡›dñÿ߀7á‡þ‚:·þÉþ4Â9ýuoü“üi|3¦\é:OÙ®œ ¬ø‰ƒØˆ1Ôà(ëߩ٠ _øG!ÿ Ž­ÿòðŽCÿA[ÿäÿÚ¢€1á‡þ‚:·þÉþ4Â9ýuoü“ükjŠÅÿ„rúêßø'øÑÿä?ôÕ¿ð>Oñ­ª( MÖ .«ª ,Ôdbp^¤Ö”h6¦SÕ5O4(bŸÚ2nñœg§ò¬­w—z¶±qq›i-˜Ââ9¥œÆèÛ „_ó–å³´s–·„¯d$—hÑd4êdÞÉýüé@?ðŽÁÿA[ÿåÿ?á‡þ‚:·þÉþ5‹¡iZµ§‰ZKÈXžֽ3ûK@i<*Ø'®ãÓ¿i@¿ðŽCÿA[ÿäÿ?á‡þ‚:·þÉþ5µEbÿÂ9ýuoü“ühÿ„rúêßø'øÖÕ‹ÿä?ôÕ¿ð>Oñ£þÈè#«à|Ÿã[TP/ü#ÿÐGVÿÀù?ÆøG!ÿ Ž­ÿòmQ@¿ðŽCÿA[ÿäÿ?á‡þ‚:·þÉþ5µEbÿÂ9ýuoü“üj¾f¶>*Õ¡Y®&ÎÕ·O3Hܼüdöã§Öº*Æ´ÿ‘ËUÿ¯ Oýâ€24‹^+{µ´Nh´/ ù²Èþ>$ÎB©œâ´RóÄ.ÁV#' 3Ê3ÿŽU=[È­n~ÅLÇS¹}»SídÕÛ{^g³7ö0Bû‹a&ÈݵÆ3Î>^{ýhO3Äßóí¤ÿàDŸüE5¦ñãt8ôÍÌŸüEjnºÇú¨±ÿ]Oÿ\ïŠe¾Hìin5±Îmƒ²°-º.›€çéÒœUÝ…'erð—ÄM÷môsô¸“ÿˆ§oñ ÿ—m#ÿ$ÿâ+?Ão!¹n5ÇÙ¤.ÅX7åÜ‘Óÿ*Ƶ°ñF’ð­“Lb–Y®&O"i¤i*ïÆß”&ÖÓÀ¢J΋º¹Ôoñ'üûiø'ÿFÿgþ=tü“ÿˆ®fÒ?$Ö×÷2ßÌÑ£!‹Ë…|Äó"™@ûå<ÅÊŽ™Éšé¼g%œ¯ ³ÀÇ`má‘•KI¸…<D1œa›‚z"އÌñ(ÿ—m#ÿ$ÿâ(ó|Kÿ>ÚGþIÿÄW24¯}ªKÖ’iP^Åp-¼ß,»„E$ ±_+’ àç5¤>37ows-ö(€Ho)‰eÆÒË™B° ’«Aä­óÚGþIÿÄQæx—þ}´ü“ÿˆ®nKOÚ>£w¥½Ñ{©í¹ŠÅE¼*e ûÌ«¹ ‘Ó½>Vñzé "Íx÷ &ËXäûä’à¤á<ŽIÚ3òt>g‰çÛHÿÀ‰?øŠ_3Äßóí¤ÿàDŸüEkE¸ ,0Ä ýkŸÕÔøÃO7­/ö}ЇHNè·Ï6Üô9  >g‰çÛHÿÀ‰?øŠ_3Äßóí¤ÿàDŸüEUÐ./ Ð4«;½6ü\%¤Í$ŒŒCà«d–$W$ó÷†3È[G°ÑµÙfóîMüóF×Z`­…öœgnJç·Nœ ×óÚGþIÿÄQæx—þ}´ü“ÿˆ®qm|D«um;êo ípÅ`dË¢WpŒ‚sƒxÈKx¼[ftëXæ™mbt ÆÚ)—d#`®0nð98ä¤óÚOþIÿÄRyž%ÿŸm#ÿ$ÿâ+Ÿ{}â´–U¼’gµì Q7LU¶`.OÍŒg+×mE™â :{y¦kËÈ¡HlRîo-¸`HÜø9cßßÓyž&ÿŸm'ÿ$ÿâ(óÚOþIÿÄV¬2ùÑ#˜Þ2êÇeö4ç Tì*±ašçô»þ××ZùmÒo6ˆ\²ãÊ^ä ÚûA“ýBùŸí…üûþ•¦Æ²kºÊȪå%‡œc?º«tP!¤9Ëÿ°8_Ë¿ãS… :)h Š( Š( ±¼C÷´ŸûÅüš¶kÄ?{Iÿ°Œ_ɨfŠ( =+6MkOŽW®±µ¶3ì%½ ch9õ5¢ü¡ÁÅyì–º„w–ñýŽáͼ>Aa“lÙ¬wí1á·ÉaŒ`Œâ¦NÄIµ±ÜÝ^Adˆ÷3ùk#„\ŒîcÐ59\K98â°ïô ¯ôÍ&ÜΫ=“#™‹6CÊî§$k·ðf¾"±Š}@2C)yI¼ÜÄ»†D+•e ò¤÷š¨³½Œ¬±¬‘˹nVR ÷½Ewsocl÷7—‰mnŸ~YQW·$ð+ŒÂZõ¾•›muo1A±.¥Ê°¢xÚýx98¦›ÁÚ¬š­ä©©È–òMÂâpÆ%YQð#hˆÊ…8,Ì ÍuÛâòµ/’à“+µéƒŽùúщs™ ÁxÉ#rÔÞ ×{àKÉ®%Š¡þ뻂 N˼†GÀN»Õ¾`Ä|Ü(Ç;Ú…u¤ßM+ÊžL±Ñ¬Œß¼2;g‘ýÖQž:Pß–ßóÕÿ%ÿ _-¿ç£þKþ%‡I_ò_ð£cÿÏWü—ü*J(=ÿ=_ò_ð£cÿÏWü—ü*J(=ÿ=_ò_ð£cÿÏWü—ü*J(=ÿ=_ò_ð£Ëùí'ä¿áRQ@äÄJ ·E` ¶Ñ’NéÔ“Š0¦SÚ˜1O— gƒŒtÈ5Ëk¾Ô5m^âpÐ=£dXæ¹nhÞ7Ù…\"‡æùŽ[ îá]MÖ$’ø‰ 072|ç2çôhÇüÛ³Éoùï'ä¿áG•'üüKù/øW%¡iºÅ¿‰ Þ¬Pm’ìÎÄNÅcBœ )V9rIÁëÙÐLŸóó/ä¿üML¿óõ/ä¿üMOEAäËÿ?RþKÿÄÑäËÿ?RþKÿÄÔôPL¿óõ/ä¿üML¿óõ/ä¿üMOEAäËÿ?RþKÿÄÑäËÿ?RþKÿÄÔôPL¿óõ/ä¿üML¿óõ/ä¿üMOEAäËÿ?Rÿß+ÿÄÖ]Š•ñ†¨ ³Ÿ°ÚrØÏ߸ô·XÖŸò9j¿õáiÿ¡ÜP 85m<\BºDW ×SÌ’­îÍË$¯ ÈÛØ7çš²·¸a !aеø8üÖ·è  oí sþ€Qÿàrÿñ5ÓêÓí3xrÞM¹Æû´8ü×Ú·¨  ¦Õ`bÐønÚ2F K´‚ÔŸnÖÿèþ/ÿ[tP'Ûµ¿úÇÿËÿÄÑöíoþ€Qÿàrÿñ5·Eb}»[ÿ  ø¿üMnÖÿèþ/ÿ[tP'Ûµ±ÿ0ÿð9øš_·ëŸôÿ—ÿ‰­ª(_ëƒþ`Qÿàrÿñ4ýpÿÌ ?üüMmQ@ŸnÖÿèþ/ÿKöýsþ€Qÿàrÿñ5µEbÿhk˜Çö _ø¿üMo×?èþ/ÿ[TP'Ûµ¿úÇôûrÿñ4 ílÌ ?ü_þ&¶è  O·kôÿ—ÿ‰¥û~¸?æþ/ÿ[TP/Ûµ¿úÇÿËÿÄÑöísþ€Qÿàrÿñ5µEbý»\ÿ  ø¿üMnÖÿèþþ&¶¨  O·kŸôÿ—ÿ‰£íÚßý£ÿÀåÿâknŠÅû~¹ÿ@ÿð9øš_í sþ€Qÿàrÿñ5³Ebè°_-þ§w}l–ææT)Ëæp¨$àw¶¨¢€ (¢€ (¢€ (¢€ ÆñÞÒì#òjÙ¬oýí'þÂ1&  š(¢€zV{êútw½‰d ´‚ÜèO@~µ Ü©Šóç¶¿Š{xL4pÂa–Ð+ârC†?t¡Ë2¾âç<ô™6ˆ”š=þñü©oïÈW5®hzÆ¡áë ;=BHn!Ùç˜î<“.ƒûØù°ßwœvªÃÃÚòI#=Ò\ÄÓ+¬_ËKªg©œuùxP QgWÉs– –D$€Ë‚2 õRE*N\E8-Š>ܬ:ƒïÍr á¿ÛÂmíï HŽ÷ .¤Xù¸P¡zêIÈ#2¨lü)®Ûê–—"ð[ڥϜö°jUF윗ˆ´¹J}O`ãkÏVü…[þz·ä)ã§4dP6·üõoÈQµ¿ç«~BŸ‘FE3kÏVü…[þz·ä)ùdP6·üõoÈQµ¿ç«~BŸ‘FE3kÏVü…[þz·ä)ùdP6·üõoÈRlùìß©2)h¬r¬³Kw{¤„…‘@R@ =4³&–[’‘¢–v  rIâ¹}GÃz¼úõõí•ÌVñÎÁ„‹u"³—å˜Âíl6ü’00*ðÆ»$q£ORŒ»N¡3g&1•ýèeeRÍ‚1À4ØF ±¬‰pYVAïÒåËÿ=ßþù_ð¯?_ø¢;{˜µŒžn·²PI]€BvùFIpÀ#ú…«iúŠÝßßùìñʳ¨¸‘Ô±1˜ÈVÛ/L}îý€:*oùùûåÂ*oùùûå§¢€ ò¦ÿŸ—ÿ¾Wü(ò¦ÿŸ—ÿ¾Wü*z(*oùùûåÂ*oùùûå§¢€ ò¦ÿŸ—ÿ¾Wü(ò¦ÿŸ—ÿ¾Wü*z(*oùùûåÂ*oùùûå§¢€ ò¦ÿŸ—ÿ¾Wü+.ÅY|aªrçì6œ‘㸭ºÆ´ÿ‘ËUÿ¯ Oýâ€6h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ä?{Iÿ°Œ_É«f±¼C÷´ŸûÅüš€6h¢ŠiûµAµ:;¯²¾£l·Ûå™FìúcÖ¯¾vœu¯<‘n#’ iÌiŽâÏ'3¹ ìÆ–*Á½QS'be+„cï~”Ãø¿Jçuˆµ˜|=f¶Íq$ÑF>ÓögQ+Á°ß‚{‘Ó=+)¡ñeäªFÙB’,Ó˜Š1ÝoÞ@|äéž*ŠGo†þ÷éF×þÿé\o‡ô½}uk+ía®¤dI¢nQs°‚THùRC`䜑Ž­3cÿÏOütQ±ÿç§þ;O¢€±ÿç§þ;FÇÿžŸøí>ŠfÇÿžŸøíþzã´ú(›þzã´lùéÿŽÓè lùéÿŽÑ±ÿç§þ;O¢€±ÿç§þ:)6Iÿ=ñÑRQ@ÆòÌ«p S†FG֕â–ið£’JŒ\•þ›âñ£q¥¬ñ¥Ã‡ó<ØÄN‚ ¸üÞfð¸$muìašÇÄ÷ë %éŠHÝU$ž• |¬ÜÎP¨R¹õ=Èh«#(a>Aä¢*_ùïÿŽ óèì¤zÐYÖ5/ú¯ÿïý¿ÿ£û_Rÿ¡kPÿ¿öÿür´ši6ŸôY‡¾SÿŠ®6=BøëÖ–_eœڤ†b²1•bpÃ*0@뎿J¨Ã˜‰IDè?µõ/ו¥ŽlLŠê[Í·™E¾wþíðIfù@Þð¾}Oĺm•Íð !šöH¢7E™!Œ;à´jŠ@!@qê±é?¶5?ú¯ÿïý¿ÿ£ûcSÿ¡jÿþÿÛÿñÊæľ#¹Ô¼˜áKx#¸Œ³ýÉ ’­Üä•!¾^%FjÜ~*ÖnCk¦¬¦+A+!‚E-0L´`“ýî;ãÜÐçöƧÿBÕÿýÿ·ÿ㔟Û:Ÿý Wÿ÷þßÿŽW?k¬ë÷‹j×uûy+%¤-¹ŸçS‚c,0Ä‚TÉ" ²ñF³=ê]\[0‚må-ä lðòÈK|è ç÷÷ £ûcSÿ¡jÿþÿÛÿñÊ?¶5?ú¯ÿïý¿ÿ®qüY¯´ÎÊÒ8Å¡•<èfÜÍ‚w`Àzät®·F»–ÿGµº¸B’È™aå˜òzd)'õžS@¶5?ú¯ÿïý¿ÿ£ûcSÿ¡jÿþÿÛÿñÊÙÅ  _íH Ÿ _ÿßûþ9Ký±©ÿеÿíÿøå/‰ƒbÉ4~eͼlÐÊѾ֙€ÊC ‚Gk'MÔ¯añðÝMta $rDÑ3¬-æ¢Ûí!rw¡,I'¹$b€5?¶5?ú¯ÿïý¿ÿ£ûgRÿ¡jÿþÿÛÿñÊ¡.¢5-^KeººW:Wa^VÜ~`À+«ØF: ØÐ$yü9¥Í+³É%¤LîÇ%‰@I'×4_ûcSÿ¡jÿþÿÛÿñÊ?¶5?ú¯ÿïý¿ÿ¬}OPÖ,üKq2}¬éñ¡V1"1ò‚„ÀbÅñ†Üx$UKOøŽp¬l-äX]O.ÞQö€Ò„2[åÀmÜî)ìr:?íOþ…«ÿûÿoÿÇ(þØÔÿèZ¿ÿ¿öÿür¹âýyŒKM¤®ÐLŠ€¢7”FKË0ÜF>_»Î(:lj´­:š4n˺¢«©±#‡O¼Þä€@:íOþ…«ÿûÿoÿÇ(þØÔÿèZ¿ÿ¿öÿür¹Ynx8é¿¶5?ú¯ÿïý¿ÿ£ûcSÿ¡jÿþÿÛÿñÊåâñˆ¤ŠGšÎÎÛqJH&.®Â"XŒ€Sçp• ® g8mî§âKémqwl³´g—ìuÞXVT`A f#Ô3óû¼«ûcSÿ¡jÿþÿÛÿñÊ?¶5?ú¯ÿïý¿ÿ¬ /]Õ­õÙ?·š[[y$˜,&0Ë1Z²G½G8/79 Üœ í×§"€1ÿ¶5?ú¯ÿïý¿ÿ£ûcSÿ¡jÿþÿÛÿñÊÙÅ  oíOþ…«ÿûÿoÿÇ*¶q=ÏŠõi.,¥´qgh¢9]‘¾~r„Œsõâº, Å´ÿ‘ËUÿ¯ Oýâ€6¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ä?{Iÿ°Œ_É«f±¼C÷´ŸûÅüš€6j´Ÿñÿûÿ²Õš©pâ;؆#cýÕ,‡°  GîÖPÐ4à» ¢wMÕy®£*FÙ¿ïËÿ…q©¬^~ÓN¸¶’Õ%3<³n”bJp6•רàŒ[؉´·;XQ`†8cˆ¬h¡UF8`´âIþüÇø×3¬kº†—áÍ6æÒ(ä’eA$×)Ù»-‚$mÎzžý X¦¬ù‡þy·æ?Ƹ¸|S®Ì«/Ø Hö$Œ† }ÈY€9ê|ÖŽ6½S­ø›KÓ–îdŽqu;*=Ä™X•w ¬qì-€£æ~£ït ïšs)ÿ1þ4yÿ<Ÿóã\ñF½w}û¡ñ]|Ìöó!IG–ß? ½ÈÉe;qÁ¸¾.Ô®ažk;åH­dœó²¤G`üdaëòcÎ;1¿ç“þcühóN@òŸóã\U¾»®\MÇzÞ ¬ÖïLL„uûë´–ÁÕ[/j’ÞÙÞ]Fª´Ì茑É€¬…w0 7•ûÇœôçÿ˜ßóÉÿ1þ4yÿ<Ÿóã\x×[—Í-cil«º‰Ñ÷rù¸ÈÊ|Äm;y^\ví´Ë‡½Ò­.¤]¯4*ì6äŒýÓÈúžô?˜ßóÉÿ1þ4yÿ<ŸóãOÅ  ×C}k%µÝ’ÜA ÃÅ2+«px5"-,,F®ÐôëYÞ%ÝýŒQ$–?2æÞ&hdhßkLŠ@e!†A# ƒÍc麵Ü^!žÞîâvZHžp·o5 0]Çzı=ùén#†öÞK{›A< ¯ª®¬='F©»*( ª»@tšçdÔÓSÖÒ;Ù¾És¥yñÄ¡pÛÏÌaÔ‘Û#­GŸÃšdÒ»<²ZDÎìrX”“ï@<çÿŸy?5ÿC+‘þ¢OÍƸíWZÕ,¼S~Ü£E á³yB™–NB‹8ÏR$ÇN9’_ê6¡¸¶…îžRm…ÔLVvFe8n§ë@-¥µ¾Ÿ‘e§%´[‹yp""äõ8­Xóßþ}¥üÓÿŠ®ã_ñ$ºc/— W2 Øöð²b±?V:;.vŸ»œ :okš]ì–0E˜-òÎàÌîÅwy ,2ò‘µ:¸pkö‰3ÿ³~iÿÅQö‰?çÖoÍ?øªát¿ë&᮵1vlBü†ù6™Q¥VåY’>0qæ¸ðK§ñ–»™ ÑÓm“Ì}¤J’Qi=A}ÅF#iù\œãíÿ>³~iÿÅQö‡ÿŸY¿4ÿ⫊»×µËnùc5“ý”m7G<ŒÌÊÇ ¸X”‚ðkâmJ.|ËGw¸¸­¢}ÄíÈŠN[<ã®}h³ûDŸóë7æŸüU'Ú$ÿŸY¿4ÿ⫈³ñ~­w  º°‰åu‘­âvt]ªp$MÍŸ¿÷FUrv²ÛSñd÷öQåÌå'6Í¢ã÷ ˆê†R3ýôÁ*(ºûCÿϬߚñT¿h“þ}füÓÿŠ®cÁZÝÕý»[j×fMGË·‘c’1”6°3¶ÐcIøävÀ먴Iÿ>³~iÿÅQö‰?çÖoÍ?øªžŠƒíϬߚñU—bżaªŒ‡ì6Ÿ+c?~ãКÛÅcZÈåªÿ×…§þ‡q@4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE⿤ÿØF/äÕ³X>($E¦H"þ>GѨw"«ÉÍüî?þËX7wSÇytcŽœ‘îŠ _5åR ‘×=ûV½Àóã%%y˜SeFW¥6¬+š­ÐŠÍ]Í#ªÜEÌ€éÝ*Û\¡R6Ëÿ~_ü+ŒMfcâ ]3Ê›d–É3L÷’‚啉(7v+ÈÁëÔw¨&ö&n+sµ…ÞáŠ2±Æ¡sÐÞ¤Þ¸Oñ®gSÖ.´ý#G¹…ác6ß0\Må«(·.UˆäÜšÊ_߬× +gµX‘Ñ&¸18c#)è¸8ù‡¡ÏZ;­çtþŸãI½ü³Óük‡>:½»»Š;-6Ú8 ÌQ™®/Ü÷ŽÐ»—¨Á#uÁâ‹oê–VV/}`n&½bà´‘[ªÆ©ÜÛ›æáN ÁéŠíüÆbÍÆ—{Ï'ü×ük‚oˆ7rê °iößg…%’Bn[÷Ȳl;2•`Q€úÖÇŽ‘$¿ö)s ¼ŽäaÉeAÛnnNxŸjêüÃÿ<Ÿó_ñ¥óþy?æ?ƸÄñ•Ü›<ØmíšHÍÐVHÉ~tÎpè«2«ÆAËK=ôR\ÛÇoDèñyêÈ’+?Í¿hÈ`  ã¯Jí··üòÌÛþx¿æ¿ã\ZüAšD¸‘4ˆÖ8ã‘¥½U,ÌT)pl‚‰ È®ÊÖqui ÀÆ%Eqƒ‘ÈÏZvöÿž/ù¯øÑ½¿ç‹þkþ5%RòÚ ûI-o,–âÞA‡ŠdGVç¸9¥FòÑQaeUU@Ûš¡â)® Ñɵ¹{i^x"FªYCÊŠH çõ²tÏLúô¶——6âÊ ðºJ‘Æç“&íÀ`vPCu7¶Ò[]Y¬ðH6ɪ®¬='îQcŽÝ•U] (àVº¹½Õ$³³Ôà[ytϵ[ËlQ¤Îò7w+)ÇËë×¶¶‡<·zu;ïškX¤‘°X¨$àqÔП9ÿçÞOÍÆ9Ïü°“ó_ñ®3^ñ^¡¥k×±+Blí¢,P…ÜpògïnûÊ9Û´ äñHÞ;¹Ó⑵ w1µÑo"ä—+>ÕSïœäÈ ž@í Î:Á'æ¿ãIçÉÿ>ÒþkÿÅW/5»³p-ì­-Ù~Ȉ«r³¾ù. m³¢°+Ž¥Jž æ®Ëãk»K››9tÄi-‘SÍžåb2Nv|¥1PwŒ7##œ ëüù;ZÌÿâ¨óåÿŸY¿4ÿ⫳ñüŽ—wVEfѬ–û®pà}ŸÍ!þ\rÀ¨ œþٗǬöq.”¬·2ºo7j›d“ó“’ÜôÏNê~Ñ'üúÍù§ÿGŸ/üúÍù§ÿ\Tž6»²°’êx-g6Ûm®HbÌè®Óí8a¨!N:ýî•-¯Ž~Ïo"ÝB× »µ]®ªí}¥Ôª€3ÏsÉ<ì<ùGüºÍù§ÿGÚ$ÿŸY¿4ÿâ«8¹¸…#{k->gŠBe–ðL‘²©e8AÊ9,Púf¨Kã=u¡»žÚÒ ¥‰”Û´lZÎbÒ€%9 …·tÉaƒÓ ÿÚ$ÿŸY¿4ÿâ¨óåÿŸI¿4ÿâ«;CÕ—R7I$°Ḓ?-n#9î+f€+ùòÿϤߚñTyòÿϤߚñUbНçËÿ>³~iÿÅVe‹ñ†¨ÌŒ‡ì6Ÿ+c?~ãК۬kOùµ_úð´ÿÐî(fŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ±Ÿ0Š9¦ºEÁ–o)2yË`à9>kÛÅ÷n~{xäŠIòæë‘T†@0Î1ÉÏ=8ÌޏÅgsj¥œ ÇËltÏ­#ˆU^ذBAŒ§Ôzæ,|is¨G¶2%1´Éö‹¼RRKò2¸Àìnjҵñv¶Áî®-¬DÚG4ÁKùj^=Ã÷Üœ–Ú6ˆÎ3ÔãÈ, NÛ"2wD9<óõäþt(#1¥‘T#iQ˜®6/k7×Ja±´…7DMpw3*º±òÎ1u=8ç‰#ñ–¢Eî ¶&[0¥²**‚ÒGòo,1ær|¼c$õëÔĈmT.Ð`=>”Ý–þ_—ö“û¾PǯJãîü}tsk¦À· ˆTÍpÅQ·F$GÂq…|†RÃצž2G¹‚Ö+ ÓH+ç}Âמ3Ï—žúPë%»-c’À+ä€ý*o´ÓïŸþ½q±øâêæÍ/Æ8#Ÿt6é$Ùæu B1Ÿ˜Ç\`‘Í2Í÷’a‹m´’™ .Yg"˜Ÿ¼ ¡A¸py4Úý ÿÏïŸþ½h?óÆ_ûçÿ¯\Ìþ8Xõ³Ã§¢VI0¸U Ȥgƒ’§<ŒvÝÒ·4=PëTwDìY]Ë… ã©U?˜·ðéY½­Í½Á‰È?!d`AÊÀ‚ Ž”ô¡8µ}ÇnY“,qÐ’y$zšƒÄ3\A¤mpöò¼ðD%T²•‘¸œ1ê¬?ľ¹%¥äöë2¢«’FÑÊ‘(sœ&ýÀ½@æ€6.-­.bxÞÒTÞžYx³…ô¤2þT¶ï­¼vðÚÌ‘DðªëéYSj’^ê2ÚYj­´ºwÚ­î-м›·¸Ü¥qŒ|§½iè—2^hZ}ÔͺY­b‘ÛË2‚Oæhi!iL­a!®ÒæœzgÒ—Ì„È%û »ÆH(gž?€¬]O]¼¶ÔnÖ9mV+YaˆZº5Ç™·æS»¼@NJ}1ì¼utš-„÷¶±O/ÙÒIÞÞÍH¿ÂQ·vQ·¨'h`†Ýiî¡>àX@ÛÎxôäHòA#³¾›+;.Ö- ’WÐûW3?Œu)4›¹ítË8®ícS,w7‡†/”*Wn㸅 ñŒƒ¼WªÚ¥õÄÖ¶óB—oa¢áÈÚ®7—ùUŽv(ÈÇÐ¥yàaµ´ÉˆãÀ§§Ný²:V¸…öîÓnÆÜ¹„p}G=kƒÆš”—‚å­­ÛOXî%h’\?’¦Ü«œ¯ß )ùAÚs÷†HW÷ìsš/Šooµƒ ì1Z@óJ"ŽU)* Š@àžù¬HÆGƒ]x9í@ÿ´üù]ÿß±þ5Ÿ§Içx»TrŽ™±´ù\`ýûŠÝ¬kOùµ_úð´ÿÐî(fŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ±¼C÷´ŸûÅüš¶kÄ?{Iÿ°Œ_ɨf«Kÿð¸ÿû-Yª³°Kȃmà¤ã§¥XnTŠÆ]4DU¿½br„ªôÀ;3Zu8ߟ÷ü+“OHúÔP{ƒ#[¤²M¾5 ]Y†¯#ä=óõç'{7¹Ô-²ÙEfð‰aUBÊ›¾ïLäu⢟KÓîdIj7‰VbP2ouû¥±ØôlŠ¥w­Kg¤éó¬ q=ʯ (ˆgarIÁô=« ¼w5ÍÜXXÂÂYb)$Ò0FŒ¶×Ú0êÜ`n{TŽ´XØ¡l HfB8sÕº}ï~´å‚Ñ!x–Ù':p=r1Ïzã­ü{sŸךIg+upöòŠYY” Ãí9ÉÈí»ÕSÅ÷–­=´·Bo³ÀKù»¤Ya´”vN2ã‘Î4Ô,6hT¥ª)AµqG\)Z;V…¡ku18ÃFa;HÆ9ô¹Cã;«YÒïMoµBfwýÒ,¬»•p†\08g9íŒí?Æ“\ÌÒMa6l±„ÌÄH²°`F1û²3Áõ€0µ°]زŒn@‡øÊ€:tǧ$6qHÒGjŠìw3,}IÇZædñ¹ÄñiSH$”¢…|ªŠìÜ/`ãÀ<ä¨äÆþ2º…. [[É-¡òg‰K©i·6J‡?êÔ¾0~ðäu © ³ˆª /æ°—þ÷N¾ô‚ÞÉYØZ g$±rÄŒxç©®^×ÆÑ­¥ÍÅÄNê²ÄÑŒ¨c²mPêTr}j]7Æ}=”m¦4 q&Âï7@ÁJ6‚IÜ8;G¸ÈEöMÕ÷fÿ¿/þ—bâOjŒöO¼¥O߸ìkn±­?ärÕëÂÓÿC¸  š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÁñEÄ6±i·¤PE¨DÏ#¶ÕQ†äžÕ½IÞ€1¿á.ðçýôÏü Oñ£þß ÿÐLÿÀ´ÿÚ¢€1‹|6AÛúg?ôöŸãXëyá…òÈñu®è“ËŒö¥‘qŒ)šì覛[ ¤÷9Yµ?ÜÙÚZ]jÚMÌ6»LK5ÔlUÚ Á8ö©Î»àã$ÒOCß7úÖó¢Ì>ñïÐuôÑÑHg4ÚÏ‚ÞQ+joÙbÈß÷¹÷ïëR·ˆ¼$í¹õ}›v웈ÉÏõëÀçØWAEssëž º—͸Դ9¤Øcß$Ñ1Øz®OojGÖ|"…}CB`` ,G œãéžqë]-ÍË®x6xÖ9µ-DWy¢ 0èÀzûÓæñ„n’m[F•ò¼ñ°,1‚rzŒ}…t4P6uωΥ¡—„æ&3E”<—Ó éè)±k ‚HäŠÿAãfdd– T·Þ Ž„÷õ®šŠÅÿ„»ÃŸôÓ?ð-?ÆøK¼9ÿAý3ÿÓükjŠç5 š›Ú]kºy‰Š±òõ¬ÊÁhM{ #Ⱥ¶æI³|†â2ÎSî–l䑨ž•ÑÑ@´ÚŸ‚§OGü¯$K ÒE"§÷UÔ†QÏb*Õ·‰|-gk´æ˜Â‹/Ûá@À'=oÑ@â_ È%­i %dæ2c<ò1Ç5ö߃|¡öŽ‡åª” çE€¤‚F= ãØWIEsi­ø63)MKCS33I‰¢Ë}âÞ¤÷ÏZ• ñ²¶Ö#Y7\Ã$Ö÷m"[ɉ7 Q©AÓÜðâNÍÖ¿£jÂÆÖ!°A VeRáËìAÙ,e@RÃ ßøDl?箹ÿ…ïÿ£þ ùë®áA{ÿÇk—²½×/õ:[ëJ;{}EH™mòv=³ðÙ]à.v`<çi,5êéÖï>¡o+[iñÞKö¥'a?ÚßÞ«p Ž1× ÿøDl?ç®·ÿ…ïÿ£þÿ-u¿ü(/øíss·‰5™5+k‚ÂH<Ùí`xXšUíʰ…T´g÷»qÀ E¨jZå–—6¯§[jÞêFâû`·È!$:ùR6ã©Û”êÿ0ÆB¨_ éÎ2“ëL2FGˆ/O#‚?ÖÓ¿á°ÿžºçþ¿üv¹è/õ&+ûx£¼e¹íBY—Ρ9çiÀ1´gæã#¹¦6±âÆ–ð<ïlÂFS¶‘¼ &P»[ ¦~beÎApÀèÿáÓÿç®·ÏýL¿üvøDl?箹ÿƒûßþ;\ôÜ^kÖóXê#Osluž0¦K­§É‘‘Td'î÷Ï–N<¦7Kðæ§k¦øUçG{[tÌmðlå2ùƒ~ó ¾›±HÓþùë®áA{ÿÇhÿ„BÃþzëŸøP^ÿñÚ±áK¸¦ðîŸn‹2Ëoi J’Bñí;ÇÌz•¹Loþ ùë®áA{ÿÇhÿ„BÃþzëŸøP^ÿñÚé( oþ ùë®áA{ÿÇhÿ„BÃþzëŸøP^ÿñÚé( oþ ùë®áA{ÿÇkÄZJhK¤]ØÝêñJú½œ æëS«£ÌªÊUä*Ar+½®SÇ¿ñá¢ÿØvÃÿG­ %ðÞ¡ ®‹åÈ—,Æîí³´’ }¦^ê¤~­ý³kÿ<¯¿ðþ"©xKþ@þ¿.ÿô¢J]gYžÒãì¶i˜›‹‰æÉKxÁÀ%W–,CaAÚÜŒr7a7bçöͯüò¾ÿÀ ÿøŠ?¶mç•÷þOÿÄVV“âî. ‚ëìòÇrÏW0#Ä<Õš&òU¶‚AÏ 9µwâ4íVæÚì2ü2£GK$#H»cˆó€ ëØRNàš{ÿ¶mç•÷þOÿÄQý³kÿ<¯¿ðþ" Äú4­ ¥êîšHâ@Q†]÷mŽ Øãž…H8#ü%Ú…Ó˜Ú8J-¥1íòüÌoÛ´6Ï›nwÎ)Œ¸u‹Sÿ,¯¿ðþ"¹ù´Í:[Ÿ8\êé‰X×û,?–ÎÅ›ix ’O^ôËϤ:ô}½½¼Ê-È3ܵ¼òy²¼_º…£ùÀ)œîPA{íEâYš%ºmÂE‰KA"¬…œ (Åp븀YI‘’)¦ÖÂqOrŒvvW«t×:½Ë¢2 —Ne ©o¹ òv¯\ô­_í›_ùå}ÿ€ÿñUüU£Gp°5Ëï2ÉòSæ4_3ÂèË– duäf/øJ¬ŸT{XVâX¢†i%–;Y[-Æ¥cÂâN\ƒ³8#7pI-‹ÿÛ6¿óÊûÿ'ÿâ*œòh×7ÑßM§Ü=Ô`™´Ù‹.3Œ·6=2hÿ„»Eò„¦â`žY•‹ZÊ j +r˜(ÀîÆÁê*+ß­¶±¬qÂöˆ&7w +«@cErü:ôaÜu¤3Gûf×þy_àÿüEÛ6¿óÊûÿ'ÿâ*™ñnäy¢k†>hˆD¶SYŠîc ½—nNàÀ'4Û_Ùº_5ÛM£JÌ3~é®þžÝ:Ðïí›_ùå}ÿ€ÿñlÚÿÏ+ïüŸÿˆª7+Ó£Y$ähá˜Ã+µ¼ÁI‹yl#"R60Â瑌ƒ€gºñ.“h\<òJSi"ÚÞIÎ Ÿ‘NF ’zËœnŸûf×þy_àÿüEÛ6¿óÊûÿ'ÿâ*ìr$Ѭ‘²º0 ¬§!èAî)ôŸý³kÿ<¯¿ðþ"í›_ùå}ÿ€ÿñ|ô®oOñž™qaç]4N¨¢òù}˜åýéÜUp›ˆ,q@¿Û6¿óÊûÿ'ÿâ(þÙµÿžWßø?ÿUGŠôVkuO™ÈýžLDK”S·÷Dº²áöüÊGPEC§ø®Ææ+E¹- ÍÁÆÔ‰Ý—*¡Ü.Ô,Fb2NhCûf×þy_àÿüEÛ6¿óÊûÿ'ÿâ*¡ñ^’"ÞÍx­æù"°œJ[c?”ÞATr;N+VÒê û8.ídYmçd×£)ò  ¿Û6¿óÊûÿ'ÿâ(þÙµÿžWßø?ÿZPöͯüò¾ÿÀ ÿøŠ?¶mç•÷þOÿÄV…Ÿý³kÿ<¯¿ðþ"¹Ÿê0]Zè‘Æ—A¿·,dµ–1þ½{²]µrž=ÿ þöú=hÿ„¿äëòïÿJdªÞ Òo&¸šæÎ9%K«QksR”*±dhË|¹ÜHÏÙð—ü€Oý~]ÿéL•¯<ñ[BÓO2E ³»Uäô¤ÕÄÕÑÊhšâ_[I5¼¶¶–ÓÉt©1Ìy™ |ÉU@¬Üg©1ζ¡áدõí»¸¶¼EˆC$aO–ÉæŒá+3©±ãšÑµ»·½‹ÍµºŠxóñ:¸Ï¦EOƒýãDRKAE$´9·ðE‹#¼¼Wkg„Èwy!M÷p$Ww#¸ñŒb¼ÿ4yu)ïcš m¶…G“ä²2_“ê= ¬Ú¼J6·÷ÏéþÊ0oü,—ú‹Ü6¡sCè©¶U‰Ù—$©a’äÇLu¨Ápº"N÷ý(±â?ô@$I_“æÍžrOKµ¿¾ß§øQµ¿¾ß§øP^¶ŽÖ꽺ܞFÙ»>|“g…ïHGN€Tø*a’íKÑÙ¶ÄV%yRR¼§Î7 låIÖºm­ýöý?­ýöý?€04Ï Xhº}Å­ºyðÉnð›wTDei$®@2°àcU[±ÒôÛ{NãÌ·´š¡[Ï’aû×,W9ÜK bº­ýöý?­ýöý?€0î|0²ß›ûmFêÒï«,a ©e ƒ~ª=Á¯sà¸.áu+ÈÂÌ—DgÍYq*qƒžF:Ÿlt›[ûíú…[ûíú…sÐx:Ò Z]GíSd¹[«q®AsÈEÎ~c–Àõ&Œÿ ´I¬-­v‚mÞCÏo ÿ+]»dF\*G)Æ@FO9ëö·÷Ûôÿ Mÿ=ôÿ KxVÚÞ8SîÆ¡Gp:åRS67üõoÓü(ØÿóÕ¿Oð ×.<Ø·ê—¯%°Å“•ˆod8Â|ÙdLîÏrOI±ÿç«~ŸáG–ßóÙÿ%ÿ çÁVèÄFô¬Ä5âŸéDJòüß/ËóHßwv«Ÿ‡ZIÔ`¾.LñG·…äʱ`UÙ FyÆTŽ€Œk«òÛþ{Iù/øQå·üö“ò_ð sFðEŽ‹q ðÏ#IË1ÄQF„RG–ƒ$‰I$òHãŠÜÒôøô­&ÓO‰Ýã¶…bV|n!F2qÞ§òÛþ{Iù/øQå·üö“ò_ð  (¨ü¶ÿžÒ~Kþymÿ=¤ü—ü(J*?-¿ç´Ÿ’ÿ…[Ïi?%ÿ ’¹Oÿdž‹ÿaÛýµÓùmÿ=¤ü—ü+–ñÒ•±Ñrìßñ=°ëù€4|%ÿ ÿ_—úS%eøŽ@u{“:4‚ÏNûEœA7†”»+¾ÃÃ?¦óëZžÿ ÿ¯Ë¿ý)’®êež¤±ý¢3¾"Lr£xÉêU‡"”•Ñ2WG¡O!Õtɲ‚ê[©­¦òÔ(–ÜDή@U Ú>ö1ÍjëšõΗª\ÛoTolÖa“&Y γýí«å’;ž•¯c¤ØØNÓ –K†LÓÈÒ>ßîîn@ö­ ËïùRвE¥©ç·+Ô£–S¥hÊ·o ê`ȲQz£9 Õ‘›ƒŒíÈÆÓ–Oâ½z7·Hg²{bÎmïgýÒjr¨Áì?ƒ–á—åà÷_ÙöÔZùÈý '?ë<Ï7wý÷óU¯61ÜóìjŠ<çÄ2Ëz4É5=KO·†K»ÄF¾…¼•YP²!.@Þ¸¶ž"×Å”0F_‹P‰§\DdŸh´óîÇ›ò@ü¸ ^‹çGê#IæÇê#@„zýî±} ¾™ÛÍ,iö„ƒ~3®ØÏ Š;àäk x†÷S¹Ñn/\G"MÀ°†Ü—‘ZÐÈÒ ’HÞ̃¶Wx×£ù±úŸÈÑæÇê#@…â=_Vž(Ìf).ÑEȉX˜š d#å; €pN:H¨5-RMCGOí—†!gªXY’ÿ»ó.ày쾨c9¦ 秇çGê#PÛEigŠÝv!w“–v,ÇñbOã@}ν®Z´’bxå{¥_ôR~Ì‘]¤BCƒ–ÄnÌG}ƒç1ZëB×Ä xu(®l.>Ï ÷þXXÝ6Ýí9(ˬjá‰}à+»ócÏSù<ØýOähÍîüSª=˜Iš9Z}'ÏÉ$1·23L¤‡UÜ6‚ ®HS†5¥âzÔ–(P>› †iZ#±„³.Év ÌÇüð†»o6?SùO:/SDZ  Ï _\ê:WrÛÍ+´ƒÌ·mÈê‚° IP2GÎ8ÅlT?i‹ûÇþù4¿i‹Ôÿß&€%5æZn½¨YiÐÛÚÞÁ-ºÄÔžF³?~Š sÉ(îß7M›¾ïèæærN?Ý4Ów]Íÿ|šáâñ>®ÒÂhGÌ¢Ñ~Îâh ÃÆYyãª>W¿qù8ªzv½ªéóØXƶñÚ®Ò©)ýåÒ´¯æl\fP8 ÐòÜ0Ç¢}®ßûÍÿ|·øQöËï7ýòßá@.‘â=gWšh®ÑR{¥E¹òQØFÐLäaNÀÊñÕ±Ðä×aáûÙõ/é··*«qqm’…Râ œÐgµZûe¿÷›þøoð£í°y¿ïƒþbŠƒí°y¿ïƒþ}¶ï7ýð€'¢ ûlÞoûàÿ…mƒûÍÿ|ð  ë”ñïüxh¿ö°ÿÑë]'Û`þóßü+—ñÄñÍc£l$ã]Óó•#þ[¯­iøKþ@þ¿.ÿô¦J~­­=ŒâÚÞ$’a O+Èûc‚0q¹ÈÉäçv·¡¦xKþ@'þ¿.ÿô¢J©â->ïí7V«3Åwh-n ¾ ±lfdd^7à çîã½)lL¯m ô¿Ésw ½ÔQ<ºÃ4,ÛK¨ËFÁ€e|dàŽ@>•fë͕յã,Ao Þs6wE'÷|c$ç¬ H¹¶‡ìï•­Ì—`Ë„´­GµP„Øþ@gšØÔ¼=%î¬5K{Áäk^/1“ÎeÈÜ Îãˆ4¢ÛZŠ µ©z=wJ—Êòõ vó™2$rà•÷ÈVÆ=¥Eÿ .‹¹Gö”4^p;¸)·~sþà-Ž¥A=9¬y< #ÔeYÍ»¯›°·V•g *òIÓ íQMðþØÝNÖóCBcÛ%¾ù#>@J>à ÁRsŸ˜Тɮ¼yc¹ Gp²H‘.]üÉ1塿@ HíÈÍlEâ=i¤†=FݤŽE‰”7ñ3lzüß.G~:Öv£áiïõ)&„qÚO¼3Äm÷H|—wR’nÂ_Ÿ”ž8 óP?ƒghá_íAþ‚tìÛñÇ&$Ã3˜dlàçulKâM V)u+tvr€3wc?“‚¹éŸ¨¨Åjêf·¸Š)džElˆÊ:.ÜÉË‘ÇB¤uéJ?•µ¼…õwºÕßʧ’bqŸYǵ1¼!wåòÞB/ ¸·’- ¯,²<Þ•äôšÑðÞ6— Z[]Jf¼Ù¾æRrd™ŽçlñüDþ  Z(¢€ (¢€ (¢€ Ê>%Ñ‚ÎN¡:¤™$`±!që’u È­CÈ®VÃÁi¨}²mM®%ßÞÑî#fa½™ÎXïÁ#…(j={Kš:+ؤ÷|©Î|õ8òxàŽÆ³t¯®©io{öE†Êé—È™®Q·‚¬Ø!I!À^W߯Uh<*öþ ²¸YXÃ\K$œ2W•š G9òijc¶X~~ ‘ïÞþêúÝ®”»ÛYˆDVEÆã¹ÿz~lãŒ2r«mâ öxá¶Õ-¥’C„U~XíÜ?5É gñn—pö‚Âê µžeÙ$ÀZ7‘_ÝHBéמ G†¾X]³mØ ˜ÿR›G~ÿ¥eYxk½&Í5›Ìζ‘[Iì Ã$e3¸å³3ÙÇ 9ȵ÷ŠQ,>Û¤Á¥H#›lâ2…Š…àŽAÜ}9Í]\µŽØ½ü°Ú͘¦‹Ìßå¸Í+œsû¿›éY–>û&™uh÷ûç’&2Ámåñ7͸ñ× sÀ±áùïumVî4ùdÓ 0ǹvÉpÁ×±Bäõ í@ÃÄú#[=ÂêP4i'–JœØÜ0'åù²8ÀÏNkR9#š$–'WÔ2ºœ†¡¸®BëÁSj.··wöòj*T+=©ò*Æ$Ÿ˜ÁÁÏ·Ë]UªØØ[Z PD±.Õ 0£p:t  ë”ñïüxh¿ö°ÿÑë]]rž=ÿ þöú=hÿ„¿äëòïÿJ$­–`ªK0u'µcxKþ@'þ¿.ÿô¢JÌñ4¨÷÷kv [Yiââ(H,“HÎÊK/ñ„ØœtfOjMØRvGT޲ ¤ŠÃÕy§àúþ•Àøvà&¡§=°‚6šòkYâµ E$b&‘eÚ03•Q¸ÿJ××Xü¹Ç¯¦hƒÆšªiЈÚK¥µSO¹‰šöv6Â_;åa•ÜH /;[æå‹µ¿¼?/þ½[ûÃòÿë× ž)»Õob¶Ñ¯t·YeŽ5¸ØgU-²EÉÊ/YÉâËYôÖšêÊÍìå6{Y®'‰!t;‡îÁf\ll”n{@ÚßÞ—ÿ^­ýáùõë„Ðüg©ë71[E-ónQV$chf“î$ïóf9`y9QÿkÚ­ÍÔW1CØ€·¸Ø¤fà3nÆO °Fã©"QÏ€nmoïËÿ¯FÖþðü¿úôú(›[ûÃòÿëѵÿ¼¿—ÿ^ŸE3lŸß_ûçÿ¯FÙ?¾¿÷Ïÿ^ŸE3lŸß_ûçÿ¯I¶_ùè¿÷Éÿyé\u-NþæÖÒ[XÞgƒî«³©Ü‹;6FÑÃyg9};ͲÿÏEÿ¾?úô˜“þz§ýóÿ×®BÏÅ:ÅÍ­”©l³\–Ì‘°M°ÊérÄn8"mÉàÌ îÁ'HÖZÖX`KèõÃÄe½‡Wšî ¿u1ÎÒÀDĦLc+‚1œ zVÉç¢ÿßýzM²ÿÏEÿ¾?úõÆéþ$×e¹‹íRi¯x‹»«0š=Ê™[© î¢ãœ¨ü_ŸtÒÙê1 ØM3#[\1·l»å²€öûÃ#¡ ¶_ùè¿÷Çÿ^²ÿÏEÿ¾?úõçƒUŸÄþºº¼¸hä´¸…b—MÔ –G@C {™ã¡fïÀôu]zÿÃÃQÓlãŽG±´’ú¹i%Ýl°·ßv}Ìþpó÷Xwæ€;=’ÿÏEÿ¾?úôl—þz/ýñÿ×®QñΣe«ÚmäbëÊMFA^ÿ,‰.KQ'CÓ¨®çM¹’óJ´º•$š‘Ö9ª’ pÞ£­M²_ùè¿÷Çÿ^¹o.æþ'ºAùnµÖ×)ãßøðÑì;aÿ£Ö€/xKþ@þ¿.ÿô¦J»¨i6ú‹E#´‘\CŸ&x_d‘ç÷ ä8ÆËà?‹‰¾ÃãÙìí^idŠÝ4õÄaägÛãv O4ßøAsþqwÿw³ÿ¾_ÀŸð|çüâïþïgÿ}¿€:ÿÿÚ‘ÿ)ÛãŸýã/ýs¾ñÿûR?å;|sÿ¼eÿ®wÃãýþ(¢Šÿ°þÀŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( àþœÿœ]ÿÝìÿï£×ð_ßçü9ÿ8»ÿ»ÙÿßG¯à¿ãÿö¤ÊvøçÿxËÿ\ï‡ÇüþÔùNßÿïëðøÿŠ(¢¿ìÿ°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(øÿƒç?ç÷{?ûèõü×÷ùÿÎÎ.ÿîö÷Ñëø¯øÿý©ò¾9ÿÞ2ÿ×;áñÿÿµ#þS·Ç?ûÆ_úç|>?ßâŠ(¯û?ì(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠþÿàùÏùÅßýÞÏþú=uýþÁóŸó‹¿û½Ÿýôzþëþ?ÿjGü§oŽ÷Œ¿õÎø|ÇÿíHÿ”íñÏþñ—þ¹ß÷ø¢Š+þÀû (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?€?ø>sþqwÿw³ÿ¾_ÀŸð|çüâïþïgÿ}¿€:ÿÿÚ‘ÿ)ÛãŸýã/ýs¾ñÿûR?å;|sÿ¼eÿ®wÃãýþ(¢Šÿ°þÀŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( àþœÿœ]ÿÝìÿï£×ð_ßçü9ÿ8»ÿ»ÙÿßG¯à¿ãÿö¤ÊvøçÿxËÿ\ï‡ÇüþÔùNßÿïëðøÿŠ(¢¿ìÿ°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(øÿƒç?ç÷{?ûèõü×÷ùÿÎÎ.ÿîö÷Ñëø¯øÿý©ò¾9ÿÞ2ÿ×;áñÿÿµ#þS·Ç?ûÆ_úç|>?ßâŠ(¯û?ì(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠþÿàùÏùÅßýÞÏþú=uýþÁóŸó‹¿û½Ÿýôzþëþ?ÿjGü§oŽ÷Œ¿õÎø|ÇÿíHÿ”íñÏþñ—þ¹ß÷ø¢Š+þÀû (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?€?ø>sþqwÿw³ÿ¾_ÀŸð|çüâïþïgÿ}¿€:ÿÿÚ‘ÿ)ÛãŸýã/ýs¾ñÿûR?å;|sÿ¼eÿ®wÃãÿÙuima-addons-2.3.1/ConfigurableFeatureExtractor/src/docbook/images/CFE_UG/CFE_UG-10.jpg0000644000175000017500000000572611625126536030017 0ustar drazzibdrazzibÿØÿàJFIF``ÿáExifII*ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ0"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ô]3K³Ô4ëÍSTÔuDoí+èÙÆ³uj©u,h¤TURÿføcþƒ·ßøR^ñê4ïùäÿ±Šý:µSÐuIÒïP]M{^Ï-Çú¡ž€8ûÜŒýÞ•VJO¡ ¾k0x[Jº…f‚ûW–&û®šýé·_:¤ÿ„:Ãþ~u¯ü_ñÚ†î'›áþ¿Q¼’:j*¨€–bd—ÔšÅÕ-u_ ØÎÚJ43]—™aÓm±oD.ß*BY<1’žŒqwIü!öóó­àúûÿŽÒÿÂaÿ?:×þ¯¿øís¥5ÖvºÕc#Uóš4¶4G¶m¤(ü¥ˆCɾš~‘¨x¦üÛEuyunÓMÍ¶×æƒ1Ì\ð*…ܨß#Œ± 2Š7¿á°ÿŸkÿ×ßüvøC¬?ççZÿÁõ÷ÿ®oT]wPÓ’ÖìÜÝÃvûÞ)¬•’ô!FA ÆXÄä.x«·ÛZ&¥i§é˽Tpm,ŠE+´ŒY):.Ïãï’Ú¯ÿu‡üüë_ø>¾ÿã´¿ð‡XÏεÿƒëïþ;\À¿×5#ÝK«[ÛCqk:¸¶ ,AšEu#ÈPvü™>ñW¤Öbv|¥@ßü!ú~3ökÿ×ßüvøCì?ççZÿÁõ÷ÿ®qRîúúÆò{+÷¶5Õ¼ØÀ7•¼†F»‚1!TìeÜéþ¿‚ ICg ôw[ìmÑJ儌ÂAÿ¦ÏÓ€:øC¬?ççZÿÁõ÷ÿª~¬¼iâ-5.oe´‚ÚÊH£º»–à£?¸†‘˜Œí^ýªÿƒnco iV^\ñÏkcs$°<{X |Àg™ªš'ü”ÿמŸÿµè¾Œm¦ðåͤæõ j×ò,–ÖÏ!F[ù™NB2äÊŸ™cÿ*ûX{nmšB ÇÔÿ£rkGÁ¿ò¹ÿ°®¥ÿ¥³Vù¦›D¸§¹ayg§Ú-º JL3;<–nff,Äâ0:“Ð ³ý³kÿ<¯¿ðþ"©kÌö· kf!>tóÌ¬Ë “…ù—,AÀt<ö0èúô×WÃtmåŽà?‘u4a>ômd«“Ôç§yrÔKCOûf×þy_àÿüEÛ6¿óÊûÿ'ÿâ*+ïizuúÙ]M"LDdâÞFD3*p¥PVb9â¨ê2Ól–OÝ_¼ÜE ‘.Ÿq¼ ¨e]™uàò¹Œg$S(ÓþÙµÿžWßø?ÿGöͯüò¾ÿÀ ÿøŠÊ¶ñ¶’öoqp/` <Е{󈜫I÷8AÁ-÷Wv ¬ËâÝ't2];,­"±žMÒ.ýÊ»Pî#ËlíÎ0=F@.lÚÿÏ+ïüŸÿˆ£ûf×þy_àÿüE[¶¸†òÚ+›yHeA$n§!”Œ‚=ˆ5-gÿlÚÿÏ+ïüŸÿˆ£ûf×þy_àÿüEhV­âÍ?KKñåÞ\Kb¡¦X,æuí!wª݇S·9ÁÎ1@ÿ¶mç•÷þOÿÄQý³kÿ<¯¿ðþ"³¤ñ~˜² W‘T9YŒÖÓÇå☎cåÂJ÷L«âÝà2¬·'÷ÂئóYÊïcÙ½P[paIÏ€.lÚÿÏ+ïüŸÿˆ£ûf×þy_àÿüEOa}m©éö×öæ[\ijBûHÜŒSƒÈÈ#­Y  ÿí›_ùå}ÿ€ÿñÏø~d¸ø‰â‰PHÚX`I#Ë~̮¹MþJWŠ¿ëÓOÿÚôoÁ¿ò¹ÿ°®¥ÿ¥³W@kÏ4ÿÝø~;½9¼=«Îë¨ÞÈdK‚Œ$º–E*ËYNsÞ­ÿÂÀºÿ¡_XÿÀ ¯þ1@zþ“w-Ä×6‘I:\ÂÜGŠ’ŒY7|§ï0 ?¯ h—q]A$öòÚÚÛ<“EÏ•¥q†$G•UåÈŸ½ÛªŸð°.¿èWÖ?ðëÿŒQÿ ëþ…}cÿ.¿øÅO*½ÉäW¹­}áÙµ/Ou-ä±XÉomÁßßä•ʾT¿:ýÒ3óJ§kðþÆÈ]5½ýÔwIû@Žᢺ1>_ï'¾âG¿5Wþ×ý úÇþ]ñŠ?á`]Я¬à×ÿª(³©|<ÓuFSuq$¾\ÓÉšÚÞa™Ãº$l>ðÈ$dtÎ8­¨4{y-Ýe˜˜.§ºPHå¥ß¸: çA\çü, ¯úõüºÿãÂÀºÿ¡_XÿÀ ¯þ1@n—§Ç¤éZl.ï¤ 3ãq¡A8ã 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent TikaAnnotator 2.3.1 UIMA Annotator: ${project.artifactId} ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/MarkupAnnotator.xml org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.uima uimaj-document-annotation ${uimaDependencyVersion} provided org.apache.tika tika-core 0.7 org.apache.tika tika-parsers 0.7 pdfbox pdfbox org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test junit junit 4.8.2 test uima-an-tika desc org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/main/java/org/apache/uima/tika/AttributeFS*.java src/main/java/org/apache/uima/tika/FeatureValue*.java src/main/java/org/apache/uima/tika/MarkupAnnotation*.java src/main/java/org/apache/uima/tika/SourceDocumentAnnotation*.java uima-addons-2.3.1/TikaAnnotator/LICENSE.txt0000644000175000017500000004731711625126554020236 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ============================================================================================== APACHE TIKA SUBCOMPONENTS Apache Tika includes a number of subcomponents with separate copyright notices and license terms. Your use of these subcomponents is subject to the terms and conditions of the following licenses. MIME type information from file-4.26.tar.gz (http://www.darwinsys.com/file/) Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995. Software written by Ian F. Darwin and others; maintained 1994- Christos Zoulas. This software is not subject to any export provision of the United States Department of Commerce, and may be exported to any country or planet. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice immediately at the beginning of the file, without modification, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Charset detection code from ICU4J (http://site.icu-project.org/) Copyright (c) 1995-2009 International Business Machines Corporation and others All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. ASM library (asm) Copyright (c) 2000-2005 INRIA, France Telecom All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Office Open XML schemas (ooxml-schemas-1.0.jar) The Office Open XML schema definitions used by Apache POI are a part of the Office Open XML ECMA Specification (ECMA-376, [1]). As defined in section 9.4 of the ECMA bylaws [2], this specification is available to all interested parties without restriction: 9.4 All documents when approved shall be made available to all interested parties without restriction. Furthermore, both Microsoft and Adobe have granted patent licenses to this work [3,4,5]. [1] http://www.ecma-international.org/publications/standards/Ecma-376.htm [2] http://www.ecma-international.org/memento/Ecmabylaws.htm [3] http://www.microsoft.com/interop/osp/ [4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/ECMA-376%20Edition%201%20Microsoft%20Patent%20Declaration.pdf [5] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/ga-2006-191.pdf DOM4J library (dom4j-1.6.1.jar) Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain copyright statements and notices. Redistributions must also contain a copy of this document. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name "DOM4J" must not be used to endorse or promote products derived from this Software without prior written permission of MetaStuff, Ltd. For written permission, please contact dom4j-info@metastuff.com. 4. Products derived from this Software may not be called "DOM4J" nor may "DOM4J" appear in their names without prior written permission of MetaStuff, Ltd. DOM4J is a registered trademark of MetaStuff, Ltd. 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. uima-addons-2.3.1/TikaAnnotator/README.txt0000644000175000017500000000575511625126554020111 0ustar drazzibdrazzibApache UIMA TikaAnnotator README file INTRODUCTION Apache Tika is a toolkit for detecting and extracting metadata and structured text content from various documents using existing parser libraries. TikaAnnotator uses Tika to generate annotations representing the original markup of a document, extract its text and metadata. It consists of three resources (see /desc): - FileSystemCollectionReader : similar to the one in UIMA examples but uses TIKA to extract the text from binary documents and generates annotations to represent the markup - MarkupAnnotator : takes the original content from a view and generates a new view containing the extracted text with markup annotations - TikaWrapper : utility class which allows to populate a CAS from a binary document; used by the FileSystemCollectionReader VERSION This version wraps Tika 0.4. In that version of Tika, the packaging for Tika was split into several parts. The tika-core jar contains only the core client-visible classes and interfaces and has zero dependencies beyond Java 5. All the actual parser implementations and external parser dependencies are in the tika-parsers jar. See http://lucene.apache.org/tika/gettingstarted.html for the full details. COMPILATION You can use the ANT script to compile the sources. Note that you need to add the Tika-jars in the /lib directory; it is recommended to use the Tika-*-standalone.jar which contains all the libraries used internally by Tika. For more information on UIMA, see: http://incubator.apache.org/uima For more information on Tika, see: http://incubator.apache.org/tika/ Crypto Notice ------------- The binary distributions include cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See for more information. The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code. The following provides more details on the included cryptographic software: The binary distributions include portions of Apache Tika, which, in turn, is classified as being controlled under ECCN 5D002. uima-addons-2.3.1/TikaAnnotator/marker-file-identifying-single-project0000644000175000017500000000000011625126554025740 0ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/marker-file-identifying-standard-pear0000644000175000017500000000000011625126554025540 0ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/marker-file-identifying-osgi-project0000644000175000017500000000000011625126554025420 0ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/NOTICE.txt0000644000175000017500000000172611625126554020127 0ustar drazzibdrazzibApache UIMA Tika Annotator software component Copyright 2009-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). This product includes portions of Apache Tika, which includes software developed by the following copyright owners: - Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995. Software written by Ian F. Darwin and others; maintained 1994- Christos Zoulas. - Copyright (c) 1995-2009 International Business Machines Corporation and others - Copyright (c) 2000-2005 INRIA, France Telecom - Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. - Copyright (c) 2000-2003, BEA Systems, . - Copyright 2001-2003 (c) World Wide Web Consortium (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) uima-addons-2.3.1/TikaAnnotator/src/0000755000175000017500000000000011625126554017166 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/main/0000755000175000017500000000000011625126554020112 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/main/java/0000755000175000017500000000000011625126554021033 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/main/java/org/0000755000175000017500000000000011625126554021622 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/0000755000175000017500000000000011625126554023043 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/0000755000175000017500000000000011625126554023776 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/0000755000175000017500000000000011625126554024726 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/FeatureValue.java0000644000175000017500000000562611625126554030172 0ustar drazzibdrazzib /* First created by JCasGen Fri Jun 12 15:31:15 CEST 2009 */ package org.apache.uima.tika; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.TOP; /** Simple Feature Value * Updated by JCasGen Fri Jun 12 15:31:15 CEST 2009 * XML source: C:/code/uima/TikaAnnotator/desc/MarkupAnnotationTypeSystem.xml * @generated */ public class FeatureValue extends TOP { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(FeatureValue.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected FeatureValue() {} /** Internal - constructor used by generator * @generated */ public FeatureValue(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public FeatureValue(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: name /** getter for name - gets name of the feature * @generated */ public String getName() { if (FeatureValue_Type.featOkTst && ((FeatureValue_Type)jcasType).casFeat_name == null) jcasType.jcas.throwFeatMissing("name", "org.apache.uima.tika.FeatureValue"); return jcasType.ll_cas.ll_getStringValue(addr, ((FeatureValue_Type)jcasType).casFeatCode_name);} /** setter for name - sets name of the feature * @generated */ public void setName(String v) { if (FeatureValue_Type.featOkTst && ((FeatureValue_Type)jcasType).casFeat_name == null) jcasType.jcas.throwFeatMissing("name", "org.apache.uima.tika.FeatureValue"); jcasType.ll_cas.ll_setStringValue(addr, ((FeatureValue_Type)jcasType).casFeatCode_name, v);} //*--------------* //* Feature: value /** getter for value - gets * @generated */ public String getValue() { if (FeatureValue_Type.featOkTst && ((FeatureValue_Type)jcasType).casFeat_value == null) jcasType.jcas.throwFeatMissing("value", "org.apache.uima.tika.FeatureValue"); return jcasType.ll_cas.ll_getStringValue(addr, ((FeatureValue_Type)jcasType).casFeatCode_value);} /** setter for value - sets * @generated */ public void setValue(String v) { if (FeatureValue_Type.featOkTst && ((FeatureValue_Type)jcasType).casFeat_value == null) jcasType.jcas.throwFeatMissing("value", "org.apache.uima.tika.FeatureValue"); jcasType.ll_cas.ll_setStringValue(addr, ((FeatureValue_Type)jcasType).casFeatCode_value, v);} } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/SourceDocumentAnnotation.java0000644000175000017500000001331311625126554032564 0ustar drazzibdrazzib /* First created by JCasGen Fri Jun 12 15:31:15 CEST 2009 */ package org.apache.uima.tika; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.tcas.DocumentAnnotation; /** * Updated by JCasGen Fri Jun 12 15:31:15 CEST 2009 * XML source: C:/code/uima/TikaAnnotator/desc/MarkupAnnotationTypeSystem.xml * @generated */ public class SourceDocumentAnnotation extends DocumentAnnotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(SourceDocumentAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected SourceDocumentAnnotation() {} /** Internal - constructor used by generator * @generated */ public SourceDocumentAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public SourceDocumentAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public SourceDocumentAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: uri /** getter for uri - gets * @generated */ public String getUri() { if (SourceDocumentAnnotation_Type.featOkTst && ((SourceDocumentAnnotation_Type)jcasType).casFeat_uri == null) jcasType.jcas.throwFeatMissing("uri", "org.apache.uima.tika.SourceDocumentAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_uri);} /** setter for uri - sets * @generated */ public void setUri(String v) { if (SourceDocumentAnnotation_Type.featOkTst && ((SourceDocumentAnnotation_Type)jcasType).casFeat_uri == null) jcasType.jcas.throwFeatMissing("uri", "org.apache.uima.tika.SourceDocumentAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_uri, v);} //*--------------* //* Feature: contentType /** getter for contentType - gets * @generated */ public String getContentType() { if (SourceDocumentAnnotation_Type.featOkTst && ((SourceDocumentAnnotation_Type)jcasType).casFeat_contentType == null) jcasType.jcas.throwFeatMissing("contentType", "org.apache.uima.tika.SourceDocumentAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_contentType);} /** setter for contentType - sets * @generated */ public void setContentType(String v) { if (SourceDocumentAnnotation_Type.featOkTst && ((SourceDocumentAnnotation_Type)jcasType).casFeat_contentType == null) jcasType.jcas.throwFeatMissing("contentType", "org.apache.uima.tika.SourceDocumentAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_contentType, v);} //*--------------* //* Feature: features /** getter for features - gets * @generated */ public FSArray getFeatures() { if (SourceDocumentAnnotation_Type.featOkTst && ((SourceDocumentAnnotation_Type)jcasType).casFeat_features == null) jcasType.jcas.throwFeatMissing("features", "org.apache.uima.tika.SourceDocumentAnnotation"); return (FSArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_features)));} /** setter for features - sets * @generated */ public void setFeatures(FSArray v) { if (SourceDocumentAnnotation_Type.featOkTst && ((SourceDocumentAnnotation_Type)jcasType).casFeat_features == null) jcasType.jcas.throwFeatMissing("features", "org.apache.uima.tika.SourceDocumentAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_features, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for features - gets an indexed value - * @generated */ public FeatureValue getFeatures(int i) { if (SourceDocumentAnnotation_Type.featOkTst && ((SourceDocumentAnnotation_Type)jcasType).casFeat_features == null) jcasType.jcas.throwFeatMissing("features", "org.apache.uima.tika.SourceDocumentAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_features), i); return (FeatureValue)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_features), i)));} /** indexed setter for features - sets an indexed value - * @generated */ public void setFeatures(int i, FeatureValue v) { if (SourceDocumentAnnotation_Type.featOkTst && ((SourceDocumentAnnotation_Type)jcasType).casFeat_features == null) jcasType.jcas.throwFeatMissing("features", "org.apache.uima.tika.SourceDocumentAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_features), i); jcasType.ll_cas.ll_setRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((SourceDocumentAnnotation_Type)jcasType).casFeatCode_features), i, jcasType.ll_cas.ll_getFSRef(v));} } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/TIKAWrapper.java0000644000175000017500000001017311625126554027664 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tika; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import org.apache.tika.config.TikaConfig; import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.parser.Parser; import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASException; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.FSArray; public class TIKAWrapper { // configuration for TIKA - can be created by specifying a custom resource private TikaConfig config = null; public TIKAWrapper()throws TikaException{ config = TikaConfig.getDefaultConfig(); } public TIKAWrapper(String configLocation) throws TikaException{ if (configLocation!=null) try { config = new TikaConfig(configLocation); } catch (Exception e) {} if (config==null) config = TikaConfig.getDefaultConfig(); } public void populateCASfromURL(CAS cas, URL uri, String language) throws CASException{ populateCASfromURL(cas, uri, null, language); } public void populateCASfromURL(CAS cas, URL url, String mime, String language) throws CASException{ InputStream originalStream=null; try { originalStream = new BufferedInputStream( url.openStream()); } catch (IOException e1) { new CASException(e1); } // use custom parser or rely on autodetect Parser parser = null; if (mime!=null && mime.equals("")==false) parser = config.getParser(mime); // it that does not work if (parser == null) {parser = new AutoDetectParser(config);} Metadata md = new Metadata(); MarkupHandler handler = new MarkupHandler(); try { parser.parse(originalStream,handler , md); } catch (Exception e){ // if we have a problem just dump the message and continue // getLogger().log(Level.WARNING,"Problem converting file : "+URI+"\t"+e.getMessage()); // cas.setDocumentText(""); return; throw new CASException(e); } finally { // set language if it was explicitly specified as a configuration // parameter if (language != null) { cas.setDocumentLanguage(language); } try { originalStream.close(); } catch (IOException e) { } } // add text and markup to CAS handler.populateCAS(cas); JCas jcas = cas.getJCas(); SourceDocumentAnnotation docAnnotation = new SourceDocumentAnnotation(jcas); // now iterate on the metadata found by Tika and add them to the info if (docAnnotation.getFeatures()==null){ docAnnotation.setFeatures((FSArray) cas .createArrayFS(md.size()+1)) ; } int i=0; for (;i * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: attributes /** getter for attributes - gets * @generated */ public FSArray getAttributes() { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_attributes == null) jcasType.jcas.throwFeatMissing("attributes", "org.apache.uima.tika.MarkupAnnotation"); return (FSArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_attributes)));} /** setter for attributes - sets * @generated */ public void setAttributes(FSArray v) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_attributes == null) jcasType.jcas.throwFeatMissing("attributes", "org.apache.uima.tika.MarkupAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_attributes, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for attributes - gets an indexed value - * @generated */ public FSArray getAttributes(int i) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_attributes == null) jcasType.jcas.throwFeatMissing("attributes", "org.apache.uima.tika.MarkupAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_attributes), i); return (FSArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_attributes), i)));} /** indexed setter for attributes - sets an indexed value - * @generated */ public void setAttributes(int i, FSArray v) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_attributes == null) jcasType.jcas.throwFeatMissing("attributes", "org.apache.uima.tika.MarkupAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_attributes), i); jcasType.ll_cas.ll_setRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_attributes), i, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: children /** getter for children - gets * @generated */ public FSArray getChildren() { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_children == null) jcasType.jcas.throwFeatMissing("children", "org.apache.uima.tika.MarkupAnnotation"); return (FSArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_children)));} /** setter for children - sets * @generated */ public void setChildren(FSArray v) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_children == null) jcasType.jcas.throwFeatMissing("children", "org.apache.uima.tika.MarkupAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_children, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for children - gets an indexed value - * @generated */ public MarkupAnnotation getChildren(int i) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_children == null) jcasType.jcas.throwFeatMissing("children", "org.apache.uima.tika.MarkupAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_children), i); return (MarkupAnnotation)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_children), i)));} /** indexed setter for children - sets an indexed value - * @generated */ public void setChildren(int i, MarkupAnnotation v) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_children == null) jcasType.jcas.throwFeatMissing("children", "org.apache.uima.tika.MarkupAnnotation"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_children), i); jcasType.ll_cas.ll_setRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_children), i, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: name /** getter for name - gets * @generated */ public String getName() { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_name == null) jcasType.jcas.throwFeatMissing("name", "org.apache.uima.tika.MarkupAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_name);} /** setter for name - sets * @generated */ public void setName(String v) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_name == null) jcasType.jcas.throwFeatMissing("name", "org.apache.uima.tika.MarkupAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_name, v);} //*--------------* //* Feature: parent /** getter for parent - gets * @generated */ public MarkupAnnotation getParent() { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_parent == null) jcasType.jcas.throwFeatMissing("parent", "org.apache.uima.tika.MarkupAnnotation"); return (MarkupAnnotation)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_parent)));} /** setter for parent - sets * @generated */ public void setParent(MarkupAnnotation v) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_parent == null) jcasType.jcas.throwFeatMissing("parent", "org.apache.uima.tika.MarkupAnnotation"); jcasType.ll_cas.ll_setRefValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_parent, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: qualifiedName /** getter for qualifiedName - gets * @generated */ public String getQualifiedName() { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_qualifiedName == null) jcasType.jcas.throwFeatMissing("qualifiedName", "org.apache.uima.tika.MarkupAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_qualifiedName);} /** setter for qualifiedName - sets * @generated */ public void setQualifiedName(String v) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_qualifiedName == null) jcasType.jcas.throwFeatMissing("qualifiedName", "org.apache.uima.tika.MarkupAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_qualifiedName, v);} //*--------------* //* Feature: uri /** getter for uri - gets * @generated */ public String getUri() { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_uri == null) jcasType.jcas.throwFeatMissing("uri", "org.apache.uima.tika.MarkupAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_uri);} /** setter for uri - sets * @generated */ public void setUri(String v) { if (MarkupAnnotation_Type.featOkTst && ((MarkupAnnotation_Type)jcasType).casFeat_uri == null) jcasType.jcas.throwFeatMissing("uri", "org.apache.uima.tika.MarkupAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((MarkupAnnotation_Type)jcasType).casFeatCode_uri, v);} } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/AttributeFS_Type.java0000644000175000017500000001254011625126554030770 0ustar drazzibdrazzib /* First created by JCasGen Fri Jun 12 15:31:15 CEST 2009 */ package org.apache.uima.tika; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.cas.TOP_Type; /** Representation of an attribute * Updated by JCasGen Fri Jun 12 15:31:15 CEST 2009 * @generated */ public class AttributeFS_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (AttributeFS_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = AttributeFS_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new AttributeFS(addr, AttributeFS_Type.this); AttributeFS_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new AttributeFS(addr, AttributeFS_Type.this); } }; /** @generated */ public final static int typeIndexID = AttributeFS.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.tika.AttributeFS"); /** @generated */ final Feature casFeat_localName; /** @generated */ final int casFeatCode_localName; /** @generated */ public String getLocalName(int addr) { if (featOkTst && casFeat_localName == null) jcas.throwFeatMissing("localName", "org.apache.uima.tika.AttributeFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_localName); } /** @generated */ public void setLocalName(int addr, String v) { if (featOkTst && casFeat_localName == null) jcas.throwFeatMissing("localName", "org.apache.uima.tika.AttributeFS"); ll_cas.ll_setStringValue(addr, casFeatCode_localName, v);} /** @generated */ final Feature casFeat_qualifiedName; /** @generated */ final int casFeatCode_qualifiedName; /** @generated */ public String getQualifiedName(int addr) { if (featOkTst && casFeat_qualifiedName == null) jcas.throwFeatMissing("qualifiedName", "org.apache.uima.tika.AttributeFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_qualifiedName); } /** @generated */ public void setQualifiedName(int addr, String v) { if (featOkTst && casFeat_qualifiedName == null) jcas.throwFeatMissing("qualifiedName", "org.apache.uima.tika.AttributeFS"); ll_cas.ll_setStringValue(addr, casFeatCode_qualifiedName, v);} /** @generated */ final Feature casFeat_uri; /** @generated */ final int casFeatCode_uri; /** @generated */ public String getUri(int addr) { if (featOkTst && casFeat_uri == null) jcas.throwFeatMissing("uri", "org.apache.uima.tika.AttributeFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_uri); } /** @generated */ public void setUri(int addr, String v) { if (featOkTst && casFeat_uri == null) jcas.throwFeatMissing("uri", "org.apache.uima.tika.AttributeFS"); ll_cas.ll_setStringValue(addr, casFeatCode_uri, v);} /** @generated */ final Feature casFeat_value; /** @generated */ final int casFeatCode_value; /** @generated */ public String getValue(int addr) { if (featOkTst && casFeat_value == null) jcas.throwFeatMissing("value", "org.apache.uima.tika.AttributeFS"); return ll_cas.ll_getStringValue(addr, casFeatCode_value); } /** @generated */ public void setValue(int addr, String v) { if (featOkTst && casFeat_value == null) jcas.throwFeatMissing("value", "org.apache.uima.tika.AttributeFS"); ll_cas.ll_setStringValue(addr, casFeatCode_value, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public AttributeFS_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_localName = jcas.getRequiredFeatureDE(casType, "localName", "uima.cas.String", featOkTst); casFeatCode_localName = (null == casFeat_localName) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_localName).getCode(); casFeat_qualifiedName = jcas.getRequiredFeatureDE(casType, "qualifiedName", "uima.cas.String", featOkTst); casFeatCode_qualifiedName = (null == casFeat_qualifiedName) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_qualifiedName).getCode(); casFeat_uri = jcas.getRequiredFeatureDE(casType, "uri", "uima.cas.String", featOkTst); casFeatCode_uri = (null == casFeat_uri) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_uri).getCode(); casFeat_value = jcas.getRequiredFeatureDE(casType, "value", "uima.cas.String", featOkTst); casFeatCode_value = (null == casFeat_value) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_value).getCode(); } } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/AttributeFS.java0000644000175000017500000001100611625126554027763 0ustar drazzibdrazzib /* First created by JCasGen Fri Jun 12 15:31:15 CEST 2009 */ package org.apache.uima.tika; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.TOP; /** Representation of an attribute * Updated by JCasGen Fri Jun 12 15:31:15 CEST 2009 * XML source: C:/code/uima/TikaAnnotator/desc/MarkupAnnotationTypeSystem.xml * @generated */ public class AttributeFS extends TOP { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(AttributeFS.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected AttributeFS() {} /** Internal - constructor used by generator * @generated */ public AttributeFS(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public AttributeFS(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: localName /** getter for localName - gets * @generated */ public String getLocalName() { if (AttributeFS_Type.featOkTst && ((AttributeFS_Type)jcasType).casFeat_localName == null) jcasType.jcas.throwFeatMissing("localName", "org.apache.uima.tika.AttributeFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((AttributeFS_Type)jcasType).casFeatCode_localName);} /** setter for localName - sets * @generated */ public void setLocalName(String v) { if (AttributeFS_Type.featOkTst && ((AttributeFS_Type)jcasType).casFeat_localName == null) jcasType.jcas.throwFeatMissing("localName", "org.apache.uima.tika.AttributeFS"); jcasType.ll_cas.ll_setStringValue(addr, ((AttributeFS_Type)jcasType).casFeatCode_localName, v);} //*--------------* //* Feature: qualifiedName /** getter for qualifiedName - gets * @generated */ public String getQualifiedName() { if (AttributeFS_Type.featOkTst && ((AttributeFS_Type)jcasType).casFeat_qualifiedName == null) jcasType.jcas.throwFeatMissing("qualifiedName", "org.apache.uima.tika.AttributeFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((AttributeFS_Type)jcasType).casFeatCode_qualifiedName);} /** setter for qualifiedName - sets * @generated */ public void setQualifiedName(String v) { if (AttributeFS_Type.featOkTst && ((AttributeFS_Type)jcasType).casFeat_qualifiedName == null) jcasType.jcas.throwFeatMissing("qualifiedName", "org.apache.uima.tika.AttributeFS"); jcasType.ll_cas.ll_setStringValue(addr, ((AttributeFS_Type)jcasType).casFeatCode_qualifiedName, v);} //*--------------* //* Feature: uri /** getter for uri - gets * @generated */ public String getUri() { if (AttributeFS_Type.featOkTst && ((AttributeFS_Type)jcasType).casFeat_uri == null) jcasType.jcas.throwFeatMissing("uri", "org.apache.uima.tika.AttributeFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((AttributeFS_Type)jcasType).casFeatCode_uri);} /** setter for uri - sets * @generated */ public void setUri(String v) { if (AttributeFS_Type.featOkTst && ((AttributeFS_Type)jcasType).casFeat_uri == null) jcasType.jcas.throwFeatMissing("uri", "org.apache.uima.tika.AttributeFS"); jcasType.ll_cas.ll_setStringValue(addr, ((AttributeFS_Type)jcasType).casFeatCode_uri, v);} //*--------------* //* Feature: value /** getter for value - gets * @generated */ public String getValue() { if (AttributeFS_Type.featOkTst && ((AttributeFS_Type)jcasType).casFeat_value == null) jcasType.jcas.throwFeatMissing("value", "org.apache.uima.tika.AttributeFS"); return jcasType.ll_cas.ll_getStringValue(addr, ((AttributeFS_Type)jcasType).casFeatCode_value);} /** setter for value - sets * @generated */ public void setValue(String v) { if (AttributeFS_Type.featOkTst && ((AttributeFS_Type)jcasType).casFeat_value == null) jcasType.jcas.throwFeatMissing("value", "org.apache.uima.tika.AttributeFS"); jcasType.ll_cas.ll_setStringValue(addr, ((AttributeFS_Type)jcasType).casFeatCode_value, v);} } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/MarkupAnnotation_Type.java0000644000175000017500000002227411625126554032073 0ustar drazzibdrazzib /* First created by JCasGen Fri Jun 12 15:31:15 CEST 2009 */ package org.apache.uima.tika; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Fri Jun 12 15:31:15 CEST 2009 * @generated */ public class MarkupAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (MarkupAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = MarkupAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new MarkupAnnotation(addr, MarkupAnnotation_Type.this); MarkupAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new MarkupAnnotation(addr, MarkupAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = MarkupAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.tika.MarkupAnnotation"); /** @generated */ final Feature casFeat_attributes; /** @generated */ final int casFeatCode_attributes; /** @generated */ public int getAttributes(int addr) { if (featOkTst && casFeat_attributes == null) jcas.throwFeatMissing("attributes", "org.apache.uima.tika.MarkupAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_attributes); } /** @generated */ public void setAttributes(int addr, int v) { if (featOkTst && casFeat_attributes == null) jcas.throwFeatMissing("attributes", "org.apache.uima.tika.MarkupAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_attributes, v);} /** @generated */ public int getAttributes(int addr, int i) { if (featOkTst && casFeat_attributes == null) jcas.throwFeatMissing("attributes", "org.apache.uima.tika.MarkupAnnotation"); if (lowLevelTypeChecks) return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_attributes), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_attributes), i); return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_attributes), i); } /** @generated */ public void setAttributes(int addr, int i, int v) { if (featOkTst && casFeat_attributes == null) jcas.throwFeatMissing("attributes", "org.apache.uima.tika.MarkupAnnotation"); if (lowLevelTypeChecks) ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_attributes), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_attributes), i); ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_attributes), i, v); } /** @generated */ final Feature casFeat_children; /** @generated */ final int casFeatCode_children; /** @generated */ public int getChildren(int addr) { if (featOkTst && casFeat_children == null) jcas.throwFeatMissing("children", "org.apache.uima.tika.MarkupAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_children); } /** @generated */ public void setChildren(int addr, int v) { if (featOkTst && casFeat_children == null) jcas.throwFeatMissing("children", "org.apache.uima.tika.MarkupAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_children, v);} /** @generated */ public int getChildren(int addr, int i) { if (featOkTst && casFeat_children == null) jcas.throwFeatMissing("children", "org.apache.uima.tika.MarkupAnnotation"); if (lowLevelTypeChecks) return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_children), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_children), i); return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_children), i); } /** @generated */ public void setChildren(int addr, int i, int v) { if (featOkTst && casFeat_children == null) jcas.throwFeatMissing("children", "org.apache.uima.tika.MarkupAnnotation"); if (lowLevelTypeChecks) ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_children), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_children), i); ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_children), i, v); } /** @generated */ final Feature casFeat_name; /** @generated */ final int casFeatCode_name; /** @generated */ public String getName(int addr) { if (featOkTst && casFeat_name == null) jcas.throwFeatMissing("name", "org.apache.uima.tika.MarkupAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_name); } /** @generated */ public void setName(int addr, String v) { if (featOkTst && casFeat_name == null) jcas.throwFeatMissing("name", "org.apache.uima.tika.MarkupAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_name, v);} /** @generated */ final Feature casFeat_parent; /** @generated */ final int casFeatCode_parent; /** @generated */ public int getParent(int addr) { if (featOkTst && casFeat_parent == null) jcas.throwFeatMissing("parent", "org.apache.uima.tika.MarkupAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_parent); } /** @generated */ public void setParent(int addr, int v) { if (featOkTst && casFeat_parent == null) jcas.throwFeatMissing("parent", "org.apache.uima.tika.MarkupAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_parent, v);} /** @generated */ final Feature casFeat_qualifiedName; /** @generated */ final int casFeatCode_qualifiedName; /** @generated */ public String getQualifiedName(int addr) { if (featOkTst && casFeat_qualifiedName == null) jcas.throwFeatMissing("qualifiedName", "org.apache.uima.tika.MarkupAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_qualifiedName); } /** @generated */ public void setQualifiedName(int addr, String v) { if (featOkTst && casFeat_qualifiedName == null) jcas.throwFeatMissing("qualifiedName", "org.apache.uima.tika.MarkupAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_qualifiedName, v);} /** @generated */ final Feature casFeat_uri; /** @generated */ final int casFeatCode_uri; /** @generated */ public String getUri(int addr) { if (featOkTst && casFeat_uri == null) jcas.throwFeatMissing("uri", "org.apache.uima.tika.MarkupAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_uri); } /** @generated */ public void setUri(int addr, String v) { if (featOkTst && casFeat_uri == null) jcas.throwFeatMissing("uri", "org.apache.uima.tika.MarkupAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_uri, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public MarkupAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_attributes = jcas.getRequiredFeatureDE(casType, "attributes", "uima.cas.FSArray", featOkTst); casFeatCode_attributes = (null == casFeat_attributes) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_attributes).getCode(); casFeat_children = jcas.getRequiredFeatureDE(casType, "children", "uima.cas.FSArray", featOkTst); casFeatCode_children = (null == casFeat_children) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_children).getCode(); casFeat_name = jcas.getRequiredFeatureDE(casType, "name", "uima.cas.String", featOkTst); casFeatCode_name = (null == casFeat_name) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_name).getCode(); casFeat_parent = jcas.getRequiredFeatureDE(casType, "parent", "org.apache.uima.tika.MarkupAnnotation", featOkTst); casFeatCode_parent = (null == casFeat_parent) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_parent).getCode(); casFeat_qualifiedName = jcas.getRequiredFeatureDE(casType, "qualifiedName", "uima.cas.String", featOkTst); casFeatCode_qualifiedName = (null == casFeat_qualifiedName) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_qualifiedName).getCode(); casFeat_uri = jcas.getRequiredFeatureDE(casType, "uri", "uima.cas.String", featOkTst); casFeatCode_uri = (null == casFeat_uri) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_uri).getCode(); } } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/FeatureValue_Type.java0000644000175000017500000000703211625126554031164 0ustar drazzibdrazzib /* First created by JCasGen Fri Jun 12 15:31:15 CEST 2009 */ package org.apache.uima.tika; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.cas.TOP_Type; /** Simple Feature Value * Updated by JCasGen Fri Jun 12 15:31:15 CEST 2009 * @generated */ public class FeatureValue_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (FeatureValue_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = FeatureValue_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new FeatureValue(addr, FeatureValue_Type.this); FeatureValue_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new FeatureValue(addr, FeatureValue_Type.this); } }; /** @generated */ public final static int typeIndexID = FeatureValue.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.tika.FeatureValue"); /** @generated */ final Feature casFeat_name; /** @generated */ final int casFeatCode_name; /** @generated */ public String getName(int addr) { if (featOkTst && casFeat_name == null) jcas.throwFeatMissing("name", "org.apache.uima.tika.FeatureValue"); return ll_cas.ll_getStringValue(addr, casFeatCode_name); } /** @generated */ public void setName(int addr, String v) { if (featOkTst && casFeat_name == null) jcas.throwFeatMissing("name", "org.apache.uima.tika.FeatureValue"); ll_cas.ll_setStringValue(addr, casFeatCode_name, v);} /** @generated */ final Feature casFeat_value; /** @generated */ final int casFeatCode_value; /** @generated */ public String getValue(int addr) { if (featOkTst && casFeat_value == null) jcas.throwFeatMissing("value", "org.apache.uima.tika.FeatureValue"); return ll_cas.ll_getStringValue(addr, casFeatCode_value); } /** @generated */ public void setValue(int addr, String v) { if (featOkTst && casFeat_value == null) jcas.throwFeatMissing("value", "org.apache.uima.tika.FeatureValue"); ll_cas.ll_setStringValue(addr, casFeatCode_value, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public FeatureValue_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_name = jcas.getRequiredFeatureDE(casType, "name", "uima.cas.String", featOkTst); casFeatCode_name = (null == casFeat_name) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_name).getCode(); casFeat_value = jcas.getRequiredFeatureDE(casType, "value", "uima.cas.String", featOkTst); casFeatCode_value = (null == casFeat_value) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_value).getCode(); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/SourceDocumentAnnotation_Type.javauima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/SourceDocumentAnnotation_Type.jav0000644000175000017500000001331011625126554033421 0ustar drazzibdrazzib /* First created by JCasGen Fri Jun 12 15:31:15 CEST 2009 */ package org.apache.uima.tika; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.DocumentAnnotation_Type; /** * Updated by JCasGen Fri Jun 12 15:31:15 CEST 2009 * @generated */ public class SourceDocumentAnnotation_Type extends DocumentAnnotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (SourceDocumentAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = SourceDocumentAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new SourceDocumentAnnotation(addr, SourceDocumentAnnotation_Type.this); SourceDocumentAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new SourceDocumentAnnotation(addr, SourceDocumentAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = SourceDocumentAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.tika.SourceDocumentAnnotation"); /** @generated */ final Feature casFeat_uri; /** @generated */ final int casFeatCode_uri; /** @generated */ public String getUri(int addr) { if (featOkTst && casFeat_uri == null) jcas.throwFeatMissing("uri", "org.apache.uima.tika.SourceDocumentAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_uri); } /** @generated */ public void setUri(int addr, String v) { if (featOkTst && casFeat_uri == null) jcas.throwFeatMissing("uri", "org.apache.uima.tika.SourceDocumentAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_uri, v);} /** @generated */ final Feature casFeat_contentType; /** @generated */ final int casFeatCode_contentType; /** @generated */ public String getContentType(int addr) { if (featOkTst && casFeat_contentType == null) jcas.throwFeatMissing("contentType", "org.apache.uima.tika.SourceDocumentAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_contentType); } /** @generated */ public void setContentType(int addr, String v) { if (featOkTst && casFeat_contentType == null) jcas.throwFeatMissing("contentType", "org.apache.uima.tika.SourceDocumentAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_contentType, v);} /** @generated */ final Feature casFeat_features; /** @generated */ final int casFeatCode_features; /** @generated */ public int getFeatures(int addr) { if (featOkTst && casFeat_features == null) jcas.throwFeatMissing("features", "org.apache.uima.tika.SourceDocumentAnnotation"); return ll_cas.ll_getRefValue(addr, casFeatCode_features); } /** @generated */ public void setFeatures(int addr, int v) { if (featOkTst && casFeat_features == null) jcas.throwFeatMissing("features", "org.apache.uima.tika.SourceDocumentAnnotation"); ll_cas.ll_setRefValue(addr, casFeatCode_features, v);} /** @generated */ public int getFeatures(int addr, int i) { if (featOkTst && casFeat_features == null) jcas.throwFeatMissing("features", "org.apache.uima.tika.SourceDocumentAnnotation"); if (lowLevelTypeChecks) return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_features), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_features), i); return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_features), i); } /** @generated */ public void setFeatures(int addr, int i, int v) { if (featOkTst && casFeat_features == null) jcas.throwFeatMissing("features", "org.apache.uima.tika.SourceDocumentAnnotation"); if (lowLevelTypeChecks) ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_features), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_features), i); ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_features), i, v); } /** initialize variables to correspond with Cas Type and Features * @generated */ public SourceDocumentAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_uri = jcas.getRequiredFeatureDE(casType, "uri", "uima.cas.String", featOkTst); casFeatCode_uri = (null == casFeat_uri) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_uri).getCode(); casFeat_contentType = jcas.getRequiredFeatureDE(casType, "contentType", "uima.cas.String", featOkTst); casFeatCode_contentType = (null == casFeat_contentType) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_contentType).getCode(); casFeat_features = jcas.getRequiredFeatureDE(casType, "features", "uima.cas.FSArray", featOkTst); casFeatCode_features = (null == casFeat_features) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_features).getCode(); } } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/MarkupAnnotator.java0000644000175000017500000002014411625126554030717 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tika; import org.apache.tika.config.TikaConfig; import org.apache.tika.language.LanguageIdentifier; import org.apache.tika.language.LanguageProfile; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.parser.Parser; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASException; import org.apache.uima.cas.Type; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Iterator; /** * Uses TIKA to convert original markup into UIMA annotations* */ public class MarkupAnnotator extends CasAnnotator_ImplBase { private final static String ORIGINAL_VIEW_PARAM_NAME = "ORIGINAL_VIEW_PARAM_NAME"; private final static String TEXT_VIEW_PARAM_NAME = "TEXT_VIEW_PARAM_NAME"; private final static String SET_TEXT_VIEW_DEFAULT_PARAM_NAME = "SET_TEXT_VIEW_DEFAULT_PARAM_NAME"; private final static String tika_file_param = "tikaConfigFile"; // takes an option indicating the name of the view containing the binary document private String originalViewName = "_InitialView"; // takes an option indicating the name of the view containing the text version of the document private String textViewName = "textView"; // whether to make the text view default or not private Boolean makeTextDefaultView = true; // configuration for TIKA - can be created by specifying a custom resource private TikaConfig config = null; public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); // Get config param setting originalViewName = (String) aContext.getConfigParameterValue(ORIGINAL_VIEW_PARAM_NAME); textViewName = (String) aContext.getConfigParameterValue(TEXT_VIEW_PARAM_NAME); if (textViewName == null) { this.getContext().getLogger().log(Level.WARNING, new StringBuffer("Parameter TEXT_VIEW_PARAM_NAME is null; setting to \"textView\"").toString()); textViewName = "textView"; } else this.getContext().getLogger().log(Level.WARNING, new StringBuffer("Parameter TEXT_VIEW_PARAM_NAME is ") .append(textViewName).toString()); makeTextDefaultView = (Boolean) aContext.getConfigParameterValue(SET_TEXT_VIEW_DEFAULT_PARAM_NAME); if (makeTextDefaultView == null) { this.getContext().getLogger().log(Level.WARNING, new StringBuffer("Parameter SET_TEXT_VIEW_DEFAULT_PARAM_NAME is null; setting to \"true\"").toString()); makeTextDefaultView = new Boolean(true); } else this.getContext().getLogger().log(Level.WARNING, new StringBuffer("Parameter SET_TEXT_VIEW_DEFAULT_PARAM_NAME is ") .append(makeTextDefaultView).toString()); // initialise TIKA parser // try to get a custom config URL tikaConfigURL = null; try { tikaConfigURL = getContext().getResourceURL(tika_file_param); config = new TikaConfig(tikaConfigURL); } catch (Exception e1) { // to log this.getContext().getLogger().log(Level.WARNING, new StringBuffer("Failed to load TIKA config file from ") .append(tikaConfigURL).append(" due to ").append(e1.getLocalizedMessage()).toString()); config = null; } // if not rely on default one if (config == null) { try { config = TikaConfig.getDefaultConfig(); } catch (Exception e) { throw new ResourceInitializationException(e); } } } public void process(CAS cas) throws AnalysisEngineProcessException { CAS originalCas = null; try { originalCas = cas.getView(originalViewName); } catch (Exception e) { String viewName = cas.getViewName(); // can't find originalViewName this.getContext().getLogger().log(Level.WARNING, new StringBuffer("can't find view ").append(originalViewName) .append(" using ").append(viewName).append(" instead").toString()); originalCas = cas.getCurrentView(); } InputStream originalStream = originalCas.getSofa().getSofaDataStream(); // parsing with TIKA // TODO if content type is known then we use it // otherwise we guess Parser parser = new AutoDetectParser(config); Metadata md = new Metadata(); MarkupHandler handler = new MarkupHandler(); try { parser.parse(originalStream, handler, md); } catch (Exception e) { // if we have a problem just dump the message and continue this.getContext().getLogger().log(Level.WARNING, new StringBuffer("Problem converting file : ") .append(e.getMessage()).toString()); // PROBLEM => trying to serialize binary content in XML crash! return; } finally { try { originalStream.close(); } catch (IOException e) { } } CAS plainTextView = cas.createView(textViewName); handler.populateCAS(plainTextView); // get additional metadata about the document // e.g content type etc... // TODO add possibility to define type as parameter and discover // feature names on the fly JCas ptv = null; try { ptv = plainTextView.getJCas(); } catch (CASException e) { e.printStackTrace(); return; } /* identify language */ extractLanguage(ptv); Type docAnnotationType = ptv.getTypeSystem().getType("org.apache.uima.tika.SourceDocumentAnnotation"); Iterator iter = ptv.getAnnotationIndex(docAnnotationType).iterator(); SourceDocumentAnnotation docAnnotation = null; // do we already have one? if (iter.hasNext()) docAnnotation = (SourceDocumentAnnotation) iter.next(); // otherwise let's create a new annotation else docAnnotation = new SourceDocumentAnnotation(ptv); // now iterate on the metadata found by Tika and add them to the info if (docAnnotation.getFeatures() == null) docAnnotation.setFeatures((FSArray) cas.createArrayFS(md.size())); for (int i = 0; i < md.size(); i++) { String name = md.names()[i]; String value = md.get(name); FeatureValue fv = new FeatureValue(ptv); fv.setName(name); fv.setValue(value); docAnnotation.setFeatures(i, fv); } docAnnotation.addToIndexes(); } private void extractLanguage(JCas plainTextView) { try { LanguageIdentifier li = new LanguageIdentifier(new LanguageProfile(plainTextView.getDocumentText())); if (li.getLanguage() != null && !"".equals(li.getLanguage())) plainTextView.setDocumentLanguage(li.getLanguage()); } catch (Exception e) { this.getContext().getLogger().log(Level.WARNING, new StringBuffer("Could not extract language due to ") .append(e.getLocalizedMessage()).toString()); } this.getContext().getLogger().log(Level.INFO,new StringBuffer("Extracted language: ").append(plainTextView .getDocumentLanguage()).toString()); } } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/FileSystemCollectionReader.java0000644000175000017500000001241711625126554033021 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tika; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.tika.exception.TikaException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASException; import org.apache.uima.collection.CollectionException; import org.apache.uima.collection.CollectionReader_ImplBase; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceConfigurationException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Progress; import org.apache.uima.util.ProgressImpl; /** * A collection reader that reads documents from a directory in the * filesystem. * * This resource is different from the one in UIMA example as it uses TIKA to * extract the text from binary documents and generates annotations to represent * the markup */ public class FileSystemCollectionReader extends CollectionReader_ImplBase { /** * Name of configuration parameter that must be set to the path of a * directory containing input files. */ public static final String PARAM_INPUTDIR = "InputDirectory"; /** * Name of optional configuration parameter that contains the language of * the documents in the input directory. If specified this information will * be added to the CAS. */ public static final String PARAM_LANGUAGE = "Language"; private final static String PARAM_MIME = "MIME"; private final static String tika_file_param = "tikaConfigFile"; private String mLanguage; private String mMIME; private List mFiles; private int mCurrentIndex; private TIKAWrapper tika; /** * @see org.apache.uima.collection.CollectionReader#hasNext() */ public boolean hasNext() { return mCurrentIndex < mFiles.size(); } /** * @see org.apache.uima.collection.CollectionReader#getNext(org.apache.uima.cas.CAS) */ public void getNext(CAS aCAS) throws IOException, CollectionException { JCas jcas; try { jcas = aCAS.getJCas(); } catch (CASException e) { throw new CollectionException(e); } // open input stream to file File file = (File) mFiles.get(mCurrentIndex++); // call Tika wrapper try { tika.populateCASfromURL(aCAS, file.toURI().toURL(), this.mMIME, this.mLanguage); } catch (CASException e) { String msg = String.format("Problem converting file: %s\t%s%n", file.toURI().toURL(), e.getMessage()); getLogger().log(Level.WARNING, msg); throw new IOException(msg); //jcas.setDocumentText(" "); return; } } /** * @see org.apache.uima.collection.base_cpm.BaseCollectionReader#close() */ public void close() throws IOException { } /** * @see org.apache.uima.collection.base_cpm.BaseCollectionReader#getProgress() */ public Progress[] getProgress() { return new Progress[] { new ProgressImpl(mCurrentIndex, mFiles.size(), Progress.ENTITIES) }; } /** * Gets the total number of documents that will be returned by this * collection reader. This is not part of the general collection reader * interface. * * @return the number of documents in the collection */ public int getNumberOfDocuments() { return mFiles.size(); } @Override public void initialize() throws ResourceInitializationException { File directory = new File( ((String) getConfigParameterValue(PARAM_INPUTDIR)).trim()); mLanguage = (String) getConfigParameterValue(PARAM_LANGUAGE); mCurrentIndex = 0; mMIME = (String) getConfigParameterValue(FileSystemCollectionReader.PARAM_MIME); // initialise TIKA parser String tikaConfigURL = (String) getConfigParameterValue(tika_file_param); try { tika = new TIKAWrapper(tikaConfigURL); } catch (TikaException e) { throw new ResourceInitializationException(e); } // if input directory does not exist or is not a directory, throw // exception if (!directory.exists() || !directory.isDirectory()) { throw new ResourceInitializationException( ResourceConfigurationException.DIRECTORY_NOT_FOUND, new Object[] { PARAM_INPUTDIR, this.getMetaData().getName(), directory.getPath() }); } // get list of files (not subdirectories) in the specified directory mFiles = new ArrayList(); File[] files = directory.listFiles(); for (int i = 0; i < files.length; i++) { if (!files[i].isDirectory()) { mFiles.add(files[i]); } } } } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/ProtoAnnotation.java0000644000175000017500000000342211625126554030730 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tika; import org.xml.sax.Attributes; /** * Neutral representation of an annotation which can be converted into a proper GATE or UIMA annotation later ***/ public class ProtoAnnotation { private String uri; private String localName; private String qName; private Attributes atts; private int start; private int end; public ProtoAnnotation(String uri, String localName, String qName, Attributes atts, int start) { super(); this.uri = uri; this.localName = localName; this.qName = qName; this.atts = atts; this.start = start; } public int getEnd() { return end; } public void setEnd(int end) { this.end = end; } public Attributes getAtts() { return atts; } public String getLocalName() { return localName; } public String getQName() { return qName; } public int getStart() { return start; } public String getUri() { return uri; } } uima-addons-2.3.1/TikaAnnotator/src/main/java/org/apache/uima/tika/MarkupHandler.java0000644000175000017500000001333411625126554030332 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tika; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASException; import org.apache.uima.cas.Type; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.FSArray; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; /******************************************************************************* * SAX Handler which gets events from the Tika parser events and create UIMA * annotations accordingly. * ******************************************************************************/ public class MarkupHandler implements ContentHandler { private StringBuffer textBuffer; private List protoAnnotations; private LinkedList startedAnnotations; public MarkupHandler() { textBuffer = new StringBuffer(); protoAnnotations = new LinkedList(); startedAnnotations = new LinkedList(); } public void characters(char[] ch, int start, int length) throws SAXException { // MS doc spits out funny characters // we replace them with ' ' for (int c = start;c iter = startedAnnotations.iterator(); ProtoAnnotation startedAnnot = null; while (iter.hasNext()){ ProtoAnnotation temp = iter.next(); if (temp.getLocalName().equals(localName)){ startedAnnot = temp; break; } } // found something? if (startedAnnot==null){ // TODO log etc... return; } startedAnnot.setEnd(endOffset); startedAnnotations.remove(startedAnnot); protoAnnotations.add(startedAnnot); // add a \n otherwise we get everything // on a single line textBuffer.append("\n"); } public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { } // the following methods are simply ignored public void startPrefixMapping(String prefix, String uri) throws SAXException { } public void endPrefixMapping(String prefix) throws SAXException { } public void setDocumentLocator(Locator locator) { } public void skippedEntity(String name) throws SAXException { } public void processingInstruction(String target, String data) throws SAXException { } public void populateCAS(CAS cas){ // set the text cas.setDocumentText(this.textBuffer.toString()); Type markupType = cas.getTypeSystem().getType("org.apache.uima.tika.MarkupAnnotation"); Type attributeType = cas.getTypeSystem().getType("org.apache.uima.tika.AttributeFS"); if (attributeType == null) { throw new RuntimeException("Can't find type org.apache.uima.tika.AttributeFS"); } JCas jcas; try { jcas = cas.getJCas(); } catch (CASException e) { throw new RuntimeException(e); } // now convert the proto annotations into real ones for (ProtoAnnotation proto : protoAnnotations) { MarkupAnnotation markup = new MarkupAnnotation(jcas); markup.setBegin(proto.getStart()); markup.setEnd(proto.getEnd()); // generate attributes Attributes protoAttributes = proto.getAtts(); FSArray attribs = (FSArray) cas.createArrayFS(protoAttributes.getLength()); for (int index=0; index< protoAttributes.getLength();index++){ org.apache.uima.tika.AttributeFS afs = (AttributeFS) cas.createFS(attributeType); afs.setLocalName(protoAttributes.getLocalName(index)); afs.setQualifiedName(protoAttributes.getQName(index)); afs.setUri(protoAttributes.getURI(index)); afs.setValue(protoAttributes.getValue(index)); afs.addToIndexes(); attribs.set(index, afs); } markup.setAttributes(attribs); markup.setUri(proto.getUri()); markup.setName(proto.getLocalName()); markup.setQualifiedName(proto.getQName()); markup.addToIndexes(); } } } uima-addons-2.3.1/TikaAnnotator/src/test/0000755000175000017500000000000011625126554020145 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/test/resources/0000755000175000017500000000000011625126554022157 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/test/resources/docs/0000755000175000017500000000000011625126554023107 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/test/resources/docs/apache.html0000644000175000017500000011502311625126554025220 0ustar drazzibdrazzib Welcome to The Apache Software Foundation!

We consider ourselves not simply a group of projects sharing a server, but rather a community of developers and users.

The Apache Software Foundation provides support for the Apache community of open-source software projects.

The Apache projects are defined by collaborative consensus based processes, an open, pragmatic software license and a desire to create high quality software that leads the way in its field.

Latest News

If you would like to keep up with news and announcements from the foundation and all its projects, you can subscribe to the Apache Announcements List or follow the Foundation Blog.

Apache News Roundup from the ApacheCon Show Floor

The following newsworthy events took place during the course of ApacheCon North America 1-5 November:

1) Foundation Updates

Membership count: 330 (31 new Members; 52 emeritus)

Committer count: +2,500 (approximately 200 additional Committers over the past year)

The ASF is governed by the community it most directly serves...


The ASF asks: Have you met Apache Mahout?

The all-volunteer Apache Software Foundation (ASF) develops, stewards, and incubates nearly 150 Open Source projects and initiatives, many of which power mission-critical applications in financial services, aerospace, publishing, government, healthcare, research, infrastructure, and more.

Did you know that 50% of the Top 10 downloaded Open Source products are Apache projects?...

Read Beyond the Headers

Recent reports on various blogs have attributed to the ASF a number of the source files identified by Oracle as ones that they believe infringe on their copyrights. The code in question has an header that mentions Apache, and perhaps that is the source of the confusion. The code itself...


Statement by the ASF Board on recent Java-related events

As reported recently in the news and elsewhere, there are two issues currently facing the Foundation that merit a response from the ASF. 

At the last JCPExecutive Committee meeting in Bonn, Germany, Oracle announced that it will not offer a TCK license for Java SE (for the Apache Harmony...


Media Alert: The Apache Software Foundation Announces Apache Maven Version 3.0

Who: The Apache Software Foundation (ASF): all-volunteer developers, stewards, and incubators of nearly 150 Open Source projects and initiatives.

What: In development for nearly 10 years, and an ASF Top-Level Project since 2003, Apache Maven is the build system of choice for millions of developers and thousands of organizations world-wide....


Apache News Roundup from the ApacheCon Show Floor

The following newsworthy events took place during the course of ApacheCon North America 1-5
November:

1) Foundation Updates

- Membership count: 330 (31 new Members; 52 emeritus)

- Committer count: +2,500 (approximately 200 additional Committers over the past year)

The ASF is governed by the community it most directly serves...

[ANNOUNCE] Hive 0.6.0 is released!


The Apache Hive team is proud to announce the release of Hive 0.6.0!

Hive is a data warehouse system for Hadoop that facilitates easy
summarization, ad-hoc querying, and analysis of large datasets stored
in Hadoop compatible file systems. Hive provides a mechanism to put
structure on this data and query...

[ANN] Apache Tomcat Connectors 1.2.31 released

The Apache Tomcat team announces the immediate availability of
Apache Tomcat Connectors 1.2.31 stable.

Apache Tomcat Connectors 1.2.31 concentrates mainly on bug fixes.

Please refer to the change log for the list of changes:
http://tomcat.apache.org/connectors-doc/miscellaneous/changelog.html

Downloads:
http://tomcat.apache.org/download-connectors.cgi

Please note that syncing the release to the download mirrors
might take up...

[ANNOUNCE] Apache Jackrabbit 2.1.2 released

The Apache Jackrabbit community is pleased to announce the release of
Apache Jackrabbit 2.1.2. The release is available for download at:

    http://jackrabbit.apache.org/downloads.html

See the full release notes below for details about this release.


Release Notes -- Apache Jackrabbit -- Version 2.1.2

Introduction
------------

This is Apache Jackrabbit 2.1.2, a fully...

[ANNOUNCE] Apache Jackrabbit 2.0.3 released

The Apache Jackrabbit community is pleased to announce the release of
Apache Jackrabbit 2.0.3. The release is available for download at:

    http://jackrabbit.apache.org/downloads.html

See the full release notes below for details about this release.


Release Notes -- Apache Jackrabbit -- Version 2.0.3

Introduction
------------

Apache Jackrabbit 2.0.3 is a bug fix...

Latest Activity

This is an overview of activity going on with our projects. SVN commits, bug reports, tweets you name it.

@TheASF: #Apache News Roundup from the #ApacheCon Show Floor http://s.apache.org/EFx
@TheASF: Did you know that #Apache #Hadoop, #MapReduce, #Mahout, and #Pig form the anti-spam analytic platform for Yahoo!Mail?
@TheASF: The ASF asks: Have you met #Apache #Mahout? http://s.apache.org/IlE
@TheASF: We are pleased to welcome IBM to The Apache Software Foundation as Gold Sponsors. #ApacheCon
@TheASF: We've had a bit of a nip-and-tuck at apache.org ... a few tweaks are forthcoming. Thanks for bearing with us whilst the bandages come off.
r1032483 Add overview for javadoc (incubator) — edwardyoon
r1032482 DERBY-4891: Enable testing of boolean type in ParameterMappingTest (db) — kahatlen
r1032481 DERBY-4892: Unsafe use of BigDecimal constructors Use BigDecimal.valueOf(long), which is available on all supported platforms. (db) — kahatlen
r1032480 auto-generated rules (spamassassin) — khopesh
r1032479 DERBY-4893: Allow Java 5 language constructs in build code - Changed source and target level for the build code... (db) — kahatlen
[DERBY-4890] Different string to boolean conversion on embedded and client
The following code fragment behaves differently on client and embedded:

        PreparedStatement ps = c.prepareStatement("values cast(? as boolean)");
        ps.setString(1, "TRUE");
        ResultSet...
[HAMA-327] Add overview for javadoc
Add overview.html and few comments.
[DERBY-4891] Enable testing of boolean type in ParameterMappingTest
Now that Derby supports the boolean data type, we should enable tests for boolean in ParameterMappingTest.
[DERBY-4892] Unsafe use of BigDecimal constructors
We have some code that's supposed to work on Java 1.4, but that uses BigDecimal constructors that were not added...
[LUCENENET-380] Evaluate Sharpen as a port tool
This task is to evaluate Sharpen as a port tool for Lucene.Net.

The files to be evaluated are attached. We...

uima-addons-2.3.1/TikaAnnotator/src/test/resources/AggregateTestAE.xml0000644000175000017500000000516711625126554025646 0ustar drazzibdrazzib org.apache.uima.java false AggregateAE dir String false true FileSystemCollectionReader/InputDirectory dir src/test/resources/docs FileSystemCollectionReader MarkupAnnotator true false uima-addons-2.3.1/TikaAnnotator/src/test/java/0000755000175000017500000000000011625126554021066 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/test/java/org/0000755000175000017500000000000011625126554021655 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/test/java/org/apache/0000755000175000017500000000000011625126554023076 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/test/java/org/apache/uima/0000755000175000017500000000000011625126554024031 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/test/java/org/apache/uima/tika/0000755000175000017500000000000011625126554024761 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/src/test/java/org/apache/uima/tika/MarkupAnnotatorTest.java0000644000175000017500000000606011625126554031613 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.tika; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Type; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.util.XMLInputSource; import org.junit.Test; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** * TestCase for {@link MarkupAnnotator} */ public class MarkupAnnotatorTest { private String markupAnnotatorDescPath = "src/test/resources/AggregateTestAE.xml"; private final String originalView = "_InitialView"; @Test public void integrationTest() { try { CAS cas = prepareCAS(); AnnotatorTester annotatorTester = new AnnotatorTester(markupAnnotatorDescPath); CAS newCas = annotatorTester.performTest(cas); for (Annotation annotation : newCas.getCurrentView().getJCas().getAnnotationIndex( org.apache.uima.tika.MarkupAnnotation.type)) { Type type = annotation.getType(); assertTrue(annotation.getType().getName() != null); assertTrue(annotation.getBegin() >= 0); assertTrue(annotation.getEnd() > 0); assertTrue(annotation.getCoveredText() != null && !"".equals(annotation.getCoveredText())); assertTrue(annotation.getFeatureValueAsString(type.getFeatureByBaseName("name")) != null); assertTrue(newCas.getJCas().getDocumentLanguage()!=null); } } catch (Exception e) { e.printStackTrace(); fail(e.getLocalizedMessage()); } } private CAS prepareCAS() { CAS cas = null; try { // get resource specifier from XML file XMLInputSource in = new XMLInputSource(markupAnnotatorDescPath); ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in); // create analysis engine with resource manager AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier); // create new cas cas = ae.newCAS(); // cas.createView(originalView); } catch (Exception e) { // do nothing } return cas; } } uima-addons-2.3.1/TikaAnnotator/desc/0000755000175000017500000000000011625126554017315 5ustar drazzibdrazzibuima-addons-2.3.1/TikaAnnotator/desc/MarkupAnnotator.xml0000644000175000017500000001121311625126554023162 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.tika.MarkupAnnotator org.apache.uima.tika.MarkupAnnotator Uses Tika to generate annotations from original markup 1.0 Apache Software Foundation ORIGINAL_VIEW_PARAM_NAME Name of the view used for storing the original content String false true TEXT_VIEW_PARAM_NAME Name of the view used to store the text extracted from the original document String false true SET_TEXT_VIEW_DEFAULT_PARAM_NAME Indicates whether the Text view should be marked as the one to use by default Boolean false true ORIGINAL_VIEW_PARAM_NAME _InitialView TEXT_VIEW_PARAM_NAME textView SET_TEXT_VIEW_DEFAULT_PARAM_NAME true org.apache.uima.MarkupAnnotation x-unspecified true true true tikaConfigFile XML configuration file for Tika true tikaConfigFile XMLconfig file for Tika. If not found the component will rely on the default config tika_config.xml tikaConfigFile tikaConfigFile uima-addons-2.3.1/TikaAnnotator/desc/tika_config.xml0000644000175000017500000001137411625126554022322 0ustar drazzibdrazzib application/xml application/msword application/vnd.ms-excel application/vnd.ms-powerpoint text/html application/x-asp application/xhtml+xml application/rtf application/pdf text/plain application/vnd.sun.xml.writer application/vnd.oasis.opendocument.text application/vnd.oasis.opendocument.graphics application/vnd.oasis.opendocument.presentation application/vnd.oasis.opendocument.spreadsheet application/vnd.oasis.opendocument.chart application/vnd.oasis.opendocument.image application/vnd.oasis.opendocument.formula application/vnd.oasis.opendocument.text-master application/vnd.oasis.opendocument.text-web application/vnd.oasis.opendocument.text-template application/vnd.oasis.opendocument.graphics-template application/vnd.oasis.opendocument.presentation-template application/vnd.oasis.opendocument.spreadsheet-template application/vnd.oasis.opendocument.chart-template application/vnd.oasis.opendocument.image-template application/vnd.oasis.opendocument.formula-template application/x-vnd.oasis.opendocument.text application/x-vnd.oasis.opendocument.graphics application/x-vnd.oasis.opendocument.presentation application/x-vnd.oasis.opendocument.spreadsheet application/x-vnd.oasis.opendocument.chart application/x-vnd.oasis.opendocument.image application/x-vnd.oasis.opendocument.formula application/x-vnd.oasis.opendocument.text-master application/x-vnd.oasis.opendocument.text-web application/x-vnd.oasis.opendocument.text-template application/x-vnd.oasis.opendocument.graphics-template application/x-vnd.oasis.opendocument.presentation-template application/x-vnd.oasis.opendocument.spreadsheet-template application/x-vnd.oasis.opendocument.chart-template application/x-vnd.oasis.opendocument.image-template application/x-vnd.oasis.opendocument.formula-template uima-addons-2.3.1/TikaAnnotator/desc/FileSystemCollectionReader.xml0000644000175000017500000001076511625126554025273 0ustar drazzibdrazzib org.apache.uima.java org.apache.uima.tika.FileSystemCollectionReader File System Collection Reader Reads files from the filesystem. Uses Tika to convert markups into annotation 1.0 Apache Software Foundation InputDirectory Directory containing input files String false true Language ISO language code for the documents String false false tikaConfigFile String false false MIME MIME type can be forced by the user instead of being detected automatically String false false MIME text/html com.digitalpebble.uima.SourceDocumentAnnotation com.digitalpebble.uima.MarkupAnnotation com.digitalpebble.uima.FeatureValue true false true tikaConfigFile XML configuration file for Tika true tikaConfigFile XMLconfig file for Tika. If not found the component will rely on the default config tika_config.xml tikaConfigFile tikaConfigFile uima-addons-2.3.1/TikaAnnotator/desc/MarkupAnnotationTypeSystem.xml0000644000175000017500000001176111625126554025406 0ustar drazzibdrazzib MarkupAnnotationTypeSystem Annotations used for representing markup. See http://cwiki.apache.org/UIMA/uima-sandbox-components.html 1.0 Apache Software Foundation org.apache.uima.tika.MarkupAnnotation uima.tcas.Annotation attributes uima.cas.FSArray uima.cas.FSArray children uima.cas.FSArray org.apache.uima.tika.MarkupAnnotation name uima.cas.String parent org.apache.uima.tika.MarkupAnnotation qualifiedName uima.cas.String uri uima.cas.String org.apache.uima.tika.AttributeFS Representation of an attribute uima.cas.TOP localName uima.cas.String qualifiedName uima.cas.String uri uima.cas.String value uima.cas.String org.apache.uima.tika.SourceDocumentAnnotation uima.tcas.DocumentAnnotation uri uima.cas.String contentType uima.cas.String features uima.cas.FSArray org.apache.uima.tika.FeatureValue org.apache.uima.tika.FeatureValue Simple Feature Value uima.cas.TOP name name of the feature uima.cas.String value uima.cas.String uima-addons-2.3.1/pom.xml0000644000175000017500000001410111625126554015133 0ustar drazzibdrazzib 4.0.0 org.apache.uima parent-pom 2 org.apache.uima uima-addons pom 2.3.1 UIMA Aggregate: ${project.artifactId} A convenience aggregate for the UIMA addons ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5 scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5 http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5 addons source-release uima-addons-parent AlchemyAPIAnnotator BSFAnnotator ConceptMapper ConfigurableFeatureExtractor DictionaryAnnotator FsVariables Lucas OpenCalaisAnnotator PearPackagingAntTask RegularExpressionAnnotator SimpleServer SnowballAnnotator Solrcas Tagger TikaAnnotator WhitespaceTokenizer apache-release 12316093 uima-addons-${project.version} org.apache.maven.plugins maven-release-plugin 2.1 forked-path maven-deploy-plugin true maven-antrun-plugin generate checksums for binary artifacts run verify maven-changes-plugin default-cli ${jiraVersion} Status, Key, Type uima-addons-2.3.1/Tagger/0000755000175000017500000000000011625127722015030 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/pom.xml0000644000175000017500000001236411625126554016355 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent Tagger 2.3.1 UIMA Annotator: ${project.artifactId} An implementation of a Hidden Markov Model (HMM) statistical tagger ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/HmmTagger.xml hmmTaggerUsersGuide org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.uima uimaj-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test org.apache.uima WhitespaceTokenizer 2.3.1 uima-an-tagger resources desc org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/test/resources/moby-tag-list.txt org.apache.maven.plugins maven-surefire-plugin -Xmx500M uima-addons-2.3.1/Tagger/resources/0000755000175000017500000000000011625126550017040 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/resources/german/0000755000175000017500000000000011625126552020313 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/resources/english/0000755000175000017500000000000011625126550020471 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/LICENSE.txt0000644000175000017500000002644611625126552016667 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/Tagger/metadata/0000755000175000017500000000000011625126544016611 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/metadata/install.xml0000644000175000017500000000276311625126544021011 0ustar drazzibdrazzib Windows 1.4.0 Tagger $main_root/desc/HmmTagger.xml standard set_env_variable $main_root/target/uimaj-tagger.jar;$main_root/resources; CLASSPATH uima-addons-2.3.1/Tagger/marker-file-identifying-single-project0000644000175000017500000000000011625126552024371 0ustar drazzibdrazzibuima-addons-2.3.1/Tagger/marker-file-identifying-standard-pear0000644000175000017500000000000011625126554024173 0ustar drazzibdrazzibuima-addons-2.3.1/Tagger/marker-file-identifying-osgi-project0000644000175000017500000000000011625126552024051 0ustar drazzibdrazzibuima-addons-2.3.1/Tagger/tagger.properties0000644000175000017500000000607311625126552020425 0ustar drazzibdrazzib# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ######## This is the default tagger.properties file ######## This file is used for training and testing only, ######## The configuration for tagging is directly tuned in the descriptor "HmmTagger.xml" ########### ONLY FOR TRAINING ##################################################### ####### FILE OR DIRECTORY CONTAINING TRAINING CORPUS: ####### can be in specified either as an absolute or as a relative path ####### e.g. FILE = ../../tueba_tigerFormat.txt or FILE = C:/Data/tueba.txt FILE = ########################## BOTH FOR TRAINING AND EVALUATION ################################ ######## THESE ARE THE DEFAULT MODEL FILES FOR GERMAN AND ENGLISH ######## You can either uncomment one of them, if you want to replace given models with your own one, #MODEL_FILE = resources/german/TuebaModel.dat MODEL_FILE = resources/english/BrownModel.dat ######## or specify a completely different name # MODEL_FILE = ######## If mapping of tags is desired, uncomment the following DO_MAPPING = true ####### EXAMPLES OF MAPPING CLASSES ## Basic mapping for the Brown corpus (nltk distribution) tagset: to get 93 tags out of 473 MAPPING = org.apache.uima.examples.tagger.trainAndTest.TagMappingBrown ## Basic mapping for STTS tagset: from 54 tags onto the basic ca. 15 classes plus punctuation #MAPPING = org.apache.uima.examples.tagger.trainAndTest.GrobMappingTueba ## If you implement your own mapping, you should specify here in the same manner as above a java-path to the class #MAPPING = ######## If corpus is in a different format and cannot be read with the provided READERS, ######## you should specify here a java-path to the class (s. examples below) #CORPUS_READER = org.apache.uima.examples.tagger.trainAndTest.TT_FormatReader CORPUS_READER = org.apache.uima.examples.tagger.trainAndTest.BrownReader #CORPUS_READER = ################# ONLY FOR EVALUATION ############################### ######### GOLD STANDARD CORPUS FILE: ######### can be specified as an absolute or as a relative path ##e.g. GOLD_STANDARD = ../../tueba_tigerFormat.txt or GOLD_STANDARD = C:/Data/tueba.txt GOLD_STANDARD = ######### Here we specify whether one intends to test a bi- or a trigram model (default is a trigram model) N=3 uima-addons-2.3.1/Tagger/NOTICE.txt0000644000175000017500000000030611625126552016551 0ustar drazzibdrazzibApache UIMA sandbox -- Tagger component Copyright 2007-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). uima-addons-2.3.1/Tagger/src/0000755000175000017500000000000011625126546015622 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/main/0000755000175000017500000000000011625126546016546 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/main/resources/0000755000175000017500000000000011625126546020560 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/main/java/0000755000175000017500000000000011625126546017467 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/main/java/org/0000755000175000017500000000000011625126546020256 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/main/java/org/apache/0000755000175000017500000000000011625126546021477 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/0000755000175000017500000000000011625126546022432 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/0000755000175000017500000000000011625126546024250 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/0000755000175000017500000000000011625126546025521 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/0000755000175000017500000000000011625126546030121 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/CorpusReader.javauima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/CorpusReader.jav0000644000175000017500000000217511625126546033226 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.examples.tagger.trainAndTest; import java.util.List; /** * Reads (annotated) text file or directory and transforms every word into a {@code Token}-object * */ public interface CorpusReader { public List read_corpus(String file, MappingInterface mapping); } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/TT_FormatReader.javauima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/TT_FormatReader.0000644000175000017500000000422611625126546033110 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * Tree Tagger Format Reader: a word per line with possibly html-tags, * which are ignored and 2/3 columns separated by tabs. * Columns are: "word \t tag \t lemma" * */ package org.apache.uima.examples.tagger.trainAndTest; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * TreeTagger Format Reader, i.e. "word-per-line with tags separated with tabs" * */ public class TT_FormatReader implements CorpusReader{ public List read_corpus(String file, MappingInterface Mapping) { // Text is already tokenized int line_count = 0; String line; List text = new ArrayList(); try { BufferedReader in = new BufferedReader(new FileReader(file)); while ((line = in.readLine()) != null) { if (line.trim().length() > 0) { line_count += 1; String[] t = line.split("\t"); if (t.length >= 2) { Token token = new Token(t[0], t[1]); text.add(token); } } } in.close(); } catch (IOException e) { System.out.println(e); return null; } if (Mapping != null) { text = Mapping.map_tags(text); // in case we need to map } return text; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/TagMappingBrown.javauima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/TagMappingBrown.0000644000175000017500000000536211625126546033167 0ustar drazzibdrazzib/* *Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.uima.examples.tagger.trainAndTest; import java.util.ArrayList; import java.util.List; import org.apache.uima.examples.tagger.trainAndTest.Token; public class TagMappingBrown implements MappingInterface{ /** * Defines mapping for List<{@link Token}> * E.g. if we need to map tags, given a list of {@code Tokens}, we need to map the * {@code pos} field of every {@code Token} to a different {@code pos}. * Basically the mapping performed in this class is just a case of simple "normalization", * we just discard compound tags of the Brown corpus here. */ @SuppressWarnings("unchecked") public List map_tags(List tokens) { // for (int i=0; i tokens2 = new ArrayList(tokens.size()); for (int x = 0; x < tokens.size(); x++) { // iterate over tokens of the sentence with their // corresponding POS Token current_token = (Token)tokens.get(x); String[] z = new String[2]; if (current_token.pos.contains("+")) { z = current_token.pos.split("[+]"); current_token.pos = z[0]; } // for cases like : BEZ* if (current_token.pos.contains("*") && !(current_token.pos.startsWith("*"))) { z[0] = current_token.pos.replace("*", ""); current_token.pos = z[0]; } // for: *-h1 if (current_token.pos.startsWith("*")) { z[0] = "*"; current_token.pos = z[0]; } if (current_token.pos.contains("-") && !(current_token.pos.startsWith("--"))) { z = current_token.pos.split("[-]"); current_token.pos = z[0]; } if (current_token.pos.startsWith("--")) { z[0] = "--"; current_token.pos = z[0]; } Token zwischen = new Token(current_token.word, current_token.pos); tokens2.add(zwischen); } return tokens2; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/MappingInterface.javauima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/MappingInterface0000644000175000017500000000260711625126546033265 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.examples.tagger.trainAndTest; import java.util.List; /** * Defines mapping for a tagset. For example, one may wish to map a more detailed tagset to a less * distinctive one (i.e. tell a program to tag all verbs as just {@code VERB} instead of * differentiating between {@code verb infinitive}, {@code verb imperative}, etc ... Receives a * List of {@code Tokens} to transform and returns a List of {@code Tokens} with mapped parts of * speech */ public interface MappingInterface { public List map_tags(List tokens); } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/TaggerEvaluation.javauima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/TaggerEvaluation0000644000175000017500000001570711625126546033317 0ustar drazzibdrazzib/* *Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.uima.examples.tagger.trainAndTest; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.uima.examples.tagger.HMMTagger; import org.apache.uima.examples.tagger.Viterbi; /** * Evaluation of Tagger * NB. As it is implemented at the moment, to be used just for small tests with * small files. Takes quite a long time with big files. If one needs to test big files, * it is better to implement iteration over sentences and not over the complete list of {@code Tokens}. */ public class TaggerEvaluation { @SuppressWarnings("unchecked") static void get_eval(ModelGeneration my_model, List wordList, List posList, List TagList) { int wrong_tag = 0; int right_tags = 0; List unknown_list = new ArrayList(); int unknown_count = 0; // counter for erroneously tagged unknown words int unknown_all = 0; // counter for all unknown words List wrong_tags = new ArrayList(); Map wrong_tag_counts = new HashMap(); Map wrong_tag_map = new HashMap(); int words = wordList.size(); for (int u = 0; u < posList.size(); u++) { if (!posList.get(u).equalsIgnoreCase((String) TagList.get(u))) { wrong_tags.add(posList.get(u)); Integer freq = (Integer) wrong_tag_counts.get(posList.get(u)); wrong_tag_counts.put(posList.get(u), (freq == null) ? 1 : freq + 1); if (wrong_tag_map.containsKey(posList.get(u))) { // if the token is already in a dictionary, then get its erronous tags Map tags = wrong_tag_map.get(posList.get(u)); Integer freq2 = (Integer) tags.get(TagList.get(u)); // if a given POS is already in its values, then add its corresponding count, otherwise // add a POS value with a count of 1 tags.put((String) TagList.get(u), (freq2 == null) ? 1 : freq2 + 1); } else { Map tags = new HashMap(); tags.put((String) TagList.get(u), 1); wrong_tag_map.put(posList.get(u), tags); } wrong_tag += 1; if (!my_model.word_probs.containsKey(wordList.get(u))) { unknown_list.add(wordList.get(u)); // System.out.println(wordList.get(u)); unknown_count += 1; } } else { right_tags += 1; } // count unknown words if (!my_model.word_probs.containsKey(wordList.get(u))) { unknown_all += 1; } } System.out.println(wordList.size() + " tokens in the corpus"); double percent_unknown_errors = (double) unknown_count / (double) wrong_tag; System.out.println("percent of unknown words among erronously tagged: " + unknown_count + " (" + percent_unknown_errors * 100 + "%" + ")"); System.out.println("percent of correctly tagged unknown words from all unknown: " + (((double) unknown_all - unknown_count) / (double) unknown_all) * 100 + "%"); System.out.println("total words: " + words); System.out.println("total unknown words: " + unknown_all + " == " + (double) unknown_all / (double) words + "%"); double percent_errors = (double) wrong_tag / (double) words; System.out.println("total errors" + wrong_tag + " which makes up " + percent_errors + " of tokens"); double accuracy = (double) right_tags / (double) words; System.out.println("accuracy: " + accuracy); ArrayList sortedValues = new ArrayList(wrong_tag_counts.values()); Collections.sort(sortedValues); // System.out.println(sortedValues.toString()); Object[] keys = wrong_tag_counts.keySet().toArray(); Object[] keys2 = wrong_tag_map.keySet().toArray(); for (int i = 0; i < keys.length; i++) { System.out.print(keys[i] + " "); System.out.println(wrong_tag_counts.get(keys[i])); System.out.print(keys2[i]); System.out.print(":"); System.out.println(wrong_tag_map.get(keys2[i])); } } /** * @param args */ @SuppressWarnings("unchecked") public static void main(String[] args) { ModelGeneration my_model; CorpusReader reader; MappingInterface MAPPING; String file; try { // Get configuration parameter values String paramFile = "tagger.properties"; // create and load default properties Properties defaultProps = new Properties(); FileInputStream in = new FileInputStream(paramFile); defaultProps.load(in); in.close(); String n = defaultProps.getProperty("N"); String MODEL = defaultProps.getProperty("MODEL_FILE"); my_model = HMMTagger.get_model(MODEL); String t = defaultProps.getProperty("DO_MAPPING"); my_model.N = Integer.parseInt(n); boolean DO_MAPPING = Boolean.valueOf(t); System.out.println("DO_MAPPING = " + DO_MAPPING); if (DO_MAPPING) { String m = defaultProps.getProperty("MAPPING"); MAPPING = (MappingInterface) (Class.forName(m)).newInstance(); } else { MAPPING = null; } String r = defaultProps.getProperty("CORPUS_READER"); reader = (CorpusReader) (Class.forName(r)).newInstance(); file = defaultProps.getProperty("GOLD_STANDARD"); List corpus = reader.read_corpus(file, MAPPING); List wordList = new ArrayList(); List posList = new ArrayList(); for (int x = 0; x < corpus.size(); x++) { // iterate over tokens with their corresponding POS posList.add(corpus.get(x).pos); wordList.add(corpus.get(x).word); } List TagList = Viterbi.process(my_model.N, wordList, my_model.suffix_tree, my_model.suffix_tree_capitalized, my_model.transition_probs, my_model.word_probs, my_model.lambdas2, my_model.lambdas3, my_model.theta); TaggerEvaluation.get_eval(my_model, wordList, posList, TagList); } catch (Throwable th) { System.err.println(th); } } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/ModelGeneration.javauima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/ModelGeneration.0000644000175000017500000005726111625126546033211 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.examples.tagger.trainAndTest; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.Map.Entry; import org.apache.uima.examples.tagger.*; import org.apache.uima.examples.tagger.trainAndTest.SuffixTree.EDGE_KEY; import org.apache.uima.examples.tagger.trainAndTest.SuffixTree.Edge; /** * Trains an N-gram model for the tagger, iterating over the files from some predefined training directory. * * Writes the resulting model to a binary file. * * NB. At the moment: both bi-and trigram statistics are saved in one model file.. * */ public class ModelGeneration implements java.io.Serializable{ private static final long serialVersionUID = 1L; public Map suffix_tree= new HashMap ( ) ; public Map suffix_tree_capitalized = new HashMap(); /** * Map containing {@code } probabilities, that is probability of a certain word given a certain tag at a time t: P(wordt|tagt)) * */ public Map> word_probs = new HashMap>(); /** * Map containing N-gram probabilities */ public Map transition_probs = new HashMap() ; static List posList = new ArrayList(); int N; // for the N-gram model public double [] lambdas2 = new double[2]; public double [] lambdas3 = new double[3]; public double theta; // for suffix probabiliites smoothing transient String OutputFile; transient List corpus; @SuppressWarnings("unchecked") public ModelGeneration(List corpus, String OutputFile) { this.OutputFile = OutputFile; this.corpus = corpus; } public void init(){ List>> l = get_word_probs(get_lexicon(corpus)); this.word_probs = (Map) l.get(0); this.suffix_tree = (Map) l.get(1); this.suffix_tree_capitalized = (Map) l.get(2); System.out.println("Number of different words "+word_probs.size()); System.out.println("Number of non-capitalized suffixes: "+suffix_tree.size()); System.out.println("Number of capitalized suffixes: "+suffix_tree_capitalized.size()); Map pos_probabilities = get_transition_probs(1); this.transition_probs.putAll(pos_probabilities); this.transition_probs.putAll(get_transition_probs(2)); this.transition_probs.putAll(get_transition_probs(3)); this.theta = get_theta(pos_probabilities); System.out.println("theta= "+this.theta); this.lambdas2 = calculate_lambda(2); this.lambdas3 = calculate_lambda(3); write_to_file(this.OutputFile); } /** * Check is the token is capitalized */ public static boolean capitalized(String word){ boolean b; char first_letter = word.charAt(0); char capitalized = word.toUpperCase().charAt(0); if (first_letter == capitalized) { b = true; } else { b = false; } return b; } static int tokens_count_all_corpus = 0; /** * Reads sentences, extracts {@code } frequency patterns * @param corpus list containing all tokens of the training corpus of the type {@link Token}} * @return map containing frequency counts for {@code } */ static Map> get_lexicon(List corpus){ Map> lexicon= new HashMap>(); for (int x=0; x pos = lexicon.get(current_token.word); // System.out.println(current_token.word+" "+current_token.pos); Double freq=pos.get(current_token.pos); // if a given POS is already in its values, then add its corresponding count, otherwise add a POS value with a count of 1 pos.put(current_token.pos, (freq == null) ? 1 : freq + 1); pos.put("count", pos.get("count")+1); } else { Map pos = new HashMap(); pos.put(current_token.pos,new Double(1)); pos.put("count", new Double(1)); lexicon.put(current_token.word, pos); } } return lexicon; } /** * Computes {@code word_probs} using {@link #get_lexicon(List)} frequency counts for known words.. * TO_DO: ADD SMOOTHING FOR UNKNOWNS?? OR add smoothing directly when come across unknown.. */ static Map sm = new HashMap ( ) ; // suffix map for non-capitalized words static Map sm2 = new HashMap ( ); // suffix map for capitalized; @SuppressWarnings("unchecked") static List>> get_word_probs(Map> corpus){ Map> word_counts=corpus; Map> word_probs = new HashMap>(); int mapsize = word_counts.size(); Iterator>> keyValuePairs = word_counts.entrySet().iterator(); // iterate over words Map pos_counts = get_ngrams(1); for (int i = 0; i < mapsize; i++) { Map.Entry> entry = keyValuePairs.next(); Object key = entry.getKey(); Map pos2= word_counts.get(key); // map of possible pos-s of the word Iterator> keyValuePairs_pos = pos2.entrySet().iterator(); // iterate over words Map lokal = new HashMap(); for (int u = 0; u < pos2.size(); u++) { Map.Entry entry_pos = keyValuePairs_pos.next(); String key2 = entry_pos.getKey(); // pos of a word System.out.println(pos_counts.size()); if (key2 != "count") { Object value2 = entry_pos.getValue(); // its count NGram ng = new NGram(key2); double freq_pos=pos_counts.get(ng); Double val2 = (Double)value2 / freq_pos; // Prob(w|t) = freq(w,t)/freq(t) lokal.put((String)key2, val2); // save probability as a log2 } else { lokal.remove("count"); } } // insert the word and its corresponding tags as well as their common probabilities into the words maps word_probs.put((String)key, lokal); /** * Get suffix probabilities from the words with frequency lower than 10 in the corpus */ Set local_suffixes = new HashSet(); // We maintain two different suffix counts for capitalized and non-capitalized words Set local_suffixes_capitalized = new HashSet(); // here we get words with counts under 10 for suffix probabilities.. the condition can be changed upt o you.. if (word_counts.get(key).get("count")<10){ String word_end; if (key.toString().length() > 9){ word_end = key.toString().substring(key.toString().length()-9, key.toString().length()); } else { word_end = (String) key; } SuffixTree st = new SuffixTree(word_end); Iterator> kv = st.edges.entrySet().iterator(); for (int f= 0; f etwas = new HashMap(); if(local_sm.containsKey(element)){ // get map of possible pos-s of the suffix Map pos_suffix= (Map) local_sm.get(element); Iterator> pos_suf = pos_suffix.entrySet().iterator(); // iterate over words for (int k = 0; k < pos_suffix.size(); k++) { Map.Entry entry3 = pos_suf.next(); Object key_pos = entry3.getKey(); // pos of a suffix Object value_pos = entry3.getValue(); // its probability count // If a given pos of a suffix is also present in the pos-s of a corresponding word // then add both up if (word_probs.get(key).containsKey(key_pos)){ Double val_suffix = (Double)value_pos + word_probs.get(key).get(key_pos); // Prob(w|t) = freq(w,t)/freq(t) etwas.put((String)key_pos, val_suffix); } else { etwas.put((String)key_pos, (Double)value_pos); } // add the pos of a corresponding word with its probability into the suffix map, // (which is not yet present in the poss of the suffix) Set smth2 = word_probs.get(key).keySet(); Object [] smth = smth2.toArray(); for (int r=0; r(); l.add(word_probs); //add word probabilities l.add(sm); // add suffixes of non-capitalized words l.add(sm2); // add suffixes of capitalized words return l; } /** * Make LOGs out of probabilities.. there was a reason to separate it from the get_word_probs method at the initial step * */ @SuppressWarnings("unchecked") static Map> logify_probs(Map> probs){ Map> logs = new HashMap>(); Iterator>> keyValuePairs = probs.entrySet().iterator(); // iterate over words for (int i = 0; i < probs.size(); i++) { Map.Entry> entry = keyValuePairs.next(); Object key = entry.getKey(); Map poss= probs.get(key); // map of possible pos-s of the word Object [] pos_s = poss.entrySet().toArray(); // for iteration over possible pos_s for (int u = 0; u < pos_s.length; u++) { Map.Entry entry2 = (Map.Entry) pos_s[u]; // System.out.println(entry); Object key2 = entry2.getKey(); // pos of a word Double value2 = (Double) entry2.getValue(); // its count poss.put((String)key2, Math.log(value2)); // save probability as a log2 } // insert the word and its corresponding tags as well as their common probabilities into the words maps logs.put((String)key, poss); } return logs; } /** * Computes N-gram frequencies * @param N * @return Map N-grams of parts-of-speech, where {@code N = 1, 2 or 3} * @throws IllegalArgumentException */ static Map get_ngrams(int N) throws IllegalArgumentException{ Map ngrams1= new HashMap(); Map ngrams2= new HashMap(); Map ngrams3= new HashMap(); if (N==1){ for (int y=0; y unigrams; static Map bigrams; static Map trigrams; @SuppressWarnings("unchecked") static Map get_transition_probs(int N) throws IllegalArgumentException{ Map probs1= new HashMap(); Map probs2= new HashMap(); Map probs3= new HashMap(); unigrams = get_ngrams(1); bigrams = get_ngrams(2); trigrams = get_ngrams(3); if (N==1) { Iterator keyValuePairs = unigrams.entrySet().iterator(); for (int i = 0; i < unigrams.size(); i++) // for all bigrams { Map.Entry entry = (Map.Entry) keyValuePairs.next(); Object key = entry.getKey(); // get an unigram double freq1 = unigrams.get(key); // get a count of a unigram double prob1 = freq1 / tokens_count_all_corpus; // Prob(key) = freq(tag)/freq(all_tags)? probs1.put((NGram)key, prob1); // save probability as a log2 : Math.log(prob1) } } else if (N==2){ Iterator keyValuePairs = bigrams.entrySet().iterator(); for (int i = 0; i < bigrams.size(); i++) // for all bigrams { Map.Entry entry = (Map.Entry) keyValuePairs.next(); NGram key = (NGram) entry.getKey(); // get a bigram double freq1 = unigrams.get(new NGram(key.tag1)); // get a count of a preceding unigram // String [] t = ((String)key).split("_"); // double freq1 = unigrams.get(t[0]); // get a count of a preceding unigram Object freq2 = entry.getValue(); // get a count of a bigram double prob2 = (Double)freq2 / freq1; // Prob(t2|t1) = freq(t1,t2)/freq(t1) probs2.put((NGram)key, prob2); } } else if (N==3){ // for trigram models Iterator keyValuePairs = trigrams.entrySet().iterator(); for (int i = 0; i < trigrams.size(); i++) // for all trigrams { Map.Entry entry = (Map.Entry) keyValuePairs.next(); NGram key = (NGram) entry.getKey(); // get a trigram double freq1 = bigrams.get(new NGram(key.tag1,key.tag2)); // get a count of a preceding bigram //String [] t = ((String)key).split("_"); //String tt = t[0]+"_"+t[1]; // Double freq1 = bigrams.get(tt); // get a count of a preceding bigram Object freq2 = entry.getValue(); // get a count of a trigram double prob3 = (Double)freq2/freq1; // Prob(t3|(t1_t2)) = freq(t1_t2_t3)/freq(t1_t2) probs3.put((NGram)key, prob3); // save probability as a log2: Math.log(prob3) } } else{ throw new IllegalArgumentException ("only uni-, bi-, and trigramms are supported at the moment"); } return ((N == 2) ? probs2 : (N==3)? probs3 : probs1); } /** * Computes alphas for linear interpolation smoothing of unknown n-grams * @param N N-gram * currently lambdas are calculated as in (Brants, 2000) */ @SuppressWarnings("unchecked") private double [] calculate_lambda(int N){ double lambda1 = 0; double lambda2 = 0; double lambda3 = 0; double count2 = 0; double count3 = 0; if (N ==2) { Iterator keyValuePairs = bigrams.entrySet().iterator(); for (int i = 0; i < bigrams.size(); i++) // for all bigrams { Map.Entry entry = (Map.Entry) keyValuePairs.next(); NGram key = (NGram)entry.getKey(); // get a bigram double freq1 = unigrams.get(new NGram(key.tag1)); // get a count of a preceding unigram Double freq2 = (Double) entry.getValue(); // get a count of a bigram double f2 = (freq2-1)/(freq1-1); double f1 = (freq1-1)/(tokens_count_all_corpus-1); double freq = get_max(f2, f1, 0); if (freq == f2) { lambda2 += freq2; count2 += freq2; } else {lambda1+=freq2;count2+=freq2;} } this.lambdas2[0] = lambda1/count2; this.lambdas2[1]= lambda2/count2; } if (N == 3) { Iterator keyValuePairs = trigrams.entrySet().iterator(); for (int i = 0; i < trigrams.size(); i++) // for all trigrams { Map.Entry entry = (Map.Entry) keyValuePairs.next(); NGram key = (NGram) entry.getKey(); // get a trigram // String [] t = ((String)key).split("_"); // String tt = t[0]+"_"+t[1]; NGram preceding_bigram = new NGram(key.tag1, key.tag2); Double freq2 = bigrams.containsKey(preceding_bigram) ? bigrams.get(preceding_bigram) : 0.0; // get a count of a preceding bigram Double freq3 = (Double) entry.getValue(); // get a count of a trigram Double freq1 = unigrams.containsKey(new NGram(key.tag1)) ? unigrams.get(new NGram(key.tag1)) : 0.0; double f3 = (freq3-1)/(freq2-1); double f2 = (freq2-1)/(freq1-1); double f1 = (freq1-1)/(tokens_count_all_corpus-1); double freq = get_max(f3, f2, f1); if (freq == f3) {lambda3+= freq3; count3+=freq3;} // or just real frequency? else if (freq == f2){lambda2+=freq3; count3+=freq3;} else {lambda1+=freq3;count3+=freq3;} } this.lambdas3[0] = lambda1/count3; this.lambdas3[1]=lambda2/count3; this.lambdas3[2]=lambda3/count3; } System.out.println("lambdas: "+this.lambdas3[0]+" "+this.lambdas3[1]+" "+this.lambdas3[2]); return ((N == 2) ? this.lambdas2 : this.lambdas3); } @SuppressWarnings("unchecked") private double get_theta (Map m) { double d = 0; double sum1 = 0; double tagset_size = m.size(); Iterator tags_probs = m.entrySet().iterator(); for (int h = 0; hmax){ max = b; } if (c>max) {max = c; } return max; } /** * Writes the model to a binary file * @param filename output file name */ private void write_to_file(String filename){ File file = null; if (filename!=null) { file = new File (filename);} // or use a default file name if (file == null) { System.out.println ("Default: model.dat"); file = new File ("model.dat"); } try { // Create an output stream to the file. FileOutputStream file_output = new FileOutputStream (file); ObjectOutputStream o = new ObjectOutputStream( file_output ); o.writeObject(this); file_output.close (); } catch (IOException e) { System.err.println ("IO exception = " + e ); } } public static void main(String[] args) { ModelGeneration md; CorpusReader reader; MappingInterface MAPPING; String file; String fileOutput; try { String paramFile = "tagger.properties"; // create and load default properties Properties defaultProps = new Properties(); FileInputStream in = new FileInputStream(paramFile); defaultProps.load(in); in.close(); file = defaultProps.getProperty("FILE"); fileOutput = defaultProps.getProperty("MODEL_FILE"); boolean DO_MAPPING; String b = defaultProps.getProperty("DO_MAPPING"); DO_MAPPING = Boolean.valueOf(b); if (DO_MAPPING){ String m = defaultProps.getProperty("MAPPING"); MAPPING = (MappingInterface)(Class.forName(m)).newInstance(); } else { MAPPING = null; } String r = defaultProps.getProperty("CORPUS_READER"); reader = (CorpusReader)(Class.forName(r)).newInstance(); System.out.println("Input file: "+file); System.out.println("Output model file: "+fileOutput); md = new ModelGeneration(reader.read_corpus(file, MAPPING),fileOutput); md.init(); } catch (Exception e) { System.err.println(e); } } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/BrownReader.java0000644000175000017500000001122311625126546033175 0ustar drazzibdrazzib/* *Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.uima.examples.tagger.trainAndTest; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; /** * Reader for Brown Corpus from NLTK Distribution (nltk.sourceforge.net) */ public class BrownReader implements CorpusReader{ /** * Reads Brown Corpus from NLTK Distribution Format. Iterates over all files in the directory, * which are in a sentence per line format, and returns all tokens in the collection in a List of * {@link Token}s} * */ public List read_corpus(String directory, MappingInterface mapping) { // Reads file names from Directory and returns an array of file names in the directory File dir = new File(directory); String[] list = dir.list(); String[] new_list = new String[list.length]; for (int i = 0; i < list.length; i++) { String dir_list = directory + "/" + list[i]; new_list[i] = dir_list; } String line; List text = new ArrayList(); // simple tokenizer: match one or more spaces // String delimiters = " +"; Pattern delimiters = Pattern.compile("[ ]+"); // Split input with the pattern int line_count = 0; for (int i = 0; i < new_list.length; i++) { String file = new_list[i]; try { BufferedReader in = new BufferedReader(new FileReader(file)); while ((line = in.readLine()) != null) { if (line.trim().length() > 0) { line_count += 1; String[] tokens = delimiters.split(line); for (int x = 0; x < tokens.length; x++) { // iterate over tokens with their // corresponding POS tokens[x] = tokens[x].replaceAll("[\\n\\t]+", ""); // for cases in Brown corpus like "//in" :( if (tokens[x].startsWith("//")) { String t = tokens[x].replace("//", "per/"); tokens[x] = t; } // and that was not all, further for cases like: // "before/in /l//nn and/cc AAb//nn or/cc /r//nn ./. " (text j in NLTK distribution) if (tokens[x].startsWith("/", 0)) { String t = tokens[x].substring(1); tokens[x] = t; } // for cases like : "AAb//nn" (s. above) if (tokens[x].contains("//")) { int j = tokens[x].indexOf("//"); String t = tokens[x].substring(0, j) + tokens[x].substring(j + 1); tokens[x] = t; } // for cases in brown like: "lb/day/nn" (text 'J', sentence N. 8940) int first = tokens[x].indexOf("/"); int last = tokens[x].lastIndexOf("/"); if (first != last) { String[] zw = tokens[x].split("/"); StringBuffer t = new StringBuffer(); for (int w = 0; w < zw.length - 1; w++) { t.append(zw[w]); } t.append("/"); t.append(zw[zw.length - 1]); tokens[x] = t.toString(); } String[] t = tokens[x].split("/"); Token token = new Token(t[0], t[1]); text.add(token); } } } in.close(); } catch (IOException e) { System.out.println(e); return null; } } System.out.println(line_count + " sentences in the corpus"); if (mapping != null) { text = mapping.map_tags(text); // in case we need to map } return text; } /* * public static void main(String[] args) { // BrownReader b = new BrownReader("Brown_test"); } */ } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/GrobMappingTueba.javauima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/GrobMappingTueba0000644000175000017500000000613211625126546033234 0ustar drazzibdrazzib/* *Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.uima.examples.tagger.trainAndTest; import java.util.ArrayList; import java.util.List; import org.apache.uima.examples.tagger.trainAndTest.Token; /** * */ public class GrobMappingTueba implements MappingInterface{ /** * Defines mapping for List<{@link Token}> * E.g. if we need to map tags, given a list of {@code Tokens}, we need to map the * {@code pos} field of every {@code Token} to a different {@code pos}. */ public List map_tags(List tokens){ // for (int i=0; i tokens2 = new ArrayList(tokens.size()); for (int x=0; x nodes = new ArrayList(); public Map edges = new HashMap(); // Map to store the starting node of the edges and their corresponding // first characters char[] chars; public SuffixTree() { this(""); } Suffix active_point = new Suffix(0, 0, -1); // initial active point is the first non-leaf suffix // in the tree public SuffixTree(String text) { // int token_begin = words.length(); nodes.removeAll(nodes); this.text = text; chars = text.toCharArray(); for (int i = 0; i < chars.length; i++) { add_prefix(i, active_point); // } } // public void insert_edge(Edge edge) { EDGE_KEY keys = new EDGE_KEY(edge.start_node, chars[edge.first_char_index]); // List keys = new ArrayList(); // keys.add(edge.start_node); // keys.add(chars[edge.first_char_index]); edges.put(keys, edge); } /** * * Internal Class SUFFIX */ class Suffix { int origin_node; int first_char_index; int last_char_index; public Suffix(int node, int begin, int end) { this.origin_node = node; this.first_char_index = begin; this.last_char_index = end; } boolean isExplicit() { return first_char_index > last_char_index; } boolean isImplicit() { return last_char_index >= first_char_index; } // "The canonical representation of the suffix simply requires that the origin_node // in the Suffix object be the closest parent to the end point of the string. // This means that the suffix string represented by the pair (0, "ABABABC"), // would be canonized by moving first to (1, "ABABC"), then (4, "ABC"), and finally (8,""). // When a suffix string ends on an explicit node, the canonical representation will use an empty // string // to define the remaining characters in the string. // // An empty string is defined by setting first_char_index to be greater than last_char_index. // When this is the case, we know that the suffix ends on an explicit node. // If first_char_index is less than or equal to last_char_index, // it means that the suffix string ends on an implicit node." // (Mark Nelson. Fast String Searching With Suffix Trees. // http://marknelson.us/1996/08/01/suffix-trees/) void canonize() { if (!this.isExplicit()) { EDGE_KEY keys = new EDGE_KEY(this.origin_node, chars[this.first_char_index]); // List keys = new ArrayList(); // keys.add(this.origin_node); // keys.add(chars[this.first_char_index]); Edge edge = (Edge) edges.get(keys); int edge_span = edge.last_char_index - edge.first_char_index + 1; int suffix_span = this.last_char_index - this.first_char_index + 1; if (edge_span <= suffix_span) { this.first_char_index = this.first_char_index + edge_span; this.origin_node = edge.end_node; this.canonize(); } } } } /** * Internal Class EDGE_KEY */ public class EDGE_KEY { private int suffix_begin; private char suffix; public EDGE_KEY(int i, char s) { suffix_begin = i; suffix = s; } @Override public boolean equals(Object o) { if (o instanceof EDGE_KEY) { EDGE_KEY ek = (EDGE_KEY) o; if ((this.suffix_begin == ek.suffix_begin) && (this.suffix == ek.suffix)) { return true; } } return false; } public int hashCode(){ int hash = 0; hash <<= 1; if ( hash < 0 ) { hash |= 1; } hash ^= suffix_begin; hash ^= suffix; return hash; } } /** * Internal Class EDGE */ public class Edge { public int first_char_index; public int last_char_index; int start_node; public int end_node; public Edge(int parent_node, int end_node, int first_char_index, int last_char_index) { this.first_char_index = first_char_index; this.last_char_index = last_char_index; this.start_node = parent_node; this.end_node = end_node; } // When a suffix ends on an implicit node, adding a new character // means I have to split an existing edge. // The existing edge loses its parent, as well as some of its leading // characters. The newly created edge descends from the original // parent, and now has the existing edge as a child. // // Since the existing edge is getting a new parent and starting // character, it is re-inserted. // // The number of characters stolen from the original node and given // to the new node is equal to the number of characters in the suffix // argument, which is last - first + 1; // Comment to the suffix pointers: The suffix pointers are built at the same time the update to // the tree is taking place. // As I move from the active point to the end point, I keep track of the parent node of each of // the new leaves I create. // Each time I create a new edge, I also create a suffix pointer // from the parent node of the last leaf edge I created to the current parent edge. // (Mark Nelson. Fast String Searching With Suffix Trees. // http://marknelson.us/1996/08/01/suffix-trees/) public int split_edge(Suffix suffix) { Node next = new Node(); nodes.add(next); int new_node_index = nodes.size(); int suf_span = suffix.last_char_index - suffix.first_char_index + 1; nodes.get(new_node_index - 1).suffix_node = suffix.origin_node; Edge new_edge = new Edge(new_node_index, this.end_node, this.first_char_index + suf_span, this.last_char_index); insert_edge(new_edge); // SuffixTree.remove_edge(this.start_node, this.first_char_index); // shorten existing edge this.last_char_index = this.first_char_index + suf_span - 1; // this.end_node = new_node_index; insert_edge(new Edge(this.start_node, new_node_index, this.first_char_index, this.last_char_index)); return new_node_index; // return the new origin node index of the last edge } } /** * Internal Class NODE */ // The only information contained in a node is the // suffix link. Each suffix in the tree that ends // at a particular node can find the next smaller suffix // by following the suffix_node link to a new node. Nodes // are stored in a simple array. public class Node { public int suffix_node; // static int count=0; // Nodes with suffix link of (-1) are leaf nodes public Node() { suffix_node = -1; } } public void add_prefix(int last_char, Suffix active_point) { int last_parent_node = -1; int parent_node = 0; for (;;) { parent_node = active_point.origin_node; Edge edge; if (active_point.isExplicit()) { EDGE_KEY keys = new EDGE_KEY(active_point.origin_node, chars[last_char]); // List keys = new ArrayList(); // keys.add(active_point.origin_node); // keys.add(chars[last_char]); if (edges.containsKey(keys)) { edge = (Edge) edges.get(keys); break; } } else if (active_point.isImplicit()) { // if suffix is implicit, i.e. it does not end in a // leaf node $ EDGE_KEY keys2 = new EDGE_KEY(active_point.origin_node, chars[active_point.first_char_index]); // List keys2 = new ArrayList(); // keys2.add(active_point.origin_node); // keys2.add(chars[active_point.first_char_index]); edge = (Edge) edges.get(keys2); int span = active_point.last_char_index - active_point.first_char_index; // if the given prefix is already in the tree, do nothing if (chars[edge.first_char_index + span + 1] == chars[last_char]) { break; } else { parent_node = edge.split_edge(active_point); } } Node next = new Node(); nodes.add(next); int new_node_index = nodes.size(); edge = new Edge(parent_node, new_node_index, last_char, chars.length - 1); insert_edge(edge); // When we create a new node, it also means we need to create a suffix link to the new node // from // the last node we visited. if (last_parent_node > 0) { nodes.get(last_parent_node - 1).suffix_node = parent_node; } last_parent_node = parent_node; // here we move to the next smaller suffix if (active_point.origin_node == 0) { active_point.first_char_index += 1; } else { active_point.origin_node = nodes.get(active_point.origin_node - 1).suffix_node; } active_point.canonize(); } if (last_parent_node > 0) { nodes.get(last_parent_node - 1).suffix_node = parent_node; } active_point.last_char_index += 1; active_point.canonize(); } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/trainAndTest/Token.java0000644000175000017500000000237411625126546032052 0ustar drazzibdrazzib/* *Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.uima.examples.tagger.trainAndTest; /** * Defines token features. * Helpful as an intermediate layer between a text and the tagger. */ public class Token { public String pos; public String word; public Token() { this(null, null); } public Token(String word) { this(word, null); } public Token(String word, String pos) { this.word = word; this.pos = pos; } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/Viterbi.java0000644000175000017500000004606111625126546027777 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.examples.tagger; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.uima.examples.tagger.trainAndTest.ModelGeneration; /** * Viterbi Algorithm: Given a model and a sequence of observations, what is the most likely sequence * of states in the model that produces the observations? */ public class Viterbi { @SuppressWarnings("unchecked") public static Map init_probs(Map pos_s) { Map init_probs = new HashMap(); double p_init = Math.log(1.0); // symbolic initial probability, at the // moment equal for all tags Iterator a_pos = pos_s.entrySet().iterator(); for (int h = 0; h < pos_s.size(); h++) { // for each of available parts of speech Map.Entry entry_init = (Map.Entry) a_pos.next(); String key_init = (String) entry_init.getKey(); // get the tag (state) Double value_init = (Double) entry_init.getValue(); // get its P(w|t) Double p_local = p_init; // get the 'initial' probability of this tag, // it#s logged List vpath_list = new ArrayList(); List init_list = new ArrayList(3); double p; // P(tag|preceding_tag, here it is just a symbolic initial state // ".") vpath_list.add(key_init); p = p_local + Math.log(value_init); // Prob(this tag|beginning of sequence) x P(w|t) init_list.add(p); init_list.add(vpath_list); init_list.add(p); init_probs.put(key_init, init_list); } return init_probs; } /** * @param N * @param sentence * @param suffix_tree * @param suffix_tree_cap * @param transition_probs * @param word_probs * @param lambdas2 * @param lambdas3 * @param theta * @return the viterbi path */ @SuppressWarnings("unchecked") public static List process(int N, List sentence, Map> suffix_tree, Map> suffix_tree_cap, Map transition_probs, Map> word_probs, double[] lambdas2, double[] lambdas3, double theta) { NGram ngram = null; NGram ngram2 = null; // here we add something like an "end-of-sentence" tag at the beginning of the first sentence, // to get probabilities for a certain tag to be at the beginning of the sentence. sentence.add(0, "."); /** ******************************************************** */ Map all = new HashMap(); // saves paths to the // current token // int cardinals = 0; /** ********************************************************* */ /** * */ /** ********************************************************* */ for (int i = 0; i < sentence.size() - 1; i++) { // for every token (observation) in a sentence /* * Get initial probabilities for the first token in a sentence, at the moment we just make * them all equal 1.0 through the init_probs() function */ Map available_pos = new HashMap(); String token; if (i == 0) { // lookup for the non-capitalized variant of the word for the first word in a sentence and // weight by relative frequencies of the corresponding forms and sum them token = sentence.get(1); String non_cap = token.toLowerCase(); if (word_probs.containsKey(token) || word_probs.containsKey(non_cap)) { if (word_probs.containsKey(non_cap)) { available_pos = word_probs.get(non_cap); } else { available_pos = word_probs.get(token); } } else // 2. smoothed suffix- the strategy described in (Brants, 2000) { Map> suffix_tree_local; // if a word is capitalized ... if (ModelGeneration.capitalized(sentence.get(1))) { suffix_tree_local = suffix_tree_cap; } else { suffix_tree_local = suffix_tree; } char[] unknown = sentence.get(1).toCharArray(); for (int j = 0; j < unknown.length; j++) { // get the longest suffix distribution from the suffix tree String suffix = sentence.get(1).substring(j, unknown.length); if (suffix_tree_local.containsKey(suffix)) { // get available POS with corresponding counts for the longest suffix Map available_pos_zwischen = suffix_tree_local.get(suffix); // smoothing by successive abstraction for the probabilities of the longest suffix, for (int suf = j + 1; suf < unknown.length; suf++) { String subsuffix = sentence.get(1).substring(suf, unknown.length); Map pos = new HashMap(); if (suffix_tree_local.containsKey(subsuffix)) { pos = suffix_tree_local.get(subsuffix); Iterator posValuePairs = pos.entrySet().iterator(); while (posValuePairs.hasNext()) { Map.Entry entry = (Map.Entry) posValuePairs .next(); Object key = entry.getKey(); Double value = entry.getValue(); if (available_pos_zwischen.containsKey(key)) { double zwischen_prob = (value + theta * (Double) available_pos_zwischen.get(key)) / (1 + theta); available_pos_zwischen.put(key, zwischen_prob); }/* * else { available_pos_zwischen.put(key, value); } */ } } else { Iterator posValuePairs2 = available_pos_zwischen.entrySet().iterator(); while (posValuePairs2.hasNext()) { Map.Entry entry = (Map.Entry) posValuePairs2 .next(); Object key = entry.getKey(); Double value = entry.getValue(); // smooth suffix probability P(suffix|tag) double zwischen_prob = (0 + theta * value) / (1 + theta); pos.put(key, zwischen_prob); } available_pos_zwischen = pos; } } available_pos = available_pos_zwischen; break; } // else if (j == unknown.length - 1) { if (word_probs.containsKey("(")) {available_pos = word_probs.get("(");} else {available_pos.put("(", Double.MIN_VALUE);} } } } all.putAll(init_probs(available_pos)); continue; // go over to the next token } token = sentence.get(i); Map m = new HashMap(); // saves paths to the // next token /** ********************************************************* */ /** INDUCTION (~forward algorithm) * */ /** ********************************************************* */ /* * At INDUCTION step the algorithm looks at the total and local possibilities of the next * state(=tag), given a current observation (=token) If a token is known, we limit the coming * tags by only possible ones for this token from the dictionary; otherwise: we use suffix * analysis to find possible POS tags for the unknown words */ Map possible_pos_next = new HashMap(); // possible pos of the // next token if (word_probs.containsKey(sentence.get(i + 1))) { // if the next token is known possible_pos_next = word_probs.get(sentence.get(i + 1)); // get possible POS of the next } else // if the token is unknown, then get possible tags from the suffix analysis { Map> suffix_tree_local; // if a word is capitalized ... if (ModelGeneration.capitalized(sentence.get(i + 1))) { suffix_tree_local = suffix_tree_cap; } else { suffix_tree_local = suffix_tree; } char[] unknown = sentence.get(i + 1).toCharArray(); for (int j = 0; j < unknown.length; j++) { // get the longest suffix distribution from the suffix tree String suffix = sentence.get(i + 1).substring(j, unknown.length); if (suffix_tree_local.containsKey(suffix)) { // get available POS with corresponding counts for the longest suffix Map available_pos_zwischen = suffix_tree_local.get(suffix); // smooth suffix probabilities for (int suf = j + 1; suf < unknown.length; suf++) { String subsuffix = sentence.get(i + 1).substring(suf, unknown.length); Map pos = new HashMap(); if (suffix_tree_local.containsKey(subsuffix)) { pos = suffix_tree_local.get(subsuffix); Iterator posValuePairs = pos.entrySet().iterator(); // iterate over words while (posValuePairs.hasNext()) { Map.Entry entry = (Map.Entry) posValuePairs .next(); Object key = entry.getKey(); Double value = entry.getValue(); if (available_pos_zwischen.containsKey(key)) { // smooth suffix probability P(suffix|tag) double zwischen_prob = (value + theta * (Double) available_pos_zwischen.get(key)) / (1 + theta); available_pos_zwischen.put(key, zwischen_prob); } } } else { Iterator posValuePairs2 = available_pos_zwischen.entrySet().iterator(); // iterate // over // words while (posValuePairs2.hasNext()) { Map.Entry entry = (Map.Entry) posValuePairs2 .next(); Object key = entry.getKey(); Double value = entry.getValue(); // smooth suffix probability P(suffix|tag) double zwischen_prob = (0 + theta * value) / (1 + theta); pos.put(key, zwischen_prob); } available_pos_zwischen = pos; } } possible_pos_next = available_pos_zwischen; break; } // for unexpected cases which are neither in the dictionary nor in the suffix analysis else if (j == unknown.length - 1) { if (possible_pos_next.containsKey("(")) {possible_pos_next = word_probs.get("(");} else {possible_pos_next.put("(", Double.MIN_VALUE);} } } } Iterator keyValuePairs_next = possible_pos_next.entrySet().iterator(); for (int u = 0; u < possible_pos_next.size(); u++) // for every possible tag of the next // token, if the token is known.. { Map.Entry entry_next = (Map.Entry) keyValuePairs_next.next(); String key_next = (String) entry_next.getKey(); Double value_next = (Double) entry_next.getValue(); // get double total_prob = 0.0; // just for fun, for forward algorithm List max_viterbi_path = new ArrayList(); // viterbi path double max_viterbi_prob = 0; // viterbi probability Iterator keyValuePairs = all.entrySet().iterator(); NGram nextNgram = new NGram(key_next); double nextNgramTransProb = 0.0; if (transition_probs.containsKey(nextNgram)) { nextNgramTransProb = transition_probs.get(nextNgram); } /** ********************************************************************************** */ /* * calculates for the given next token which of the possible paths to the current token are * more possible to end in the next token */ for (int y = 0; y < all.size(); y++) // for every possible tag // of this token (path // till now) { Map.Entry entry = (Map.Entry) keyValuePairs.next(); Object key = entry.getKey(); // get possible tag for the current token List probs = all.get(key); // Double prob_local = (Double) probs.get(0); // total_probability for // forward algorihtm List path_local = (List) probs.get(1); // path to that token Double vprob_local = (Double) probs.get(2); // get viterbi probability for this token /* * The following 4 lines can be modified to get any other number of N-grams */ /* -- from here -- */ // um den ersten trigramm abzufangen if (N == 3 && i == 1) { // ngram = path_local.get(path_local.size() - 1) + "_" + key_next; ngram = new NGram(path_local.get(path_local.size() - 1), key_next); } else if (N == 2) { // ngram = path_local.get(path_local.size() - 1) + "_" + key_next; ngram = new NGram(path_local.get(path_local.size() - 1), key_next); } else if (N == 3 && i != 1) { // ngram = path_local.get(path_local.size() - 2) + "_" // + path_local.get(path_local.size() - 1) + "_" + key_next; // ngram2 = path_local.get(path_local.size() - 1) + "_" + key_next; ngram = new NGram(path_local.get(path_local.size() - 2), path_local.get(path_local .size() - 1), key_next); ngram2 = new NGram(path_local.get(path_local.size() - 1), key_next); } else { System.err.println("at the moment only bi-and trigramms are supported"); } /* -- till here -- */ double pp = 0; // smoothing only unknown n-grams strategy /* * if (transition_probs.containsKey(ngram)) { // P(t2|t1) || use logs because of small * numbers: log(pq) = log(p) + // log(q); if model parameters are stored logged then only * addition // is performed at runtime pp = value_next + transition_probs.get(ngram); } * else { */ // System.err.println("UNKNOWN NGRAM"); // At the moment we smooth both - known and unknown n-grams (seems to perform better) double ppp; if (N == 3 && i == 1) { double lambda1 = lambdas2[0]; double lambda2 = lambdas2[1]; ppp = (transition_probs.containsKey(ngram)) ? ((lambda2 * transition_probs.get(ngram)) + (lambda1 * transition_probs .get(nextNgram))) : (lambda1 * nextNgramTransProb); pp = Math.log(value_next) + Math.log(ppp); // P(t|w) * P(t1,t2,t3) } else if (N == 3) { double lambda1 = lambdas3[0]; double lambda2 = lambdas3[1]; double lambda3 = lambdas3[2]; if (transition_probs.containsKey(ngram)) { double transProbNgram2 = (transition_probs.containsKey(ngram2) ? transition_probs .get(ngram2) : 0.0); ppp = (lambda3 * transition_probs.get(ngram)) + (lambda2 * transProbNgram2) + (lambda1 * nextNgramTransProb); } else { // System.out.println(ngram2); ppp = (transition_probs.containsKey(ngram2)) ? ((lambda2 * transition_probs .get(ngram2)) + (lambda1 * nextNgramTransProb)) : (lambda1 * nextNgramTransProb); } pp = Math.log(value_next) + Math.log(ppp); } if (N == 2) { double lambda1 = lambdas2[0]; double lambda2 = lambdas2[1]; ppp = (transition_probs.containsKey(ngram)) ? ((lambda2 * transition_probs.get(ngram)) + (lambda1 * transition_probs .get(nextNgram))) : (lambda1 * transition_probs.get(nextNgram)); pp = Math.log(value_next) + Math.log(ppp); } vprob_local += pp; if (y == 0) { max_viterbi_prob = vprob_local; } if (vprob_local >= max_viterbi_prob) { max_viterbi_prob = vprob_local; max_viterbi_path = new ArrayList(path_local); max_viterbi_path.add(key_next); } } List v = new ArrayList(3); v.add(total_prob); v.add(max_viterbi_path); v.add(max_viterbi_prob); m.put(key_next, v); // m contains total of the probabilities ending in // this step, // i.e. for every possible pos of the next token we store all the // possible paths to it // System.out.println("m: "+m.entrySet().toString()); } all = m; } /** ****************************************************** */ /*********************************************************************************************** * Best sequence identification / Termination / Backtracking / **********************************************************************************************/ List max_viterbi_path = new ArrayList(); // viterbi path double max_viterbi_prob = 0.0; // viterbi probability Iterator keyValuePairs_all = all.entrySet().iterator(); // iterate over them for (int j = 0; j < all.size(); j++) // for all computed possible paths, // choose the one with the maximum // local probability { Map.Entry entry = (Map.Entry) keyValuePairs_all.next(); ArrayList value = (ArrayList) entry.getValue(); List path_local = (List) value.get(1); Double vprob_local = (Double) value.get(2); if (j == 0) { max_viterbi_prob = vprob_local; } if (vprob_local >= max_viterbi_prob) { max_viterbi_path = path_local; max_viterbi_prob = vprob_local; } } List result = new ArrayList(3); result.add(max_viterbi_path); result.add(max_viterbi_prob); return max_viterbi_path; } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/HMMTagger.java0000644000175000017500000002541411625126546030145 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.examples.tagger; import org.apache.uima.TokenAnnotation; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.analysis_engine.annotator.AnnotatorConfigurationException; import org.apache.uima.cas.CASException; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationIndex; import org.apache.uima.examples.tagger.trainAndTest.MappingInterface; import org.apache.uima.examples.tagger.trainAndTest.ModelGeneration; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.resource.ResourceInitializationException; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.util.ArrayList; import java.util.List; /** * UIMA Analysis Engine that invokes HMM POS tagger. HMM POS tagger generates part-of-speech tags * for every token. This annotator assumes that sentences and tokens have already been annotated in the CAS * with Sentence and Token annotations, respectively. We iterate over sentences, then iterate over * tokens in the current sentence to accumulate a list of words, then invoke the HMM POS tagger on * the list of words. For each Token we then update the posTag field with the POS tag. The model * file for the HMM POS tagger is specified as a parameter (MODEL_FILE_PARAM). *

* The configuration of this analysis engine is done through several parameters: *

    *
  • InputView: - the view to process
  • *
  • SentenceType: the annotation type which covers token annotations
  • *
  • TokenFeaturePath: - feature path to the token feature to be tagged. * The annotation should exactly cover a "word".
  • *
  • ModelFile: - the path from where the model will be read
  • *
*/ public class HMMTagger extends JCasAnnotator_ImplBase implements Tagger { private static final String model_file_param = "Model"; private static final String n_param = "NGRAM_SIZE"; /** * Name of the parameter for the input view */ public static String PARAM_INPUT_VIEW = "InputView"; /** * Name of the parameter for the model import path */ public static String PARAM_IMPORT_MODEL_FILE = "ModelFile"; /** * Name of the parameter for the annotation type which covers token annotations */ public static String PARAM_SENTENCE = "SentenceType"; /** * Name of the parameter for the feature path to the token feature to be tagged */ public static String PARAM_TOKEN_FP = "TokenFeaturePath"; /** * Default Input View value */ private static final String DEFAULT_INPUT_VIEW = "_InitialView"; /** * Default sentence annotation type which covers token annotations */ private static final String DEFAULT_SENTENCE_TYPE = "org.apache.uima.SentenceAnnotation"; /** * Default token feature path value */ private static final String DEFAULT_TOKEN_FEATURE_PATH = "org.apache.uima.TokenAnnotation:posTag"; /** * The view from which the tokens will be extracted */ private String inputView; /** * The path to the file where the model will be read */ private String modelFile; /** * The Annotation type which covers the token annotations */ private String theSentenceTypeName; /** * The type to which we will set the POS tag feature */ private String theTokenTypeName; /** * The name of the attribute where the POS to tag is stored */ private String thePOSAttribute; /** * for a bigram model: N = 2, for a trigram model N=3 N is defined in parameter file */ public int N; // public String END_OF_SENT_TAG; public ModelGeneration my_model; MappingInterface MAPPING; /** * Initialize the Annotator. * * @see JCasAnnotator_ImplBase#initialize(UimaContext) */ public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); // Configure the component this.inputView = (String) aContext.getConfigParameterValue(PARAM_INPUT_VIEW); // Set a default inputView value if (this.inputView == null) { this.inputView = DEFAULT_INPUT_VIEW; } // Configure the sentence this.theSentenceTypeName = (String) aContext.getConfigParameterValue(PARAM_SENTENCE); // Set a default sentence type name if (this.theSentenceTypeName == null) { this.theSentenceTypeName = DEFAULT_SENTENCE_TYPE; } // Compute the type and the attribute name String fpPOS = (String) aContext.getConfigParameterValue(PARAM_TOKEN_FP); // Set a default token and feature path value if (fpPOS == null) { fpPOS = DEFAULT_TOKEN_FEATURE_PATH; } Integer idx = fpPOS.lastIndexOf(":"); if (idx >= 0) { this.theTokenTypeName = fpPOS.substring(0, idx); this.thePOSAttribute = fpPOS.substring(idx + 1); } else { throw new ResourceInitializationException("The feature path passed " + "in parameter ('" + fpPOS + "') is not valid. " + "It should be like : 'type.name:attribute'", null); } try { this.N = ((Integer) aContext.getConfigParameterValue(n_param)).intValue(); this.modelFile = (String) aContext.getConfigParameterValue(PARAM_IMPORT_MODEL_FILE); if (this.modelFile != null) { // in that case, the multiple deployment cannot be allowed this.my_model = get_model(this.modelFile); } else { this.my_model = get_model(); } if (this.my_model == null) { throw new ResourceInitializationException(new Exception("Could not load model file.")); } } catch (Exception e) { throw new ResourceInitializationException(e); } } /** * Reads a saved {@code MODEL} object from a file * * @param filename model file * @return {@link ModelGeneration} */ public static ModelGeneration get_model(String filename) { System.out.println("The used model is:" + filename); InputStream model = null; ModelGeneration oRead = null; try { model = new FileInputStream(filename); ObjectInputStream p = new ObjectInputStream(model); oRead = (ModelGeneration) p.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { model.close(); } catch (Exception e) { e.printStackTrace(); } } return oRead; } private ModelGeneration get_model() throws AnnotatorConfigurationException { IModelResource modelResource = null; try { modelResource = (IModelResource) getContext().getResourceObject(model_file_param); } catch (Exception e) { throw new AnnotatorConfigurationException(e); } return modelResource.getModel(); } /** * Process a CAS. * * @see JCasAnnotator_ImplBase#process(JCas) */ @SuppressWarnings("unchecked") public void process(JCas aJCas) throws AnalysisEngineProcessException { // Select the view we will work on JCas workingView = null; try { workingView = aJCas.getView(this.inputView); } catch (CASException e1) { throw new AnalysisEngineProcessException(e1); } ArrayList tokenList = new ArrayList(); ArrayList wordList = new ArrayList(); AnnotationIndex sentenceIndex = workingView.getAnnotationIndex(getType(workingView, this.theSentenceTypeName)); AnnotationIndex tokenIndex = workingView.getAnnotationIndex(getType(workingView, this.theTokenTypeName)); // iterate over Sentences FSIterator sentenceIterator = sentenceIndex.iterator(); while (sentenceIterator.hasNext()) { Annotation sentence = (Annotation) sentenceIterator.next(); tokenList.clear(); wordList.clear(); FSIterator tokenIterator = tokenIndex.subiterator(sentence); while (tokenIterator.hasNext()) { TokenAnnotation token = (TokenAnnotation) tokenIterator.next(); tokenList.add(token); wordList.add(token.getCoveredText()); } List wordTagList = Viterbi.process(this.N, wordList, this.my_model.suffix_tree, this.my_model.suffix_tree_capitalized, this.my_model.transition_probs, this.my_model.word_probs, this.my_model.lambdas2, this.my_model.lambdas3, this.my_model.theta); try { for (int i = 0; i < tokenList.size(); i++) { Annotation token = tokenList.get(i); String posTag = wordTagList.get(i); Feature featPOS = getType(workingView, this.theTokenTypeName).getFeatureByBaseName(thePOSAttribute); token.setFeatureValueFromString(featPOS, posTag); } } catch (IndexOutOfBoundsException e) { System.err.println("POS tagger error - list of tags shorter than list of words"); } } } /** * Get the type of a given annotation name and check if it exists * * @param aJCas * @param annotationString * @return annotationType * @throws AnalysisEngineProcessException */ public static Type getType(JCas aJCas, String annotationString) throws AnalysisEngineProcessException { // get Type from string and verify existence on TypeSystem Type annotationType = null; annotationType = aJCas.getTypeSystem().getType( annotationString); if ((annotationType == null)) { throw new AnalysisEngineProcessException(new StringBuilder("Error: Type ").append(annotationString) .append(" is not defined in the Type System !").toString(), new Object[]{annotationType}); } return annotationType; } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/IModelResource.java0000644000175000017500000000204711625126546031250 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.examples.tagger; import org.apache.uima.examples.tagger.trainAndTest.ModelGeneration; /** * Model resource interface. */ public interface IModelResource { ModelGeneration getModel(); } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/NGram.java0000644000175000017500000000645111625126546027376 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.examples.tagger; import java.io.Serializable; // Helper class public class NGram implements Serializable{ private static final long serialVersionUID = 1L; public String tag1; public String tag2; public String tag3; public NGram(){ this(null,null,null); } public NGram(String tag1){ this(tag1, null,null); } public NGram(String tag1, String tag2){ this(tag1, tag2, null); } public NGram(String tag1, String tag2, String tag3 ){ this.tag1 = tag1; this.tag2 = tag2; this.tag3 = tag3; } @Override public boolean equals(Object o) { if (o instanceof NGram) { NGram n = (NGram) o; // case: trigram if (this.tag2!=null && this.tag3!=null){ return (this.tag1.equals(n.tag1)) && (this.tag2.equals(n.tag2)) && (this.tag3.equals(n.tag3)); } // case: bigram else if (this.tag2!=null && this.tag3 == null){ return (this.tag1.equals(n.tag1)) && (this.tag2.equals(n.tag2)); } // case onegram else { return (this.tag1.equals(n.tag1)); } } else{ return false; } } public int hashCode(){ int hash = 7; hash = 31 * hash + this.tag1.hashCode(); if (this.tag2!=null){ hash = 31 * hash + this.tag2.hashCode(); } if (this.tag3!=null){ hash = 31 * hash + this.tag3.hashCode(); } return hash; } /* in case we would use char[] instead of Strings.. didn't help to reduce the model:( public boolean equals(Object o) { if (o instanceof NGram) { NGram n = (NGram) o; // case: trigram if (this.tag2!=null && this.tag3!=null){ return (Arrays.equals(this.tag1, n.tag1)) && (Arrays.equals(this.tag2, n.tag2)) && (Arrays.equals(this.tag3, n.tag3)); } // case: bigram else if (this.tag2!=null && this.tag3 == null){ return (Arrays.equals(this.tag1, n.tag1)) && (Arrays.equals(this.tag2, n.tag2)); } // case onegram else { return (Arrays.equals(this.tag1, n.tag1)); } } else{ return false; } } public int hashCode(){ int hash = 7; hash = 31 * hash + Arrays.hashCode(this.tag1); if (this.tag2!=null){ hash = 31 * hash + Arrays.hashCode(this.tag1); } if (this.tag3!=null){ hash = 31 * hash + Arrays.hashCode(this.tag1); } return hash; } */ } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/Tagger.java0000644000175000017500000000352211625126546027577 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ // package org.apache.uima.examples.tagger; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; /** * General tagger interface in case one would want to define further types of taggers. * * Known implementations: {@link HMMTagger} using {@link Viterbi} algorithm * to compute the most probable path of parts of speech for a given sequence of tokens * @see Viterbi * @see HMMTagger */ public interface Tagger { /** * Instantiates {@code MODEL} for current tagger */ public void initialize(UimaContext aContext) throws ResourceInitializationException; /** * Trains a new model for tagger, if a training is defined in {@code tagger.properties} file * @see org.apache.uima.examples.tagger.trainAndTest#ModelGeneration */ public void process(JCas aJCas) throws AnalysisEngineProcessException; } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/ModelResource.java0000644000175000017500000000433611625126546031142 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.examples.tagger; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import org.apache.uima.examples.tagger.trainAndTest.ModelGeneration; import org.apache.uima.resource.DataResource; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.SharedResourceObject; /** * Implementation of the model resource. */ public class ModelResource implements IModelResource, SharedResourceObject { private ModelGeneration model = null; /* * (non-Javadoc) * * @see org.apache.uima.examples.tagger.IModelResource#getModel() */ public ModelGeneration getModel() { return this.model; } /* * (non-Javadoc) * * @see org.apache.uima.resource.SharedResourceObject#load(org.apache.uima.resource.DataResource) */ public void load(DataResource data) throws ResourceInitializationException { if (data != null) { try { InputStream inputStream = data.getInputStream(); this.model = null; ObjectInputStream p = new ObjectInputStream(inputStream); this.model = (ModelGeneration) p.readObject(); p.close(); } catch (IOException e) { throw new ResourceInitializationException(e); } catch (ClassNotFoundException e) { throw new ResourceInitializationException(e); } } } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/examples/tagger/HMMModelTrainer.java0000644000175000017500000001576011625126546031324 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.examples.tagger; // Java dependencies import java.util.ArrayList; // UIMA dependencies import org.apache.uima.UIMAFramework; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CASException; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.examples.tagger.trainAndTest.ModelGeneration; import org.apache.uima.examples.tagger.trainAndTest.Token; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; /** * This analysis engine trains an N-gram model for the HMM tagger. It uses * a training corpus as reference. This corpus must contain annotations on * words with an attribute corresponding to the POS value to be learned. * * The configuration of this analysis engine is done through several parameters: *
    *
  • View: - the view from which the tokens will be extracted
  • *
  • ModelExportFile: - the path where the model will be written
  • *
  • FeaturePathPOS: - feature path to the value of the POS to be learned. * The annotation should exactly cover a "word".
  • *
* * BEWARE: this analysis engine does not allow multiple deployment ! * * NB. At the moment: both bi and trigram statistics are saved in one model file. */ public class HMMModelTrainer extends JCasAnnotator_ImplBase { /** Name of the parameter for the view */ public static String PARAM_VIEW = "View"; /** Name of the parameter for the model export path */ public static String PARAM_FILE = "ModelExportFile"; /** Name of the parameter for the feature path to the POS */ public static String PARAM_POSFP = "FeaturePathPOS"; /** The view from which the tokens will be extracted */ private String theView; /** The path to the file where the model will be written */ private String fileOutput; /** The type from which we will extract the tags to learn */ private String theTokenTypeName; /** The name of the attribute where the POS to learn is stored */ private String thePOSAttribute; /** The list of collected tokens */ private ArrayList theLearnedTokens; /** * Initialization of the component */ public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); // Configure the component theView = (String) aContext.getConfigParameterValue(PARAM_VIEW); fileOutput = (String) aContext.getConfigParameterValue(PARAM_FILE); // Compute the type and the attribute name String fpPOS = (String) aContext.getConfigParameterValue(PARAM_POSFP); Integer idx = fpPOS.lastIndexOf(":"); if (idx >= 0) { theTokenTypeName = fpPOS.substring(0, idx); thePOSAttribute = fpPOS.substring(idx+1); } else { throw new ResourceInitializationException("The feature path passed " + "in parameter ('"+fpPOS+"') is not valid. " + "It should be like : 'type.name:attribute'", null); } // Prepare the list of tokens theLearnedTokens = new ArrayList(); } /** * Processing. * Browse the annotations of the type theTokenTypeName that must inherit * from the type tcas.Annotation and build the list of tokens that will be * learned by the HMMTagger. */ @Override public void process(JCas cas) throws AnalysisEngineProcessException { try { // Select the view we will work on JCas workingView = cas.getView(theView); // Iterate over the type we will learn from Type tokenType = workingView.getTypeSystem().getType(theTokenTypeName); if (tokenType != null) { // Compute the feature for the POS value Feature featPOS = tokenType.getFeatureByBaseName(thePOSAttribute); // Browse these annotation and create the tokens to be learned FSIterator itPOS = workingView.getAnnotationIndex(tokenType).iterator(); Integer c = 0; Integer i = 0; while ( itPOS.hasNext() ) { Annotation token = itPOS.next(); // Create a new token to be learned and add it to the list, // if the POS value is relevant (not null) Token tokenTmp = new Token(); tokenTmp.word = token.getCoveredText(); tokenTmp.pos = token.getStringValue(featPOS); if (tokenTmp.pos != null) { c++; theLearnedTokens.add(tokenTmp); } else { UIMAFramework.getLogger().log(Level.WARNING, "Ignoring token "+tokenTmp.word+" because its " + "POS value is null"); i++; } } // Log the number of tokens collected UIMAFramework.getLogger().log(Level.INFO, c + " tokens to be learned added, " + i + " tokens ignored."); } else { throw new AnalysisEngineProcessException( "The type '"+theTokenTypeName+"', passed as token type " + "for the training is not in the type system.", null); } } catch (CASException e) { throw new AnalysisEngineProcessException(e); } } /** * Called at the end of the processing. * When the whole collection has been processed, we create the model * from the elements we collected. */ @Override public void collectionProcessComplete() throws AnalysisEngineProcessException { try { UIMAFramework.getLogger().log(Level.INFO, "Generation of model '"+fileOutput+"' with " + theLearnedTokens.size()+" tokens to be learned."); ModelGeneration md = new ModelGeneration(theLearnedTokens,fileOutput); md.init(); UIMAFramework.getLogger().log(Level.INFO, "Model generated: " + md.suffix_tree.size() + " leaves suffix tree, " + md.transition_probs.size() + " transitions probabilities, " + md.word_probs.size() + " tag probabilities."); } catch (Exception e) { // Because UIMA filter all exceptions... we try to catch those UIMAFramework.getLogger().log(Level.SEVERE, "Something happened : " + e.getMessage()); e.printStackTrace(); throw new AnalysisEngineProcessException(e); } } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/SentenceAnnotation_Type.java0000644000175000017500000000533311625126546030101 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Oct 25 11:28:37 CEST 2007 */ package org.apache.uima; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.jcas.tcas.Annotation_Type; /** * sentence annotation Updated by JCasGen Thu Oct 25 11:28:37 CEST 2007 * * @generated */ public class SentenceAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() { return fsGenerator; } /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (SentenceAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = SentenceAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new SentenceAnnotation(addr, SentenceAnnotation_Type.this); SentenceAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new SentenceAnnotation(addr, SentenceAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = SentenceAnnotation.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry .getFeatOkTst("org.apache.uima.SentenceAnnotation"); /** * initialize variables to correspond with Cas Type and Features * * @generated */ public SentenceAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl) this.casType, getFSGenerator()); } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/TokenAnnotation_Type.java0000644000175000017500000001077311625126546027421 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Oct 25 11:28:37 CEST 2007 */ package org.apache.uima; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Single token annotation Updated by JCasGen Thu Oct 25 11:28:37 CEST 2007 * * @generated */ public class TokenAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() { return fsGenerator; } /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (TokenAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = TokenAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new TokenAnnotation(addr, TokenAnnotation_Type.this); TokenAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new TokenAnnotation(addr, TokenAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = TokenAnnotation.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry .getFeatOkTst("org.apache.uima.TokenAnnotation"); /** @generated */ final Feature casFeat_tokenType; /** @generated */ final int casFeatCode_tokenType; /** @generated */ public String getTokenType(int addr) { if (featOkTst && casFeat_tokenType == null) jcas.throwFeatMissing("tokenType", "org.apache.uima.TokenAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_tokenType); } /** @generated */ public void setTokenType(int addr, String v) { if (featOkTst && casFeat_tokenType == null) jcas.throwFeatMissing("tokenType", "org.apache.uima.TokenAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_tokenType, v); } /** @generated */ final Feature casFeat_posTag; /** @generated */ final int casFeatCode_posTag; /** @generated */ public String getPosTag(int addr) { if (featOkTst && casFeat_posTag == null) jcas.throwFeatMissing("posTag", "org.apache.uima.TokenAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_posTag); } /** @generated */ public void setPosTag(int addr, String v) { if (featOkTst && casFeat_posTag == null) jcas.throwFeatMissing("posTag", "org.apache.uima.TokenAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_posTag, v); } /** * initialize variables to correspond with Cas Type and Features * * @generated */ public TokenAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl) this.casType, getFSGenerator()); casFeat_tokenType = jcas.getRequiredFeatureDE(casType, "tokenType", "uima.cas.String", featOkTst); casFeatCode_tokenType = (null == casFeat_tokenType) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_tokenType).getCode(); casFeat_posTag = jcas.getRequiredFeatureDE(casType, "posTag", "uima.cas.String", featOkTst); casFeatCode_posTag = (null == casFeat_posTag) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) casFeat_posTag).getCode(); } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/SentenceAnnotation.java0000644000175000017500000000454211625126546027101 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Oct 25 11:28:37 CEST 2007 */ package org.apache.uima; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * sentence annotation Updated by JCasGen Thu Oct 25 11:28:37 CEST 2007 XML source: * C:/code/ApacheUIMA/Tagger/desc/HmmTaggerTAE.xml * * @generated */ public class SentenceAnnotation extends Annotation { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(SentenceAnnotation.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() { return typeIndexID; } /** * Never called. Disable default constructor * * @generated */ protected SentenceAnnotation() { } /** * Internal - constructor used by generator * * @generated */ public SentenceAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public SentenceAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public SentenceAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * * @generated modifiable */ private void readObject() { } } uima-addons-2.3.1/Tagger/src/main/java/org/apache/uima/TokenAnnotation.java0000644000175000017500000001033411625126546026411 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Oct 25 11:28:37 CEST 2007 */ package org.apache.uima; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Single token annotation Updated by JCasGen Thu Oct 25 11:28:37 CEST 2007 XML source: * C:/code/ApacheUIMA/Tagger/desc/HmmTaggerTAE.xml * * @generated */ public class TokenAnnotation extends Annotation { /** * @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(TokenAnnotation.class); /** * @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() { return typeIndexID; } /** * Never called. Disable default constructor * * @generated */ protected TokenAnnotation() { } /** * Internal - constructor used by generator * * @generated */ public TokenAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public TokenAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public TokenAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * * @generated modifiable */ private void readObject() { } // *--------------* // * Feature: tokenType /** * getter for tokenType - gets token type * * @generated */ public String getTokenType() { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type) jcasType).casFeat_tokenType == null) jcasType.jcas.throwFeatMissing("tokenType", "org.apache.uima.TokenAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((TokenAnnotation_Type) jcasType).casFeatCode_tokenType); } /** * setter for tokenType - sets token type * * @generated */ public void setTokenType(String v) { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type) jcasType).casFeat_tokenType == null) jcasType.jcas.throwFeatMissing("tokenType", "org.apache.uima.TokenAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((TokenAnnotation_Type) jcasType).casFeatCode_tokenType, v); } // *--------------* // * Feature: posTag /** * getter for posTag - gets contains part-of-speech of a corresponding token * * @generated */ public String getPosTag() { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type) jcasType).casFeat_posTag == null) jcasType.jcas.throwFeatMissing("posTag", "org.apache.uima.TokenAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((TokenAnnotation_Type) jcasType).casFeatCode_posTag); } /** * setter for posTag - sets contains part-of-speech of a corresponding token * * @generated */ public void setPosTag(String v) { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type) jcasType).casFeat_posTag == null) jcasType.jcas.throwFeatMissing("posTag", "org.apache.uima.TokenAnnotation"); jcasType.ll_cas .ll_setStringValue(addr, ((TokenAnnotation_Type) jcasType).casFeatCode_posTag, v); } } uima-addons-2.3.1/Tagger/src/test/0000755000175000017500000000000011625126546016601 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/test/resources/0000755000175000017500000000000011625126546020613 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/test/resources/moby-tag-list.txt0000644000175000017500000404475611625126546024070 0ustar drazzibdrazzibjj nn . dt nn in np ' np np in np bez vbn in at np nn nn . pps bedz vbn in nn np np . np in at nn in np . dti jj nns in dt nn md vb dt nn cc dti nns vbg in nn in dt nn md vb nn in nn np ' nn nn . nn ( vbd in at jj jj nn in at nn nn . ) at jj fw ( jj nn in nn , nn , nn , cc nn . ppss vb ppo rb . pps bedz rb vbg pp$ jj nns cc vbz , in at jj nn , rb vbn in abn at jj nns in abn at vbn nns in at nn . pps vbd to vb pp$ jj vbz . pps rb rb vbd ppo in pp$ nn . nns ( vbn in at nn in nn in nn . ) pps md be vbn cs dt jj jj nn cc nn in at jj nn in at np in np vbz to hv vbn in at jj nps cc nn in nns in at nn , vbg rp wdt jj nns in nns pps md rb vb in dti nn wps , jj cc jj . rb ppss md * , in at nn in ap , vb at jj in jj jj nns , wql jj , in dts nns , in jj nn nn . rb in ppo . cs vbg at jj nns rb , cs rb cs at nns rb vbg , dts nns ber ql jj cc jj , cs vbg at vbg nn ' jj nn nn in wdt hvz ben rb vbn , vbd , vbd , cc vbn in jj , in ap nns cc nns , in pp$ jj . ql nn ppo rb , jj nn in at np in np , wp$ nn ppss bem . ppss jjt in dt jj , jj nn wdt at nn in dt nn md rb jj . cc in wpo rb jj nn md be ql jj in jj . cc in wpo pn rb vbz to vb , cc vb jj in jj , rb . cc vb jj in nns . cc vb in ppo rb , in jj nns cc jj nns , cc in * ql jj nn nn ( vb nn ppo rp , nn in nns . in in wql ap at ap nns ppss vb to vb at nn , in ql ap at ap md ppss in rb vb jj . md cs ppss md vb rp np nn cc at nns in ppo . cc nn in pp$ nns cc jj rb in at jj in nn in pp$ nns . in pp$ nns wps hv vbn cs ber vbg rp at cd in jj nns , cc vbg nns in jj in vbn np , np , cc np , in pp$ nn . rn ppss vb cc vbn nns rb nn ( rb nn , ppss md vb jj . . ( nn ppss cd nn ( vb ppo vb . dti nns rb in in rb vb wql jj rb in in hvg jj cc at nn in pp$ nn , cc pn jj to vb ppo in nn , ppss vbd ppss md vb in at jj cc vb at jj nn in at nn . pps bez at nn ppss hv in vbg rp at nn , cc vbg at nn . wrb ppss vb ppl vbg jj in at nn . wrb pps bez at jj , jj np in pp$ nn . wrb ppss vb ppl rb vbg in nn nns , cc vbg rp at nn in at nn ppss vb . cc rb wrb pp$ nns vb abl at jj nn in ppo , cs pps vbz at jj jj nn to vb ppo in rb vbg in at nn , cc rb vbg nns ' in nns rp in in rb , ppss vb ppo jj nn to vb to vb ql rb cs ppss md . dt bez pp$ nn in nn cc nn . in at jj nn np vbz ppl in pp$ nn . ppss rb vb in at nn . ex bez pn jj in dt . cs ppss cc vbd ppo , rb abn nns in pp$ nn , dti nn cc ap , vb ql rb at ap nns in at nn in ppo . ex rb bez pp$ jj nn in at nns , vbd rb in nns cs jj nn in nn nns in in nn nns ppo in pp$ nn . nr cc nr , at nns vb ppo rb . pp$ nn rp in nn bez at nn , wrb dt jj nn bez vbn in nns , cc vbn in nns , wdt at ap nns rb bed rp in nn in nn . vb in at nns in nn in nns rb . vb at nn in at jj np nn . vb in np np in nns np , cc in rb , in np rb . wdt do ppss vb . in in np cs jj nns abn in at nn , vb nns in nns in jj nns vbn in nn nns . dti vbg in at nns . dti vbn in at nn in nns . dti vbg in at nns nns . . . ( nn cd ( in nns in np . dti jj rb in at nn , cs cs vbg to vb at rb jjr nn jj . cc dts ber abn nns . in nn nns vb rp in nn cc nn in in vbn in nns , vbn in nns , vbd in nns . wql rb bez dt . ber at jj nns vbn . wdt do ppss rb . cc nn . rn vb ap nns , vbg rb in at nn , cc rb vbn in at nn . jj . pn md vb ppo cc at jjt nn in at nn . nn in at jj nn in rb nns md * vb . at . ppss md vb rb cs rb at nn cs ppss rb md in vbg in . cc rb ppss vb in in nns in ppo in in nns . np abn , ppss vb in nns cc nns , nns cc nns , in in nr , nr , nr , cc nr . rb rb ppss abn vb . vb ppo , doz at jj nn in at nns in at vbz in abn dts nns vb ppo rb . rb rbr . uh , ppss ber in at nn . in dti jj nn in nns . vb rb dti nn ppss vb , cc cd in cd pps vbz ppo rp in at jj , cc vbz ppo rb in at nn in at nn . ex bez jj in ppo . vb at ql jj in vbn in nns be vbn in pp$ jjt nns in in vb dt nn in pp$ nns , vbd pp$ nns at in vbg , cc pps md rb vb ppo in nn , cs nn rb be in abn dt nn . md ppss rb be nn in at jj jj nn , vb dt nn , cs pp$ nn vb to be vbn in at jj nn . rb , cs at pn vbz , nn cc nn ber vbn in rb . cc rb bez at nn . pps vbz to vb ppo at jjt , jjt , jjt , ql jj nn in jj nn in abn at nn in at np . wdt bez at jjs nn pps vbz . ex vb pp$ nns , dt in at jj nn , cs cs at nn cc at nn bed in . cc rb vbz pp$ nn , cc rb vb pp$ nns . cc rp in rb nn vbz at jj nn . jj in jj nns vbz at jj nn , vbg in vbg nns in nns vbn in pp$ nn in nn nn . cc cs at nn vbz rb vbn , cc cs dt nn in nn vbz rp pp$ nns cs nns in dt nn ' jj nn , cc abn bed jj , cs at nn ' jj nn bed vbn in at jj nn in ppo . vb vb at nn in np , . . ( nn cd ( wrb in nns in nns in nns ppss vb nn in jj in nn in nns in in wdt bez at cd nn vbg . -- in nn in in ex bez * at nn in nn rb . bed np cc at nn in nn , md ppss vb pp$ cd nns to vb ppo . wrb dod at jj nn in np , in rb vbg cd nns in nn , jj cs to vb ppo at nn , wdt pps rb vbd , cc vb pp$ nn in at jj nn in np nn . wrb bez rb at nn jj nn in at nn jj nn in ppo , in dti nn cc ap jj to vb in nn . wrb in pp$ od nn cs at nn , dod ppss ppl vb abl at jj nn , wrb rb vbn cs ppss cc pp$ nn bed rb rp in nn in nn . wrb dod at jj nps vb at nn jj . wrb dod at nps vb ppo at jj nn , cc jj nn in nn . rb abn dt bez * in nn . cc rb jjr at nn in dt nn in nn , wps cs pps md * vb at vbg , jj nn pps vbd in at nn , vbd in ppo cc bedz vbn . cc cs ap nn , ppss ppls vb in abn nns cc nns . pps bez at nn in at jj nn in nn . cc dt bez at nn in ppo abn . rb , wrb ppss vb cs ppss bem in at nn in vbg to vb wrb ppss vb to vb jj in at nns , cc vb to be in jj in pp$ nns , ppss do * vb to hv ppo vbn cs ppss rb vb to vb cs at nn . in to vb cs at nn ppss md nns hv at nn , cc at nn bez cc at nn cs ppss hv pn in ppo . rb , nns vb nn in jj in in vb jj in in nn ' nn nn in nns in in do * vb ppls rb , cs at jj nn . in in at , ppss rb vb cs at nn . cc , cs ppss bem pn in at nn , do ppss rb vb to vb cs at nn , cc at nn , cc at np . nn vb at nn cc nn in jj nns in dts wps vb ppo . in pp$ nn , ppss vb abn jj jj nns , nns , cc nns in at nn rb . pps bez ql ql ap cs ppss md do to vb nn in ppl , in vbg nn in nns , nns , nns , nns , cc wdt * . cc cs in vbg cs nn , in in cs ppss vb ex bez jj nn in dt , at nn beg at nn in nn in nn in nn in in rb , rb , ppss rb vbd vbg nns . in in cs rb vbn , rb jj , cc rb vbn cc vbn , ex bez at cd wps md . . ( nn cd ( vb ql rb , * to vb rb , in at vbn nn cs ppss md . pps bez rp in at jj nns in at jj nps in vbn nns cc vbn nn nn , cs ppss vb at nns in dts nns in pp$ jj jj in nns at nns . ql , wrb ppss vb in nn , ppss vb cs at jj nn , rb cs at nn , ql rp in at nn , rb rb in at jj nn in nn . jj , ppss rb vb ppo in dti , cc vb ppo vb in nn in nn , cs at nn in at np nn . cc in od , dt nn in nn bez jj qlp . pps vbz pn ' nn nn in nn , rb cs ppss vb in at jj vbn nn in at nn , at nn nn , cc np , cc nns . cc ap cs abn , cs rb jj in vbg pp$ nn in at nn in nn , ppss hv ben vbg ppo cs at nn nn , vbg at vbn nns vb in nn in ppo . at nn bez at jj cd , ppss vb ppo , in at nn in at nn , cc vbz at jj nn in fw cc at nps to vb ppo to vb cc vb ppo . cc rb dt vbz rp in nn . wdt in ppo , cs dti jj nns in at nn in nn nns ppo to vb at nn cc vb rp at nns . wdt doz dt nn nn in , vbd , ppss vb , in at nns in at jj nn . do ppss vb at nn np vbz pn at ap in ppo , cs ppss rb cc rb vb cs jj nns in dt jj nn . wps vb at nn . vb ppo cs . uh , rb , wrb at jj nn in nns md vb ppo rb in in wrb ppss md vb cc vb ppo rb , ppss hv at nn in vbg cs pps bez ql jj . cs pn rb bez cd nn cc ap vbn in ap at ap nn in in dtx in at jj cc jj nn in nn , dt bez . cc cs at jj nn bez vbn rb , cc abn nns md vb dt ap ' jj nn in nns , cc be jj . rb , ppss rb vb to vb cs at nn , cs ppss vb at nn in vbg ppo in pp$ nn , cs ppss rb vb nns at ap nn cs ppss rb vbd in . in at jj , nns ppls md vb . cc ex bez abn at nn in at nn in vbg cc beg vbn . at nn in vbg bez rb at ql jj nn cs at cd nn . . ( nn cd ( nns jj in ppo . cc beg vbn , in in wdt md vb in ppo . at jj nn in wdt at nn vbz nn bez ql jj , vbg cs ppss ql rb vb nn to be at nn in abn jj nns , cc cs in at nn md at jj nn vb nn . uh . wql rb ppss vb ppls to vb . rb , ppss rb vb to vb cs at nn , cs in at jj nn cc jj nn in at nn nn . in cs in dt nn , nn nns ber ql ql jj cs nns in jj ( dt bez , cs ppss rb vb at np nn ) , rb in at ap nn at nn in at nn in nn vbz pp$ nn in od nn in at nns in at nn . pps vbz pps vbz ppo rb . cc * rb . in ap at ap nn do at jj vb pp$ nns in ap ap nns , in at ap nn cs at nns ql vb ppo . cc in pps bedz cs cs hvg rb vbd at nn cs at nn nn , ppss md rb vb ppo in pp$ nn to vb in at vbg nn . dt at jj nn nn in at np , wps hvz at jj nn in ppo , cc rb vbz ppo , cc vbz ppo in dti jj nn in -- pps md rbr vb cs dti pn rb . cc , rb , pp$ vbg in dt vbg nn , vbn nn in at jj jj in np wps bedz vbn rp at jj nn rb . pps vbd rp cs at nn in jj nn cc nn in ql jj nns . nn vb ppo cs dt nn in at nn md hv vbn pn cs dt : jj vbn nn in at nn in at vbn nns . vbg nn in cd nns . jj nn in np . cs ppss md vb wrb pps bedz rb cs dts nn nns , at np , vbd ppo rp in dt jj nn in at vbg nn , wrb nns bed vbn rp in jj nns in jj nns , cc jj cc jj nns in jj nns , cc jj nns in nns in in cs ppss md vb wrb dt bedz rb . rb , rb cs ppss vb abn at nns , ppss vb ppss md vb at ap in at nns cc nns wdt beg rb vbn in ppo in jj vbz , vbn ppo to vb rb . . ( nn cd ( vbg at nn ppss dod , in nn ppo in at nn cs pps bedz at nn vbg in pp$ jj jj nn cc vbg nn . jjs in dts nns bedz at jj nn in at jj jj ppl . abl at jj cc jj nn vbd abn pp$ nn . rn at jj cc jj nns wrb pps vbd pp$ nn nn . at jj , jj nns in at jj . dts , in abn at vbg nns in at cd jj nns cc nns , vbd to vb ppo in pp$ nn . in ap nns , rb , jj nns md * hv ben nns . cc cs in ppo , ppss bem vbn in at jj nn in nns jj . nn nn to vb vbn nns , cc nn in jj nns . * vbg wdt bez jj , ppss bem jj to vb at nn , cc md rb be jj in ppo in in md ppss vb ppo in in cs pps bez cc rb to be in jj nns in abn at nns in at nn cd nns in . in nn in dts nns , rb , at vbg nn bedz jj . at jj nn in nns in at nn in nn vbd jj , cc in at jj nns wps vbd ppo in pp$ nn , cd cc cd rb vbd in pp$ jjs nn , jj nns in at jj , cc , jj ap in ppo abn , cd jj jj nn , cs at nn nn in at nn . . . ( nn cd ( . . ( nn np cd np nn in nn ( ppss vbd at nn cc cd in pp$ jj nn in nn , vbd ppo in pp$ nn , cc vbd in nn nn cc at jj . vbg at jj nn in jj np , ppss rb vbd in jj np . pps bedz in at nr nn in np . ap bedz ppss vbn in vbg cs at jj nn in np hvd rb vbn , cc cs at nn in vbg dt nn md vb , cs at vbg nr . ql ql jj nns in at nns cc nns in vbg . . ( nn cd ( vb in dt ap jj np , rb to vb in pp$ nn , pps md ql rb be vbn cs ppss , in cd , hvd at nn in rb vbg . in pp$ nn bedz vbn rp to vb in at ap cs at np nn , cs ex bedz at jj , jj pn in pn vbn in dt jj jj nn , wdt rb vbd ppo . rb cs jj np hvz in rb ben rb vbg at nn in vbg , cc cs in dt nn jj jj np bez rb ap in ppo , cc np bedz pp$ jj jj in in at np in dt np . in in at nn wrb at od jj jj jj bedz vbn . wrb rb cc in np dod dts jj nns , at jj in nns , rb rb rp in nns to vb nn in at jj . cc wrb cc in np , rb , dod dt od jj jj nn vbd rb , ql jj in vbn vb in nns in in rb vbz at nn in in to vb in at nns , in nn to vb wrb ppss bed rb qlp to vb at vb in at fw . rb hvg at nn , at nn , cc rb dt nn vbg in ppo in jj np , cs ppss md vb in pp$ vbn nn , pps vbd at nn in nn wrb ppss bedz to vb cc vb rb . pps bedz at ql jj in vbg , rb , at ql jj cc jj nn , rb jj cc jj . nn vbd at cd in at nn . in jj nns ppss hvd vbn pp$ nn , cc rb vbd rp at ap nns in nn , in in rb , wrb ppss vb , np , vbd ppss in ppl , cs ppss vbd in at nn in at jj nn vbg pp$ nn , cc vbg at nn in at nr in at nn in at nr in in wrb in pp$ nn ppss md vb to vb in at nn , pp$ jj nn , be jj to vb at nn , cc nn ' nn be ql jj . in vbg nns ppss vbd at nns , cc vbd at nn in at jj nn in -- cc pps vbd ql jj cc jj rb . rbr rp , in at jj jj nns in at nn in np nn , ex vbd abl jj nns , cs pps vbd to hv vbn at vbn nn cc nn in in at nn , in rb rb at vbn nn vbd cd nns jj in at jj , nn nn , in in ql jj in ppo , wrb ppss vbd pp$ nn in at jj nns , cs in jj , jj . . ( nn cd ( nn at nns in pp$ nns bed in at ql jj nn . ql jj cc jj , rb vbd ppss , vbg cd nn to vb at jj nn in at nn , cc vb at nns in at vbg nns in . cc vb rp , np , vbd ppss in ap . nn ' nn ppss vb . vb rb in in at nn . pp$ vbn nns ber vbg at nn . ql in ppss vbd . nn rb in nn vbd at nns wps vbd ppo rb , in rb , rb , bed at nn , cs * at jjt nns . abl jj nns . nns in nn , * nns , in dtx nn , cc rb cc rb at nn , cs at nn vbg rb in at nn . in dt nn in at nn , in at ap nn in at nn , cs nn in at nn vbd abn cc vbn . cc rb ppss vbd in at jj nn nn in at jj , jj nn , at nn in wdt vbd rb jj . pps hvd at jj nn , cs cs pps bed vbn in at nns in at nn . rb , vbg , at od nn ppss dod bedz to vb rp at nn in nn in at nn . uh . vbd ppss , uh , cs at vbg nns rb vbd ppo , ber dts nns in dt vbn nn , uh . cc at jj nn , cc at nn in np . -- in dt , rb , md nns be at nn in at nn . wql , ppss vbd ppl rp cc vbg at jj nn in , vbd rp cc vbd at od , jj nn . pps vbd at jj jj nn vbg in nn . at cd jj nns vbd rb in pp$ nns to vb . cc rb , at jj nn in nn bedz vbg at nn in at nn . pps bedz at jj nn . cc at nn ' jj nn bedz in at nn in nn , cc at nn cc vbg cc nns in vbg rb . uh , np , vbd ppss , vbg rp , jj nn in at nn in at nn . vbg rp , ppss in ap vbd in at jj nn in nn * rb in at nns , cc vbd at jj nn in at nn . cc vbg rp , vbd at vbg nn in at nn in at jj nn in ppo , rb vbg at jj jj nn in jj nn , cc dts nns in in in at jj in nn : in in np np . nn . -- in jj . -- in ql jj in dt jj nn , vbd ppss . cc pps bez at jj nn in np , ppss vb , cc ppss vb dt np rb bez at nn in rb . cs at nn vbd ql jj , cc at nn , in at nn , vbd . . ( nn cd ( jj qlp , cc at vbn ql jj nn ppl vbd cs cs pps md hv ben vbn rb in at nns in dti vbn nn , cc cs at vbg nn hvd at nn in vbn nn in nn in ppo , ppss vbd cs rb bedz at ap nn in jj nns , cc at jjt in nn nn . pps bedz at jj nn in nn in in at nn in vbn jj nn , cd nn vbd cs pps bed , cc vbg rp rb . pps vbd in at jj jj nn , wrb dt jj nn np vbd rp at jjr vbg cs rb pps dod in jj np ' rb vbn nn . np , rb , bez at ql jj nn in dti cd in in nns , in pp$ nns in at nn rb vbg in nn . in vbg in dt jj nn vbd np , vbz at jj nn in in in wp$ nns ppss vb at ap nn jj in in pps vbz at jj nn , cs ppss jjt rp in ppo in at nn nn wrb at nn bez abn in at nn , cc cs ppss vb ppo in dt jj nn , wrb at nn bez in abx nns , cc in wdt at nn nn bez at ap nn . jj qlp , vbd ppss , cs dt nn vbd in pp$ nn in in jj nn in nn , ppss jj rb . rb , dts nns ber nns , cc dt nn in pp$$ bez at nn . wdt at nn ppss dod ' nn vb rp at nns cc at nns cs , cc vbd in at jj nn rb cc rb . cc pps ' vb ql jj to vb dti nns rb . at nn bez vbn . at nn bez rp , cc at nns bed vbn rp at cd nns rb . jj np rb , vbg pp$ nns in at nn in pp$ nn , cc vbg rp pp$ nns in pp$ nns , pps md vb rp abx nns in nns , cc vbd at nn in nns in pp$ nn , cc rb wps md * vb rp at jj np . np . vbz jj nns , in pp$ jj jj nn in -- ( pps hvd at jjr cd rb ) in , in . wdt at jj jj nn . wrb np nns . wdt jj nns . vb ppo vb in pp$ jj nn nns in jj nns . vb ppo at nn in vbg pp$ jj nn in pp$ jj nns . cc wdt vbz np . md pps vb pp$ jj nns in vbg ppo rp in at jj jj nns . md * np ql be in np cs rb . md pps * ql rb vbd ppo rp rb in at nn in at nn . rb , ppss . . ( nn cd ( nns . vb rp in at jj nn ppl , in nn to vb rp dt nn . rb , cs np md vb vbn rb in at nn in at nn in nns , dt bez ql jj cs cs at nn md be vbn in cd in at nps . rb nns ppl , pps rb vbz cs at nn in at nn nn vbn in vbn nns , cc beg at nn in at nn nn , pps rb vbz at jj nns in nns . cc at ap in dt nn rb , ppss ber vbg at in vbg , cc ex bez nn in dt rb to vb . vb ppo vb at nn in pp$ vbd nns , cc vb wdt nn in at nn dt jj md be . . . ( nn cd ( . . ( nn np cd np nn in nn ( vbg cs nn in vbn jj in nn , ppss vbd ppl in at jj , jj , vbg nn in jj in vbd vbz , vbg cd in at nns in dti vbn jj nn . rp cd nn vbd at ql jj nn in vbg ql rb vbn , cc at nn jj , cs in at jj nn in nns in wdt ppss vbd ppo , pps bedz rb in jj nn cc at nn in jj nns in ppo , cc jj nn in at nns , cs ppss md dti nn vb in at nn in pp$ nn . abl jj nns in nns cc nns , cs in rb ppss rb vbd dti jj jj nn , in at nn in at jj np vbz , hvd vbn in jj nn vbn . cc in nn in ap cc jj nn , cc rb vbn nns , cc rb in vbg jj at jj nn in at nn in at nn , ppss in ap vb in at nn cs abl at nn , wql jj , md * be ql jj . cc wdt ap vbn cc vbn ppss bedz at jj , jj , jj , jj nn in pn vbg in at . . ( nn cd ( nn in at nn in cd jj , jj , jj nns vbg in at jj nn . at jj , jj , jj nn rb , qlp to vb at jj nn vbd . rb bedz ex at nn in jj , abn in vbn , jj nn in ppo cs ql vbn ppo in ppo , cs ppss rb vbd at nn in ppl to vb rp wdt dt jj nn vbd . rb cc nn at jj , cc , uh , jj nn md vb ppo rp . -- in pps ' vb at jj nn in at nn nn . -- in pps ' vb at jj nn in at cd jj nns . -- in pps ' vb at vbn nn . -- in pps ' vb at np nn nn . -- in pps ' vb at nn in rp in at nn in vbn nn in nn . cc in ap abn dts vbz vbn in dt cd jj pn in at nn ' jj nn . wps rb vbd rp , cc abn at nn bed jj . cc vb . doz pps * vb at jj nn in at jj nn . rb at jj nn ppl . in nn , at nn ' jj nn vbd dt : at jj nn in pp$ jj , rb vbn in at jj nns in ap vbn nns in wpo ppss vbd in at nn . at nn vbz at nn in nn in at jj nn . at nn in vbn nn vbg rb in pp$ cd vbn nns rb jj . cc at vbn jj , vbg to vb jj in at nn , bez in at jj nn in vbg ppl in at cd nn in nns . at jj nn in dt nn bedz vbn abn rp in at jj nn in jj nns cc nns . dti bed rb vbn in vbg nns vbg jj nns . nns bed jj in nns in jj nn . cc pn bedz jj in vbn , in at jj nn vbg rb cs at nn vbn in at jj in jj nn in at jj in vbn jj . ppss vbd cs ppss vbd , cc vbd wdt jj jj cc jj md rb hv vbn at nn in vbg in abl at vbg , jj nn . vbn in dts bed jj jj vbg nns cc nns abn vbn cc jj . dti bed jj nns . in dt rb jj nn , rb rb vbn , cd nns rb dod np np vb cd nns in at nn cc at nn . cc wps vb in in rb cs at nn rb in in bedz vbn in np nns , cc vb rb in in at jj , nns rb vbn rp at nn in np . at jj nn vbd . . ( nn cd ( rb at nn , cc , cs at jj nn vbg in at nn in at nn , vbd jj cd nns , cc in ap bedz vbn vbn in at nn . vbg dt jj nn , cc in in rb jj in vbn nn in in nn in wdt in jj nns md hv ben at jj jj nn in nn in nns abn nn in in ppo vb at jj nn . at rb jjr nn bez dt , in jj jj jj nns rb , cc jj jj vbn nns in , cs ppss md rb vb ppo nn dti jj nn ' np nns , rb in abl at vbg nn , wrb dt nn in vbn jj jj vbd ql rb . rp cd nn vbd at jj , jj , nn in jj nn vbn in vbn nn nns , vbn in jj nns vbd in dt jj nn ' pp$ jjt nns . vbg in at jjr nn in at nn vbz at nn in vbg nn in in at nn in in at jj nn in at ql jj ' nn nn . be cs wrb pps md , rb vbz at jj vbn nn in at jj ' nn nn , ql jj , at nn md rb vb in ppo . in ber jj nns , vbd rb in jj nns , nns , nns . cc in dts nns in jj nn , cs dt vbd np ( in wdt nn rb ppss vbd ppo ) , vbz at ql vbn jj nn , wps , in pp$ nn , rb vbz at nns nns cc nn . np ber at nns in wdt pps vbz pp$ nn . cs jj nns in in in in , at jj nn vbg nns rb vbn rb in at vbg nn . jj nns rb vbd in at nn , vb dts nns ' nns . vb in dt nn , cc pp$ nn bez cc at nn . in dt at nn rbr . cc rb rp in at jj nn in in at nn nn nn , wdt ppss md nn rp in at jj . in vbg at nn ppss vbd at nn in jj nns vbd in at nn , vbg in at jj nn jj nns in nn . nn vbd at nn , cc vbg ppo ppss vbd to be vbn in at nn , vbn in nn cs pp$ nn bedz jj in -- * at nn jj . cc nn , pps vbd , vbg pp$ nn , ppss bez at nns in vbg at nn ' jj nn , hv ppss . nn nn ' vb ppss ber vbg ' at jj ' , cs ppss ' nn rbr vb vbn in dt nn in nn . . . ( nn cd ( ppss vbd ppo cs ppss rb vbd to vb cd in at nn . cs cs ppss md rb do rb , pps md vb in wps at nn md be , cc cs cs pps ( at nn ) rb hvd at ap nn in ppo , cc at nn bedz * rb jj , wrb rb cs vb rbr in at jj nn in ql jj at nn , ppss md vb rp in at nn in dti jj nn ' jj nn . nn vbd rb . abn nr . vb at nn . nn . -- in ppss vb nn . nn ' rb be jj rb . nn vbd rp in at jj jj vb , vbn abn in cs at nn in at nn . in cd nn at jj nn bedz rb jjr nn ppo in pp$ nn in nn , vbg rp cc rb vbg rb in at nn in pp$ nns . pps bedz vbg pp$ nn in at nn in jj nn , cc pps dod ' nn vb ql rb , ppss vbd . in ap dti cd cc cd in ppo bed vbn in pp$ nn in at vbg nn . pps bedz jj cs np in in at nn in abn in in at nn vbd pps md ' nn vb ppo . pn cc cd jj nn nns , dt in at vbg nn . ppss bed vbn in nn in pp$ nn nns , cc vb in pp$ nns nns in vbg nn in pp$ ql vbn nns . cc at nn bedz in at ql jj nn in -- * ap nn cc nns , cc vbz . jj nns . vbz in nn . pn jj nn in at jj nn nn , vbd ppl in dts nns in at ql jj nn . pp$ nn , vbd at nn , ppss ' ppss hv at nn in at jj nn . nn , ppss vbd , cs nn at nn , bez pps . uh , rb , vbd pps , vbg at nn in rb jj , at nn bez at jj jj nn . pps rb vbz nns , pps nn ' nn in -- pps vbz pn cc nns , cc vbz ' ppo jj . at nn pps doz , vbz ppss . wrb bez dt nn . bez pps rb . pps ' rb be rb in jj , bedz at nn . nn md * vb ppo , cc ppss vbd to vb jj in dt jj jj nn . in dti nn , ppss vbd rp pp$ nn cs cs pps rb vbd rp cs ppss md vb rb , pps md vb cc vb in nn cs ppss dod . . . ( nn cd ( nn rp , at nn vbd rb in at nn in nn , wrb , vbg * wdt rb to do in ppl , ppss vbd to vb at nn in at nn cs at nn in . rb at vbg nn bedz vbn in . vbg rp , at nn vbd , dt ' np at nn ' jj nn . nn nn pp$ vbn in at nn dt nn . at cd nns ' nn , cc at jj nn . uh , nns . rb ppss ' ppss hv at jjt nn in at nns . at nn in nn nns bedz vbn in at nn . at nn bedz vbn jj , cc in vbd at jj nn in nns ap . vbn in pp$ jj nn nns , cc in pp$ nns vbn in jj nns , abn ql cc jj , cc pp$ nns jj in nns , ppss vbd at nn in vbz in np . ppss hvd rb vbn in pp$ nn , cc dt bedz at od nn ppss vbd . at nn , rb , cs ppss vbd at jj nn in at jj ' nn nn in in at nn in in wrb at vbn ql jj np , rb vbg , rb vbd ppo rp nns abn nn . pn vbd in at jj nn in pp$ nn , in wdt np vbd ppo at nn in jj nn in nn cc nn , wdt pps vbd bedz at jj nn in abn nns cc vbz rb , rb nn in wql jj vbg , cc cs vbn in at nn in np , cc in at nn nn in at nn in nn . at nn rb vbn in pp$ nns , cs pps rb doz rb in at jjt nns rb vbd in nn , cc ppss vbd vbg in ql rb . nn vbn , rb , cs pn in ppo vbn ql rb , cc cs pps vbd jj * to vb at nn in pp$ nns in pp$ jj jj nn , rb in at jj pps vbd in vbg ql ap nn cs at nn . dt nn vbn ppo in rb . cc cs at nn in nns hvd vbn cs pps md rb vb pp$ nn ( cs cc at vbg in nn cd , ql rb cs dt nn bez vbn ) , ppss md rb vb in at jj nn in ppo . pps vbd jj cd nns in nn , in jj nns , cc at nn cs at in in nn . nn hv rb vbn jj jj in at nn . pp$ nn bedz ql jj cc vbn , vbg pp$ jj nns vbg in at nn . cs in at jj nns in pp$ nns vbd dti nns wps dod * vb to vb ppo ap nn . pp$ nn in rb vbn . . ( nn cd ( cs pps bedz at nn , cc in pp$ jj nn , ppss vbd pps md be cd in dts jj nns in at jj nn in np . wrb at nn in pp$ nns hvd vbn in pp$ nn , dt nn vbd rb jj , cc ppss vbd at ap in ppo cs pps vbd pp$ nn in at nn . in at ap nns , rb , pps bedz vbn in pp$ nns , cc beg , pps vbz , in dti nn at jj nn in ppo , ppss vbd at nn in np . np . wrb ' np np . cc vbd rp in at nn in nn in ppo . pps bedz rb in cd nn ' nn , cc at nn vbg ql rb jj in dts nns , ppss vbd to vb ppl in at jj nn wps hvd vbn in ppo rb jj in at nn in at nns . at nn vbz to vb cd in at nn . in nn , ppss md at jj nn in * vb in pp$ jj nn . nn nn ' nn vb wrb pps bez , cc nns vb to be jj wrb ppss ber vbg . cc wrb pps vbz in vbg in at jj nn , in at jj nn , in at jj nn , cc dt nn at nn , rb pp$ nns rb vb . cc bedz ex dti jj nn wrb ppss cs at nn md vb cd in at nn , ap cs pn rb . in nns at ap nn cd in at nn in nn , cs nn nns do rb . to be jj ppss abn vb rb in cd nn , cc ppss hv pp$ jj nn , cc vb ppl in pp$ jj nn , cc nn in pp$ jj nn . at ap ppss vbd rp dt nn , at rbr ppss vbd at nn in vbg in ppo . pps bedz jj to vb cs beg at nn , pp$ nn cc jj , cs at nn md be , md * be in at jjt , rb pn in at jjt . nn vbd in nn abn rp . rb , pps bedz vbg rb , cc pp$ jj nn md to be nr cc vbg rb . vb rb , pps md vb rp in ppo in nn in in wrb md ppss vb in wdt jj nn pps hvd ben vbg . nn . nn ' ppss vbd pp$ nn in dt nn . -- in ppss fw ' nn nn in ppo . nn ' ppss vb at nn rb . rb cs ppss vb . nn ' in jj nn nn vb ppo at nn in at nn , cc pps ' vb at nn jj nn rb in in nn in at nns cc nns . cc vb at nn , np . ppss ' jj . . ( nn cd ( vbd at nn ' jj nn rb in at nn in in nn , ppss vb , cc ppss ' ppss vb ppss jj qlp . ql vbg pps vbn at nn . cc in pp$ jj nn nn rb vbg at nn , rb vbn in nn rb in pp$ nn , at nn vbg cs at nn . at nns vbd jj cc jj . cs in ap at nn in nn vbd vb in at jj nn . at nn bedz in nn pp$ nn , cc ppss vbd ppo in nn ' jj nn to vb in in at nn bedz jj qlp to vb ppo , cc ppss dod * vb wrb abn at nn in at nn md vb vb rp in at nn nn . ql vbg rp at nns in dt nn , cc vbg ppo in at jj nn in at nn in at nn , pps vbd in pp$ nn , cc vbd ppo in at jj nn . nn rb vbd at nn in at nn , cc vbd cs pps bedz at nn ql jj . cc dt md be vbn in at nn . cc pps bedz at nn ql jj , cc at ap nn in at nn bedz rb cd nns jjr cs at vbn cd in in cs ex bedz at jj ppo . nn rb vbn at od nn rb in at ap jj nn in at nn , vbg at jj nn in , in pp$ nn to vb rp in . cc ppss rb vbd cs ex vbd abl at nn in jj nn in ppo in in at nn in at nn , cs dt nn md rb do in abn , rb cs dt nn in at jj nn vbd at cd in at nn , cc abx rb vbn at nn in jj nns in at jj nn in at nn wrb ppss hvd vbn to vb at nn . at nn vb dt nn , vbd ppss , cc vb , md ' nn ppss vb at nn in ppo in in vb pp$ nn rb , cc vb in pp$ nn , * to be vbn in at ql jj nns . pps vbd at jj nn . cc in od nns ppss vbd ppo . in wps md vb cc wdt at ap nn , ql rb cs ppss vbd rp in at nn , at nn md be vbg in at nn , abn jj to vb ppo rp . rb , vbg in ppo rb , cc vbg at jj nn in vbg at jj nn cs in dti ap nn ' jj nn , ppss vbd to vb cs cs abn ppss md be vbg jj nns in dt jj nn . vbz ppss , ppss ' ppss vb rb . pps md be vbg rp in jj . nn ' ppss hv at jj nn in ppo rb , cc rb ppss md vb jj jj nns in abn in in rb ' np at nn . . . ( nn cd ( cc cs at ap nns vbd vbg rp in nns , nns , cc nns , cc vbg in nn , cc at nn in pp$ nn . nn . vbd ppss , wdt nn in at nn bez pps in in doz pps rb vb jj jj nns . pps bedz rb jj in cd nn ' nn . at nn vbd rb in pp$ jj nn , cc vbd to be rb vbn in pn in pp$ nn . ql , pps vbd , rb pps ' vb at jj nn in in vb in nn cc vb to vb in in rb , pps ' vb at nn wdt vbz at nn . -- in cc in in nn pps vbd rp at nn , ppss vb , cc ppss nn ' nn vb wdt in nn vbz ppo ql rb , cs , md be , pps md ' nn vb pp$ nn . md ' nn vb pp$ nn . -- in wdt nn in at rb nn bez dt ppss ber vbg ppo . vbg in at vbg nn . do ppss vb to vb , nn , cs dt nn bez rb vbn dt vbn nr nn , cc rb nr nn , in nn pp$ nn in dt nn . cs ' vb rb ppo , vbd at nn , cc ppss vbd ppo pps md ' nn vb ppo rb , at nn ' in jj . in wdt . vbd ppss . in nns to be jj . jj ' nn rb ql ap nns in at nn . nn vb ppo wdt pps bez , nn , vbd ppss , ql rb , ppss ' nn rbr vb vbg dt nn in ppo in in ppss ' rb * jj . md be * , vbg rp at nn cc vbg at jj , cc ppss rb vb ppo ' rb be vbn jj cs cs cs nn vbz ppo at nn ' pp$ nn . nn ' ppss vb ppo in ppo , vbd ppss , rb vbg in at nn rb in dt jj nn in at nn ' nn . ppo ' np vbd at ' jj , vbd pps . vbd , vbd ppss in in vbd , do ppss vb . nn , cc cs ' np at ap nn pps md ' nn vb ppo , ppss vb . nn , vbd ppss , vbg rp in ppo cs jj cs nn . nn in at nn nn , in in nn , vb vbg . ppo cc ppss md vb cd dt , cc cs rb in nn . nn vbn in pp$ nn cc vb at nn . ppss vb ppo ppss md rb vb ppo abn at cd . cs at ap nn vbz in at jj nn . cc in dt nn , wpo ppss hv * rb vbn , ppss vb in vbg ppo at ql vbg cc jj nns , vbg to vb in ppo at jj nn in at nn wpo . . ( nn cd ( ppss vb in pp$ jj in in at nn in nn , nn , wdt bez at jj cc jj cd in at jjt nn . nn rb nn in ppo to vb rp cc vb ppo wps cc wdt dt nn bez , cc cs ppss md be in abn nns jj to vb at nn in ppo . cc in at od nn , ppss md be ql jj cs in nn cs nn in vbg pp$ nn , wdt cs jj ppss vb to be jj nn cs dt nn bez ql jj , cc ppss ' ppss at nn in vbg in at nn . cc ppss , nn , ppss ppss vb , nn , ppss , nn , in vbg to vb ppo to do ql rb , md rb vb ppl jj in at jj nn . nn , vbd at nn , vbg at jj nn , cs ' np at jj jj vb in at nn wps vbz at ql rb cc rb . cc be jj , be jj , dt rb nn ppss hv ben jj ' ppss in hvz rb vbn in at nr nns , wrb pps vbd rp at nn in ' vbn jj np nns ( jj nns , ppss vb ) , cc pps ' np vbd abn in ' ppo cc cd , cc cs pn pps ' vb vbg to vb in in nn , nn in in nn ' rb nr , cc pps md * do to be jj ' jj nns in at nns wrb nns bez vbg ' in nns . pps vbd to , ap nr , cc ppss vbd ppo rb cs pps bedz vbg ' rp in at nn in cd nns vbn in at nn , in abn at nn cs at nn in nns . dt nn vbd rp at rb jj nn , cc vbd cs at nn , in abn , hvd hvn at nn in vbg ppo in -- cc in at ap nn wdt md ppss vb in at nn wps vbd rp at nr nn jj in at jj np , vbn in abl at jj nn cs vbg at nns in jj nns . vb in ppo , nn , cs nn bez at jj nn . pps vbz nn ' jj , bedz at nn . cc vb , pps ' vb vbg jj jj , ppss hvd rbr be vbg nn in in ppo ' in at jj nn : nn cc ppo vbd in dt cs nn at nn ppss bed vbn . ex ' jj nn nn in cd to vb rb in dt nn . pps ' vb at jj jj nn cs . wrb , rb ppss vb ppo rp , np vbd to vb pp$ np cc ap np in at nn in ppo . cc ppss vbd at vbg cc vbg in cd nn , cc rb , np vbd vbn in at nn , cc vbd in vbg pp$ nn . cs . . ( nn cd ( cs , np vbd pps md ' nn do . vb rb rb , ppss ' ppss vb ppo at fw in at nn . cc rb vbg pps vbd at nn cc vbd ppo in ppo , vbg to vb at nn . cc ppss vbd jj . wrb vbg in at nn in at nn , pps vbd ppss vb ppo ' nn nr in in ppss vbd ' nn vb dt nn in in nn . pps ' ppss vb in nn rb in in vb rb rb . do vb . vbn ' nn ppss vb . nn vbd at nn at nn , cc rb rp nns ppss vbd , cc ppss bedz vbd in at jj nn , jj cs at nn , cc vbn , jj qlp , in at jj nn , ql jj qlp rb in dti cd nns to vb rb . ex , vbd at nn , vbg at nn in at jj jj nn nn wps dod jj nn cs at nn in nn cc nn nn . rb , vb ppl jj rb , cc jj nn in ppo . nn vbd rb in vbg at nn , cc pps hvd vbn . vbg rb at nn , ppss vbd in at nn . cs pn in at ql jj , pps rb vbd at nn ql rb . nn rb vbd in at nn . cc in at nn cc nn nn , md vb at ap nn vbg in at nn , cc at jj nn , at cd nns , cc at vbn nn vbg at nn vbg at jj . in nns * rb vbg in at nn , ex bedz at nn vbd rp , cc vbn in at nn in cd nn . rb at jj nn ' jj nn , vbg at nn ' jj nn , at nn in nn in at nn nn . rb , ex bedz at nn in jj nn nn nns in at nn in at nn in nn , cc at jj vb vbg in at nn in at nn . cc wdt bez dt in at nn . nn vbd ppo rp , cc vbd ppo rb in at nn , cc vbd ppo , cc vbd ppo , cc vbd at nn jj to vb in dti jj nn in ppo . nn md vb ppo in pn cc at jj nn nn , vbn in at nns in ap vbg nns pn cs at vbn jj nns in at jj nn . ex bedz at nn cc nn in at nn in dt nn , cs ppss vb at ap in jj jj nn . cc md ppo be jj cs dti jj nn md vb in at nn nn , cc nn at nns in dti jj nn in dt nn in nn . nn vbd ppo rp , to vb ppo , cc pps vbd ppo rp cs at nn , beg ql jj cc jj , cc ppss vbd at ql jj , cs cs dt . . ( nn cd ( jj nn hvd ben vbg ppo in at jj nn . nn vbd rp in ppo in at nn in nn vbn in at nn , cc ppss rb vbd abl at nn in pp$ nn . nn vbd ppl rp in ppo in abl at nn cs ppss vbd ppl at jj in at nn . nn vbd rp in at nn in at nn , cc vbd vbg in dt nn in nn nn , cc pp$ nn nn . cs vbg dti nn in at nn in nn , ppss vbd rp cc vbd rp pp$ nn nn , cc rb vbd in at nn in at nn nn . nn rb vbd rp pp$ nn , cc vbd at ap ap in pp$ nn nns . cc vbg to vb ql jj rb , abn vbd cs ppss bedz , cc vbg wdt at nn vbd in at nn ' cc * vbg nr in abn dt nn , pps beg ql ql jj , ppss vbd at ap nn , cc vbd rp in pp$ nns cc nns , cc rb vbg rp at nn vbn in nn , cc vbd ppl in at nn in nn . cs dt nn bedz vbn in nn in nns cc vbn nn , ex bez at nn , cc ppss vbd in at jj nn , cc md * vb in at jj nn . in ap ppss vbd rp in at nn vb , cc hvd ql rb vbn at jj nn in at nn in np , wrb ppss vbd at jj nn in at nn , cc vbd at nn in nn vbn in at nn in in at nn . nn vb ppo , vbz ppss , wps md be at nn , at jj nn in nn . cc ppss vbd ql rb , cc vbn * to vb at nn cs vbn in . vbg at nn in cd nn , cc cs jj jj np nn in at ap , at nn vbd at nn , cc in vbg in at nn , vbd pp$ nn at jj nn rp in ppo in at nn in cd nn , cc rb vbd vbg rb in at vbn nns in at jj nn ppss rb vbd in cs beg in at nn . nn bedz abn nn to vb pp$ nn , cc pps vbd pps vbd in dti nn cs vbn in vbg at nn ' jj nn . dt vbn , rb , pps vbd rb in in wrb , jj nns . wdt at nn . abl at nn . pps bedz in at jj jj , jj nn , rb cc rb vbd rp in jj , jj vbg nns . rb , pps ' vb rb cs ppss vbd , pps ' vb at jj jj . pps ' rb ben in at nn , vbd rb vbn , cc rb pps bez , rb in at nn . cc in dt nn pps vbd to vb pp$ nn rb in at nn , cs ppss rb vbd ppss md * be vbg in nns in abn , . . ( nn cd ( dts jj nns in pp$ nns . ppss bed nns in dti nn cc ap . in rb ppss vbd * wdt to vb in dt . cc rb at nn in at nn vbd in ppo . nn vbd at nn in at jj nn in in at nn rb in in wps , vbg in at nns , hvd ben vbn in ppo . nn vbd cs dt nn , in at nn in pp$ jj nns , md hv vbn in at jj nn . cc wdt bez ppo , vbd ppss , in abn . ppo ' rb rb pp$ nn . at nn md be jj in dti nn in nn . cc rb , wdt to vb in pp$ jj nn , cs nn in ppo , ppss vb , vbg rb rb , cc ql jj in at nns in nn . to be jj , pps md be pn in at jj nn in jj nn . cc ppss rb vbd in at jj nn ' jj nn at jj nn in at jj jj cd . wql , ppss hvd rb ben in at jj nns . cc rb at nn rb vbd dts jj nns in at nn . rb , cs abn dts nns bed vbg in ppo cs nn , dt nn rb vbd ppo in abn . cc , cs dti nn hvg vbn pp$ nn , pps vbd vbg in ppo , cc rb vbd rp at nn in nn , cc at nn in nn nn in at nn in . vbg dts in at jj nn in at nn in at nn , pps rb vbd at jj np nn in in at jj nn ap in in cc vbn ppo rp in at nn . pps rb vbd rp pp$ nn in in at jj nn nn in in wrb ppss vbd rb vbg rp in jj nn . ex bedz at nn in pp$ nn in in pn to vb in in ap in in pn cc at jj nn in nn vbd rp in pp$ nn . pp$ jj jj nn rb vbd in abn at nn cs at jj nn . hvd * at nn vbd in ppo cc at nn , ppss md hv vbn rp in ppo rbr cs rb ppss vbd at nn . rb cs pps bedz , ppss vbd pn in vbg rp in at nn , cc pps bedz at od nn rb . nn bem at nn , cc wdt to vb in dt nn in nn jj nn rb vbd pp$ nn . nn bez at nn in nn , cc beg ql jj cc vbn in at nn , nn vb nn bedz rb ql ql jj in ppo cs cs pps bedz at nn ppl wps hvd rb vbn in pp$ nn in at jj in nn . in nn , ppss bedz ql jj in ppo cs ppss bedz * nn qlp rb rb to vb ppo , cc vb at jj nn in wdt vbd jj in ppo . . . ( nn cd ( rb , pps vbd at nn in vbg , cc in ap vbd pp$ nn cc nns . cs ppss vb , dts vbn nns in ppo bed vbn in at ap nns cs pp$ nn . pp$ nn , rb , bedz abn in at ap jj nns . pps vbd to hv ben in at cd nns ' nn , cc rb vbn in ppo in at vbg in nn nn . ql rbr , pp$ ap nns bed vbn , cs cs at nn in jj jj nns bed vbg rp at nns in jj nns . pps bedz rb ql jj cs pps md be dti jj jj cc ap vbn rb in at nn in at jj nns , cc rb vbd in dt jj nn . nn jj to vb in ppo . at nn in nns rb in in rb at nns in pp$ jj nns . pps md vb at nn in pp$$ in in nns . vb in dt nn . cc ex bedz at nn in vbg , in rb at jj vbd in pn wps rb vbd pp$ nn , cc vbd ppo cs pps md rb be at jj . vbg in pp$ jj vb , cc vb , cc pn , wdt pps hvd rb vbn in at nn , pps vbd in at nns , cc vbn in nn at jj jj jj nn in at nn in pp$ nn , cc rb at nn in at cd nns ' jj np nn . vbg at vbn nn , in rb ppss rb vbd cs dt jj nn bedz at jj nn vbn in dti jj nn . cc vbg cs pps bedz * in abn nn , cc cs pps vbd at jj nn cs vbn nn , ppss vbd cs pps md be pn in at jj nn , wdt rb pps vbd to be . in rb at jj vbz rp in at jj nn , cc vbg at vbn nn in nn , vbz rp dt ap jj nn , cs at vbg , in at nns . at nn nns cc abn at nns rb bed ql jj , cs cs ppss vbd dt nn in nn vbd at ql jj jj nn cc nn in pp$ np nn . nn rb vbn pp$ nns rb in at ql vbn nn , nn cc jj in nn nn in in to vb wdt bedz ap to vb . od pps vbz in at jj nn in nns rp in pp$ vb nn , cc vbz ppo rb in at nn . rb vbg at nn in nn nn in nn cc vbg at nn in at nn , pps vbn at nns in at jj nn . rb , cs ap jj nns in at nn , cc rb jjr . . ( nn cd ( nns in pp$ nns ( wrb pps vbd to be jj ppo rb ) , pps in ap vbn in vbg rp at nn . rb vbg rp at nn cc nns at jj , pps vbd at jj nn in ppo in at ap jj . cc at jj nn dod * vb to vb jj jj nn in nn in abn . pps rb vbd pp$ nns . abn dts jj nns bed vbn in jj nn jj nns in at nn , wps vbd to be vbg in at vb in nn cc rb vbg dti nn jj cc ap , in wdt pp$ nn vbd rb in at ql jj nn . in ap jj at nn , pps vbd at nn rp ql rb , cc vbd ppo rb in pp$ vb nn ql rb cs cs pps bed at nn nn at jj jj . abn dts jj nns vbd pp$ nn , cc vbg ppo rb vbg jj nns in vbg pp$ nn nns , cc vbg in nn in ppo , ppss vbd pps bedz jj nn , rb cc rb , cs at nn bedz vbn rp , to vb at nn in wdt ppss hvd ql rb ben vbn . cc at nn ppss vbd in vbg wdt to vb , bedz at jj cd . vbg rp pp$ nn in at nn , pps vbd at nn in ppo in at nn , cc rb vbg ppo in at nn , in pp$ nn in at nn , pps vbd rp jj nns in nn nn . at ap nn at nn bedz vbn , cc dt jj jj , nn in pp$ nns , vbd in nn in ppo . nn vbd rp , ppss md * vb ppo rb . cc vbg at jj nn in nn pps vbd vbg ppo . vbg rp pn , ppss vbd * wdt , ppss vbd rb in ppo in at nn , cc rb vbd ppo , wps cc wdt pps md be , to vb jj , cc vb ppo vb rp cc vb at nn rb . cc pp$ jj nns vbd ppo in rb cs pps cc rb vbd pp$ nn . wps in nn np ppo . -- in pps in ap vbd in in ppo rb vb in nn , vbn in ppo , ppss vb in nn . cc rb vbg at vbn nn vbd vbg in ppo in at jj . nn , in np ' fw fw , np np . vbd ppss . nn . vb . nn . nns . vb ppo . vb in nn . vb in ppo ppo wps in ppo be , cc nn in ppo , ppss vb in nn . rb vbd at jj , cs pp$ jj nns in at nn vbd at jj nn nns in ppo cs ppss vbd . . ( nn cd ( pp$ nn md vb in nn . cc vb nn , in dt nn at nn vbd in at nn nn in nn , cc vbg in at nn ppss vbd rp in ppo . nn ' nn be jj rb , vbd pps , vbg rb . np rb md ' nn nn at nn in pp$ nn . vb pp$ vbg , vbd ppss , cc wrb dod ' nn ppss vb ppo cs dt jj nn bedz at jj . nn vbd ppss vb ' vb ppo . in in dod ' nn ppss vb ppo , pps bedz jj ' nns in nn . -- in cc vb nn rb cc vb to vb . np , vb rb in in ppo nn ppo , ppss nn ppss in in dt nn nn ppo in in ppo nn . ppo nn nn in in vbd np , vbg rb in pp$ nn cc vbg rp in nn . ppss vb in , pps vbd , vbg in ppo in pp$ nn , cc vbg at nns in cd nn . pps rb dod dt in * rb at jj cc at ql jj cc jj nn . nn vbd vbg in ppo at nn . in abn pp$ nns pps bedz in at jj at jj , jj vbg jj . wdt ' in abn dt nn ppss hv ben vbg rb , vbd nn in ppl in in at nn ' in at jj beg rb cs ppss bem : pps hvz rb ql ap nn to vb ppo , cs ppss hv to be jj in ppo . jjr nn in at jj jj cs at jj jj . nn , vbd ppss , vb ppo to vb pp$ nn rb , cc nn , cc wdt ppss vb ppo . vb ppo to vb vbg , in jj , cc ppss md vb rp in ppo . cc ppss nn ' nn nn hvg at nn vbg in nn in ppo . ppo ' in jj . rb , ppss vb vbn . dt beg vbn in np , pps in rb vbn , cc rb rb vbd ppo to vb in nn in in vbg rp in cd nn ql rb cs to vb in in ppss jj nn at nn in ppo . jj nn , nn , vbd ppss , ppss md vb . nn vbd rp , cc rb vbd rbr in pp$ nn . . . ( nn cd ( . . ( nn nn cd np np ( in vbg ap nn in nn , ppss vbd np ' nn nn vbn in ppo in at ap vbg cc jj nn . ppss hvd rb vbn ppss hvd ben pp$ nn . at nn bedz in nn , jj in jj jj nns in vbn nns cc nns . cc dt nn in pp$ vbn abn rp in at jj jj nn in at nn , at cd nns in wdt bed in cd jj nn in in vbg ppss vb in pp$ vbg pp$ nn in nn rb in nn cc nn , pp$ nn nns rb vbd rp in jj nns in in dt ap nn in pp$ , ppss vb , vbd in abn at nn cs at nn in dt ap nn vbn . qlp , rb vbg in ppo cs at nn dod wrb ppss od vbd , ppss md rb vb ppo in at vbn , ppss rb vbd pp$ nns rb . cc pps bedz rb in at nn in nn cc nn cs ppss md vb cs np bedz vbg ppo . pp$ nns bed jj . vb ppo vb to vb ppo . wrb ppss bedz at nn , ppss rb vb at ql jj nn wps vbd ppo . cs pps bedz at nn cc at nn , ppss rb md rb vb . at nn bedz dt . nn hvd ben vbg rp dti nn cc ap in in ppss vb pps bedz vbg to vb rp at nn , cs nn hvd vbn at jj nn do at ap nns jj . cc pp$ nn wps , rb cc ap , bedz abn at nn vbg ppo , cc vbg ppo in nn jj , in in pp$ nn vbd ppo in at nns rp in at nn cc vbd ppo rp in nn , cs pps bedz rb cd nn ' nn in at nn in at od np , at jjt nn in at nn in pp$ nn . nn vbd rb . cc ex bedz at nn in ppo , ql rp nns ppss vbd in pp$ jj nn in at od nn , vbd ppl ql rb cs jj cs cs to vb nn , cc in at jj nn vbd in at nns . nn vbd rb rb vbg cs cd jj nns md vb cs ppss md vb in at nn . cd nns in . . ( nn cd ( nn . at jj in pp$ nn vbd to vb in ppo . cc pps bedz ql jj rb . at nn vbg in in at nn , cc at jj nn in nns in at nns , cc at nn in jj nns abn in at nn . nn vbd jjr cc jjr -- in in ap ppss vbd rp , vbn , cc rb vbg rp in pp$ jj nns , vbd rp pp$ nn , cc rb vbd ppl in pp$ nns , vbg ppo cs at jj nn to vb ppo at jj nn in pp$ nn . pn rb cc vbg ppo to vb rb abl at jj nn in nn . cc pps bedz at jjt cc ql jj in nns , cc rb ppss hvd to vb in pp$ nn . in ap nns ppss vbd rb jj rb , vbg at jj nn jjr cs ppss hv rb vbn cs , rb in at jjt jj nns . in ap ppss md hv vbn in at vbn nn in at vb . cc rb vbg in ppo in in abn vbn in nns in in ppss vbd pp$ nns , cc at in nn in vbn nn bedz rb vbn in jj nn . rb ppss vbd at nn vbg in abn pp$ nn . pn bedz to be vbn , cc pn bedz to be vbn . cc at jj nn vbd vbn in pp$$ . pp$ nn vbd in at nn , cc at jj , jj , jj nn cc nn , in wdt at nn vbd , vbd rb vbn in pp$ nn . in wdt vbd nns vbn in nns , ppss vbd rb , vbn in at ql jj nns , * vbg to vb rb pp$ nn . rb rb vbg cs cs ppss md cc vb ppo cd ap nn , at jj nn md be vbn . nn vbd * wrb dt nn in ap vbd rb in ppo . cc vbg in at nn , ppss rb vbd ppo abn , cc in nns cc nns cc nns rb ppss vbd ppl in vbg nns to vb at nn . rb , in dt ap nn , ppss rb vb ppl in ppo . rb , vb rb at jj nn , cc pp$ nns in vbg at jj nn in pp$$ bed ql jj , in pp$ nn , in dts wdt ppss vbd in vbg rp cc vbg nn ' jj nn nn vbn in ppo . cc in nn abn at ap nn ' np nns rb vbd , cd in cd , in vbn nn , cc rb ppss vbd rb jj in at jj nn . in cs ppss vbd to vb pp$ nn in in vb pp$ nn nn in in rb , vbg cs pps bedz , pps rb vbd ppo rb , cs cs pn cc nn md vb ppo nn . nn rb vbd to vb ppo in in . . ( nn cd ( np . -- in cc pp$ ap nn bedz at jj . nn rb vbd rp , pp$ nn nn cs cs pps bed in at nn in nn . cc rb vbd at jj nn . vbg rb at nn , ex vbd at nn vbg in at jj ' nn nn , cs cs pps bed at nn in vbn nn . at jj nn , rb , vbd ppss . rb rb in at jj nn in at jj nn , in at jj cc at nn . np . -- in in at nn in nn , np , nn . in nn , in nn in ap vbg , cc jj cc jj nns in at nn in pp$ vbg at nn nn in dt jj nn in nn , ppss vbd in vbg at nn . cc rb , pps vbd rb pp$ nn , vbd ppl abn in cs at np nn rb in at nn , cc vbd rp in nn , jj cs at nn in nn , vbg in ppo , cc vbg pp$ nns cs cs pps dod * rb vb wrb ppss vbd to be rb , cs at jj nn in vbg pn in ppo vbd rb vbg in ppo . rb , ppss vbd rb vbg ppo , hvg at jj nns rb , cc vbd in rb vbg ql jj at nn . wrb , in ap , pp$ nn vbd vbn rp vbg at nn in pp$ jj , cc pps vbd , cs pps bed , vbn in at nn . pps vbd rp in at nn , cc in ap nns cc nns vbd ppo to vb cs , cs pps vbd ppo , pps md vb rb cc rb vb ppo to vb rb , vbg at jj nn in ppl . vbz ppss , np , in at nns , dt bez at ql vbn nn . cc , at nn bez , dts nns hv at jj nn in nn , vb wdt ppss md . pps bez jj wrb rb jj ppss ber . nn vb dt jj nn in np , cs pps vbd ppo in ql ap nn cc nn , cs ppss bedz jj in jj nn . vbg in ppo in at nn , cc vbg abn pp$ nn nns . in at nn pp$ nn vbg at jjr in pp$ vbg . rb , at nn cs np ppss nn ' nn vb at nn , pps cc pp$ nns bed rb jj jj in . pps vbd vbg in nn in vbg pp$ nn nn , at ql jj cd , in at in , cc rb in in rb in pp$ nns in in pps vbd rp pp$ nns . wdt in at nns pps dod ppo in , ppss md vb , cc pp$ ap nn bedz to vb ppl in in nns in nn , cc nn in in in in at nn . wrb , in jj jj . . ( nn cd ( nns cc nns , ppss vbd pps bedz jj in nn nn ppl . cs in at nn in nn cs ppss rb vbd in , bez dti nn vbn to be jj wrb vbg in pp$ nns . cc np , do ppss vb , bedz at nn in at nn nn in in dtx nn cc nn . pps bedz rb qlp vbn to vb rp pp$ nn in at jjt jj nn . pp$ nn bedz * rb vbn . pps bedz at nn . cs pps hvd * ben at jj nn vbn , pps ql rb md * hv vbn ppl in nns in abn . cc rb , cs pps hvd * ben rb at jj , pps rb md hv vbd in vbg in at nn to vb ppo rp . in ap , pps vbd in pp$ nn ql rb vbd cc vbd rp in pp$ nns , cc vbd vbg cc vbg in at nn , cs cs , * beg ql vbn in nns , pp$ nn in jj , vbn nn nns in in rb * vbn to vb dtx in in rb vbn cc vbn ppo in at od vb rp in at jj jj nn . vbg , rb , cs ex bed at nns in at nn , cc cs at nn beg ql jj , at nn in vbd at jj nn in at nn , cc vbg ql cc ql at jj nn cs np vbd , ql rb in ql rb cc pp$ nn cc nns in . ppss vbd ppo ql rb cs ppss md , to vb pp$ nn rb , cc rb to vb in pp$ nns ql rb cs jj . pps vbd , cc rb vbd to vb ppl . in dt nn in at nn dti jj md hv vbn pp$ nn . cc np , in pp$ nn , vbn ppl in vbg pp$ nns in pp$ nn , nns , cc nns . pps rb vbd pp$ nn , cc vbg rp at nn in jj nn in at nn in nn nn in nn , vbd ppo in nn cc vbd vbg pp$ nn . nn bedz vbg to vb wrb pps vbd pp$ nn , wrb uh cc vb , pps vbz at vb in at nn nn , vbz rp at jj jj nn , vbz at nn , nns ppo at ap in pp$ nn , cc vbg rp in at nn in nn in at nn , vbz at jj vbg , cc rb vbg in pp$ nns . vbz ppss , np , dt bez vbg np ' rb jjt nn in at nn . rb ppss vbd at ap in dt nn wrb ppss vbd to vb in wdt jj nn at nn in at nn bez vbn , cc wql ql jj at jj jj nns ber rb vbn . . . ( nn cd ( at nn in pp$ nn bedz rb vbn , cc pps rb vbd rp in at nn , vbn rp in pp$ jj nn nn nn , cc vbg pp$ vb vb at nn ' jj nn . . . ( nn cd ( . . ( nn hv cd nn ( ppss rb vbd nn , cc vbg in at nn in nn vbd at vbg nn ql rb . nn vbd at nn in ppo , cs pps hvd ben vbg in ppo * at ap in at nn in pp$ jj . wql , at jj nn bez at ql jj nn , cc ql ql jj at jj nn . at ap ' in at nn . ql , cs dti cd nn , in pp$ jj jj nn , vb nn in at jj nn in pn , vb ppo * be rb , cc vb ppo rb vb ppl to vb cc be vbn in dt nn . cc at nn wps hvz pn rb jj in ppo , be jj ex bez ap in dt nn cs ppss rb vb in . at nn in nn bedz rb jj in at nns wps hvd ben vbg in at nn jj , cc wpo ppss hvd * ql rb hvd at jj nn in . ppss bed rb abn nns . jjs nns , cc od nns , cc od nns , cc nn nns , cc nn nns , cc nn nns , cc nns , cc nn nns . at jj cc jj nn , in jj nns . at nn , jj nn , abn vbg nn nns in nn nns . ppss md ql rb vb wql rb dt pn hvd ben rb . dt jj nn ' in jj nn bez cs at nn in vbn nn in nn , cc md vb to vb ql ql jj . pps md hv ben cd nns vbd in pp$ jj nn . dt nn in ppo vbz at ap nns jjr . ppss md vb at nn in nn nn bez in ppo . in at nn in at od rb vbz at jj jj , cc rb vbn rb . pps rb hvz jj jj nns rb . cc wps md vb at nn cs . . ( nn cd ( np . wdt , vbn in jj nns , vbd cs at nn ' jj nn , to vb rb in cd nn , vbg nns , nn in nn . nn , vb . rb vbd at nn , jj jj at nn , cc in ppss vbd in nn . ppss vb cs nns wps hv vbn at nn , rb vb ql in nn in nn , ql nn -- vbd in nn . * rb , cs : np , at jj jj np nn , cc nn nn , at jj cd . in abn nns , ppss vbd at ap nn in at nn . cc rb at jj nn in np in at nn vbn in nns cs np dod , cc at vbg at jj jj nn in at jj nn , in at jj nn in np , wdt bedz at nn in jj nn ' np nns in in dt nn in nn , ppss vb , md * be at ql jjt nn in vbg at jj jj nn . rb , in at ap nn , cs nn in nn bez to be hvd rb . dts nns rb rb ber vbn in at nn cs cs ppss bed abn vbn in at nn , cc ppss bedz vbg to vb dti jj nns in vbg . in pp$ ql jj nn , rb at nn vbd at jj nn . cc * rb cs , cc ppss vbd vbn . rb , rb bed at nn in nn in nns , ap in wpo in at jjt nn hvd vbn jj nns in at jj nns in in jj nns in ppo in -- cc vbd ppo jj in vbg . cc rb , rb ppss vbd in at jj nn nn in in abn in at ap vbg , abn in nn nns in in vbg rb ql rb in dt ap cs cs ppss hvd rb ben rp in nn in dti nn in at jj nns . at jj nn . dts jj vbz , dts jj nn nns . cc cs in np in in wrb , np vbd rb in ppo in in in at nn in at nn , rb , pps rb vbd . cs jj cs at nn . to be jj ppss md vb ap in pp$ vbg . pp$ jjt nn md * hv rb vbn pp$ vbg pp$ vb in nn in ppo , cc vbg ppo rb in nn . vbg in at nn in ppo , in at jj nn in ap nns , cc vbg at nns in ppo . cc dt bedz rb ql rb vbn in ppo , cc at . . ( nn cd ( cd vbz cs in ap nns ' in nn , to do pn rb bez to do ppo rb . ppss md * vb in abn nn ' np nns rb . wrb pps vbn nn cc jj nns , cc vbd pp$ jj nn in nns , vbn jj . qlp , cs wrb nn bedz rp pps vbd cs at nn in at jj nn , vbd pp$ nn in nn , cc bedz vbg rb rb vbg cc vbg in pp$ jj nn in , wrb ppss vbd rp in at nn . . . ( nn cd ( . . ( nn fw cd np nn ( cs ppss hvd ben vbn in rb vbg at nn in ql jj at nn cs np vbg in at jj nn in at vbn nn , cs nn rb vbn in vbg pp$ od nn nn in at nns in jj np . in nns rb at nns , dti jj nn md rb vb to vb at jjt vbg nns in jj nns . rb in np cc nn nns , np nns md rb vb at jj nns . jj nn bez * jj in np cc nns . cc in np , in at np np , vb nps hv rb vbn at nns . cc jj np vbz abn nn nn cc vbg . in dts ap in vbn nns ppss vb ap nns . cc in jj np , jj nns vb vbg in nn nns . nns rb . ap in wpo rb vb in pp$ nns jj nn . pps vbz at nn nn . cc , in at nns , np , nps , nps , cc nps , cc , in at jj nns in at vbg in nn wdt jj nn in at nns , ppss md vb ap nns rb ql jj , rb ql jj . . . ( nn cd ( ex rb vb in dt nn nns in jj nns cc jj np nns , abn nn in nn cc nn in at nn . ppss ber rb jj , in jj nns . nns wps hv vbn nns , cc rb vb to vb at nn cc vb at jj in nn . ap ber ql jj cs at jj nns wrb ppss vbd . in dti nns ppss md vb ppo cc at ap nns jj . vb rb . dt nn vbg in at nn . pps vbz at nn nn cc nn in jj nn , vbn in at nn in nn cc nn in nn . rn vbz dt in at fw ' in np cc at nn nn . at nn in vbn jj md vb in at nn in vbn cd in in ppss vb at jj nn jj in in at nn cs , in at nn in nns , md vb pp$ cd nns in nn nns in nn in nn pp$ nns . rb wrb at nn jj cs dt vbz ppo in pp$ nn to vb at vbn nn , cc vbz at jj jj in nn , ppss md vb at jj nns pps doz in vbg at nn . in nn pp$ nn in nn , pps vbz nn in nns in pp$ nns . nns in pp$ nn nns . uh , jj nn in nn . wql rb md vb dts nns in at od vbg nn , wrb ppss ber vbn , nns , nns , cc abn , in at nn in at nn . cc vb * cs dt jj nn hvz ap nns , nns , cc nns to vb pp$ nns . * in abn . ql jj np bez at jj nn . hvd pps * ben in ppo nns , cs nn in nn md dt nn rb hv ben in cs vbg nn cs at nn in np . cs pps bez , nns in pp$ nn nn ber qlp to vb cd , ppss vb ql jj . at nn ppl bez rb at jjt nn to vb in , in abn jj np . pps bez at nn in nn , jj qlp . cc * vb nn . at nn , rb , in nn cc nn . at nns do * vb in nn . cc in at nn in nn do ppss vb ppo in jj nns . rb , in nn in dt , rb in abn np md ppss vb ap nn in jj nns . nns cc nns ql jj , cs in jj np . wrb vbd ppss . wql vbn in dt rb jj nn in at nn . vb cc vb in at nn jj nns vb rb jj nn , cc pp$ nn md be vbn . rb . abn dts jj nns cc nn nns vbd in at . . ( nn cd ( np , np , cc jj nns . cd cc abn , ppss bed vbd cc vbd rp rb in at nn in at nn . md np np vb at nn cs dt . in jj np , nns , ppss vb , vb nns in nns in pp$ nns , cc nn in pp$ nns in at ap nns at in nn . ppss md vb in jj np to vb at jj nn . in , ppss vb , ppss hv nns in nn in at nn , cc at nn rb vb pp$ nns in in nns . in nn nn , at nn bez jj to vb . jj in jj nns in in jj nns in jj cc jj . cc in np , jj in nn , at jj cc jj nn in nns , nn in jj , in at nn in in pp$ vbg nn nns in vbd nns . ql jj bez nn . wdt in ap at nn in jj np hvz jj jj nns in nns in at jj nn nns vbn rb in nn ' in jj nn . cc at nns in jj np , ppss vb cs pp$ jj jj nns . cc nns rb vb in nn . cs at jj nn in pp$ nns bez jj cs nn in at od nns . rb vb dt nn in pp$$ , ppss md , vb in np , wrb ppss vb ppo at jj nns vb jj nn , pp$ nn nns vb ppo nns rp nn , cs cs ppss bed vbg rb at jj nps rb in at jj nns . . . ( nn np cd np np ( in dt ap jj np rb vbz at nn ' jj nn , cc ap ber at jj nns , rb vbn in at jj nn cc jj , wps vb to vb at nr nn in at nn . nn bem jj cs ppss dod * . vbg in pp$ od nn nn , ppss rb vbd rp in dt jj nn . at nn hvd vbn in jj , . . ( nn cd ( jj nn , in vbg nn cc nn . vbg ppl in pp$ jj nn in at nn vbn nn , ppss vbd pp$ nn in at jj nn . vbg , ppss vbd at jj vbn nn in nns , cc nns ' nns cc nns . at vbn nn vbd , rb vbn in nns in at nns in at nn . dt jj nn vbd rb vbg rb in at ap , cs cs dt jj nn bed jj cc jj . at nn hvd * rb vbn . cc ex dts jj nns in nns cc nns vbd rb vbg ap nn nns , in jj nns , vbn in at nn in dtx nn at nn . cd in ppo vbd pn cs at vbg , cc ppss do * vb to vb : in in jj in at nn in np nn , wps , in at nn in cd , bedz vbn rb , in at nn in nn , in np , np od , . dt nn bez vbn in pp$ nn in pp$ nn . jj in at nn in np np , np np , np np , np np , np np , cc np vb , vbg cd in at nns ' nns in at nn nn , wps bed vbd rp in nn in at nn , in at rp in nn vbn in at jj , np od , . dt nn bez rb vbn in pp$ vbg nns . . . ( nn cd ( jj in at nn in at jj nn np np , wps in at nns in pp$ nn bedz vbn in at jj nn in at nn in np , np od , dt nn bez vbn in pp$ nn in pp$ nn . vbg rp at nn in pp$ nn in vbn nn cc nn , ppss vbd ppl in at nn , cc vbg rb bedz vbn to vb np in ppo . vbn in at nn in at nn , ex bedz at vbg nn in jj nn in pp$ nn . dt nn bedz at ap nn nn wps vbd to vb pp$ nn . cs pps bedz at ap cd wps md * vb , cc , rb , bedz * vbg dts jj nns in at nn . cs dti in at nns in at nns wp$ nns vbd ex bed rb in at nn , ppss vbd * . cc ql ap ber at vbn nns in at nn , cc ql rb dod ap nns rb vb at nn cs * at nns in dti jj nn , cs ppss vb jj cs rb in ppo bed vbn dts , in wp$ nn nns at nn in dts jj nns rb vbd at jj nns to vb rb . uh . ppss wp$ jj nn vbn in at jj nn . wps vbg in nns md vb in in rb , rb vbz pp$ jj . ppss vb * at nn cs nns in nns cs dts . wdt jj nns in dts jj in vbn nns wdt vb at nns . wdt nn in dts jj nns . wdt jj vbz cc jj nns in at nns wps vb to vb in abn nn , cc vb nns in at nns wps hv rb vbn in at nn . ql rb md dts nns vb in at nn in np ql rb . in wdt nn in vbg nns , at jj in nn ber vbn . wrb pps bez cs at jj nn vbz in ppo , cs . . ( nn cd ( ppss vb at nns , cs vbg ap nns cs at np np . wrb pps bez dt in pp$ nn wps nr vbd in at ap nn , ppss vb ql jj cc jj at nn , cc rb do * rb vb ppo , cs pps cc vbz in at jjt nps in dt vbg nn . wrb at nn nn nns vb nn in nns in nns . in wdt jj , vbg nn , cc jj , jj nn , rb vbz nn np wps vbd cd jj nns rb . wrb pps bez cs ppss rb vb to be vbn in dts wps ppss rb vb ber vbg in jj nn . wrb abn at vbg rb vb in nn abn at jj . in cc at nn in at nn in at nn md vb at jj nn . abn dts nns ber * in pp$ nns . cc np , cs at jj , vbz in at nns , cc rb in dts jj nns pps vbz ppo ql jj nn . pps vbz rb to be vbn , in wdt nns , in at nn in at np nn , ppss vbd dts nn nns , cc in at jj nn in dt vbd , jj nn vbd at nn in at nns wps hvd vbn in ppo , rb , np , at ap nn md be pp$ . cc rb ppss vbd jj rb . jj nns to vb , jj nn in nn , pps vbz in in rb , at nn nn md vb ppo at jj in nn . rb , ex bez nn in dt nn in vbg in in at rb jj jj nn in at nn in nn . cc wdt rb . np ppss hv rb vbn dt nn in nn cc nn . np cs wdt ppss vb pp$ nn rb in nn bez pp$ jj nn . np cs in vbg in nns jj , ppss ber ql ap cs nns vbg at nn in at nn , cc vbg cs jj nn at jjt in nn . np pp$ nn bez cc at nns in pp$ jjr nn . in nn vb pp$ nn wps md , vb ppo ppss vb , pps bez * ppo . cc rb cd nns in np . cc vb at nn nn cc nn nn wrb ppss md , in vb pp$ nn , vb ppl md . . . ( nn cd ( . . ( nn np cd np nn ( ppss hvd * ben vbn ql rb cs at nn in at jj jj nn vbd . rb cs at nn in jj nn vbd rb in vbg ppo , at jj jj vbg in ppo in abn at nn , rb vbn cs dt jj jj nn bedz at nn . rb , pps bedz at jj nn nn , ql vbn in at nns , in wpo pps bedz at ql jj nn . pps hvd ben at nn cc at nn in pp$ nn , cc in ap nns in hvd vbn pp$ nn in at nn . in at nn ppss rb vb in , nn nn bedz in at jj nn in at jj jj nn . dt nn in jj nn wdt vbz vbg in at od nn nn , in in abn at nns in pp$ nns , ex vbd ap jj nns in at rb vbg nn in in at nn vb vbg rb rb in np ' nn nn . at cd hvg rb vbn pp$ nn , md in at od nn vb nn nn in at jjs nn , cs ex bed ap jj jj nns in ppo , jj in dt jj jj nn pps hvd vbn . wrb pps vbd ppss vbd cs pps vbd at nn , cc rb hvd * vbn in pp$ nn , in pp$ nn nn vbd rp in vbg nn , cc pp$ jj nn nn nn vbd rb to vb ppo in at nn in at nn in at nn pps hvd vbn . wql , nn cc nn cc nns bed cd in cd vbn , cc vbd rp in at jj nn in at jj nn . wrb , vbn in at jj nn , pps rb vbd at nn . cs ql jj vbn nns , pps bedz at ql jj cd , cc cs at jj nns in abl at nn md , in pp$ jj nn in at nn , rb vb at rb jj nn in at nn , at nn , pps vbd , hvd vbn in at nn in nn nn , cc vbd at nn in at nns , vbg at jj nn nn , cs dts vbn in vbg . . ( nn cd ( at nn in at nn in nn . at nn in at vbg nn hvd vbn at nn in at jj nn in jj nn nn in nns in dt nn , wdt , beg ppl rb vbn , cc vbn in at nn nn , at jj nn , in wdt nn in nn pps bedz , vbd in at nn in jj nn . vbg in at nn in at nn in at nn , cc in abx nns vbg at jj nns in at nn in nns , nn np vbd at nn rb , cc rb in at ql jj cc rb jj nn , nn in nn , vbd at nns cs cs vbg at nn in nn in pp$ nn . at jj nns in dt nn nn , cs bez rb at nn in vbg nns , bed in nn in vbn nn , rb at nns bed in nn , cs cs in at nn ex bedz at nn . in pp$ od nn in at nn , pps hvd * vbn ppo cs rb jj in at nn , dts nns in at jj nn vbd jj . cs ppss bedz * vbn to vb nn nn in vbg at nn , rb vb rb , cc vbg in at nn , rb vb rp at nn nn in nn , cs at nn bedz vbn in , vbg ppo jj in pp$ jj np . nn vbd dti nn in rb vbg at nn in dt . nn nn vbd abl at jj nn in nn cc nn , cs ppss md * vb ppo in vbg nn in dti jj nns in at nn . ql , vbd ppss , ex md be dti jj nn in dt nn . rb , pps md vb pn jj . md ppo be , rb , cs in dt nn in jj nn , pps vbz pp$ jj nn in at nn , in abn jj jj nns cc nns . rb , in vbd in at nn cc nn in at nn , in at jj nn in np , dt nn , ppss vb , bez at nn in vbg nn in in at jj np , in at jj rb in nn in at nns . cc at nn nn bedz * at ap jj nn in at nn , vbn in at nn ' vb ap nn in nns . in at nn nns in dtx nn in at nn , at nn wdt vbd pp$ nn bedz vbn in at jj nn vbg at jj nn vbg in at jj nn in at nn nn in jj nns cc jj nns . cc jj in at . . ( nn cd ( vbg nn cc jj in vbg nns , ex vbd at jj nn in nn , in wdt jj rb at nn ' jj nn . cc dt jj nn vbd at jj nn in nn in at nn ' np vbd nn , pn cs dt jj nn rb vbn in at nn ' jj nn wrb np vbd . uh , jj nn , at nn vbd to vb , vb rp , vb rp , ppss jj nn , cc vb at jj nn . in uh . at nn bez vbg rp . at nns ber vbg rp in in jjt nn bez in nn . cc bedz at nn ppl in at nn in at ap nn in nn wps hvd vbn at nn cc at nn . pp$ vbn nn bedz in at nn in at nn ' jj nn nns , cc at jj np vbd in at vbg nn in vb nn , vbn in at nn ' jj nn in vbn jj . wdt md be ql jj in nn . -- in in at nn bez rb dt nn ' in jjs nn . abn at nn vbz in pp$ nn . at nn vbz at nn . in rb pps bez at nn in np ' rb jj nn bez rb vbd , cc at nn md vb at jjt nn . in rb pps bez at np in nns jj cc jj bez rb vbn in jj nns . rb , at nn ' in at nn in pp$ nn rp , cc * at nn jj . cc at nn bez pp$ nn . . . ( nn cd cd np nn ( nn np vbd , cc in at jj nn in jj nn vbd at vbn nns to vb . jj nn , rb . nn rb in nn in in jj nn in jj . nns . nns . ex bedz at jj vbg in jj nn in nns in at nns , cc at rb jjr vbg in nns ' in nns , cc abn bedz jj rb , cc at nn in at nn . pps vbd at ap . rb vbg in at nn ' rb vbz , vbd pp$ jj jj nns in pp$ nn , vbd pp$ vbn nns , . . ( nn cd ( cc vbd at nn ql ql jj cs pps vbd vbg cc vbg in at nn in at nn . dt vbd , in vbn jj nns , cs at jj jj in at nn in at nn wps bez vbg in nn in at nn in in in jj nns pps vbd vbg at vbg nn . cc vbg pp$ nn in at vbg nns , vbd rb in at jj nn cc nn in in at nns cc nns in at jj , vbn in ppo at jj nn , cs abn np ' nn nn in vbn nns vbd in , cc vb ppo nn rp in nn . nn vbd at vbg nn in nn , in jj nns cc nns rb . wdt pn cc ppss wps vb md vb in -- uh , ppss bedz vbg to vb . in jj nn , ppss vbd pp$ np , wrb ppss md jj vb ppo pp$$ , pps vbd pp$ nn in pp$ nns in in at ap at jj dod ppo vb . in nn pps vbd in pp$ nn , cs in at jj nn vbn . np , cc jj , cs nn vbd at nn in pp$ np np . pp$ nn in rb md vb dt jj , cs jj nn . ppss vb at nn in pp$ np , pp$ abn at nn cc at nn . ql ql vbn in vbg dt nn , wdt vbd jj in at vbg in at nn . at jj nn vbd . at nn rb vbd in at nns in at np , cc in ap , vbg pp$ nn rp in at jj nn , vbd : jj nns , vb at ap nn in at od nn in np in in cc np hvd vbn at jj nn to vb rp np . nns , dt nn , vbg rb cd nns in in cd nns in in bez cd in at jjt nns in at jj nn in at nns . rb wdt nns in at nn doz np ' rb jj nn nn . wdt at jj nn in ppo bez dt nn . wdt . . ( nn cd ( at jj nn bez cs vb in at nn ' jj nn . wql nn in cs cc rb jj . ppss vb at nns vbg in ppo . ppss vb in ppo in at nn nn in at nns . nn in vb cc abn at jj in at nn bez in ppo . cc wdt bez dt nn cs at nn in np vbz . nns , pps bez at cd in vbn nn . at nn in ppo abn ql jj nns , cc at nn in ppo cs at nn in at vbg np . ql jj nns , pps bez at nn in ppo abn , cs pps bez at nn in at nn , rb in nn , rb vbn nns , at jj nn , nn , nns , cc rb at nn cc nn in np . cs in abn nns in nns , at nn in dt nn in np bedz in pp$ jj nn in at nn in np in in rb vb rb wdt dt nn bedz , cc wrb vbn in in wdt pps vbd at jj nn . cc abn at nns cs np md hv ppo do ber jj in ppo to do in in vb cs in -- cc rb , pps rbr vbz ppo cs nns to vb . cc cs ppss vb np , ppss md vb ppls . cc pps bez in dt vbg ppls , wrb at nn in vbg np vbz . in dt nn in nn in ppo , np rb jjr nn in np , in vbg to vb in ppo . pps vbz cs at nn vbn in nns , md vb ppo in nns wrb np doz * vb , cc rb at nns in dt nn . pps vbz in at nns in nn , cc vbz at nn cs ' nn vbn in nn . ex vbz , rb , at rb jj nn rb . in abn nns nn md hv ben ql ap nn cs at jj np . cs ' np at nn in vbn nns . cc wrb bez np , nns . np bez in np . cs rb in nn , in nn , cs np md rb hv vbn in dts jj nns , wrb at np bedz at ql jj nn . cs nn , at jj np , nns , bez in at ql jj nn in at np , at jj . cc nn cc np ap cs cd cd nns in at rb in dt , rb in at nps in nn . vb ppss * rb , nns , cs np vbd to vb nn in jj in np . jj nn . uh . ql jj cc jj in abn nn . in jj nn cc jj nn , vbg in pp$ np . vbg in at nn cs at jj nn vbg to vb at nns . ql vbn , nn in vbg bez pp$ nn , wps hvd rb ben nns in . . ( nn cd ( dts nns , rb , in at jj nn in pn jj , hvd ben vbn cs pps vbd at nn . wql rb pps ' vb at nn . at nn , * at nn in nn , nns , cc nn in nn , in in at nns vb ppo in at nn in pp$ fw . in ap , cs ap vbg nn , pps vbz at jj nn vbg at ap nns in pp$ nn . cc cs pps nns in nn to vb pp$ nn in at nn , abn at nns in at nn nn in vbg in at nns , to vb at nn ' in jj nn . np vbz dt . cc in jj pps vbz to vb abn nn cc nn . in jj nns pp$ jj nn . jj nns in at nn vb at nns pps md be at jj . in pp$ jj cc rb jj nn , cd nns in at ap in -- ( np , pps ' np vbd at nn . ( cc , ( np , do ppss vb ppo . pps ' vb at nn . ( cc , ( np nn , ppss vb pps ' vb at nn wps vbd nn in jj uh , cc jj , cd in at vbg nns in nn . ( dt vbz to vb at nn cs ' np vbd in at nn in at nn in wdt at nn bez vbn , vbg cd cd jj nns in at nn in at nn , cc vbg at nn in pp$ nn . pps vbz , cc vbz in np in at nn . cs abn pp$ jj nns rb nn in np , vbn to vb pp$ nns in ppo . vbn np vbz , cc jj abn pp$ nn in pp$ nn , rb vbz ql ap at ap at nn . pps md * vb ppl vbn . cc cs ppl bez jj nn . cs pps vbz at jjt in ppo . cc wrb at nns vb ppo * to be at nn wps bez vbn , ppss vb ppo vb , cc pps vbz in at nn . ( wps ' rb rb . ( nns at nn in pp$ jj nn , rb vbg rp pp$ nns in at nns in -- ( wps ' rb rb . ( uh . wql ql jj nn nns np . in at nn pps rb vbz to vb rb . cc pps vbz . ( ppss vb at nn in dt nn in nn . wql rb vb ppo , nn . ( rb rb at jj nn hvd * vbn rp in rb , cs at nn rb vbz in ppo . cc ql rbr doz pps vb cs jj nn , cs pps vbz at vbg nn . ( ppss vb in at ap vbg nn , ( in ap pps rb vbd , rb rb vbg ppo . ( rb rbr , nn . ( in -- ( rb qlp in dti jj nn wps vbz at nn . ( cd . np , cs ' vb dt nn . cc pps rb vbz rb at nn in dt nn . ( ppss ' jj nn in ppo , ( in in pps vbz , in -- ( at nn . . ( nn cd ( nn , wql ap bez cs , in in ppss ' ppss vb rb . ( cs pps bez rb vbn , nns , cs cs pps bed at nn * to be vbn in dt nn , ( cs pps vbd at nn rb ( cs at nn dod vb . cc vbn in at nn , dt bez jj in nn . rb np ' nn nn , nns , bedz pn wp$ nn vbz nn in dti , cc wp$ nn vbz ppo rb in at jj . in dt nn , nns , nn wps vbz pp$ nn md vb rb , cc in at nn . cs np , cs at jj , bez vbn in abn nns . ql np ' nn nn vbz to vb at nn in np ' nn nn , cs pps vb ppo rb . pps vbz ppo rb at jj nn . cc pps ' np vbd to . rn at nn vbz cs np bez at nn . cc in at ap nn vbz to vb at nn wps vbz pp$ nn in nn . rb wrb np rb vbz rp pp$ nn , jj nns rb vb at nn . pps vbz at nn to vb at jj . * at nn , dti nn , pps vbz . cc np bez vbn rp in pp$ nn . ( nn in pp$ nn in nn , np , ( vbz np rb . ( ppss ' jj nn in jj . ppss md vb . ( ( ppss vb ' nn vb ppo , ( vbz at nn , ( rb ' in pp$ nn . ( np vbz , cc md vb at nn , cc at nn vbz at nn . vbg ppo rb vbg rb , at nn vbz jj in ppl , cc vbz pn in at nns in nns ' nns beg rb vbn to be vbn in . abn vbn cc jj cs pps bez , np vbz ppl in pp$ nn , cc vbz at jj nn in nn nn rb vbg in pp$ nn . at nn bez rb , cc pp$ nns . rn , in dt vbn nn , vbn , rb , in at nn ' jj nn in nn , np vbz at jj nn in dt vbg nn , wrb at jj md vb ppo in at jjt in pp$ nn ' np nns . vbn in pp$ nn in at nn , at vbg nn rb vbz in np ' nn nn . cc at nn , vbg rp in at nn in at nn in at ap nns vbn , at nn , nn cc abn , cs in jj nn , rb vbz at jj nn in nn in at nn . rb , in nn , rb rb ppl , pps cc vbd jj at jj , vbg nns in wdt pps vbd . at nn nns cc vbz np . cs vbg in pp$ nn pp$ vbn nns vb in at nn , cc dt rb ql jj nn vbz at nn in pp$ jj nn . cc dt nn in at nn rbr cc . . ( nn cd ( ap nns ppo . at nn , at nn , cc at nn , ber ql jj . ( uh . ql pp$ nn vbz in ppo . ( pps vbz , ( rb rb , cs pps vbz . cc at nns in pp$ nn ber abn in nn . ( cs pn wps in at nn in jj nn vbz in pp$ nn , rb vbg , cc in nn cc vbg ppo , cs at nns in at jj nn in nn cc ql ap at ap nn pp$ nn nns in ppo . cs pn wps in dt jj nn rb vbz cc vbz in jj nn , vbg np in nn cs at nn be vbn . cc in ap in at nn in nn pps vbz , at jj nn vbz in ppo , cs in at nn wps vbz in nn , in nn bez at nn , cc ex ' rb pn in jj ppo . rb , cs jj nns in pp$ nn , np ' nn nn in jj nn nns ppo vbg rp to vb . cc rb at nn in nn hvz vbn . at nn vbz rp pp$ nns . cc in at vbn nn at vbn nn in nn , abn vbg , vbz in nn . dt nn , pp$ nns , bedz at od in vbn nns . at nn bedz rb . cc at nn nns . pps md * vb at jj nn . at jj nn vbz rp , at nn bez jj to vb . cc rb wrb at nn vbz abn nns to vb ppo . wrb nns , nns , cc nns ber vbg rb . wrb at nn bez nn , cc at nns ber vbg , cc at nn vbz in nn nns nr in np ' nn nn . in abn dt vbg nn , np vbz pp$ jj nn . pps vbz at jj nn cc vbg nn , vbz * at vbg nns , cc ap vbz pps cc vbz pps at jj nn in at ql jj , wdt ql rb in jj nn bez jj at nns in ppo . rb , nns , np bedz vbn rp in at nns in at nn in in at nn in at nn cs ppss hv vbn ppo , cc bedz rb rb . cc at vbn nn vbz in ppo , cc vbz in pp$ jj nn , ( wdt jjt ppss , np nn . vb . ( vbn in pp$ nn in dt jj nn , np nns in pp$ nns , cc vbg in at nn , nns at nn , to vb rp in at nn . cc in dt nn pps bez vbn in in at jj nn vbg in at nns . nn in nn rb vbz in at nn , cc vbg at jj nn nns vbg nn cc rb , cs at nns vb rb in vbg cs rb rb . cc rb , cs at jj nn vbz . . ( nn cd ( pp$ jj nn in at jj nns in at nn rb , jj np vbz at nn fw vbg jj rb , cc rb vb rb rb in at vbn jj . nns in nns vb vbg in pp$ nn . in abn pp$ vbg nns , at np in nn bez rb ql rb vbn . at nns vb ppo . rbr cc ql jj vb pp$ nns in ppo , cc in ap , rb to vb at nn , in vbg at jj nn in jj nn , ppss vb in vbg nns , to vb in wp$ nn dt jj nn bedz in ppo . at nn bez np ' rb . cs vbn , rb wrb rb ppss nn ppo in pp$ nns . ( wdt bez pp$ nn . wrb vb ppss . pp$ nn . wdt nns . ( cc vb rb , pp$ nns , at nn in jj np . at jj nns cc vb ppo wps pps bez , cc wrb in . cs , ppss * rb vb at nn in dts nns , cc rb dt nn in at nn * vb in ppo , cc at vbn nn bez vbn in np in at jj nn in np wps bez in ppo . ( ppss bem at np , ( pps vbz in -- cc rb in -- ( ppss vb at nn at np in nn wps hvz vbn at nn cc at jj nn . ( nn ppo , uh np . rb , ql rbt ppss vb at nn np rb . rb , pps rb vbz rp to vb at jj nn . cs at nns vbd rbr cc rbr vbn , cc rb ber jj . in wrb np , * rb vbg np in nn , cs pps cc ql rb vbd at nn in pp$ nns , in in wrb jj np vbz rp in ppo to vb ppo cc vbd ppo rb in at nn , cs pps vbd cs in pp$ nn dt jj nn bedz in ppo . ppss rb vb in ppo , cc vb in ap nns to vb at nn . cc abn in jj . at jj nn vbz jjr . rb , in cd nn vbd rb in np , in at ap ppss * rb vb vb in np . cc rb vb np vbn rp cs at nn cc vbd in at nn . wrb rb at jj nn vbz rp in at nr , cc at nn bez rb , cs np vbz rp at nn in ppo , vbg jj nn in . pps vbz rp in at vbg nn in abl at jj nn cs pps jj vbz at nn wrb pps vbz vbg in at vbg nns . . ( nn cd ( vbg ppo . cc at jj vbz in in abn pp$ jj nns , cs at nn rp in at nn ' jj nn . cc vb pp$ nn , cc ql ap jj nns , in pp$ nn . rn np vbd in vb at jj nn . in jj cs pps bez , np doz * vb cc nn in jj nn . pps vbz cs pp$ jj nn bez rb . pps vbz abn pp$ nn in np , vbg ppl in dt , cs nn in abn pp$ nns cc nns , pps md rb vb in pp$ jj nn . cc rb , nns , bez jj cc jj nn . * jj in nn , cc jj in nn . cc wql jj in np bedz dt nn in np , bez vbn in at jj nn in ppo in at nn cc at jj . nns , ppss do * vb np in ppo to be vbn in pp$ nn cc ppss do vb ppo in ppo cs at nn in nn . nn * . cc cs ppss do , vb vb to vb in ppo cs np . cs pps bedz vbg dts nns , at vbg in at nn , vbg nn in vbd to vb jj nn in at nn , wps , wrb vbg np ' nn nn in nn , vbd vbn in at nn ppl . pp$ jj nn vbd cs in at nn in nn . pp$ vbn nns vbd at vbg nns in nn . cc at nns wps vbd rb in in pp$ jj nn , cc at nn vbg in pp$ nn , vbd abn pp$ jj nns vb in ppo in at jj nn wps bedz jj in ppo . ex rb vbd at nn in pp$ nn , cs pps rb vbd in at nns in at nn rb rbr . cc , in ap , vbg jj , in vbn nns , in at nn , vbd nn in np cc ppl . cc rb pps vbd rp in at nns , cc vbg pp$ nn jj , in at nn in at jjt cc jjt nn , pps vb dts nns : nns , np hvz vbn cc cd nn in ppo . abx pp$ nns vb in ppo . nn hv vbn ppo in wdt jj nn md be pp$$ at nn cs np vbz in abn nns . cc rb in ppo , cc rb ap in ppo , cs ppss bem at jjr nn cs ppss . cc rb wrb rb md ppss vb rp in dt nn in nn cc vb in at nns rb wrb ppss vb , cc vb cs ppss vb , cs dti cd in ppo vbz ppo cs ap cc ap jj nn wdt np vbz in ppo cs at nn in . . ( nn cd ( at vbg np . wql beg at jj nn in nn , cc nn in jj nns , cc jj in at nn to vb dts jj nns in at nns in at jj rb , rb , vbn in at nn pps md vb , vbd in pp$ nn , cc vbd to vb pp$ nn cc pp$ np in vbg nn in nn . cc np bez rb . nn pps rb vbd . cs ppss hv vbn , np vbd in ppo in at jj , cc vbd ppo rp in vbg vbz in nn , cc in jj nns vbd ppo rb ( in at nn in at nns , ( wrb at jj nns vbd ppo cd cd nns rp , cc ( at nns bed vbn in pp$ nn , ( cc abn at jj nn in nn jj in ppo . rb ql rb in at nn in dti nn in -- ( rp in at nn in nn ( in in wrb at jj vbn in at nn ' in jjs nns , rb rb , np vbd at vbn , nn nn wrb pps vbd . rn np jj in at nn . cc in at vbg jj cc nn in at nn , at jj vbd vbg rp in at jj cc jj nn , cc abn at nns in nn cc nn . cc ( jj in np in at jj nn . ( wrb at nn in at nn vbd at od nn . cc np , vbn cc vbn in in pp$ nns , cs cd nn in nns , rb rb vbg in at nn in in np dod at jj ' nn nn . cc wdt bedz dt , nns . to vb at nn in at nn in nn . wps bedz pps . dt , nns , dt bez cs ap nn . cc nn in dt nn in at vbg np wps nns ppo . nn in ppo wpo dt nn nns in np nn . nn in ppo wps vbz to vb nn in at nns wrb np hvz vbn ppo in at nn . nn in ppo wps vbz to vb rb cs in jj . nn in ppo wp$ jj nn bez ql in ppo cs nn . nn in ppo wps , in dt nn , nns * nn . nn in ppo wps md * be jj , rb cs to be jj bed nn . rb , nn in ppo wps , cs at jj nn np hvz ppo , cs vbg in nns bez ppl at nn . pps vbd cc vbd rb in ppl in at nn . rb vbg pp$ nn in ppo rb , vbd at jj nn in pp$ nns , cs pps vbd rp in at jj nn , in in cc uh . nns . in at jj nn in at nn , ex bez at jj nn . cc jjr at nn in dt nn , cs at nn in at nn bez . . ( nn cd ( jj . bez * at nn in nn jjr cs at jj bez jj . nn bez in ppo in in at jj , ql rb , cc jj nn in in wps in at jj nns cc vbz in dt nn , rb vbz rb pp$ jj jj nn . nn bez in ppo wp$ jj nns rb vb ppo , wrb at nn in dt nn jj nn hvz vbn rp in ppo . nn bez in ppo , wps vbz at nn in at nn , cc vbz , nns , cc vbz abn nn cs pps vb ppo rp in in at nns in nns cc nns . nn , in in nn in jj nn bez in ppo , wps vbz at nn cc nn , cc at nn pp$ np , cc bez rb at nn in nn . nn bez in ppo , wpo abn at nns in at nns in at nns in at jj nn md rb vb in dt jj nn in at nns . cc jj nn cc nn md be pp$ , wps vbg to vb ppo rp , md vb in pp$ jj nn in -- uh nn . -- in rb vbn in ppo in pp$ nn in in jj cc jj , rb ppss vb . nn hv vbn to be nn , ap cs to be dt nn ' np , cc pp$$ jj . rb dt bez pn . ppss vb nn in ppo . in wdt bez nn cs pps md vb rp at nn in pp$ np . pps vbd at ap , cc rb vbg at nn , vbd pp$ nn in pp$ nns , cc rb vbd vbg , cs abn at nns hvd vbn , cc pps bedz vbn rb in at nn . . . ( nn cd ( . . ( nn np cd at nn nn ( vbg in at jj in nn in at nn , ppss vbd np rb ql rb . pps hvg vbn at nn in at nn dti nn . pps bedz vbg in at nn in at nn , in pp$ nns in at nn nn , cc in cd nn bedz vbg rb rp in pp$ nn cs ap jj nn in pp$ . vbg rb in pp$ nn , cc in at nn in nn rb vbg rb in pp$ nn , rb vbg in ppl in pp$ jj nn . cc beg rb vbn , pps vbd rp at nn . cc jj . . ( nn cd ( rb , vbg in at nn , vbd rp at jj nn rb , cc vbg ppo in pp$ nn vbd vbg at nns in jj nn . in at od nn in in cs ppss vbd in in vbg at nn , vbg rb in ppo , cc vbg nn in at jj in vbn nn nn in nn . pps md rb vb rb in at ap cd . vbg to vb in nn cd dt nn , cs cs pps md * vb ap cs cd , cc pps bedz rb in abl at jj nn in nns beg vbn rb , cs pp$ nn in at nn in nns bedz vbn . in ap nn ppss vbd vbg ppo . jj cs pps bedz , cc rb vbn in at nn in in in ap in pp$ nn in in pp$ nn rb hvd at pn in ppo wdt bedz in at nn jj . ppss md vb at nn . in abn pp$ jj nns , ppss vbd ppss vbd at nns in at jj jj nn . cc in pp$ jj , jj nns , jj jj cc jj , ex vbd nns in at nn wps md vb at cd nns . cc in abn dt , ex bedz at jj jj nn in at nn , wdt rb pp$ nn md * rb vb . pps vbd cs at nn wps hvd rb vbd cc rb hvd hvn at nn . cs pps bedz , rb , cs pp$ nn beg vbn , pp$ nn bedz vbn rp in jjr cc jjr nn , cc vbd ql jj cs pps rb md , dt ppss md * vb to vb . cc jj pps bedz pp$ nn bedz rb at jj cd . pps md vb jj , cc pps vbd ppo in jj np ' nn nn , cs vbn in at jj nns in ppo . pps hvd at ap jj rb vbn vbg nn in in at nns , wdt bed rb ql vbg , cs cd jj nns rb jj in nn . np bedz np np rb vbn . uh ppss bedz rb rb vbg ppo , abn in vbg rb to be vbg rp in at nn in at nn , pps rb vbd pp$ nn , rb vbn ppl in ql ap cs at ap nn . cc vbd rb vbn in vbg at nns in at jj nn . vbg wql rb ppss hvd ben vbg rb at nn jj , cc rb in at jj nn ppss hvd vbn vbn in ppo in vbg in at nn , ppss vbd dt nn in pp$ . . ( nn cd ( ql jj . cc nns ber jj nns . in nns ppss do * vb rb wrb to vb ppo . in rb ppss ber vbg . pp$ jj nn in nn in nn vbz at np nn . nn hvd vbn rb cs np rb vbd in abn , cc cc ql jj , in at ap nns in at nn . pps vbd at nns wdt . vbd to hv at nn to vb at nn in pp$ nns . abn dt vbd ppo cs ql jj . rb , in od nns , ex bedz pn ql jj in ppo . rn bedz at nn dti cd cd nns in nr , in at nn in nn nn , dt bez in in wdt bedz at ap nn pps md vb rb in in vbn in nns cs jj in ppo cs cs pps bed in at nn np . cc rb pps vbd rb in pp$ nn . vbg at jjs nn . nn in pp$ jj nn . rb jj in ppl . rb dt bedz at nn in jj nn . cs at nn pps hvd rb vbn ex bedz abl at nn cs dt . cc , rb , to be jj nns , ppss nns md * be jj in rb vbg cc rb vbg . ql rb cs ppss vb cs jj cc abl at nn vbz ppl rp in at nn , ppss vb cs , cs at jj jj nn , pps md hv vbn pp$ jj . cs ppss vbd rb in dt rb jj nn . at nn vbg jj , in dt jj nn wrb , in pp$ od nn hvz vbn at nn , pps rb rb vbz to be vbn in . at nn nns cc nns vbg in at nns , cc vbg rp in ppo jj , jj nn . at nn vbg in in jj nns . ppss vbd to be jj in jj nns . nn vbd at nn in ppo . ql rbr pp$ vbn nn cc vbn nn bed vbn in at jj nn . dt vbg nn hvd vbn ppo . ex pps vbd , pp$ ap nn vbg at nn in wdt ex vbd at vbn nns cc jj nns . jj pps bedz . at ap nn in nns to vb . rb ppss vbd to vb ppl rb vbn in ppo . cc dts ap nns wps md hv vbn ap nns , ppss bed at ap nns wps rb vbd ppo . nn ' ppss vb at nn nn , vbd ppss , cs jj nn hvz vbn cc jj nn . nn vbd pp$ nn in ppo , cc vbd dti jj nns cc nns , vbg pp$ jjt to vb in ppo rb . in rb pps rb vbd dts nns . cc rb , in pp$ vbg in pp$ ap . . ( nn cd ( nn ' np nns , pps vbd rp to vb ppo cs ppss bed rb to be nns . nn vbd ppo rb . vb ppss vbd pps vbd vbn , rb at ap vbn . ppss rb vbd in at nn rb , cc ppss vbd to vb in ppo at nn in at nn , cc at nn in at ap nns wps bed in ppo . rb ppss rb vbd pp$ nn . cc in cs ppss vbd in nn at jjt ppss md in at jj jj nns to be vbn in dt jj nn . rb ppss vbd at jj nn . cc , vbg pp$ nn cc nn , pps rb vbd ppo at vb . cc rb ppss vbd vbg vbz in dt jj nn in pp$ , cc vbg ppo rb vbg in ppo . cs ex rb vbd dti nn in nn in ppo in at nn ' jj nn , dt jj , jj nn ppss hvd , rb vbn ppo rp , cc vbd ppo nns . pps vbd to vb in ppo ql ql rb cc rb cs ppss in ppo . cc wrb pp$ nn bedz rp , pps vbd pp$ nn in pp$$ , vbd ppo in at nn , cc vbd cs rb ppss bed vbn . nn , in pp$ nn ' jj nn , cs ppss bed nn nns . pps md rb vb in ppo , cs nn md be . in at nn , dt jj nn in nn md hv vbn ql ql jj , at nn to be rb vbn . cc in dt jj jj dts jj nns md * vb . cs nn , cc dt jj nn cc nn , ppss vbd in pp$ nn rb . pps vbd ppo at nn in pp$ vbn nn . vbd rp pp$ jj nn nn , cc vbg in at nn , vbd rp dti cd nns in nn . rb vbg ppo in at nn , cc rb vbg ppo in cd jj nns , vbd cd in ppo in ppo , cc vbd pps bedz pp$$ . nn bedz vbg to vb . cc pps vbd ppo in vbg ppo in pp$ nns ' nns . nn vb ppo vb . pps rb vbd in pp$ nn nns , vbd rp pp$ nn , cc vbd at nn nn . in jj nns cc nns , ppss vbd pps vbd jj in ppo to vb ppo . cc rb vbg wdt bedz to vb , ppss vbd at nn cs , in nn pps vbd ppo , ppss md vb cc rb . nn bedz at jj jj . vbn cc vbn in at nn in at jj np nn . wql rb md ppss vb in . . ( nn cd ( dt jj nn in vbg pp$ nn in nn . cc wdt bez nn . vbd ppss . do ppss vb rb , np , cs at jj np in nn cc nn in in nns cc abn vbn in in md rb be jj in at jj nn in jj nn . jj . cc wdt bez nn . -- in to do at md in np in in dt bez nn . cc wdt bez at md in np . -- in to do in pp$ nn nn wdt ppss md hv pp$ nn nn to do in ppo in in dt bez at md in np . rb , np bez pp$ nn nn . cc wdt do ppss vb cs dt nn md do in ppo . wrb , vb in ppo in pp$ jj jj nn in nn . rb , nn md rb vb in ppo in pp$ . vb , ppss md vb nn . cs ppss vbn at nns . vbn vb rp at jj jj nn . vbd ppo vbn nn in np . jj in ppo rb cc rb . vbd pp$ nn . cc cs vbn , ppss vbd cc vbd in nn , in nn in pp$ jj nns cc abn at nn . cc ppss dod * vb to vb in dti ap nn . wrb pps bez ppss vb * . cc ex bez at nn cs at nn in jj nns in nns . nn cc nn , ppss vb , rb vb at ap nn in pp$ nns in dt ap . cc dti jj nns rb vb cc vb rp jj nns cs rb nn . rb , rb , in pp$ nns ' nn , vbd ppss cc np in in at jj , vbg nn . . . ( nn cd ( . . ( nn in cd nn ( ppss hvd vbn rb in nn , vbg cc vbg in jj nns , cc np rb cc rb rb vbg pp$ jj vbn nns in pp$$ , cc rb vbg ppo rb . ql ql jj cc jj cc jj bed ppss . wrb , in ap , in nn in pp$ nns , wdt jj nn vbd in ppo rb vbn , cc ppss vbd cs vbg rp rb , cs nn in nn bedz rb dti nn in at nn . rb , ppss vbd ql jj . ql ql rb cs pp$ jj . . ( nn cd ( nn vbd to vb jj , cc in ap cc ap ppss vbd ppls vbg rp . at nns rb vbd in ppo , vbg in at nn in nn in pp$ cd nns vbn rp rb rb , cc pp$ cd nns vbg in ppo , cs cs pp$ nn in nns bed vbg in nns . ppss vbd ql jj cc jj , at ql rb cs pps bedz ql jj rp in nns . rb rp in nn in nns rb , vbg cs ex bedz at nn in at nn . at ql rb , ppss vb , cs rb to vb jj nn , dti jj nn in ppo md be jj , cs ex bez at nn in dt nn wps bez * wdt pps bez rb in nn . pn vbz in ppl . cs ppss vb ppl cs ppss ber abn in jj , cc hv ben rb at jj nn , rb ppss md be vbn to be jj dti rbr . cc cs , cs np cc ppo in at nn , at nn in pp$ nn cc at nn in pp$ nn be rb vbn , wrb rb , rb , in at jj nn ppss vb ql rb cc rb jj . in dt nn at vbg nn md rb be vbn in at nn , wdt bez cd in at jj nns in at jj . in at nn in dt nn in nn bez to hv pn cc at nn in ppo cc pp$ nn cc at nn in at jj nn . rn rb ppss vb cs at cd jj nn in at nn in at nn nn . ppss hvd ben vbg in dt vbg nn in dti nn , wrb abn in rb ppss vbd ppss md vb pp$ nns . in wrb in nns , cs in nn cc in nn , cc cs rb cc rb , ppss hv at nn in rb vbg pp$ nns vbn , in nn at ap to vb at nn in beg in nn . cs at nn md rb vb pp$ jj nn nn in pp$ nns be vbn . cs cs nn bed rb at jj nn in pp$ nns , cs nn be ql jj in pp$ jj nn . in vbg pp$ nns rb , cc vbg rp in pp$ jj jj cc nn in vbn nn in at vbn cc jj jj nn in at jj cd in nn ' nn in in in nn , ppss vbd at jj nn . cc dod ppss in abn nn in at nn in np cs rb pps bed rbt to vb at nn , vbg cs ppss bed ql jj rb . cc rb pps vbd at jj nn to hv at ap nn vbz in pp$ np . be pps vbd , cs cs ppss hvd vbn abl at jj nn in pp$ vbg in . . ( nn cd ( at nn at nn rb , rb vb wql jj pp$ jj nns vb wrb nn rb vbz to vb ppo . in rb ppss vbd pn rbr cs to hv np vbg in ppo , rb in nn , cs pps vbd to be jj in jj jj nn nn rb . nn at ap vbd ql vbn in at nn ' jj nn in nn . nn bedz rb jj in at vbn jj nn in vbg at nn cc at nn in at jj nn . in pp$ jj nns vbn in pp$ nns , ppss rb vbd at np in cd in at ap , cs rb ex vbd in ppo at jj vbg jj in nn , vbn in at nn in at jj in vbn nn . cs pps bedz cs dt vbg np vbd at jj rb in ql jj nns , ppss vb * , cc pps rb vbd in pp$ jj nn . cc , jj to vb pp$ nn , ppss vbd ppo to vb rp cc vb ppo . pps rb vbd . cs in at nn ppss cc rb vbn * at ap in pp$ nns , cc jj nns , wrb ppss hvd vbn ql jj in pp$ vbn nn , rb vb ppo to vb at jj nn abl cs pps md vb in at jj nn ppss vb . . . ( nn cd ( . . ( nn np cd np ( np bedz at nn in np , at nn ql rb in at nr cc nr . pps bez * rp in dti nn . jj nns rb ber . wrb at jj in vbn jj vbg jj in pp$ jj nns in at nn nn , vbn in at jj nns , cs cs pps bed at jj nn . rb rb , in np ' rb jj nn , vbd at jj nn to vb pn ap in np cs at nn jj cc cd . pp$ nn bedz at jj nn , at nn . pp$ nn at jj nn . cc in at jj nn pps vbd nns wps bed at nns in jj nns . ex bedz jj nn in pp$ nns in in jj nn . cs . . ( nn cd ( rb vbn , ppss vb , in at jj nn pps vbn in pp$ jj nn . at vb nn nn vbd pp$ nn ' jj nn , cc np vbd at nn in jj nns . cc at nn , hvg pp$ jj nn in nns , vbn pp$ nn . cc * abn at nn pp$ nn ' jj nn md vb . cc np vbd at nn . rb in pp$ nn , pps vbd rp in at jj nn , wdt pps vbd at nn md vb rp wrb pps vbn at nn . rp cd nn bedz at nn jj . in at ap at jj nn in nn , vbn in nn nns wps vbd rp in at nn . vbg pp$ nn , rb rb , in dts nns , in pp$ nn nn , pps vbd rp in at nn , jj jj in nn . cc wrb at nn bedz vbg in , cs at nn pps vbd rp . vbn pp$ nn . in cd jj nn in pp$ nn jj cc vbd pp$ nn . vbd rp at nns . cc vbg ppl in jj nn in at nn , vbd at nn rb , cc vbd * to vb ppo vb , cs vbn in nns . in jj at nn vbd to vb ppo rb . vbn at nn in pp$ jj nns . np bedz at nn in at nn , cc np vbd * . vbd in pp$ jj nn , cc pp$ jj nn to vb np , at nn in ap vbn , cc vbd ppo pps md vb ppl in nr . cc dt jj jj nn in in dt nn nn in np , rb vbd at nn ' jj nn . ppss vb ppo rp in at nns , cc vbd at nn in ppo . cc cs nn np nn in nn in at nns in jj nns , np jj at jj jj , cs rb pps md rb vb at nn in jj pp$ jj nns . in in nn in in cs pps vbd ppo in -- pps bedz vbn in at jj nn to vb in at nps , at nns wrb to vb pp$ nns rb jjr cs ppss bed . cc ap cs dt , rb jjr cs ppss bed . cc , uh . at nns in nns rb vbn ppo cs rb nps md be abx jj cc jj . rb ql rb , cs abn pp$ nn ' rb vbz . vbd in ap in jj vb nn . cc vbg wdt at nns dod rb . cc rb vbg rp in np , cc vbg wrb ppss vbd pp$ nns in dt nn rb , jj np vbd ppo rp in vbn . vbd pps , pps ' vb at jj nn in abn nns . ppss ' ppss vb at nn . . . ( nn cd ( cc rb at jj nn in nn , pps rb vbd in dts nps , vbd pp$ nns , cc vbd to vb pp$ jj . rb at jj nns in ppo , cs rb dti nn in nr . in nns , ppss vbd ppo cs pps dod * vb vbg rb , cc hvg at nn . cs pps md rb vb pp$ nn jj cc vbn , pps beg ql jj cc jj in at ap nns . pps vbd rb , * rb . cc vbd cs pps bedz jj np , cc rb nps , hvd vbd ppo in vbg at jj cc vbn nn in cd nn nns in ppo . cc in cc in , pps vbd , pps md vb , in in ql rb cs pps vbd ppl vbn rb . in at nn , rb , pps vbd to vb rb , cc vb pp$ jj nn in abn cd nns . ppss hvd vbn at nn in ppo , cc cs vbn nn bedz in nn in at nn rb . nn vbd ppo wdt md be pp$ jj nn , vbg pp$ jj nns . pps vbd , to vb to vb rb , in pp$ jj nn . in dt , ppss vbd ppo cs vbg bedz pp$ jj nn , cc vbd ppo in pp$ nn to vb rp in np , cs beg at ql jj nn in at jj nn to vb in . pps in rb vbn to vb ppo in dt nn , nn in at ap nn , vb in at ap nn , at ap nn , at ap nn in ppo , in jj to vb pp$ at nn . in abx pp$ nns in pp$ , rb nn in at np in abx nns . to abn dt ppss rb vbd . in in at nn ppss rb vbd in np , pps bedz at vbn nn , cc ql jj , md * vb to be in jj nn in cd , wps , cs ppo , bedz ql jj in at nns in vbg , cs rb vbn in at nn , cs vbn in nn nns . pp$ nn beg vbn in pp$ nn ' vb ap vbg vb , np vbd ppo , vbd pp$ nn in pp$$ , cc vbg rp at nn , ppss vbd rp in dt ap , dt nn cc dt , cc ql rb bed vbg . . . ( nn cd ( . . ( nn np cd nn ( nn ap nn , nr , in nn in at vbn nn in at nn , in at nn , ppss vbd pp$ jj cc nn ' jj nn . vbg , rb , pp$ nn ' jj nn . at vbg nn , cs rb cs at nns , vbd rb vbn in at jj nn wdt hvd vbn rp in ppo cc np in in rb cs np np ' nn nn cc nn nns in ppo hvd rb ql rb vbn ppo in at ap nn wpo ppss rb jj in . ppss vbd at nn , cc nn pp$ nns , in pp$ jj jj nn in nn , cc np ' nn nn nn cc nn , rb ppss vbd rp in at np , at jj np nn nn vbn in at nn . cs ppss bed vbg in at nns vbd . * in np ql rb in in cs ppss bed vbn in vbg nns vb ppo in pp$ nns , in in cc in vbg ppo cc ppo in jj jj nns . cc ppss vbd ppo * , vbg in vbg at nn in nns , cc np rb cc rb vbg to vb at nn in pp$ nn nns . nn vbd ppo wrb pps vbd abl at jj nn in ppo rb , cc cs abn vbg nns dod * vb pp$ jj nns . to dt , in nn , pps vbd , cs cs wdt ppss vbd bedz jj qlp , cc pps hvd at jj nn in pp$ jj vb , cs pps bedz in vbn nn , rb vbn in ap at jj nn , cc ql jj in at nns in nns . in jj , cs ap rb nns cc nns , wps vb in at nns ' nns vbn in pp$ jj nns in in cs in at jj vbn in vbn ppo in in rb rb , np , in pp$ jj jj nns , vbd pp$ jj nn . vbg at nn in pp$ nn in pp$ , pps vbd ppo at jj nn in at od nn pps hvd rb vbn . pps bedz in vb nn . at nns in pp$ nn , pps vbz , hvd vbn ppo cd , . . ( nn cd ( in wdt to vb pp$ jj nn in pp$ vbg nn . * to vb jj in at nn in in cs in nn pps bedz ql rb , in at jj nn in wdt to vb at nn in in np vbz pp$ nn in ppo . nns pps rb . cc rb nns at nn cc vbz rp at nn . wrb , vbd ppss , np , ppss md hv vbn rbr cs dt , pn md vb . dod ' nn at nns nn . in dt , pps vbd ppo dt nn . at nns in pp$ nn in np , pps vbz , in pp$ nn nns vb at jj nn in jj nns in at jj vbn jj cs at nn . cc dt nn rb vbz at jj jj nn in at vbn nn wrb at nn bez vbn . rb at ap jj nn nn rb vbn in np , cc pp$ nn in in in abn nns , at ql jj jj nn , in ap in at nn nn in in dt nn bedz vbn in at nn nn in np ' nn nn , at ql jj nn rb vbd in cd . uh . wrb abn at nn nns bed vbn in at nn ' jj nn nn , dt nn vbz in , cc beg vbn at nn in nn , vbd ppl rp in at nn , cc in at jj nn cc pp$ nn at nn , np ' nn nn . nn beg vbn , in in in dts nns hv pp$ nn ql rb cs ppss in in cs np vbd ppo cs in ppo , wps in jj nns vb rb in pp$ nns , ppss , in at jj , vbg at nns , vb rb in at jj np in abn nns in in np , ppss vb , beg vbn , at jj nn vbz at nn in at jj nn in at nn . dt bez , vbg pp$ vbn cc jj nns in at nn in at vbn nn vbz . vbg ppl vbn in at nn , cc vbg at nn , cc vbg ppl in in beg nn in at nn in in cs hvg jj nn in at jj nn nn , rb in at nn ' in jj nn in in at nn rb vbz to vb pp$ nns in at nn nn . in in vbg ppo nn vb in at jj nn in nn . rb , vbd np , wdt ppss vb rb , in in np ' nn pp$ nns nn . in ap , nn vbd , cc nn jj , ppss vbd in nn at nn . vbg nn , pps vbd rp at nn nn . rp . . ( nn cd ( cd nn , jj np vbd in nns in nns , pp$ nn in vbn nns abn vbg in at jj , jj nn . jj nns cc nns in nns in nns bed vbn in pp$ nns , cc nn in nn at nn in vbg jj nns vbd jj cc rb vbn in ap . cs in nns vbd at nn in nns cc nns , in vbn nns in nns cc nns to vb at nn , abn nn cs jj nns bed in at nn . cs pn ql jj cc jj nn vbd , rb vbz at od . cc at od vbd , rb vbz at od , cc rb rp , in rb cc in rb . abl bez at nn , rb , at nn in abn jj nn . vbg at ql jj nn , at nn nn vbd jj . at jj np vbd at jj nn in pp$ nns , cs at jj nn pp$ nns . wrb ppss vbd cs np nn . -- in wrb ppss vbn dt nn nn . -- in dt jj nn abn in vbd in at nns in jj nns cc nns . cc vbd ppo to vb at nn in at nn wdt md vb at nns . in at ap nn in nn , np vbd to vb cc nn in ppo . pp$ jj nns vbd rb . pps vbd pp$ vbn cc vbn nns . rp , in ppss vbd , cc pp$ nn vbd , at np dod nn in at nn . vbd cc vbd pp$ nns cs at nn in at nn . rb vbg , ppss rb vbd . at nn vbg cs at nn . at cd jj nns vbg cs jj nn in nn nns . ql jj in dt vbg nn bed ppss , cs ppss vbd in at vbg fw , cs in dti nn ppss dod * vb at vbg nns in at nns , at nn in jj nn , wps vbd cs cd nn nns md be ql jj . cs cs at jj nn bed pn ql vbn cs at vbn jj . cc ex bed dti nns cc nns rb , wps , in pp$ jj nn , md hv vbn in at nn cc nn in abn vb . np vbd cd in dts jj nns vbg ppo in pp$ nn . nn vbd at nn ' jj nn in nn bedz vbn . vbg pp$ nn , at jj nn vbd ppo in pp$ nns , cc in at ql jj nn cc nn , vbd ppo rb rp rb in at nn . rb rb . . ( nn cd ( vbg pp$ nn in jj in nn , at nn vbd in vbg nns in pp$ nns , cs np , vbg pp$ nn in ppo , vbd pp$ nn nn cc vbd ppo in ppo in at vb . in . in . vbd at nn , vbg in dt nn . in , in , rb ' np at nn . np , ppss nn , vbd at nn , at jj nn in at nn , vbg rp in np , wdt in nn do ppss vb in dt . nn ' nn ppss vb ppss md hv vbn dt nn . wdt ppo vb . vbd np , cs pps rb vbd in ppo . pps vb , vbd ppss , cs ppss vbd in vb in nn cs nn rb , vbg in at rb vbg nn . vb in nn , vbd np , vbg pp$ vbn nn in at jj nn in nn , uh . ppo nn jj in nn nn in nn . np at nn in nn ql jj in nn nn in nn . np vb in nn jj jj . vb ppo , vbd at nn , ppss ' ppss vb in nn ppo , ppss jj , cs ppss vb dti ap in pp$ nns rb rb . rb vb pp$ nn . cc pps rb vbd rb rb , cs pps bedz jj nn in at nn to vb pp$ jj nn . at jj nn in at jjs in nn hvd vbn at nn in nn , cc at jj nn bedz rb vbg in nn in nn , rb vbg at jj in nn in at nn . at jj nn wpo np hvd vbn ql rb , bedz vbn rb . abn nns bed in at nn . cc to vb nn in at nn to vb ppo , vbd nn . pps vbd in nn in nr , cc rb rb , rb in cd vbg in at nn , cc at nn vbd in at nn in vbg in nns . pn bedz vbn , cc pn vbd jj in beg vbn . dts in nn vbd in at nns , cc vbd vbg at nn cs cs pps bed at jjr nn in at vbn jj . in at nn in dt nn , np vbd rb in pp$ nns , cc vbg in at nn in at nn , vbd vb in at nn , vbn cd nn in at nns , cc rb jj at ap cs at nn , vbd ppo in at nn cs pps vbd rp pp$ nn , cc in at ap nn , at nn bedz dt nn vbn , cc abn bedz jj . at nn bedz vbn in at nn , cc cs at nns bed vbg rb at jj nn , np , vbn in at nn , vbd in at nn in at jj vbg nn in at nn . in cd . . ( nn cd ( nns cc ap pps bedz vbn vbg cs at nn , vbg pp$ jj nns rb rp in ppo , cc in nns vbg pp$ jj nns in at vbg nn . nn vbd in at jj cc jj nn , cc vbd at cd to be vbn . at nn hvd vbn rp . vbg ppl rb in at nn , np rb vbd at nn ' jj nn in ppo , cc vbg to vb rb wrb nns bed , vbd rp cc vbd . at ap nns rbr , cc pps vbd rb , cd nn rb vbg rp , cc in at ap vbg at jj nn . at nn rb vbd ppo rp . at jj nn bedz vbn . abn nns vbd np at jj vb . at nn vbd pp$ nn . in dt nn ppss nn in np cs at nn . rb , cs jj np vbd pp$ ap jj nn . bedz rb rb jj nn . pps dod * vb to vb cs pps in abn vbd at nn in at nn cc jj nns . pps rb vbd in nn in in jj nn in in pn to vb at jj rp . cs vbn , pps vbd in jj nns , vbd pp$ nn , cc vbg in at nns , cc rb vbg dts in ppo , vbd to be vbg in ppl in in pps ' vb at jj , jj in nn nn , in abn nns . ppss nns md vb dts nps . . . ( nn cd ( . . ( nn nn cd nn ( pn ql vbn in at nn jj at nn . rb , cs at jj nn , ppss rb vbd in np . np . vb rp pp$ nn cc vb in ppo . vb wdt at jj nn in at nn pps vbz . wrb pps vbz rb , rb in nn , ql jj cs at nn nn . vb in ppo in in at jj jj , cc nn in nn . abn nn , in at nn . ex bez ap nn rb cs ppss md vb in cd nns cs at nn in vbg nn . dti jj nns md vb ppo cs ppss hv to vb nns rb , ppss nn ' nn . . ( nn cd ( vb rb . cs ppss vb np vbz . cs ppss hv to vb in nns in at nn to vb at nn in at nn nn . cs nns in nn in np ber vbn rb cs nns in at jj nn in np . cs nns rb nn vbz in pp$ nns , to vb in at nn in nn nn . cs cd nn in nn vbz at nn , cd nns in at nn ' ppss vb at nn . cs ppss vb jj nns , pn cs np nns . cs ppss ber ql vbn rp , vbd rb , at nn vbn , vbn , cc vbd at jj nn in in at nn , cs in pp$ ap nns cc nns jj nns md rb be vbn vbg , cs in at nns in nn nns . cc dts nns rb vb cs np bez at np . vb rb in at jj jj nn in wrb dt nn bedz vbn in at jj in nns . rb vbz at nn . in jj nns at nn vbd rp in at jj np nn , cc vbd rp at nn jj in pp$ nns . in jj nn at nns vbd pp$ nn vbn rp in nn in at jj nns . ppss vbn to vb in at ap nn . vbg rp in pp$ nns , in at jj nn ppss vbd at nn , cc rb ppss vbd at jj nn nn , in in at jj jj jj ' nn nn . wdt nn , rb , cs dts nps , vbn in at nn , md vb in at nn in at nn . ppss od vbd nns cc nns in at nn . vbn jjr , ppss vbd rp in nns in nn . ql vbn , ppss vbd rp in nns cc vbn nn . cc in ap , vbg at nn in jj nns in at nn , vbn dt jj nn . vb at jj nn in nns vb ppo . vbn in in in ' np nns . cc in abn nns cc abn nns vbd jj nn in at jjt vbn nn wps hvz vbn at nn . ql jj cc ql jj . wpo np , nn in nn vb , vbn in jj nn in jj nn , cs pp$ ap nn ber rbr to be vbn in pp$ ql jj cc jj nns . cc rb hv dts jj nps , dts nn vbz , vbg in pp$ nn in nn in at nn , vbn cc vbn at jj nn cs ql ap nns . vbg rp in . . ( nn cd ( ppo at jj , jj , cc jj nns , cs at cd nn nns dod np . vb np vb np in np , cc nn np in np . vb at nps vb abn np , cc vb rp pp$ vbg nn in at nn . cd nns in dt jj nn ber at np ' rb . in at nn bez pp$$ . pps vbz ppo , cs nns jj nns . ap nns hvg cc at nn in nn in ppo . nn nns ber cc nn nns . vbn nns cc vbg nns . rb nns cc nns , cs vbg at nn cs nns at nn , ppss cc vb ap nns , ap nns in at nn vb ppls , in vbg to vb pp$ nn in at jj jj ppl . at np , pps rb vbz cc nns in at nn . pps rb , in np nn , vbz rp in ppo in nns . in cc rb vbg ppo cs pp$ jj jj nn . ex bez pp$ nn . ex vbz pp$ nn , wdt at rb ' np nn md * vb , cs pps vbn abn at nns in np . pps vbz in at nn , cs nn vbz in at nn . pps vbz in at nns , pps nns ppo cs nn nns vb at nps . in nns pps vbz * at nn . rb cs wrb pps vbz in ppo in ap , pps vbz cs dt nn , ql rb cs at nn md in at nn . in at jj nn , cs in nn nns pp$ nns cc bez vbn to vb in nns . rb in nn , at np , rp in nn in nn , nns pp$ nns , cc vbz ppo in pp$ nn , cs in pp$ ap nn nn nns in nns cc nns . . . ( nn cd ( . . ( nn hv cd nn ( pps bedz ql jj in at nn wrb at jj np vbd rb in nn , cc np cc ppss vbd rb . cs ppss md vb in at nn cs nn , in ap pn in at nn cc at nn . at nn in at jj in nn hvd vbn ppo in pp$ nn nn np in at vb nns , wpo pps vbd to . . ( nn cd ( be at nn in cd in at jjt vbn nns in abn np , cc rb pps hvd vbn ppo dt nn nn , cs pps vbd ppo , bedz jj in pp$ nns . in jj , pps rb vbn cs ppss md * rb do rbr cs vb nn in nn in at vb nns . cc at nns pps hvd vbn ppo in vbg at jj nn in pp$ jj nn cs ppss vbd at jj nn in at nn , cc rb vbg cs in at jj nn cs ppss vbd at nn cd nns in at jj , cc cs vbn , rb vb at od nn ppss vbd wrb at nn bedz : dts jj nns in pp$ ql rb vbn ppo in od , rb cs , in at nn , np vbd cs at jj nn in in pp$ od nn in nn in in md be vbn in at jj nn , cs ppss hvd vbn np np to vb pps bedz in at jj . wql , in nn in vbg in at ap in at jj , cc rb cc rb vbg rp at jj jj to vb at nn , ppss in ap vbd in pn wdt ex bedz at nn . cd jj jj nns vbn jj , cc vbn in nns ' nns , vbd in at nn in nns in at jj nn in nn , vbn in nn in at jj nn . at nns in at nn in nns bed vbn rp in at ap nn , cs cs dt jj nn in nn vbd * at ap cs at nn . rb ppss bedz in jj in jj nns in at nn , cc ppss md * vb vbg in dt nn in at jj nn . at nn in jj bedz in pp$ nn cs ppss vbd rp in at cd vbg nns . rb , cd in ppo , cd in np , cc cd in ppo . ppo ' in jj , vbz ppss . at np pp$ nn in vbg in pp$ od vbg nn . nns vbg in ppo in at nns ' in nn . cc rb at nn . cc at nn in jj jj nns rb . ber dts ap vbg rp jj nns vbg nn . nn bedz vbn in dts nns in at nn in at vbn nn in jj nn cc at jj nn , vbg in at nn in at nn , in at jj jj nn vbg rb , wps vbd ap cs at vbn nn , cc vbg in at jj vbg in at nn in at jj jj nn . vb rb in ppo , vbd pps in at nn , cc ppss ' rb be vbg ppo . vb rp , np , vbd ppss , abn jj . ex ' jj nn . np . . . ( nn cd ( cc cs pps vbd rp . np . fw np beg in nr , cc vbg nn . np ql jj to vb in abn pp$ nns . in vbg vbn pp$ nns in at nn cc at nn , nn . np , vbg jjr vbg in at jj , vbd ppo in at jj nn , cc vbg ppo in at nn vbn in at nn in at rb vbn jj , vbd rb in ppo cc vbd in in np cc nn . wdt ' rb cs in nns , fw ' bem . vbd ppss , in ap nn . nn cc nn . pps vbd . at nn in nn . at jj nn . bez dt wdt ppss vb , nn . np . vbz ppss . cc cs ' np at ql jj cc jj nn in at nn nn , jj ' nn ppo , nn np . cc beg in at jj nn to vb vbg at nn in at jj nn , wps bedz vbg in ppo in at nn , cc vbg to vb pn cc at nn nn , nn . np vbd in at jj nn vbg in at nn , cc vbg rp nn in cd , vbd . np , vbd ppss , do ppss vb cs ppss md vb rp at nn in ppo abx in cd nn . wql , at jj jj nn in at nn vbd to vb at rb jj nn in ppo . cc wrb dt vbg nn vbd rp , at nn bedz rb vbn . uh , jj nns . vb in ppo . pps bedz vbn in jj jj nns , rb jjr cs nn nns , vbn in vbd nn nn , cc vbn nn vbd rp in ap nns . at jj vbn in nn , cc rb vbn in nn cc nn . pp$ nns beg vbn in at jj nn , cc in jj , np vbg pp$ jj vbg nn in ppo , cc at nn beg ql jj , ppss vbd ppo in jj nn : wrb vbg rb at nn cc nn ppo in nn . np ' nn nn cc nn nn , ppss vbd ppss md vb at jj nn . vbg in at nn nn , ppss vbd at nn nn in jj nn , cc vbd pp$ nn . in at ap nns at jj nn vbd rb rb , cc in at jj nn , cc in jj nn at jj nn in nn bedz vbn in ppo . ppss vbd nn . cc cs vbg pp$ nns in at . . ( nn cd ( nn , vbz ppss to ppl , ppss vb rb cs dt rb hvz dti nn in at nn . wdt ' rb cs vbg vbg in nn in vbn nns . cc vb , np , jj ' nn cs at jj nn in pp$ nn . wrb ' ppss pp$ nn . nn in abn jj nns bedz at vb nns , wdt rb vbd pp$ nn . in at nns ex bed rb vbg nns . nn in nn , cc nn in nn , cc nn in nn , cs ppss vbd to vb in nn in nns vbg in pp$ nns . at nn in at nn bedz vbn in nn in nns . nn . np vbd at vbn nn in nn nn . cc rb np hvd pp$ nn nns vbn in jj jj jj in nn . ex bedz at jj nn in at nn , rb , wdt ppss md * in abn nn in , cs cd nn vbg to vb at nn in at nn in dti nns ' in nns , ppss vbd rb ' np vbd nn vbg in nn nns , cc vbg in at nn in dt nn in at nn ' np vbd nn , vbg ap nn in vbn , ppss vb ppo . nn vbd , ppss vbd at nn , cc nns in nn . np in at jjt nn in nn . cc , cs np bedz rb to vb ppo rp at nns , at nn vbd rb pp$ nn , cc vbd pp$ vb . pps vbd at vb in pp$ nns . wrb * . vbd ppss . at jj nn vbz in pp$ vb in -- cc wrb * . cs pps ' vb jj , vbz pps . rb cs jj np vbg in dt nn ' nn hv ' nn ' jj in pp$ , wrb pps bedz vbn cd nns cc at abn , in rb cd nns in jj , bedz vbn jj in pp$ od nn rb , in pp$ vb in pp$ nn . rb cs rb ppss vb at nns to vb jj jj nns in pp$ nns in nn . ql , in . np ( cs pps hvd vbn pp$ nn ) , ppss md rb vb dt rb nn , cc vb ppo in ppo cs nn . cc at nn . nn cc nn in in nn in nn , nns . abx , vbz ppss . cc vb ' ppss hv at nn in vbn nn in nn in nn . . . ( nn cd ( . . ( nn fw cd np np ( in nn ppss vbn pp$ nns in at nn . cc in pp$ nn cc at jj nn , np rb vbd ppo to vb , cs pps hvd ben rb vbg np in in at nn in pp$ jj jj nn in -- cc np hvd vbn ppo cd cc cd nns rp , cc rb vbd in ppo rb , cs rb in pp$ vbg rb in at vbg in nn in nn , cc in nn vbg pp$ nn . rb in dt , ppss vb , np rb vbd cs at nn in at nn md vb rb in ppo , rb cs np vbn nn ppo . cc , in nn to do rb , hvd rb vbn in at nn , wdt , cs vbn in ppl , ppss , np , md rb vb rb , in abn at nn cs cs pps hvd vbn rp in nn . cc in dt nn ppss md rb vb ppl , in at jj jj in np . nn hv vbn to vb cs , in ap nns , np vbd jj nn in at nn in np ' nn nn cc jj nn in nns . cc vbd np in jj nn , cs at ql jj nn in nn , wps rb vbd rb qlp in at jj , cc in abn nns dod * vb in pp$ jj nns . rb , dt nn in np ' rb , cc rb np ' rb , vbg at nn in pp$ nn . ppss dod * vb dt nn in abn . nn hvd * at ap vbn in np ' nn nn to vb rp at jj rbt vbn to vb ppo cc pp$ nns rb . cc cs abn pp$ nns vbd at nn in np , ppss bedz vbn to vb . cc rb vbn to vb in dt nn in at vbn vbg nn in nn cc nn , wps md rb vb cs vbg ap nn . ap nn rb , vbg np vbd rp in np in pp$ jj nn in in cs pps vbd cs pps bedz dti nn in nn cc np , cc nn in nn , nn , cc nn in np cc np cs . . ( nn cd ( nn . wrb pps bedz ppss rb md vb rp , in , cs ppss vbd ppl in ppo ap nns , ppss rb md vb pp$ nns cc ( nns in in vbg np , rb , nn in pp$ nn nn , cc np vbg ppl in pp$ jj nn in nns , ppss vbd rp in at nn . cs rb vbn nn cc ap jj nns , ppss vbn cs ex bed cd nns rp in cd in nns ' nns in in at nn in nn at nn in nn , cc at nn . nn in nn , nn do * vb at nn in . fw in nn bez jj . fw , ppss md at nn vb , bedz at nn in at vbn nn in np nps , rb jj cs at jj nn . nn vbd cc vbn in at nn in nn . in ppo , vbd rp in at nn in nn . cc , rb , vbg in nn at fw , vbd in ppo in at nn , cc rb vbd cs dt bedz at ap nn in ppo . ppss md hv vbn ap at jj nn in pp$ nn , in nn ppss vb . in in vbn in vbd nns . jj nps vbz . nn in nn nns , cc wdt * . cc vb pp$ nn in ppo , ppss rb vbd abl at jj jj nn cs dt ap jj jj fw . pps bedz at nn in at jj nn , ql jj cs pn . in at jj vbn nn in jj nn in ppo . rb vbn cc nn in vbn in at nns cc nns in abn cd nns , pp$ jj nn ' jj nn bedz vbn cs at jj nn ' np , wps hvz rb vbn in np cc np . pp$ jj nns vbd vbn . pp$ nns in in vb rb in at nn in np , wrb pp$ jj nns bed vbn rb in at nn in in pp$ nns vbd rb rp cs at nns in at cd jj nns in np . pp$ jj nns bed vbn cc vbn , cs at nn in vbn nn in nn in np nn wrb np vbd . cc in abn dts pp$ jj nns , bed vbn jj cc jj nns , vbg in at jj nn cs in ap cs abn at nn pps hvd vbn . jj nn np , ap nns pp$ nn in nn , cs pps vbd dt nn in pp$ jj , cc rb at vbn nn , cc cd in at jjs nns in at fw , in in dt jj np , in at nn in pp$ nn in nn , hvd vbn in pp$ jj nn , cc vbn ppo , abn rp , in at nn abx in nn cc nn , jj in pn in ppo be nn in nn ' rb vbn nn cc nn . pps bedz . . ( nn cd ( vbn cs dti jj jj nn , pp$ nn jj in nns in vbn nn . pps bedz at nn in nns . at jj in at nn , vbg ppl rb in at vbn nns in pp$ nns . abn nn , pp$ vbn , jj nns bed vbn cs cd jj nn , in at jj jj nns in at nn jj , vbn rb in nns , to vb pp$ jj vb nns cc nns in . dts nns vbd * in nn nns in nn nn , cc rb vbd rp vbz in nn in nn . uh at jj nn in pp$ nn nn , pps vbd rb at nn . cc dt nn bedz in cd nn , rb vbn in at jj jj jjr nn in pp$ jj nn . at nn wps vbd in dt nn in at nn , vbd cs at np , wrb pps vbz rb pp$ jj nn in vbg pp$ nn . at jj nn , cc rb at ql jj . abn jj nns ber vbn in dt . rb wrb ppss vbd in at nn in nn , in dti cd hvg nn , in nn to vb ppl cs at nn in at nn , in rb ppss vbd pn . cc ppss md * rb vb at jj nn in nn , cc rb vbd , vbd at ap in at jjs in nn . pps vbd rb at jj nn vbn in nn . pps bedz in at jj nn , dti cd nns jj . vbg in at jj , jj nns in jj jj nn vbn in at nn cc jjt nn in at nns in at nn in jj . vbn in pp$ jj nns in at nn , at nn in dts nns vbd rb , ql jj in dt ap , cc in at nn vbn in at jj nn , wrb at jj jj nns vbd to cc rb cs at nn in nn in dti jj np nn ' jj nn . at jj nn vbn in at nns in at nn , cs cs at vb vbd at jj nn rb . cc abn vbn in dt jj nn , ppss in nn vbd pn wps in pp$ nn vbd to hv nn . cc wps , pps beg nn , cc at nn ' jj nn vbn , bedz rb vbg nn in at nn in nn . pps bedz vbn in at jj in vbn jj nn , vbg abn rp in jj vbg . cc at nn in wdt bedz vbn in at jj vbg in at ap jj nn in wdt at vbd bedz vbn . ex bedz pn ql ql jj , rb , in at . . ( nn cd ( nn in at jj nn ppss vbd . pps bedz jj cc jj , cs ql jj nns , cc rb vbd rp in jj nn in nn , vbn in at np nn . rb ex bedz at jj cc ql jj nn in nn in at jjt nns vbg in pp$ nns , wdt md hv vbn in pp$ jj nns in ap jj nns , cc rb vbg in nn . in in in dt vbz at nns in at nns to vb vbd rb . abl nn in nns ber ql jj in at nn . bez dt at nn in at fw . vbd ppss , vbg in at nn in at nn . cs pps be at nn in at fw , wdt do ppss vb in ppo . pps vbd . nn bedz vbg in vbg . ppss nn , nn ppss . nn vb ppss ber at np in in rb ben in at nn nn . ql , np , ppss rb hv . do vb pn in abn in vbg , ppss md vb in -- uh . pn , np . cc ppss hv at nn ppss md rb vb . nn ' ppss ben ap nns in at nn nn , cc ppss vb cs in in nn nn be vbn . vb * dt nn in ppo . do vb dt nn . -- in ppss ' ppss vb dt nn rb in pp$ nn , cs rb ppss jjt in at nn nn in ppo rb . nn nn rb . nn vb rb ppss vb jj jj in hvg vbn in dts nn nns . cc nn . nn , wdt vbz ppo vb to vb at vbg , uh . -- in pps vbz at ql jj , nn ' nn ppo , uh . -- in nn * ben at nn , hv ppss . -- in nn * vb pp$ ap nn , in ppss . -- in nn * vb in vbg at nns wrb ppss vb to vb . nn vbd pp$ nn in dts nns . nn vbd cs in at nn in dts ql jj nns , dt jj nn , cs at vbn jj np , bedz jj in pp$ jj nns , cc ql jj in abn nns , cs ppss vbd in nn nn cc at nn . cc wdt vbz ppo at in vbg . nn vb to vb cs cs ppss vb in vbg ppo . uh , uh , ppss vb to vb wdt vbg bez . nn vb to vb at nn . vb to vb wdt vbg bez , uh . hv ppss vbd nn in nn nn . . . ( nn cd ( wps bez nn nn , nn . rb , rb , ppss vbd rb . nn nn bez at nn in dt nn . nn bem vbn rb . nn vbd ppss bedz vbg in at nn ppl . ppss ber vbg in nn np in in dt ' np wps ppss ber vbg to , jj nn . pps vbz in ppo cc nn np to vb at fw vbd rp in at nn , cc vbn in abn pp$ nns , in nn . ppss ber nn nns cc nns . cc cs ppss bedz vbg to vb , cs ppss jjt to vb wdt vbg bez , cs ppss vb ppss do , ppss md vb ppo in at nn in vbg ppo rp cs ppss vb ppl in ppo , in vbg rp . nn nn in nn nn , jj nn , cc ppss md vb cs pps hvz rb cd nn . wdt do ppss vb , nn . bedz at ap cd vbn in at jj . vbn in at jj . jj nn , vb rbr in ppo : pps bedz vbn , vbd rp , vbd in at jjt jj cs rb vbn at nn . -- in uh , uh . nn bedz at ql vbn in pp$ nn , rb rb at ap vbn in at jj nn in pp$ vbg nn , cc vbd ql rb cs ppss md , wdt ppss vb bez at nn jj qlp , nn . cc wrb md ppss vb ex bedz dti jj nn in dt jj jj , cs rb ppss md hv vbn ql ap in at jj nn in at nn . vb ppo rb , jj nn , pp$ nns ber at nn in jj , jj ' ppss vb . ppss do * vb jj at nn . jj , ppss ' ppss ben in nn in rb . jj in dt . uh , vbd ppss , ppss vbd ppss vbd ppo cs ppss hvd ben cd nns in at nn in in np rp rp in dt . nn wdt ppss vbd in at nn nn in in nn ' nn vb ppo in in ppss vbd ' nn hv ppo . cc vb ppo vb dt ap . nn hv vbn ppo at nn in wdt vbg bez . do ppss rb vb vbn in ppo . nn do , nn . ql jj . rb , nn ppss at nn in nn at vb rp at jj jj ' nn nn , cc rb vb in ppo . nn , jj . nn bem , nn , cs pps md be ql jj to do rb . * to be vbn jj in , dt bez . wdt ppss nn ' nn vb to be at nn . jj rb . rb rb , ppss * rb jjt to vb at in vbg , to vb rp in nn wdt vbg bez , cc ppss rb vb to . . ( nn cd ( vb in nn to vb at nn . bedz * cs wdt ppss vbd . nn vbd rb . ql rb , rb vb rb rb , cc vb at jj in at nn in nn , cc rb rb in ppo cc vb ppo wdt ppss vb rb . in at nn ppss vbd at ap vbn in dt jj nn , * vbg rb wrb to vb ppo , cs rb cc in jj . cc vbg abn pp$ nn ' np nns in cd vb , nn np vbd ppo in at nn . vbg rb cc vbg in at nn nn , ppss vbd cs at nn vbg in pp$ nn in at nn in nn , bedz rb rb vbg in at jj nn . at nn bedz jj , cc ql jj cc vbg . * at jjt nn cs ppss md vb . uh , wdt ' in at nn . vbd np wrb ppss vbd rb . wdt dod ppss vb . * rb , ppss vbd in in pn cc nn . jj nn cs , cc ex ' in at nn vbg rp , ppss vb . uh , wdt do ppss vb rb in vbg at nn . do ppss vb to vb jj nn nn to vb dti ap in ppo , uh . md ' nn ppss vb at nn wrb ppss vb . nn bedz at ql vbn , cc vb at in vbg ppss md , cc ppss md . cc at fw bedz ql jj at nn cs dti in in ppss vbd at jjt in -- cc abn dt ppss rb vbn in np . vbg ppo rb vbn , pps vbd pp$ nn to vb ppo . cc ppss vb ql rb vb at nns ql rp , pps vbd in in vb rb in ppo . cc rb vbg , pps vbd at nn in nn in at nn . vbn in at nn bedz wdt vbd in ppo at ql jj cc jj nn . pps vbd rp to be nn np , wps rb in nn np bedz cd in at jjt nns in at nn . at ap nns , cs bez rb at nn in dts nns , beg vbn in at nn in jj nns . nns , jj nns , cc nn nns . dt nn in at nn in at nn nn , cc at nn in nn , cc at nn cc cd in at nn . nns in np vb pp$ nn in vbg nns , at ap nn cs ppss do pp$$ in vbn nn nns vbg in jj nn . rb , np , cs np , cc rb ap ap nps , . . ( nn cd ( bedz at np , at nn hvg ben rb vbn in dt nn . cc in dt nn pp$ nns in jj vb in at jj nn at nns in at np , rb rb cc rb vbn in nns ql jj cc jj . in dti in dts ap nps ber at ql jj in abn nns cc jj in nns . ppss ber vbg nps . ppss ber nps in at nn . ql cs ex ber nns in ppo in nns , wps , vbn in nn nns in in at rb jj nn in at nn in -- cc in nn rb jj at jj jj ppo cc ppss in at np nn . rb , in at jj , vbg , cc jj nn in pp$ jj nns , rb vb in dts jj nns , at cd jj nns in nn , * jj at jj nn in nn , cc at jj nn jj . cc wrb dts nns vb in at nn in rb jj jj nn , in at jj nn cc at jj nn . wps hvz rb in at nn cc nn in ap jj nn in nns in at jjt nns , cc in nns rb vbn rb in at nr , ben vbn to vb rb cc rb . vbg abn nn ' in jj cc jj nns jj in pp$ jj nn jj cc vbg nn , cc rb rb , cc in dti nn in jj nns , to vb at jj cc jj jj nn in in dt nn vbz pn in at jj nn ' jj nn in in at jj nn nn , vbn in jj nns . cc md ppo in abn vb in ppo , rb vbn , cs dtx in nn cc ap nns , pps hv wdt vbz at ql jj nn nn in at nn in pp$ nn . in abn nns rb jj ber vbn rb in at jj nn . be jj in dt , uh jj nn , abn jj nn bez cc nn . cc , ql rb ppss hv * to do in abl at cd , cc in abl dt . cc rb at nn , wps , cs rb jj , pps rb vbz rb in dt nn in at np , vbn in jj nns . cs nn np , nn np bedz at nn in in in do , vbn nn . cc in nn np in in wps vbd * at nn in wdt ber vbn jj nns , cc rb vbn dts jj jj nns at jjt in abn nns in in nn np . . ( nn cd ( hvd * rb ben rb vbn in in at jjt nn in np np , cc abn pp$ jj nn nn , cc at nn in ap jj , jj nn nns , rb at nn in in abn wps hvd * vbn dt nn vbn np cd ap nn , hvd * ql ap cs vbn cd nn in pp$ nn . rb , in abn dt nn , bedz ex dti nn in jj nn in jj nn np . cs vbg , in jj nns , to vb nns in nn nns , cc ppl hvd rb vbn at jj cc jj . cc cs at vbn nn in jj nn , rb hvd pps in pp$ jj in jj nn , vbd ppo in ppo in fw fw . wql rb in at jj nn in pp$ nns , at jj np vbn dts nns in at nn , ppss do * vb . cc pps dod * vb to vb ppo rb , cc ql rb pps hvd rb cs vbn in at nn cc jj nn cs at nn ' jj nn bez cd nn , cc dt jj nn ql dt . dt nn vbz nns . vbg in at jj nn in nn in jj nns in at nn jj , in at nn in at jj nn in jj nn . in dt vbg nn in nn , nn in nn , cc nn , cc rb at nn in nn . np , cs ppss vbd rb , hvd vbn pp$ jj nn in rb vbg in jj nn in at jj nn in cd , cc nn pp$ vbg nns in at jj vbg in pp$ nn in vbn nn . rb np , ppss bem jj to vb , hvd at nn in beg at jj jj nns , cc in pp$ nn in vbg nns , at jj , jj nn in nn . ppss vbd ppo in np , cs pps rb vbz at jj nn , cs wrb pps vbd at jj nn nn , pp$ nn , in vbg nr , bed rb abn vbd rb in at nn , jj vbn cc vbn rp . in at jj nn , rb in at np , pps bedz rb ql jj in jj to vb at ap . pps rb vbd to vb , cs , in pp$ nns , ppss vbd . cc rb pps vbd at jj nn in jj , vbn rb vb rp in ppo . wrb np bedz at nn in nn , to hv pp$ jj in vbn nn rb vbg in ppo , vbd ppo vb ql jj , cs ppss md vb pn in in at nn cc at vbg in nn , cc vb to vb cs jj , in pn cc ap , rb vb wdt . nn cc . . ( nn cd ( nn vbn in in ppo . pp$ jj nn bedz at jj nn in pp$ jj nn . rp pp$ jj , jj nn , pps vbd at jj nn , at jj nn , pp$ nn hvg at jj , jj nn in ppo , cs at vbn nn in pp$ jj in vbn nn . abl , rb , bedz at nn cs ppss vbd vbn in at nn wrb ppss vbd nn np rp in at nn . at nn in at nns bedz jj . cc rb , nn in nn , vbd jj np , wps rb vbd rb , cc rb vbd , cc dt to vb pp$ nn nns . pp$ jj in nn bedz vbn in ppo . pp$ nns bed rb vbn . pp$ jj nn bedz vbn rp in pp$ nn . cc nns in nn , pps vbd vbn in vbg in at jj nn . np , vbd nn np , in ppo rb , np , uh . ppss hv ben vbg dts nns , rb , in at ap cd nns , in pp$ jj nn . wql rb ppss vbd , np . cs cs rb vbn in jj jj nn in pp$ jj nn , np , in vbg pp$ jj nn , rb vbd rp , cc vbg ppo , vbd rb rb in np . pps vbz pps ' vb pp$ nn , np , vbd np , pps vbz to vb . do ppo . vbd np , in at jj nn , cc vbg nn in ppo . nn do , vbd ppss rb , pps bedz ql jj at np . wdt do ppss vb in ppo , np . vbd np . pps ' vb do , vbd np , vbg ppo , cc rb vbd in vbg rb in pp$ nn in at vbg nn ql jj . nn vbd ppo at jjt jj np ppss rb vbd , rb cs np , pp$ nn cc jj nn , vbd abl at nn . cc ppss vbd pn , rb vbg in ppo rb . np rb vbd jj at nn , cc vbg rb at nn ' np nns , vbn nn cc nn in ppo , cc vbd ppl in at jj nn . nn vbd to vb pps bedz jj nn to vb in ppl in wdt nns ppss md be jj to vb in at nn . nn bedz rb jj cs in at vbg nn ppss vbd at nns . cc abn nns , in at nn , vbd jj nns in at nns vbn nns , cc cs dts nns bed vbn in at nn in nn vbg in at jj nns in at nn ' jj nn . . . ( nn cd ( ppss bedz rb jj cs beg at jj nn in vbg , pp$ jj vbd md * be ql jj . cc vbg cs ppss bedz vbn in at nn , md vb at nn , nn at nn , cc abn dt , ppss vbd at nn cs in abn ppss hvd vbn ppss md be vbn in ap at od vbd in in dt bez , at od nn in at jj nn vbz in at nn , wdt dt md rb vb to . cc cs at od vbd bedz wdt ppss vb at ql jj vbd , cc pps bedz jjr cs pn . cc cs ppss hvd at jj nn , md ql rb vb in at nn ppss md vb rp in ppo , * to vb in pp$ cd nns ' nn cc nn , in wdt ppss md * hv to vb cd jj . pps md be vbn cs dt bedz at jj nn to vb at rb nn in -- cc cs pps bedz , at ql jj nn rb . cc ppss bem pn in dts wps rb vb rp in rb nns , cc bem ql jj cs at nn bez jj to vb cc vb ppo , cs ppss bem vbg rp in dt jj nn in at nn nn . in at jj , ppss vbd cs at od vbd md be in at jj nn , cc md * hv ben vbn hvd ppss ben vbn at od , vbg ppss bedz in at jj in vbd vb . cc cd nn , rb , wps vbd ppo at ql jj in vbg at jj nn in at nns bedz dt : nn , ppss hvd vbn pn in abx nn np cc pp$ jj jj nn np . wrb cs ppss beg at jjs nns in at fw , rb at ap cc ap jj cc vbn nns , vbd rb at jj nn in at nn ' np nns in dts cd . cc ppss dod * vb cc wdt at jj jj np md hv at jj nn to vb in vbg nns , rb cs ppss rb vbd ppo in nn at fw , ql in nr rb in at nn , cc vbg pp$ np cs cs in pp$ jj vb . rb cs np bedz rb vbg to vb at nn in pp$ nn in nn , jj np , in pp$ ql jj nn , vbg cs pps bedz abl at vbn nn in dts nns . np rb vbd ppo , cc vbd in vbg in ppl rp in pp$ nn , vb * rp in ppls nns in nn , wrb nn in -- uh , nn np , vbd np , wdt nn ' ppss vb , wdt vbd md ppss vb dt jj nn . . . ( nn cd ( ppss jjt jjt , bedz at jj nn , at cd cd cc cd in od md ' nn be ql rb , md ppo . -- in ( wrb nn cc nn do vb , cc vbd in -- ( np , rb , vbd ppss , cc abl at jj . at cd cd cc cd in od . uh , jj np , ppss ber vbn cs ppss , in cd , md * vb rp ap nns rb rb , wrb nn cc nn do vb . pps bedz at ql jj vbd cs , rb . cc cs in at nn in at nn pps md in od vb at nn , cc at jjt nn md vb cs cs cd cd cc cd in cd bez at ql jj nn , rb , wrb ppss vb to vb at od in ppo , ppss md rb vb , ppss vb , cs at cd cd cc cd in od nn in at nn bez at jj nn ap cs cd cd cc cd in cd jj nns . cc cs ppss vbd in at nn . wrb , vb pp$ nns , np , vbd np , ppss do * vb to vb dt jj nn . pps md hv ap cs dt . cd cd cc cd in od , rb vbd np , in vbg pp$ nns . cc rb vbd in vbg in in in wrb pp$ nn bez , ex md pp$ nn be rb . nn bem vbg to vb ppo rp in at cd od , vbd np , do ppss vb cs , np . at cd od vbd , ppss vb . np vbd rp pp$ nn , cc vbg rb in ppo vbd , nn np , ppss hv at jj nn . cc ppss md vb at nn ppss jjt in at ap nns in dt nn in in nns cc nns , ap in ppo in -- cc cs cs ppss ql ql nn at nns in dt jj nn , ppss md be vbg at nn in dts nns cc dts nns . at cd cd cc cd in od vbd , nn np . ppss np . vbd np , vbg rp cc vbg in at nn . vb ppo , nn np , cs ppss hvd vbn pp$ nn in dts nns , ppss md rb rb hvd at nn to vb in dt md be jj qlp to nn at jjt nn wps rb vbd jj nn nn . nn np , vbd np rb , pp$ nn md be vbg cd nns in nn , cc cd nns , nn md ' nn vb . cc cs ppss ber rb at nn nn , nn np , ppss rb vb cs pp$ nn be cc at jj cd . cc md in at nn vb ppo vbg rp in at jj nn , nn np . . . ( nn cd ( np nn . jj nn . ppss vb ppo , nn . in abn jj nn , ppss vb ppo . ppo ' in at abn in vbn nn to vb dti jj nn cs pps ' vb vbn in nn . nns cc nns . np , vb cs rb in ppo , cc vb pp$ nn in nns , cc ppss ' jj in in ppss ' jj in in rb , ppss ' ppss vb at jj nn in abn pp$ nn cc nns in . rp in at nn , ppss vbg , jj in vbn nn in at jj nn in in at jj nn in ppo . cs pps vbd rp dt pps vbd at nn in np , cc in at jj jj , vbg nn , np in dt nn vbd ppo . vbn in dt jj nn in at cd jjs cc jj nns in at nn , cc vbg abn at nn to vb rp abn nn in vbg in at nn ql rb vbn cc rb vbd , ppss vbd rb in at nn to vb nn in np , wps , ppss vbd at nn , bedz abn nn to vb in in at vbn nn in np . cc in pp$ nn , pps vbd rp rb in at nn ql rb , cc vbd to hv * at jjt nn in vbg . pps vbd ql vbn in nn np cc pp$ nns . cs in np , in vbg rp pp$ nn cs pps hvd , rb vbd at ql vbn in ppo , cc pps , rb , vbd rp cs at nn , cs pps vbd at ap cs cs rb rb vbn . np . pps vbd in ap in in at nn ' rb vbn rp in nn , ppss vb . np , ppss vbd to be jj in vbg at nn , vb dt nn , md ppss . pp$ nn in nn rb vbz at nn . cs ' np pps . vb ppo , np . rb rb , pp$ jj nn , np ' in pp$ nn , dod ' nn ppss vb . ql rb , rp ppss vb rb , np , in at cd od vbd . nn np , vbd ppss , ppss hv at nn in ppo wps vbz to vb rb in in md ppss vb ppo rp in in nn . to be jj , vbd nn . vb ppo rb , cc ppss ' jj nn in ppo . wdt vbd doz pps vb . vbd np , vbg rp in at nn in wdt pps hvd rb ben vbg ppl . uh . rb ppo nn in dt , np , vbd np . hvz pps rb vbd ppo dti . vbg in ppo . vbd ap nns cs ppss md vb , nn np . uh , vb ppo rb rb . . . ( nn cd ( cc , in vbg at nns , rp ppss vbd . pn vbg cc cs ppss hvd vbn at jj nn ' jj nn , cc cs at fw bedz at jj nn cs np hvd vbn to vb np cc ppo in at nn . cc ppss hvd * vbn rb , wrb ppss vbd to vb ppo cs at nn in wpo ppss bedz to vb rb vbd jj in ppo . rb , rb , in ap nns , at jj in nn md be rb vbn rp , cc vb abn pp$ nn in nn , cs at nn vbz ppl jj in vbg to vb nn . in rb dts nns ber ql vbn , cc at nn nns in nn ql ql jj , cs cs at nn hv at nn , cc dti vbg nn in dt nn , pps doz * vb ppl rb in pp$ nn in nn , cc vbz ppo in at nns cs abn bez jj in nn . wql , pps bez rb ql rb to hv at nn in ppo cs rb vbg ppl in pp$ nns . vbg rb ppss vbd nn np , vbg wrb nn np bedz to be vbn . cc wdt do ppss vb in nn nn . ppo ' in abn jj qlp . ppss ber vbn . rb , cc ppss md vb to vb ppo . cc ppss nn ' nn vb ppss md be jj to in jj . nn nn ' nn vb rb wdt ' in at nn in ppo . cc pps vbz rb in at nn . at nn in jj , cc rb pps nn ' nn vb rb . in nn , pps vb ' nn jj . cc rb , pps vbd ' nn ql rb . dti wrb , jj nn , pps vbd ' nn rb vb ppo , cs ppss nn ' nn vb pps md ppo . pps ' vb at jj nn , nn nn in in rb dti vb in -- cc at jj cd . uh , ppss ' nn vb ppo rb qlp . at nn , at nn . pps ' vb at jj , jj , nn in jj nn , nn nn . cs ' nn vb rb . cc , wrb pps doz vb , rb ppss md rb vb . vb ppo , be jj . np ' rb in at jj . np ' rb ben in nns , ql rb cs ' vb at nns . ben vbn in jjr nns cs at nns . vbn pp$ jj nn in jjr nn nns in nns . pp$ nn . rb , at jjt cc at jjt cs rp in abn pp$ nn . uh . pps vb ' nn nn np . rb , cc pps vb ' nn nn np . pps ' vb np , nn . cc nn in jj , ppss jjt , bedz at vbn nn . cc at ql jj cd . wrb dt jj nn bedz vbn , at nns , dod ppss * vb pp$ nn . . . ( nn cd ( vb rb in ppo in in rb , rb , vbd np , in at nn in pp$ nn cs rb vbn ppo . vb ppo , nn . rb vb cs in nn at fw . rb vb ppo rb . nn np dod * vb ppl . ' np at jj , jj nn in pp$ jj , vbn nn , wps vbd wrb pps bedz rb at jj jj . cc rb at jj nn vb , in nn , vbd cs at nn md rb vb jj . cc , rb , ap nns vb ppo md vb ppo at ap . nn vb to vb ppo . ppo ' in at nn . nn vb nn nn rb . ppss ' ppss vbd in ppo cs nn nns rb . ppss vb wdt pps bez in in at jj nn in -- * at jj , jj nn , cs np , cc at vbg jj nn in in pn vb ppo in in rb rb ' np at jj nn ap in ppo . rb , rb , ppss vb cs pps bedz rb ql jj . cc ppss vb cs in at nn nr , pps bedz at ap rp in pp$ nn in at nn . cc pps bedz at jj vbg nns in pp$ vbg nn wps vbd cs rb , cs dti pn md vb . nn vb , rb , cs rb cs pps vbd pp$ nn ap nn in dt vbn jj , pps ' rb ben at nn in jj in in jj jj , cc jj rb . cc dt md abn vb rp . cc rb in abn , vb ppo vb ppo cc vb ppo , jj nn , pps ' vb jjr to vb in at jj jj nn in at vbg jj cd . ql jj in vb in ppo in -- cc jj * nn nn , cs pps vbz to hv at jj nn . rb , pp$ nn , pps hvz at nn in -- * cd nns vbn in in at jj , vbd nn . vb in dt . in dt jj nn cs jj nn hvz at nn : vb ppo rb ex md be dti jj , jj nn in nn . ql , ql , pp$ nn . vbn , vbd , cs pps be , np hvz pp$ nns . cs ppss vbd rb , ppss bedz jj in nn . wdt hvd ben rb vbn in ppo in nn nn , vbd ppo in at jj jj nn in nn in ppo . cc rb , in at nn , ppss vbd at nn cc at nn in ppo , cc cs ppss nn ' nn vb wdt , cs pps bedz at jj nn in pp$ nn . cc rb ppss rb vbd at jj nn in ppo . cc dt nn in nn , wdt ppss md in abn vb , bedz * rb nn . ppss do * vb wdt pps bedz . cc ppss vbd ppo . cc pps dod * nn ppo in ppo . cs ppss vbd nn in wdt vbd cs nn in ppo , ql rb cs pps bedz vbn in ppo rb . wql , pp$ nns bed in nn vbn in ap nns , cs cs in at jj jj nn vbd pp$ nn . . . ( nn cd ( . . ( nn np cd np nn ( cs np ' np np , cc vbg cc nn , bedz to vb abn nn , ppss dod * vb to vb ppo cs in nn in nn . cs ppss vb at jjt nn in pn ' nn jj nns , rb vb wql jj , cc md * vb ppo in pp$ nn in nn rb at nn in nns vbg at nn in nn . cc dts ap nns in jj nns in pp$ nn , wps in at nn in nn ql jj in ap nns , vb rp in at nn in at nn vbd nn rb in nn in at jj nns rb vbn cc vbn in pp$ nn . nn vb , ppss jj np nps md be jj in dts nns , cc * vb ppls ql ql jj in ap nns , nns cc wdt * , cs in pp$ abn in jj nns in dts nns . ex bedz np , rb , rb vbg at ql jj nns in np cc pp$ np . in in cc wdt in dt . np vbd pps vbd wdt pps bedz rb , ppss vb . pps vbd to be jj . cc ex vb ppo nn . abn pp$ vbg in ppo md * vb . vb ppo be , ppss vb : cc nn hv nn in ppo abn -- in np cc nns rb in in cs ppss ber abn rb rb vbn in at nn , cc rb vb vbg . in nn , wrb ppss vbd vbn cs abn pp$ nns cc nns md be rp , ppss vbd rp in pp$ nn cc vbd in at nn . cc at nn . nn vbd to vb ppo , cc pps bedz vbn rb . np , vbd ppss rb in at nn in nn : in in abn jj . nn vb , np . wrb nn ' nn ppss vb . ppo ' rb ppss in in nn . cc abn vbd rb cs rb . nn vbd to vb vbn . nn hvd vbn ppo jj jj nn . ppss vbd pps md hv hvn at nn nn . nn vbd in at nn in nn . cc at nn vbg in at jj nn in at nn , at nn in nn nn bedz cc at jj cc jj cd . nn md rb vb nn in at nn in nn in at nn cc at nn in . . ( nn cd ( at nn , cc pn ap . nn bedz vbn to vb vbg in at nn at jj nn in np ' rb vb , wdt at nn at nn jj hvd vbn in ppo , cs pp$ vbg in at nn . cs ' pp$ jj , vbd ppss . cc in dti nn , cs at nn vbz rb , cc pps rb cc rb vbz rb in ppo , rb pps md be rb rb , cc at jj nn . np . -- in np . -- in abn rb . pn md hv vbn . np . nn vbd to vb jj at nn . cc pps rb vbd . vbg rp nns , ppss rb vbd pp$ nns in at od nn nn vbd in in at nn . fw . fw . pps vbd , nn vbd pn md be at nn . nn vbd to vb at nn in nn , cc at nn bedz vbn . cc * at nn to be vbn . cc pps ' rb ben rb ql jj rb cs . cc ppss vbd , md be , ppss hvd abx vbn rp cc vbd pp$ nn in in jj nn . fw . fw , fw ' bem . -- in nn . nn . nn . np . jj . -- in cc in dts nns , pps vbd in at nn , ppss vbg . nn . np rb vbd , in at nn in nn in cd nn cc at nn in nn in at ap , hvg rb vbn rb in at nn in vbg in at nns , cc vbg ppo ql jj nn nn . nn in nn . vbd ppss , wdt nn in ppo . vb in np ' fw fw , cc vb pn to vb jj at nn in in at nn . -- in at nn . pps ' np hvd at nn . vb in ppo . -- in cc rb vbg ppss bedz rb vbg rp nns rb jj in vbn , wrb nn . np vbn at nn in nn cc nn in nn , cc at jj nn in pp$ nn . wdt ' in at nn in ppo , jj nn . vb at nn . in np ' fw fw , vbn in at nn , dti cd , cs ppss vb ppo jj . vb rb , vbd at nn , rb vbg rp at nn in nn , cs cs to hv cd nn jj . vb rb . ber ppss vbg in vbg jj dti in pp$ nns . -- in cc in cs pps vbd pp$ nn . wdt ' in at nn in ppo . wdt ' in at nn in ppo , nn . in ql jj , cc jj at nn cs jj , ppss vbd ppo to vb at jj nn . rb vbg at nn in nn . . ( nn cd ( in cd nn in pp$ nn , pps jj in at nn . rb vbd in in at . nn nn ' nn vbn ppo cs ppss vb ppo rb . vbg in at jj nn in at nn in at nns , pps vbd rp , cc vbg , vbd ppo cs np ' rb vb bedz vbg . pps ' np vbd ppl , pps vbd . ppo ' nn nn ' jj nns vbn rp rb in in rb vbz dt nn in in nn nn pp$ jj nn . -- in pps md be at nn in pp$ nn . hvz at jj nn at nn . wrb ' in dt nn . -- in rb , np , vb in np at np , cc vb ppo to vb ppo at nn , in in -- ( at nns vbn rb , cc at vbg in at nn . ( in in md ql rb vb abx nns in rb . vb . at nn be jj in pp$ nn . wdt ' in dt nn rb . ppo , jj nn , nn rb . cc vbg rp in ppo , pps vbd ppo cs ppss bedz rb vbg to vb jj at nn . nn vbn ' nn vb ppo . ppss vbd ' nn hv pp$ nns vbn . vb in at nn , ex ' np cd in at nn in rb . cc nn . vbg pp$ nn in pp$ nn in nn , rb ' np at nn cs ' jj nn , ppss vb . vb ' ppss vb . cc in dt , pps vbd ppo in at nn . cc , uh . np ' rb jj nn vbd vbn in . hv to vb ppo jj , vbd ppss , cc bedz vbg rp at nn at ap , in at jj nn , wrb at nn vbd in ppo , rb vbg ppss md * vb rp pp$ nns . cc ppss vbd in ppo , cc in at jj jj nn vbd ppl jj in at nn . in at jj nn at nn vbd jj , cc at nn vbg in at nn , vbd at nn in at nn . cc rb , jj nns . ex vbd np , ql jj cc nn in vbn . rb in at nn in at nn . vbg in pp$ nns , cc vbg np in nn in pp$ nn . pps vbd cc cd nn cc at ap nn , cc vbd cs at vbn nn in jj at nn in jj nn . np , vbd ppss , vbg rp in ppo , np , wdt ' in at nn in ppo . pps nn ' nn ben at jj ' cs abn nn , hvz pps . vbd at nn . cc abn ppss vbd , * at nn md ppss vb rp in ppo . ppss rb vbd cs vbg ppo rp , cs cs to vb pp$ nn , cs pps bedz ql jj , pps vbd ql rb cc rb . . ( nn cd ( vbn . rb , cs in abn nn pps hvd ben vbg rb in rb in cd cc cd nns , vbg rb in pp$ jj nns . nn . np , vbd ppss , pps ' vb jj in abn nns . rb vb ppo , cs ppss vb , cc ppss md vb in dt jj nn ppl . vbg at nn in at nn , ppss vbd to vb in np to vb at nn . cc in jj . ex pps vbd . cc abn pps md do in in in abn pp$ jj nns cc nns in in pps md * vb at nn , cc vb at ap nn , cc rb vb in ppo , cc vb pp$ nn in dti at jjt nn . nn nn , vbd ppss , cs dt md rb be at nn in pp$ np . do ppss rb in pp$ nns cs nn in pp$ jj nn . pps md be rb . rb , pps ' vb nn in pp$ nn , ppss vb . rb , rb , vb ppo nn . pps ' ppss vb rp rbr cc rbr , at nn . pps md ' nn ap in rb , vb np , cc pp$ np rb vbz cs at nn . cc ppss nn ' nn vb ppo ' nn ql jj rb . nn vbd rp in nn . cs vbg at jj nn vbg in at jj nns in dti nns wps hvd rb vbn in at nn in vbg nn , cs ppss vbd ppo ( dt bez , at jj vbg in nn in at nn cc nn , vbn in at nr in at nn , in at jj nn rb ) . in vbg in dts nn in vbz cs rb cd nn ' nn , ppss vbd rp nns to vb in nn , vbg ql jj in dt nn np md rb hv vbn pp$ np in at nn . cc at . rb pps bedz rb wrb ppss hvd vbn ppo . pps hvd * vbn at nn . nn vbd to vb vbn in ppo . pps vbd ql ql jj cc jj to be vbg rb abn nn cc abn at nn in pp$ nns in at jj nn , vbg at nn in nn in pp$ nn . in nn ' fw fw , np , vb rp cc vb ppl . vb rp cc hv dti nn . ppo ' ppss vb . ppss ' ppss vb ppl , np . cc * at nn dod pps vb . vbg in ppo , rb , ppss vbn to vb in nn cc to vb . cc at nn , cs at jj nn , pps md vb ppo . cc jj in vbg in , ppss vbd pp$ jj nn nn , cc vbd ppo in ppo , cs pps vbd to be at ql jj nn . cc pps hvd pn in pp$ jj jj nn in . in dti nn , do abn ppss md , ppss md * vb in at jjt vb . nn hvd vbn rp at nn . cc at jj nn in np in in . . ( nn cd ( * cd nns rp in in vbg rb in dt jj nn , ql rb in at jj cc jj . dt vbd ppo ql jj . vb in ppo . vbg abn nn in at ap nn in at jj jj nn in pp$ nns in dt jj , jj np . cc rb ppss vbd rp in ap , cc vbd pn ap cs vb in nn . wrb , vbg in at nn , ex vbd np , cs cs pps hvd ben vbn rp in at nn . cc ql rb cs at od nn in nn vbd at nn , rp pps vbd , in jj cc nn nns , cc in at jj nn . vbn in ppo wrb ppss vbd . vbn pp$ nn rb in pp$$ . cc vbd pp$ np bedz rp . rb , cs ppss rb vbn , ppss hv at nn in dti nn ' jj nn , be pps wdt pps md , ql rb cs dt nn doz * vb cc vb dti ap nn , cs cs ap nn nn ' nn vb ppo rb . cc wrb at nn ' jj nn vbz ql jj . wrb pps bez at jj nn in ppo . cc , in jj , vbz dt nn in pp$$ at jj nn to vb in . rb ppss vb ppo jj nn to vb dt nn rb cc vb at nn in ppo . cc rb cs ppss rb dod in np . np , vbd ppss , vb in nn rb , cc vb cc vb in ppo . nn rb vbd rp , vbg in at nn cc nn in at jj nns , cc vbg rp in at jj nns in at jj nn , in wdt nn ppss vbd to vb np cs abn dts nns , np , cc vbn nn in nns in jj , jj nns bed jj nn . jj in at nn . jj in at nn . vbn , in jj , in at jj nns in nn cc jj nn . nn vbd ppo , rb , cs pps beg in ap nns abl at ql jj cc jj jj , pps vbd ppo , ql rb vbd ppo , to vb ppo rb ql ql jj in dt jj np in pp$ . rb , vbd ppss , nn vbz at nn nn in . rb at nn nns in . cc abn nns vbn in at jj md rb be abn in vbn . dt bez at nn wrb ql jj nns vb jj jj nns in pp$ nns . in cd nn , np , vbd ppss , ql rb . nn bez at nn rb vbn in at jj nn in nn . cc cs rb vbn in at jj nn jj in np . . . ( nn cd ( ppss rb vbd np cs pps ppl bedz rb vbn in nn . vbg at nn ql rb , cs cs pps md vb ppo rp . pps vbd rb . rb in cd jj nn . pps bedz in at jj nn vbn in pp$ nn at nn , in at vbg in at jj nn wrb cd in at nn hvd ben vbn in rb cd nn ' nn in at nn , cc abn vbn cc vbn cs ap nn . ql rbr , np , vbd ppss , vbg . dt md do . cs ppss vbd at nns in pp$ jjr vbg ppo . nn hvd vbn at nn wps hvd vbn cs ap nn , cc pps vbd ppo cs pps bedz at nn , wrb at jj nn hvd ben vbn rb , to vb abn at vbn in at nn cc nn in at nn . cc rb , cd in cd , ppss bed vbn in jj jj nns , cc vbn rb cs at nn , in nn cc nns . cc in dti nn in pp$ nns , bed vbn rb in at nn ' np nns in abn pp$ nns , rb cs cs dts nns bed ql ap np nns . cs abn , ppss do * vb cs pp$ nns in nn vbd ap nn in np . cs , in at od nn , pps rb vbd jj in nn in dt jj nn , cs vbn in pp$ jj nn in nn . cc , in at od nn , pps dod * ap in cd od vb ppo , nn pp$ nns rb cs ppss md . cc , rb , pps at nn vbd pps vbd at jj nn ap in at jj nn cs ppss dod . pps vbd in ppo in at nn in vbg nn cc nn , cs cs pps vbd ppo at jj nn cs abl at jj jj nn md be ql rb vbn in jj nn nn . in ap ppss vbd cc vbd . cc np , vbg at rb jj nn in nns in abn nns , cs cs at nn md * vb ap nn in nn in pp$ np , ppss vbd rp to vb at fw , nn rb , cc vbg pp$ nns in vb nns . . . ( nn cd ( . . ( nn np cd nn nns ( cs ppss bed vbg rp at nn in at nn in at nn , np vbg pp$ nn , nn np in pp$ jj nn rb vbd ppo in pp$ vbd , vbg pps hvd * vbn pp$ nn bedz at jj , cc rb vbg cs pps vbd at nns in nn cs nn , cs ppss rb vbd pp$ nns . wdt do ppss vb in dt , nn np . vbd ppss , rb vbg in at nns , cc vbg pp$ nn vbg in at nn . nn vb , pps vbd , pps md vb pp$ nns . rb , vbd nn np in pp$ jj nn , vbg pp$ nn in in np ' rb , rp in at vbd . pps md vb cs pps ' vb vbn . nn in nn , pps vbd , vbg in np , nn ppss in jj in nn in dti jj nn . wrb , vbd ppss , pps ' vb at nn in at od jj nn . rn be pps vbd , cs ap vbn nns vbg in np nns in ap vb to be vbn in at nns . od jj nn , vbd np , wdt . wpo nns in nn nn np ' nn nn in nn . cc rb vbg , vbg rp pp$ nns , pps vbd ppo in pp$ jj jj nn nn , cc vbg ppo in ql rb , vbd rp in at vbd , cc vbg rb in at nns , vbd at jj jj nn in np . wql jj hvz pps ben at nn . pps rb vbd , vbg in ppo . * ql jj , ppss rb vb , jj nn . ql , vbd np , cc pps vbd ' nn ben vbn ql rb , cc pps md hv vbn dti in dt nn ' jj nn in pp$ nn . do vb , rb , vbd np , bez dt jj at jj nn in nn nn ' jj nn . nn rb vbd ppo vbg rb , cc ppss vb ppo at nn ' jj nn . . . ( nn cd ( ppss nn ' nn vb pn in nn nn cc pp$ nn , vbd ppss , abn ppss vb bez , cs np rb bez at vbn nn in at od jj nn . pps bez at nn ppl , np bez . jj nn , vbd np rb , ppss ber vbg in ppo in in vb jj , ppss jj nn . wdt nn do ppo vb . vb ppo . vbg ppl rb rb vbn , ppss vbd . nn vb , nn , at ap jj jj nn in wdt ppss cc ppss , cc nn np rb , cc np rb , cc abn in ppo , cc at nn ' jj nn cc nn in ppo vb . at jj cc jj od nn in dt jj vbg nn . ppss abn vb in dt . rb dti in ppo vb dti jj nns rb vbg at jj nn . in cs ppss abn vb nns . nn , ppss vb ' nn nn nns , vbd np , vbg rbr . jj nn , ppss ' nn jjr nn in at nn , rb in at nn in nn nn . ppss rb vbd at jjr nn . nn nn in in wrb nn nn ppl md ' nn vb ppo , cc pps ' vb vbn pn . vb rb , vb rb . rb nn in at nns . nn vb , vb np rb in in wdt ' rb cs ppss vb ppo . vb np to vb rb . in at jj nn , wdt at vb pps ' np vbd rb . vbz cs jj nn cs . cc pps vbz ppo in nn . nn vb , np , cc wdt pp$ nn bez , dod ppss rb vb in at nn in at jj in nn . dod ppss rb vb at nn . in vbg at nn , np , in pp$ jj nn in nn , vbd in at nns , in rb in at nns in cd in at jj in nns vbg in at nn . cc rb vbg pp$ jj nn , cc jj pp$ nn , vbd rp in dti jj nn cs dt : in in np ' jj , ppss vb ppo jj nn nn in nn rb . ppss vb ppo . uh , vb ppo pn jj nn , rb , nn . cc vbg jj nn in ppo , pps vbd at nn nn in jj np ' rb jj nn , jj in at nn ' np nns , cc vbd at vbg nn nn rp in nn . rb , vbd np , rb vbg in at nn , nns in jj ppo jj in nn nn . wrb , nn jj jj . jj , np , vbd np , pp$ nn , wps , jj in at . . ( nn cd ( jj nn in at vbg nn , hvd vbn in at nn nn . jj , ppss vb , ppss np , cc vb at nn ' np nns . ppss md hv np rb , ppss vb np , in cd in pp$ nns . vb ppo , np , ppss ' ppss vb ppo at od vbd , cc cs ' vb ap cs rb bedz vbn at nn rb rp in np . ql rp ppss vbd in at nn , cc in pp$ jj nn np bedz rb vbn in at ap nn ' jj nn in wdt ppss ppl vbd . wrb abn nns bed rp cc np hvd vbn pn jj in vbg , pps vbd in ppo cc vbd , ppss vb np rb nn ' nn vb wrb to vb , doz pps . nn vb , np , vb ppo . do ppss vb pp$ nn cc vb pp$ nn . cc in dt nn , np , wps hvd rb cc rb rb vbn nn in jj nns , vbd at nns jj . cc vbg at vbn nn , vbn in at nn , in at jj nn , at jj nn in at jj jj nn wdt bedz vbn in pp$ nn . rb cs in nn np ' rb jj nn vbg pp$ jj , pps vbd pn cs dt : in in np pp$ nn . rb nn np vbd rb cc rb vbg np , cc in ap vbg rb cc vbg in at jj nns in pp$ jj in vbd jj nn , vbd rp at nn in nns , cc vbg cd vbn at ap nn nn . cc at nn to vb , vbd ppo in nn ' np nns , cc rb vbg ppo cc at nn in abx pp$ , vbd rb in pp$ nns , cc vbd , nn in nn , ppss md do pp$ nn in ppo . ppss bem nn nn in dt nn , cc vb vbn in at nns in abn pp$ nn . cs ppss rb jjt in pp$ nn nns , wdt ppss rb vb , ppss vb ppo , vb * in rb at nn nn . vb at nn np , cc at jj nn . vb in at nn to vb . vb pp$ nn , ppss vb . uh . nn jj . vb jj in at jj nn . pn in at nn nn rb vbd in jj np ' nn nn , rb vbn in jj cc jj nns . vb rb , nn rb , np , nn rb vbg pp$ nn , . . ( nn cd ( vbd np . jj nns rb vb jj nns in in pps vbz at jj rp in ' ppo . at nn bez jj at nn wps bez ql jj . ex bedz jj np np , rb at jjt nn in nn rp in abn np cc at nn . pps vbd at nn , cc rb vbd in jj . pps vbd ql vbn in pp$ nn nn , cs pps vbd cc vbd rb in nns , in nn in in in nns in nn pps vbd nn cc vbd in np np . np . np . vbd np , vbg pp$ nns cc nns , ppss jj , cs ppss ppl , hv vbn ap at jj nn . ppss jjt , np , wdt pps bez to hv at nn in nn . wrb , rb , md ' rb ppss vb in dt jj nn . ppss jjt pp$ jj nn , np . vb ppo , wrb dt ap fw rb hvd pp$ cd nns rb in dt nn in np , cs ap nn wrb ppss vbd nn in nn nn , dod ' rb ppss * vb in nn cc at nn rb . vb ppo , vb ppo rb , vbd np , vbg in at nn , cc vbg pp$ nns rb rp in pp$ nns , in in vb ppo , abn in ppo . vb in dt . wrb at nn ppss vbd at nn md vb . nn cc at nn rb . wdt . in abn cd nns vbg abl at jj vbg in at nn . cc at nn vbg in ppo , nn cc rb . vb in nn cc at nn rb . at . at nn to vb in nn rb . nn bedz wdt nn np cc ppss bedz vbg in . cc wrb to vb abn nns in in wrb to vb nn in nns in in wrb to vb in at jjt nn . dt bedz wdt ppss bedz vbg in . np vbd at ap , cc nn in pp$ nn , vbd in nn , wrb ppss vbd ppo . ex pps vbd , ql rb vbg dti nn in nns wps bed vbg at nn in nn in at nn . rb cc rb pps vbd to vb rp at nn , cc vb at nn in vbn nns , wdt rb md hv ben vbn . . . ( nn cd ( . . ( nn cd cd np nn ( nns , hv ppss vbn in dt nn . np cc ppss hvd rb vbn at fw , cc bed vbg rb in at nn , in at nn dt vbn in pp$ jj nns , wrb at jj nns bed vbn in ppo in at nn , wps , vbg in ppo , vbn pp$ jj nn in at nn in nn . pps bedz cc rb vbn in vbn nn cc vbn nns . at nn in at jj nn vbg pp$ nn . at jj jj in nn hvd in abn nns vbn in pp$ nn , cc vbd ppo cs at vbn jj nn in at nn , wrb at vbg nns hv ben vbn rp . hv ppss vbn in ppo . pps vbd . ppss vb at nn fw , ppss vb , vbd ppss , vbg to vb at ap ap nn in at jj nn in ppo . rb , at fw in in dt nn rb , pps vbd , vbg rb pp$ jj nn , cc rb rb vbg ppo rb rp in ppo , in at vbn nn in pp$ vbn nn vbd jj in at nn . rb , vbd ppss , ppss hv rb vbn at nns . pn rp rb in pp$ nns . in wdt . uh , rb ppss hv ' nn ' nn vbd dti , pps vbd rb . at nn cs , nn vb ap nns wps hv ' nn ' nn vbd dti , in in jj nn in ' ppo . cc ppss ber abn at rbr rp in ppo . at nn ' in at nn in at od nn in at nn . wdt ber ppss vbg rb , nn . vbd ppss . pps ' np vbd qlp , cs , to vb rp in abn nns in dt nn in ap nns , rb vbd at nn , vbg at jj nn in at nn pps . np , vbd ppss , vb ' ppss vb . dt nn hvz vbn jj in rb . pps ' vb vbg in pn cc pn ppss nn ' nn vb . . . ( nn cd ( vb . vbd at nn . ppss vbd jj in in ppss hv ' nn ' nn vbn jj nn rb , hv ppss . wps ' in jj nn . vbd ppss , rb vbn in at jj nn in pp$ nn . nn nn . wdt . at nn in pp$ nn , at fw . rb , in dti in ppo jj nn nns , pps vbz in dt nn . ppss hv ' nn ' nn vbn ppo rb , hv ppss . ql , ppss hv ' nn ' nn . pps ' vb jj ppss vb , cc bez vbg rbr , cc md be ql ql rb cs jj . abn ql rb cs jj . vbd at nn , in at rb jj nn in nn . vb ppo . wrb nn nn bez ql jj , rb dt jj nn in pp$$ md be ql jj . * rb . wdt do ppss vb in ppo . wdt dod ppss vb ppo in ppo . vb dt . ppss dod ' nn vb ap in pn in ppo . rb ppss ' ppss vbd cs pps ' vb at jj jj in nn , cc at jj nn in pp$ nn . cs ' pp$ jj , cs ' pp$ jj in in rb , abx jj qlp . cc ppss md vb wrb pps vbz at nn . nn cc nn . nn cc vb in in dt ' np at nn in nn nn . cc pn in dt nn wps vbd in ppo rp nn nn , rb rb , wrb pps vbd cs jj in cd nns cc nns . pn in dt jj nn in at np in at nn in np . -- in vbd pn in dt , uh . pn in at nn vb pps vbd in . cc pn in pp$ vbg pp$ nn ap nn , in in at nn . dod ' nn ppss vb at nn in ppo nns cc pn rbr , uh . ql , ppss nn ' nn vb ppss dod . wrb md ppss . wps vbz ppo . * abn np , ppss vb . cc nn ' rb , nn , ppss ' ppss vbd vb in at nn , cc wrb pps vbd ppo . rb , ppss hv vbn in dt , ppss md vb . uh rb , cs at pn vbz at ' ql in in ppss vb ppss vb pps ' vb ap cd nn . cc cs at nn vbd at ap rp . pp$ nn , vbd ppss , wdt abn dt vb in pp$$ bez rb , ppss nn ' nn vb , cc ppss nn ' nn ap nn . cs pps vbz in ppo cs ppss md be at ql vbn in at nn . cc cs ppss ber vbg in nn nn , in dt nn rb , at fw , rb vb ppo vb ppo , cs ppss vb abn in at nn in pp$ nn . . . ( nn cd ( abn in ppo , uh -- in jj ppss do . -- in abn . ql jj . in nn vbd cc nn vbn in at fw , at nn in jj nn vbd at nn , cs cs in at vbn nn . rb vbg at jj , vbd cc vbd : in in at ' ppss vbn , hv ppss . nns rp in at nns . uh , uh , wdt ' np vbd , bez vbn . cc wdt ' vbz to be , md be . cc rb rb , rb pps jj be , in abn . dti wrb , pps ' vb abn vbn cc vbn at ' jj . cc dti nns cc ap md vb in ppo , ppss vb . ql rb dts cs dti ap nns , np nn ' ppo . nn in ppo , nns , nn . at jj nns vb ppo . ppss ' in jj ppss vbd ppo . vb rb , nn , vbd ppss , cs ppss hv pn jj to vb ppo , rp in ppo . cc cs ppss ber rb vbg to vb ppo , ppss ber vbn in pp$ nn . cs ' vb abn ppss hv to vb . cc pps ' np vbd ql rb , cc ppss vb to vb at nn vb rp dt nn . ppss ber rb at nn in ppo in in at vbz in ppo . nn in ppo , nns , nn . uh , wrb ppss vb rb , vb ' ppo ppss ' ppss vbd * to vb pn in ' ppo . uh , pp$ jj nn , ppss md ' nn vb ppo dt nn in in ppo md ' nn vb ppo . pps bez at jjt nn in at nn in at nn to vb cs cs pps hvd at jj nn in ppo . nn in ppo , nns , nn . nn pps bez , vbd ppss . vb rb , np , vb ' ppss vb dt jj nn . cc vb , vb ppo pp$ nn , md ppo . np . np . vbd ppss , cc ppss vbd rb , abx vbg , cs dt ap ' jj nn , in dt jj jj nn . cc vbd cs pps bedz pn in at nn , vbg to be at jj . cc ppss hvd * vbn rb in at cd nns , wrb jj to vb at nn , cc vbg rb cs ppss dod rb , wps md be vbn cc np vbg ppo , cs in at nn . rb , at nn in ppo vbd ppo rb , cs ppss vbd pn in np in pp$ beg rb , cc vbd rp in pp$ nn , jj to vb cs at nn md vb at ap nn cs ppss dod . pps dod . cc rb pps vbd in ppo cs pps bedz vbg ppo , cc in wdt nn ppss md * in at nn in ppo vb . dt nn , vbn in pp$ jj , abn in vbg , abn in vbg , vbn nn in nn , rb nn in ppo . . ( nn cd ( abn nns in jj nns cc abn in nns , cc abn vbn in at fw . cc nn nn . cc at nn pps hvd vbn . cc at nn nn nn . cc at nn vb . cc wdt nn np hvd vbn in ppo , wrb ppss vbd at nn at nn jj . cc at nn in at nn vb . cc at nn ppss hvd vbn ppls to vb . cc at cd ap jj nns . nn bedz vbn to vb ppl cs dt jj np bedz rb vbg ppo cc * , cc in dt nn vbd at nn in np , cc in dt nn in ppo vbd pp$ nns . cc np vbd rp , in vbg to vb ppo . dt vbd ppo . cc rb rbr , cc rb cs pps vbd in ppo , ppss vbd ppo in pp$ nn , at nn . . . ( nn cd ( . . ( nn cd cd np nn ( at nn cc cd vbd , cc ex bedz jj nn in at nn . * rb bed at jj nns beg vbn , cc jj nns bed vbg in nn , cc nns in nn , cc nns in nn . in jj , pn jj cs at nn ' np nns bed vbg in at jj . nn np rb cc rb vbd rb , cc vbd in pp$ vbd vbg at jj nn in rp in at nns : np dod abn at vbg cc vbg in at nns . cc at nns vbn in at nn cc in at nn bed vbg cs jj in nn in nn . in at nn vbg nn ' in vbg at nns , nn bedz vbn in abn at nns wrb at nn ' jj nn bed vbg , cs pp$ nns md be in nn in nn , cs ex bedz at vbg wql rb at nn md be vbg . ql np cc ppss vbd rp pp$ nns , vbg , rb , to vb rb cs at ap . cc pps vbz ppss rb vb ql jj nn in dts nns , cc at nn dod * vb in ap nns . cc at nn . ex bedz at jj nn to be vbn , cc rb . . ( nn cd ( bez at vbg wql ap nns to be vbn in , cs at fw bedz rb vbn . at pn vbz wdt at nn in nns in in nns , nn in nns , nns cc nns , nns cc nns , nns , nn in nns , cc wdt * , ber jj in at nn in nn . ql rb in vbg , wdt vbz at cd in nns ' nn in at jj nn , rb in abn nns , nns , nns , nns , cc nns . cc cs dt rb vbz jj in nn nns , cc * in dti nn in at ap nn cs in nns . in in at jj nn in at vbg nn , at jj nns jj in at nn in at nn , cc at nn in vbg ppo in at jj nns rb vbd , pps md be vbn , cs in abn nns , vbg nns ber at ql vbn in nns in abn nns , cc rb in at nn cc nn in at ap nns in wdt at nn in at nn rbt vbz . rb , at jj nns , jj nns , cc jj nns cc nns , cc jj nns , rb , cc at jj nn cc jj nn . in at nn in pp$ nn in at nn , at jjt nn in at fw hvd ben rb vbn . vbg pp$ nn , nn , nn , nn , cc nn nns cc nns . cc , ql rb vbn , in dti nn ex bedz at jj jj cc vbg in nn in jj nns cc nns in nns , abx jj cc jj . jjs in dts wps dod dt jj cc vbg bedz nn np ' nn nn , at jj jj nn in at ql vbn cc jj nn , cc rb ql jj , wps vbd vbn cs , cs pps md vb ppo , pn md be vbn vbg in at fw , cs rb ql vbg in nn . in cd nn pps md vb in nn in at nn in nns in at nn ' jj nn . dt nn in at nn in nns in at jjs nn ' jj nn , wrb pps vbd pp$ nn . at od nn in at nn in nn in at jj in dti cd ' in jj nn . rb dod dti nn rbr vb pp$ nn , wdt bedz nn in in nn nn , cs pn vbd ppo . cc cs at nn in nn dod dt jj nn nn nn in rb cc rb , jj to vb pp$ nn cc nn in pn wps vbd to vb nn , nn , cc nn in abn in nn . . ( nn cd ( at nn in wdt pp$ jj nn np bedz vbn , cc in wdt pps ppl vbd at nn cc cd in rb in vbn nns . cc pps bedz jj to vb dt jj jj np vbg in nn , cs pps dod at ap nn , in at jj nn in nn in cd nn , cc at ql rbr vbg nn in at ap . cc bedz np ppl cc nn np in abn rb . cs in np , pps vbd rb in ppo at jj nn in at nns vbn , cc in at jj nn , rp vbd pp$ nn in dt nn in at nn . at rb cc at nn np vbd vbg rp in pp$ nn nn , vbg in at nns in at nns , vbg rp in at nns in at nn in nn , cc rb vbn in vbg rb in pp$ vbd . in dts nns in nn , np cc ppss rb vbd at nn , cc ql rb ppss vbd in nn nn , cc wrb pps bedz , cc wrb pps bedz vbg to vb in nn pp$ nn . to dts nns ppss md vb , cs pps bedz vbg rbr cc rbr , cc bedz vbn in at nn . rb , at cd nns , np cc np , md vb in pn jj to vb at nn in at nn . cs ppss hvd ben ql jj in ppl , ppss md hv vbn ql rb in pp$ nn cs ppss dod cc abn nn beg vbn dt nn in ql jj at nn , in rb vbg pp$ nns in at nn wps bedz to be at jj nn in ppo , ql rb cs at nn vbd rp in at jj nn . cc wrb at nn vbz dti jj , pps rb vbz cs cs pps be rb vbn in at nn , pps rb vbz to vb rp pp$ nns rb in ppl . cc rb dt nn pps bedz in ppo . nn vbd pn , cc vbd to vb pn . in ap pps bedz vbn rp cs dti nn ap nn at nn md rb vb . ql ap nn , np cc ppss vbd at ql jj nn . . . ( nn cd ( . . ( nn in cd nn nn ( pps bedz rb cd nn ' nn , cc rb jj jj jj nn , wrb ppss vbd rb at nn . ex ber dti nns vbg rb rb , cs ppss vb nr , vbd ppss in np , pps md ' nn be nns . pps ' vb rp in nn , ppss vb . vb rp . nn . vbd at nn , wp$ nn in at ap nn vbg rb in ppo , vbd at nn in abx pp$ nns , cc rb vbg ppl in ppo , vbd vbg rb at ap , in at jj nn , rb vbg in np in ppo . pps bedz np . vbg rb . nns rp , md ppo , vbd ppss . np rb , vbd np , vbg ppl , vb ' nn . vb vbg rb , rb . rb , ppss ber , vbd ppss , cc wdt nn bez cs in pp$$ . do ppss vb , np . np , cs ppss vb ppo at ql jj . ql , ql , ql . ppss vb ' nn jj in dt , vbd nn , rb cc rb vbg in ppo in np , in at ql jj nns . np , vbd ppss , ppss md nn pp$ nn cc ppo in vbg . ppss ber vbg in at jj cc jj nns , cc md vb * to be vbd . ppss be , be ppss . vbg rb in nn . pps ' np vbd , np , vbd ppss , vb rp . uh . vbd jj np , vbg ppo wrb ppss hvd vbn at ap nns . rb vb ppo , vbd ppss , np , vb rp . cc pps vbd rp in ppo rb , cc rb vbg pp$ nn in pp$ nn , vbd in in dod ppss vb pn vbg cs nns vbg in dt nn at nn rb . vbd in dt jj nn in in in nn nn , ppss vbd , vbg , . . ( nn cd ( rb , ppss vbd ppss dod vb cd cc cd nns . cc pps bedz ql jj to be jj . ql jj , ql jj , vbd np . nn in ppo . rb rbr ppss vbn ppo . cc rb rbr pps vbd rb in ppo . cc vbg pp$ nn rb , vbd , vb cs ppss md vb ' ppo rb , md ppss . vb wps . nn in ppo . nn in ppo . pps vbd , rb vbg rp . uh . nn bedz vbg to vb ppo in in in cc rb nn , rb nn in in ppo ' in abn cd , abn in at nn rb . in in jj nn dt nn , jj ' nn ppo . jj vb in ppo . np ' nn vb ppo rb ql rb , ppss vb . cs pps ' vb cs at jj nn . cc in dts vbn nns pps rb vbd , vbg ppo , in at nn , in at jj nn in pp$ jj nn . in ap , vbg in nn at fw , ppss vbd pn in jj nn , * at nn vbg . at nn nn bedz vbn in . at nns bed abn in , cc vbd in nns in nn . vbg rb in at nn , ppss vbd at nn in at nn jj . vbg at nn , ppss vbd rp , cc vbd rb at jj nn rb , vbn in at vbn nn in nn . pps bedz vbn in jj nn in cd nns , pp$ nn rb cc vbn in pp$ vbn nns . at jjt nn vbd in ppo . dts nns ppss vbd , np , wrb md ppss hv vbn to . vbd ppss , vbg rb in at jjr . cc pps vbd cs , wrb in at nn , np hvd * in abn vbd wdt ppss rb vbn to . rb ppss md hv vbn ppl to hv ben rb vbn in dt nn , bed pps * in np ' rb rb jj nn . cc ppss vb at nn rp . cc rb vbg at jjr , rb vbn in np cs rb ppss hvd rbt vb rp in at nn . vbg ppo to vb ppl rb . pps vbd pp$ nn in at jjr ' jj nn , cs cs vbg cs pps bedz jj qlp . cc rb , in ap nn , vbd rb rp rb . jj . np , nn ' nn vb rb , vbd ppss . uh . jj nn nn , vbd np , pp$ nn nn . vbn ' nn vb ppo nn . nn . vbd ppss , vb cs pp$ nn . ql jj nn . . ( nn cd ( rb . cc wql jj pps vbz , pps ' vb vbg ppl . vb rp , np , ppss ber jj , pps ' vb vbg at nn in at jj . vb rp , np . vb , pps ' jj nn ppo rp rb . nn nn pps nn ' nn nn . np vbd ppl in rb in at nn in at jjr , cc vbd pp$ nn nn . nn vbd in at nns . ppss vbd at nn vbg in at jjr , in cd in at ap . rb , in vbg ppo in pp$ vbn nn , np vbd ppo to vb cs , in pp$ nn , vbg in at nn in nns cc nns in abn nns , at nn , nns , cc jj nns rb , bed in at nn in vbg dti in at jjr nns in nns . cc to vb at nn rb in dt nn , ppss hvd rb to vb rp cd cc cd jj nns , cc vbd ppo rb in at nns cc nns . rb , pps bedz ql jj in at nn . ql rbr cs dts nn in nns wdt ber jj in vbg in nns . in nn , at jjs vbg pp$ nn , cc vbg ppo to vb at nn in ppl in at vbg nn , rb in dti jj jj nn . cs jj dts nns , at nn np vbd at nn in ppo , pps vbd at nn in nn in ppo in at jjr ' jj nn . wdt ' rb cs in , np . np jj , vb in nn . uh . jj jj . pps bedz vbg rp in dti jj nns in pp$ nn in nn , wdt , pps vbd , hvd in pp$ cd nns abx jj pp$ nns cc vbd pp$ nn , wrb ppss bed rb vbn in at vbg nn . at jj nn rb rb vbg at vbn nn , pps vbd to vb in ppo . pps vbd in at nn in nn . rb vbd vbn in at nn . rb vbd rp rb cc rb . rb vbd rp cc vbd pp$ nns . uh . pps vbd in ap , wps be ppss nns . vbn nns , vbd ppss , wrb doz pps vb . rb , rb , ppss ber vbg in ppo , be ppss . pps nns in in nn . at nn vbd rb ap nn . wdt nn . -- in nn . wps in ppo rb . . . ( nn cd ( ppss bedz vbg to vb ppo dti jjr nns in np , wrb ppss vbd at nn in nn . uh . np ' rb vb , vbd at nn . pps ' vb at jj nn nn , cs . jj nn , cc at jj . cc abn jj rb , ppss md vb to . cc rb vbg pps vbd in nn , cc ppss vbd . pps bedz rb jj nn . rb at nn vbd in nn in nns cc nns . at nns vbd ppls . at nns bed rb vbn . cc ap in at nn nns bed jj in vbg ap ap nns in nn . rb nn np vbd rb jj in pp$ nn . . . ( nn cd ( . . ( nn np cd nn nn ( in nn , in nn , in at jj nn in at nn ' np nns , cc in at fw hvd ben vbn rp in at nn , cc in at rb in jj nn hvd vbn rp in at nn , in pp$ ap nn in in at nn in nn in np , at od nn , pp$ nn in in in nn , cc at jj jj in at nn in in in abn dt , at cd nns , np cc np , vbn in at nn , cc vbg in at jjs nn , np vbd : rb , np . np , ber ppss jj pn bez jj . nn nn bez ql jj in in rb vbd in ppo in in pn ap to be vbn in nn , uh . uh , vb abn nns , rb . vb ' ppo rb rb in in nn ' ppo . at nn in jj nns , wql jj at nn , np , vbd np , cc rb in ppo , nn np , cc do pp$ nn . wql rb . rn in at ap nn in vbg in at nn , nn np cc nn np bed vbg ppo in at jj nn in at nn in nn , rb cs cs ppss bed to be jj in nns in nn , cs rb cs in abn nns in nn . cc , cs in nn nn , at nn in ppo bedz rb to be vbn . rb , ppss vbd pps bedz in at nn . cc rb , at nn bedz , . . ( nn cd ( cs pp$ nn bedz in at nn jj in vbg at nn in vb , cc vbg ppo rb rp in nn . qlp , cs dt bedz * in abn pp$ jj nn , cc at nn ' nn . cc cs pps bedz * rb ql vbn in in cs ppss vbd in in rb , nn np vbd rb . cc abn dt vbd jj qlp . rb cs in at nn nn ap nns rb vb ppls in nn in at jj nn in vbg rp at nn , cc vb rp at nn nn , hvg at nn jj in pp$ nn nns , cs ppss vb at nn in jj in at nn . cc ex bedz * ap nn to vb rp at nn , in nn np bedz rb ql jj . pps vbd to do ap in at vbg cc vbg , cc * np . rb rb , ppss nns in nns , pps vbd , cs at nns vbd in at jjs in nn . cd . np , nn ' ppo rb . vb at nn rb . -- in bedz at ap nn . cs ppss vbd rb , dt nn ppss bedz rb vbn in in nn . cc in nn at fw , in cd nns , at nn to vb at nn bedz rb vbn to be at ap nn in vbg rp at nn . nn at nn . nn cc nn . -- in nn . -- in bedz at ap nn , cc at nn vbd in at nns . rb , in vbg in vb , at nn rb vbn in at nn bez at jj nn in at nn . cc rb np , wps , in np , be pps vbn , in nn in pp$ ap nns , bedz cd in at vbn nns in at nn in -- pps beg vbn to hv vbn ppl vbd at nn in nn to vb at np nn in nn in abn at nns pps bedz vbn in , cs pps rb vbn dti ap nn in in np , ppss vb , md rb be vbn rb vbn in vbg in at nns in at vbg nn , cc in nns vbg wdt vbd at jj vb in jj , to vb at nns in at nn , wps vbd rb dti nn in at nn in at nns in np nn , in jj jj nn . rb , * cd nns jj , np hvd vbn ppo cs at jj nns md be vbn in nn at fw , rb in vbg in vb . cc nn , pp$ nn , hvd vbn at jj nn nn in np in dt nn ' jj nn . nn , vbg at ap nn in at nn , nn np . . ( nn cd ( vbd cc vbd jj in at ql jj nn . nn rb vbd pps md vb at nn in at nn md be vbn rp . rb ppss vbd in pp$ nn , cc vbd np to do at ap , vbg in at nns ppss abx vbd , in vbg in at nn in abl at nn in at nn . nn bedz vbg ppl , rb , in at nn cs in jj np md be vbn dti nn , nn in pp$ cd cd cc cd in od vbd . wrb ppss vbd at jj jj vb in pp$ nn , cc vbg nn , bedz vbn in at nn in nn np in at nn in vbg pp$ nn in pp$ jj nn . wps bedz pp$ od nn . bez cs at nn ppss nn in at nn nn . pps vbd . nn , ppss nn in nn . nn , cc vb pp$ nn . wrb nn ' nn ppss vb , nn vb , abn in ppo in in nn . np . nn , ppss nn in at jj nns . nn rb , np . nn , ppss jj nns . nn , ppss vb , abn in ppo , cc vb pp$ nns rp . cc rb vbg , pps vbd in at nn , rb cc rb vbg pp$ nn ql rb , cs jj np vbd vbg rp in pp$ jj . vbz ppss , nn np md hv ben vbg pn in in nn . in ap at nn bedz rp , at nns bed vbn , cc rp ppss vbd . pps bedz at jj , jj np . cc cs at jj jj nn vbn in nn , ppss vbd ppls ql jj in at jj nn , wp$ vbg nn vbd ppo in nn , cs in vbn nn . at jj nns in nns in at nns vbd in at nn . cc cs at jj nn nns in dti jj nn , jj vbg nns vbd in at nns . vb np , cs nn , vbd at od nn , cc rb cc nn , cs at jj nn rb vbd in at jj nns , cc vbd at vbg nn abn in ppo , cc at nns vbd , cc at nn vbd , pp$ jj nns bed vbn , in in jj nns in at vbg nn , vb vbn in vbg nn . ql in at nps jj nn vbd , cs np vbd in . rb dod dts jj nns vb ql rb in ppo cs rb . ppss bed jj in nn cc nn . nn in dt jj . . ( nn cd ( nn nn in at jj np , nn in pp$ jj nns cc jj nn , ex bedz rb , pps rb vbd in ppo , ap at jj nn in nn . cc vbz cc nns ql rb jj , cs at nn vbd rp in at nn , jj , vbn , vbz in nn . in ap ppss vbd abl at nn , cs at cd nns bed vbn ql rbr . at jj nn in nn wps hvd vbn ppo vbd vbg rb . pps bedz jj cc * vbg , wrb np cc np bed vbn in dt nn , rb nn np . in jj to vb , rb . ql jj to vb , in jj , at nn vbn in ql jj cc jj at nn in in in abx jj nns . at nn in wdt dti nns in pp$ jj vbn nns bed vbn . at nn , in wdt at jj nn vbd cs nn . at nn ql ql jj cs pps , rb rbr vbg to vb abn at nns in at jj nn . jj to vb jj in vb in at nn cs at nn jj in at nn in ppo , in in jj jj np vbd rb . vbd at nn in jj nns ( vbd rp in at nn to vb dt nn nn rb . rb vbd in nn , cc vbd in nn . vbd in at jj cc jj nns , rb vbn in at ql in in jj jj nns . vbd in at nn , vbd rb . vbd rb cc vbd . vbd rb cc rb . cc in ap , rb vbg at nn in pp$ nn , rb vbn jj np in at nn , cc vbg rp at nn , in at nn vbd vbg rb in pp$ nn , cs ap cs to vb , rb , nn np , ppss md vb ppo . rb , ppss md . cs in np ppl , pps vbd ppo rbr cs at nn . cc in abn pp$ nn , ex bedz at nn vbg in pp$ nn , wrb at nn vbd ql rb . cc pps , rb , dod * at ap nn in nn in nn in in rb at nn rb , cc rb at nn in np , at jjs nn . cc , in ap , pps vbd in pp$ nn , in at jj nn in nn in ppo , in in nn np in in vb , jj nn , ppss md vb . rb at jjs in nn rb . nn nn . vb in to vb rb rb , rb . jj , jj . -- in vb , np , nn in in vb pp$ ap . nn in ppo , np -- in nn in ppo , np . np in in nn in ppo , . . ( nn cd ( np . nn in in jj in vb , cc jj nn in ppo abn -- in cc dt nn cd nns ppss ' ppss hv at jj nn vbg in ppo in jj np . uh cc rb . nn vb ppo , cc hv ppo in pp$ jj nn , nns , vbd jj np , ql rb . nn vb ppo ' ppss hv jj nn rb , cs dt nn nn md rb be vbg in ppo in in at jj nn bez abn pps vbz , cc ppss ' ppss hv nn in ppo in at jj nn ppss vb . be jj in at nn , ppss nns . nn ' nn vb at nns rb , ppss nns . jj jj jj nn bez vbn jj cd in nn . in at nn . nn ' nn vb pp$ nns , cc . np np , nn cs jj nn ' nn vb at jj nns . uh . at nn in nns ber in at jj nn . nn ' nn jj ppo ql rb at ' nn ' np nns , nns . cc nn ' nn vb at jj nn cc , cs ' pp$ vbg nn ' in jj nns . hv at nn in at nn jj , np . np . pps bedz at ql jj , ppss vbd . cs ppss vb in at nns , np . nn , vb in nn . jj in vb , jj in vb . nn ' nn vb dt nn ql rb rp in at nn , np . np . pps ' ppss vb . be jj in at nn in in cd nns at nn pps bedz , cc vb ppo , cs in in vb , vb , nn np . vb vbg , in in rb . cc in dt , np vbd ppo in at nn , cc abx vb in at nn . nn cc nn vbd . at jj , jj nn nn vbd in . at vbg nn vbd rb . at cd nns rb vbd . ppss vbd cd jj in jj nns , cc rb vbd cs nn in at jj np . . . ( nn cd ( . . ( nn np cd np nn np ( dti nns rb , cd np bedz vbn in , at jj , jj in vbn nn , vbn in jj np in at nn . wrb in dt vbg nn ' jj nn , at fw vbd pp$ jj nns in at jj jj nns , wps md ppss vb . . ( nn cd ( vbg in pp$ nn cc np . nn vbd in jj nn cc nn in at nn , wps in jj in nn rb vbd in at cd nns ' jj nn , md ql rb vb rp rb in rb dt jj nn . at nn vbd jj in pp$ nns . jjt nns ber rb at jj . jj nns vb at nns . dt cd in nn nn bez at jj nn in np . vb ppo rb vb cs pps vbd in ppo cs in at nn in vbn nn , cs rb vbz in at jj nn . at nn md vb vb nn . at nn bez jj . in at nn bez nn , nn , nn , nn , jj nns , nns , abn dt ' np nn in pp$ nns . cc in dt nn , at nn , at nn , bez dt nn ' pp$ jjt nn . pps md vb abn nn . cd nn in nn , cs pps cc vb at nn , md vb ppo vb rp cc rp . in abn pp$ md pps nns abn vb rp nn . in rb vbg , vbz ' in at ap nns wps vb md vb ppo rb . vbz abn at vbd nn ' jj nn rb . in nn ' jj nn rb vbg in nn . pp$ ap nn pp$ jjt nn . vb ppo , rb , np . nns do ppss vb to vb in dt rb jj nn . cs abn jj , jj nn bez cc at jj nn in at nn to vb at jj nn in pp$ nn . cs at jjt nns in nn cc nn vb to vb ppo in at jj , jj nn . cc cs in nn rb vbz at jjt nn , jj , jj cs np in in rb , jjr bez ppo to vb in dt vbg nn , cs be rb vbn in at nn , rb cs dt bed nn . in nn -- cs , rb , uh . wps md jj nn in nn . nns in at jj . bez abn dt nn ql jj . vb nn , vb nn , np np . vb ppo rb , nn . rp in at nn in pp$ nn in vbg in in rb rp , vbz pp$ nn . . . ( nn cd ( . . ( nn nn cd np np ( cs np cc ppss ber rb ql vbn in dt nn in vbg . cc cs dt nn in vbg hvz rb vbn to be vbn in nns cs at ql jj cc jj nn . rb , ppss bem ql nn to vb ppo , ppss nns , in at nn rb vbn in ppo nns in nns . in at od nn , pps md be vbn ql jj to vb at nn , cs in nns in jj , at nn in vbg bez * vbn in at nn in wdt ber vbn at jj nns . cs at nn bed vbn in dti jj jj nn , pps md cc rb vb at jj nn in pp$ nns , bed pps vbd in at nn cs at nn , vb . cc cs in nn in at jj nns pps md vb at nns nn . nn . nn . ( nn np np ) in pp$ vbg nn , abl at nn md be vbn in in rb vbg cc jj . rb cd vbg nn wrb at nn vbz vbg ppo nns , bez dt : ppss vb cs , in jjt , pp$ nn vbz in at vbg nn in nn . cc cs wrb rb vbn rb , ppss ber vbn in abn nn in nns . nns ppss ber , wps bez jj . cc nns , rb , cc nns in at jjt nn hv ben ql jj nns wpo at nn rb vbz to vb . cc cs in at nn in at vbn nn in pp$ nn , ppss md rb be vbn in jj nns rb ql rb jj , cc wdt , in at jj , md rb vb at nn jj in nn in ap in at jjt nns in dt jj nn . cc rb vbg at nn in nn to be jj . wdt vbn jj nns in at jj in nn ber jj in at jj vb in dts nn in nns in wdt ql ap nns vb to vb in abn nns ' vbz . cc cs at . . ( nn cd ( nn in nn ql rb vbz at jj nn in at nn ' jj nn . vb ppo vb ppo cs ap at nn wps hvz rb vbn rp in at nn , md rb vb in at nn in at nn jj ' in jj nn , vbg in nns at nn in pp$ nn . in wdt ber at jj nns in nn vbn in at vbn nns cc nns in np . cc , cs at nn nns in ppo jj nns , cc doz pps rb vb ppo at jjt nn . rb , at abn in vbg nn . in rb abn at nns , nns , cc nns wps vb in at nn , nn , cs cs ql ap nns , in pp$ nn . cc vb in dt nn in ap nns . vb ppo in abn nns in nns . vb wdt ppss nns ber , cc hv ben . wrb dod at jj in np ' nn nn hv nns in pp$ vbg nns . wrb dod np np . in np , in pp$ jj jj nn , vb rp vbg nns in np , cc rb vb in dt nn dti nn cc cd in nns in pp$ jj nn in np . wrb dod np in at nns cc vb in pp$ nns in nns rb in cd , cd , cd nns . cc rb , wrb vbz ppo cs ppss nns in np rb vb abn at nn in at vbn nns in at nn . vb at nn in rb in cd cd nns . vbn in cd cd nns . rb vbg cd , cd , cd in nns . at nns jj , in at nn in vbg , cd , cd , cd nns . cc at nn jj in pp$ nns at rb vbn nn in cd , cd , cd nns . wql vbz abn dt , cs ex be * pn jj in vbg . cc dt bez * at nn . vb rb . nn rb vb , cs at jj nn md , in pp$ nn , nn in cd ap jj nn , wdt in at ap cd nns hvz vbn ql rb in at jj jj nn , vbn in cd nn , cs at jj cc jj nn in vbg . cd nn cc dt , pps hvz vbn nns ql jj in ppls , cc ql rb jj in pp$ jj nns , cs vbg md rb be vbn cs cs jj nn , wps vbd nns ppls jj in pp$ nn . pps md be at jj , jj nn in nn abn dts nns . vb at nn vb . in ap . . ( nn cd ( nns in at jj in nn hvz ben at nn in nn in at jjt cc ql vbn nns in at nn . pps hvz vbn nns cc vbz wdt hvd at nn , wrb at np cc np hvd rb vbn . cs jj cc jj nns in in in nn rb rb vb in rb jj nns , vb ppo nn nns in at nn cc nn in at jj in nn , wdt rb vbd ppo at nn , cc rb vbn in ppo cc at nns . ppss md vb cs ppss md at nns in jj nns , pp$ nns , pp$ nps . cc ppss vb cs nns in jj nns hv vbn rp in np , wps bed ql jj , cc jjr cs pp$ np cc pp$ jj . in in pp$ jj nn , ppss , in at jj jj nns , cc in at nns in vbn , jj nns , vbn in jj nns cc vbz cs np in abn pp$ nns cc nns md * rb hv vbn . abn wps bez vbn abl at nn in in at jj jj nn nns , dts nns bed cc at nn nns in pp$ jj nps . rb , nns wdt rb vbz cd nns in , dts nns vbd jj in beg vbn rp in at nn ' in jj nn . uh , at nn . uh , at nn . cs at jj nn vbn nn nn , at nn cc jj , rb dti nn cc jj , bedz vbn rp in np cc at jj nn in at jj jj nns in at jj nn . pps bedz at nn wps rb vbd in at jj nn in at jj nn , vbg dts nns . cc , cs nn vbd , pps md be rb vbn wrb in dts nns in ap vbn at nn in np , fw , cc np in at nn in jj np , cc at nn in at jj nn in dts nns . dt jj np in at ap nn in at nn , np , bedz vbn in at vbn nn in at nn . cs pp$ od nn in vbn nn in at np , abn ap nns rb vbd dts nns ql rb jj . cc at jj in nn vbd rb . at jj in nn bez at jj nn in dt rb jj nn . rb , in at nn in at od jj nn , at nns bed ap nns vbn . . ( nn nns ( in nn in at jj nn in at jj in nn rb vbg at nn in pp$ nns . at jj nn in abn np vb at ap nn , cc do jj nn in at jj in nn , wps vbd at nn in at nn cc at nn , cc in ap nns vbd at jj nns in pp$ od nns . cs dt nn in vbn nn , np , bez rb to vb jj , pps bez at jj in nn rb in wpo at nn md be jj . in rb pps bez in at nn . cc cs , in at nn in abn dt , ppss rb vb cs vbg hvz ql rb jj nns vbn in ppo , rb bem ppss jj to vb cd nns in ppo rb , cc nn ppo in at vbn nn at nn . at jj hvz at jj nn , cc vbg at jj jj , ppss md vb . at jj at jj nn , cc vbg at jj jj . wps vbd at od nn in pp$ jj . wps cc jj np . cc wps vbd at od nn in at vbg in nn . wps , cc at ap at nn in np at jj , wps , in pp$ jj jj nn , vbd rp at nns in ap , at jj jj in nn in dts nns . cc wps vbd pp$ vbg nn in nn . wps , cc np np . jj qlp , cc rb nns ppls ber jj nns . ppss hv at jj nn in pp$ nns . ql jj nn in pp$ nns . ppss hv pn jjr cs jj nn rb . at nn in np np bedz np np ( rb , in nn , np np , cd in at jj nns in np , cc at nn in at jj nn in np cc nns in in abn jj cc nn in jj np in in dt nn vbg at vbn nn in cd nn in at nn in at ap . jj rb . cc rb abn vb cs rb vbg bez * jj . vbg * jj . vbg bez jj . in jj jj jj nn , at jj bez vbn at jj nn . . . ( nn cd ( uh , cs ' vb ap jj . at jj ppl hvz rb vbn in dti jj vbg nn . at jj rb vbn in dti jj vbg nn . in cd in at jj nns vbn in at jj nn in pp$ vbg at nn ' jj nn , at nns in at jj , vbd abn at nn in at jj nn , bed at ql jj nn in at vbn nn . vb ppo , cs ppss vb ppo . cc , vb wdt ppss md , ex bez at jj nn in vbg . at nn in vbg . at nn in pp$ vbg at ap nns vb . np bez at nn in at nr . ql rbr . vb rp pp$ nn in nn in at nn , cc vb ppo rp in np . ql rbr . nn vb at nn cs , in pp$ nn , hvz vbn cd cd cc cd nns . nn nn cs nn ql jj cs dt jj nn in nn wps vbd in vbg ql ap vbn nns . cc , cs in ppo , cs , in dti nn , ex be dti ql rb jj jj nn in ppo . cs ppss md rb vb dti jj nn in dt jj cc jj vbn nn wdt ppss md * be ql jj in . cs rb ppss md do pn cs , in at jj , at nn md rb hv vbn cs to hv vbn vbn . cs , in pp$ nn , pp$ nns , cc ql rb pp$ nns , vb dti jj np . in pp$ nn , rb rb ppss rb vb abn at nn cc at nn in vbg . in at jj in nn bedz pp$ np nn cc pp$ np . . . ( nn nn . ( vb jj nns in pn ap in dt nn . . . ( nn nn . ( vb jj nns in pn ap in dt nn . . . ( nn cd ( . . ( nn hv cd nn ( in nn in at nn in vbg , ppss md vb vb pn cc jj nns . cc in vbg pp$ nns , at nn wps md rb vb at * jj . . ( nn cd ( vb , wdt md vb rb in pp$ nn in in abl at nn , md pps * be jj . pps bez rb vbn cs in at nn in nns cc nns , rb jj nns , at jj jj nn in nn ppo in pp$ nns bez vbn in . ex bez at jj in nn , ql vbn , cc ex md be at jj in nn . wrb ppss vb at nn , rb in in wps vbz . ap ppss bem , rb , cs at nn ' jj nn bez rb vbn in pp$ nn , rb cs at nn in nn . md ppo be , rb , cs ppss vb ppo in at nn in vbg pp$ jj nn rb , cs ppss vb nn . ap md be jj rb , in at jj nn in dt jj nn , cs in jj nn ppss nn cc rb cc rb at nn wps vbz pp$ nn , cc rb vbz in dt jj . in nn , at jj nn wps vbz nn in nn , cs rb , cs nn hvz rb vbn at jj nn in ppo rb . cs at jj nn , pps md ' nn nn in ap in pp$ nn . cc at ap nn to be vbn rb , bez dt in in wdt nn in nn bez vbn in nns . rb pps md be jj nn , cc jj nn , cc nn nn , cc vb ' np nn , cc nn nn , cc nn in nn nn . wdt rb md pps rb be , cc nn nn in pp$ vbn , vbn nn , at jjt in abn nns . vb in dt , ppss jj nps . ppss nns vb pp$ nns cc nns in nn nn . . . ( nn cd ( . . ( nn fw cd np nn nn ( at jjs nn in at fw bedz np , at nn in np , cc at np in nn . pps bedz at jj , jj nn , cc cs vbn in at jj nn , vbd rb vbn to vb jj nns , pp$ nn beg rb ql rb in vbn nn . vbn in at nps , pp$ jj nn md * vb cs vbn . . ( nn cd ( nn . pps md hv ben vbn in dti nn in jj nn cc nn , cc in cd in dts jj nns in wdt pp$ nn bez jj . rb dti cd jj nns hvd pps vbn . dts nns hvd vbn rp abn pp$ jj nn . cc dt , pp$ nn , rb to vb , vbd at ap at nn in vbg nns cc nns , cs pps vbd at nn in dti jj nn . pps bedz rb at nn in at nn . pps bedz in at nn jj in vbg . abl at nn . pp$ jj jj nn bedz at jj nn . cc rb vbn rp in ppo , cc vbn in jj nn cc nn , cs at vbn jj , dt np vbd vbn to vb in jj nns to vb , cc to vb rb , cs rb . in be ppo jj nn cc jj nn , cs at nn nn , pp$ jj nn bedz vbn to do rb in abn nns . vbg in pp$ nns , ppss vbd to vb rb at rb vbg nns in dts cd in nn nns pps hvd rb vbn in nn . at vbn , jj nn , wp$ nn in at ap nn bedz at vbg nn in nn , cc * at jj nn in nns . rb , in abn pp$ jj nn cc nn , ex bed ap nns in ppo wdt in nns vbn , cc in dti nns vbd rb rb to vb abn at nn . ql jj in at nn , cc vbn in at jj jj nn , at jj jj nn in pp$ nn dod rb rb nn ppo in nn . cc in dt nn in nn , wdt in dti nns vbz rb in nn , rb , in nn cs in nn . jj nns cc jj nns bed pp$$ . cc cs in nns dts nns vbd at vbn nn in pp$ nn , ql rbr dod pp$ rb in rb jj nns in pp$ jj nn nn cc nn , vb to vb ppo rb rbr in at jj nn in pp$ nn , cc vb ppo rb rbr in dts jj nns wdt , in dti jj in jj nns , vb at nn in vb in nn vbg , ql rb vbn in nns in at ql jj nns in at nn . nn md hv at nn in pp$ nn , vbd nns , wps bez * jj in at jj . in dt , pps vbd to vb , * rb cs at ql jj cc jj nn bedz dt wdt vbz in at jj nn in at vbn nn , cc cs at ql jj nn bez at ql ql jj nn in at nn . . . ( nn cd ( np , rb , vbd np , at od nn , np , rb , bez ql jj at nn cs ppss ' ppss vb rb in dt nn . cc ppss md cs rb vb wdt dt nn jj rb vbz wrb vbn in at nn cs np , cc rb dti ap jj nn . np bedz at nn in nns . in ppo nn bedz * at nn . cc at nn rb jj in ppo , cc rb in nn in abn rb jj nns . rb , pps vbd , rb , cs in dt nn in vbg , nn bedz cd in at jj nn vbz in at nn , cs pp$ nn cc pp$ nn , cc * to be rb vbn . wrb pps hvd at nn in vbg in nns in nn in rp . cc in vbg in vbg at nn cs ql ap vbd in vbg ppo . in , vbd np , ppss bem rb in dt jj nn to vb nns in pp$ nn , cc * to be vbn in ppo in pp$$ . cc cs nns in nns hvd ben ql vbn np rb vbd . wdt nn bedz pp$ jj nn ' nn . wrb , in at jj nns , md pps vb at vbn nns in pp$ nn . in nns cs dts in ppo , cc , rb , vbn in at jj nn , cs hvz ben vbn . at nn in dt np wdt md , rb , rb vb , md rb hv ben jj . cc pps bedz * in jj nn cs at nn ql vbn , cc in jj jj nns cc nns cs pps hvd . pps bedz * in nn cs dts nns md vb in rb vbg at nn in ppo , wdt , in jj nns , md vb rp in pp$ nn , cc vb abn pp$ nn rp . cc jj cs pps md be , pps bedz dt nn in nn rb , jj in dti jj nns , wdt , cs rb vbg nn in at nn in nns , cc nns , cc vbz , cc dti in at jj jj nns in at nn , rb md vb dts ql jj , cs ql jj nns , wdt rb nn ppo in at vbg nn in at vbd cc jj nn . cc bed at vbg nn to vb , in dti nn , at jj nn in jj np ' nn nn , jj md ppss hv at nn to vb ppo . cs pps bez at nn ql jj , rb jj , to vb at nn in nn in at nn . nns md vb jj cs jj nn in nns cc nns . nns , . . ( nn cd ( nns , cc nns ex md be . nns md hv jj cc jj nns . cc nn , in at jj , bez ql jj cc ql jj , abl at jj cc vbg nn , cs in dti jj nn in ppo abn pp$ nns md vb to vb pp$ jjt nns . dt jj nn ppss vb in ppls , ql rb in ppo , cs pps vbz jj cs abn at jj nn vb vbn . vbz in jjt nn in at jj nn in at nn in vbn nn . cc md nn ppl , in abl at jj nn , rb vb pp$ nns in at vbg nns . cc dt jj nn ppss vb in , bez * at nn in nns cc nns , cc cs vbg nn wdt hvz rb vbn nn . ppss nn vb ppo vbg in at nn wps vbz at nn cc vbz at nn . dt jj nn wdt , in abn nns , vbz in nn in np . ppl . at jj np jj . at nn cc nn in abn nn . pp$ nn , pp$ jj nn . cs , rb , in jjt nns , cc nns cc rb , ppss md rb vb jj nns , cs jj . vb vb ppo jj nns . cs rb at ql jj , rb at ql jj , in ppo abn , md in nns vb ppl in at vbn nns . cs ppss md vb dt nn ' jj nn in dti jj nn . cs ppss md vb at nn in pp$ jj nn in nn . rb in abn jj nns vb ppo rp in ppo , ppss rb nn in nn , wdt hv vbn cd jj nn in nn in abn pp$ nn . vb ppo rp in ppo , ppss jj jj np . wps in * vb in at jj nn , np , at jj , jj nn . ppss wps in vb in rb vbd nns in jjt nn , at vbn cc jj nn in jj np . ppss wps in vb rp np np in at nns . wps in vb ppo in at nn in nn . wps in vb ppo jjr cs at nn . ppss wps , in abn pp$ jj , jj nns , rb jjt pp$ jjt nns in at rb nn . vb ppo rp in ppo , uh np . . . ( nn cd ( . . ( nn np cd np nn nn ( np bedz at od nn . pps bedz at nn in nn nn . cc rb , in in jj nn , bedz vbn at nn in nn in nn . at jj in vb in jj . cc jj cc jj . vbg nns cs ppss vbd in at jj nn . cc cs vbn in at ql jj nn in at nn , jj rb , jj cc vbn cs at nn nn vbn in at nn . jj in vbn , jj , cc jj , pps vbd rp pp$ jj in nn cs cs at ql jj nn bed cc at nn , cc pp$ nn abn vbn nns . pps bedz ql jj in at jj nn in pp$ nn in at nn , cs at jj nn in nn bez rb at nn in pp$ nn . wrb rb in at jj , in at ap nn in nn in at nn , pps vbd pp$ jj nn rb cc rp in rb , cs at vbg nn pp$ nn . pps md vb rp pp$ jj nn nns cs nn cc nn in at ql vbn nn . jj nn hvd , in dt np , vbn at nns in nn in at jj nn . wdt pps vbd in nn ppl , ex bez at nn . cs pps rb vbd in ppo in abn , md be at nn . cc , cs pps rb dod vb to vb pp$ nn cs nn in at jj nn , at nn , cs at jj nn , pps vbd ppo to be at nn in nn in at nn to vb rb , cc vb ppls rb , in pn wdt pps md vb rp wrb pps vbd at nn , cc * rbr . wdt , rb , in ap nns , vbd np abl at jj , vbg nn , ql rb jj rp in at nn in nn in at nn jj in jj nns , abn vbd in at nn in pp$ nns . wdt vbd to vb in dt ql jj nn in nn in pp$ . dt nn md hv ben pp$ nn . in , cs pp$ nn , pp$ jj , jj jj nn bedz cd in at jj nns in pp$ nn . ppss md rb ql rb hv vbn ppo to vb rp in pp$ nn in pp$ nn cs in pp$ nn . . . ( nn cd ( pps vbd at jj nn in nns rb jj vbn , vbn in at nn , in jj nn in pp$ nn . cc , wrb pps vbd rp , pps vbd ppo abn rp in nn , vbg cd in at ap in at nn in at nn . rb vbg ppo rb to be in nn rb . in , wrb np vbd , rb in rb vbg pp$ nns in pp$ nns , pps vbd pp$ nn in pp$ nn . nn vb dt jj vbg md hv ben cd nn , in ap , in pp$ jj nn . in at pn vbz cs dt jj nn , cs rb cc rb , bez rb vbn in at jj nns in at jj nns wps hv vbn vbg ppo . cc cs in nn in at nn , dti nns vb rb in at jj nn in pp$ nns . rb , rb , in abn jj nns , np ' nn nn nn md hv vbn cs at nn in vbg nn . at od nn bedz nn , at nn in np , in np ' nn nn . at jj , jj , ql jj nn , ql jj in nns , wps rb vbd to vb cs at jj nps hvd rb cc rb vbn ppo . cc rb pps bedz at nn in nn in nn in ppo , to vb ppo wrb vbn . ql ql vbn bedz pps in abn nn in nn in at ap nns in pp$ jj nn cc jj nns . cc ql jj in pn cs at nn in dti jj nn in nn ppo . cs in pp$ jj nn , at jj jj bedz cc at nn in vbn nn , cc in ap nn in nn , vbg rb at ap nn cc dti jj nn in nn cc nn in nn to vb cc vb . dt jj , jj nn in pp$ vbn ppo at ql jj in at nn in nns . pps vbd dts nns in at nn in ppo . cc at cd nns ' nn jj nn nn bedz rb at jj nn wps vbd dt nn in nn . cs at nn ' np nns ber vbn in vbn nns cc vbn nns . cs nn md be rb vbn . ap nn bedz cd in at vbn nns . vbn to vb jj cc ap jj . ppss vbd ppo nn in nn in nn in at fw . rb , in nn , pps md be rb vbn in at jj , jj nn vbn in dt nn in jj nns . cc wdt in at nn in ap vbg nn nns vbn in ppo , vbd to vb at nn in at jj nns in dts vbg nns . rb dts cd nns in in np , np , cc nn , bed . . ( nn cd ( jj nns . ppss pps bedz wps in jj nn vbd cd in at fw ' np nns cs nns . in dt jj nn in nn in wdt nn np md rb vb pp$ nns to vb in at nns , dts cd nns bed ql nns in nns . cc , beg vbn in pp$ jj jj vbg nns , ppss bed cs at vbn nn in nns . rb cs at nns bed vbz in nns . cc cs in dt jj nn , dt nn cc nn , cs at jj nn in jj , bez rb vbn in pp$ nn in jjr cc nn , wps in ap nns vbz ppo in at jj nn , wrb at ap cd hvz ben rb vbn , cc vbn in at nn . cc rb , cs ex rb nns in at cd , at jj nn cc nn . pps bez rb cc vb , cs in dt nn ppss vbd rp wps at fw ' np nns bed , cc in wdt nn dt in ppo vbd . od in abn bedz nn , wpo np , at jjs nn , hvd vbn in pp$ nn . cc np bez rb vbn . ap bedz np , at jj jj in np nn , at ql jj jj in np ' nn nn , wrb ex rb vbz at ap nn in at nn in jj nns , wdt hvz rb vbn at vbg nn in np in ap in pp$ ap vbg nns . in at nn , ppss rb vb in at nn nn in np in nns . np ' rb rb , jj , nn nn , pp$ jj nn nns , cc jj vbg nns in in in at jj , jj in pp$ nn , cc np in pp$ vbg nn in in abn dt rb vbd ppo at nn in at vbn nn in dts jj nn nns , wps , in nn in at jj jj np jj , hvd vbn , nn in nn , at jj nns in at jjs . cc ql rbr vbg in at nn in at jj nns in at nn , np rb vbn in at nn in at jj nns in at nn . at jj vb in at nn rb vbg at jj nn in at nns . to vb in at jj jj in pp$ jj jj nns , ppss md rb hv vbn at nns in dti in at jjr nps , cc abn vbd dt jj jj to be at nn in at nn in at np in at nn . np bedz np at od nn ' jj nn . od in at nns bedz nn , at jj , nn in jj . . ( nn cd ( jj in jj , in at nn in jj nn in in at nn to vb . vbn in pp$ nns bed cd jj nns , ql jj cs at nns vbd ppo nn in nns , cc md vb in vbg at nn in nn nns in ppo . in pp$ nn nn hvd rb vbn in nn in at jj , vbg in at jj nn in pp$ jj nn . cc rb hvg ben rb in at nn cc in np , np , cc at nn vbz ql vbd in nns . cc hvg rb vbn in ap nns at jj nn in at nn in at nns in nns ql jj in wdt nn in nns ppss vbd . vb vbn abn pp$ jj nns , cc vb cs at jj , vbd in at nns in abn at nn in cd nns cd in pp$ nns . ex bedz at jj nn in vbg rp in ppo . cc at jj nn vbg in ppo vbd at jj nn vbn to vb nn in at nn . jj to vb , dt jj jj , np nn , bedz at nn in jj nn , wps vbd cs at nn in nn in ppo . cs in at nn in at fw ' jj nn , be pps vbd , cs in at jj nn * cd in cd in at ap cd nns in at nn vbn in at jj jj nn , ber nps vbn , cs ql rb abn at nns ber . rb pps bez at ap in at jj jj nn cs in at jj nn cc jj cc nn vbz , cc at vbg nns vbn in at nn in at jj nns cc nns . at ap , ppss vb , cs in abn dts nns at jj jj rb vbz at nns , at nn in at nn ql rb vbg at nns . ql jj nn in dts vbg nns vb in at nns , wrb at rb vbn np nns rb vb to vb pp$ nns in at jj nns in dts jj nns . rp cs nn , at np nns vbg rp in np cc np , vbd rp in at np nns , to vb at jj nn in pp$ nn . in at nn rb , ppss vb ppo rb rb . wrb pps bez , ex bez at nn , cc nns vb to vb at jjt nns . ppss bed rb abn nns in at fw , nns rb , ppss vb jj , * vbg at jj nn in nns , cc dt np vbg in at jj nn in pp$ jj . rb rb , vbn in cd nn , wdt at nn dts nns bed . at np nn nn in abn at . . ( nn cd ( nn in at nn , cc abn at nns in at nn , vbg jj nn in at nn to vb at nn ' np nns in dt nn in wdt * ql ap in ppo rb vb rb . jj jj np in in pps rb dod in -- uh , at . pps vbd rb . jj np nn . in at jj fw ' jj nn , ppss md cs rb vb ppo , vbg pp$ nn . jj in at jj nn , wrb vbn in , in at jj nn in nn in jj , pps bedz vbn nn in in nns , cc vbd pp$ nn in nn . vbd at nn rb , vbd at nn rb . . . ( nn cd ( . . ( nn np cd nn ( in ap nns in vbg np , pn in nns bedz vbn in nn nn . at nns rb vbn dt ap in at nns , cc in nn wps md be vbn in at jj , ppss vbd to be at ap nns in at nn . rb ppss rb vbn in at nn in nns ql jj cc jj , cs cs abn pps bedz jj ppss cc vbd rb . rb , pp$ jj nn cc nn bedz rb , cs rb jj in dti nns * vbn to vb in at rb jj nn in at nn . at nn ppss vbd in at nn in pp$ nns rb , ppss rb vbd rb to vb cs dti jj nn bed jj . in pp$ od jj nn vbg at jj nn , rb in at nn in at nn , vbd rb at nn . dt bedz rb vbn in nns in at jj np ' rb jj nns rb vbg in ppo , in at jj nn ppss md * hv rb vbn in . cc rb md ppss vb ppo , rb cs in ap nns ppss bedz ql jj to vb in at jj nns in dt jj nn in at nns . cc wdt pps bedz in nn cc nn in in to vb ppo rb in in wdt ppss vbd , rb wrb ppss vbd to vb in ppo in at nn , pps vbd in abn nn to . . ( nn cd ( vb jj nns . in cs at nns , in at jj nn in at nn , bed at ql ql jj , jj , cc jj nn cs dti in at jj nn in nn nns wdt pp$ jj nns hvd vbn ppo vbn in , rb ppss vbd dt in -- cc rb vbn ppo in in in at jj nn in at ap nn in dt jj jj nn in wdt ppss hvd ql rb vbn . cc pps bedz rb at nn in at cd jjs nns in at nn , at nns , wdt bedz ql rb vbn to vb dts jj nns , cc vb nn cc nn in at nn in at nn . cd jjr , ql jj nn in nns cc nns , dt in pp$ jj jj nn , md * rb be vbn , cc ppss bed at cd in ppo nps . at np , at nn , at nn nn . rb , pps beg np wrb at nn nn in in pp$ nn , in at nn ppss hvd vbg jj nn , cs abn at nn vbg rb in ppo in at jj . cc in at nn cc nn in nn wdt ppss vbd , rb vbg cs jj nn , cc abn pp$ jj nn in ppo . pps bedz cd in dts ap nn , cc rb jj cc jj qlp nns in at nn , wrb in at jj nn at nn bedz vbg in at nn in at jj nn in vbg cc jj nn , cs cs ppss vbd in at nn in at nn in at nn nn , ql rb cs ppss vbn pp$ nn in at jj , vbg nns vbd in ppo . nn vbd nn . nn np vbd in pp$ nn in nn . ex vbd at nn in jj jj nn in ppo , cc in at nn in dti . pps vbd cs at nn vbd rb in at nn , wrb at nn hvz rb vbn abn at nns in vbg ppo , cc vbg rb cd nn in pp$ vbn vbn nn . pp$ jj jj , jj nn , vbd vbn in jj nn , cc vbn in at jj vb , cs np ' rb vbn np . vbg pp$ nn rp in in pp$ jj nns , cc vbg nn in cd nn in pp$ jj vbn nn cc nn , cs pps vbd in pp$ nn , ppss vbd at jj nn in jj nn , rb jj . pps vbd cs jj nn rb vbn in at jj , jj nn in at jj nn , wrb at jj nn . . ( nn cd ( rb vbz in ppo , cc in vbg at ap nn , vbz cc nns in at nn in nn in nn , cs vbg rp in at nn , vbg at nn rb rb jj , cc vbn . cs dt nn bedz vbn in ppo , cc cs pps bedz at nn vbn in dti jj nn , at pn md rb vb . in dti jj nn , in at nn jj cc at nn bedz vbn in ppo , rb in at nns . cc rb np ' rb jj , at jj np in nn jj in at nn , rb vbd cs * cs pps bedz jj cd nns jj dod np vb dt nn vbn , cc rb pps vbd in ppo , * in at nn in dti jj nn , cc in at jj nn in nn . rb , dt jj nn vbd rb jj , in wdt at jj nn vbd , at jj jj nn , wps , hvg rb rb vbd rp in np , hvd rb cs dt vbn nn in jj nn . rb , at jj nn in nns , at jj nns , rb vbn dt jj nn in jj nns in nn . ql cs at jj nn rb vbd ppo wrb pps vbd cs cs rb nn nn md be rb vbn rp in in wdt md rb vb to vb , cs pps vbd in in rb , wps md do dt ap nn in at jj , md vb at nn in nn in ppo in nn in jj . ql rb dod at jj jj nn in np vb ppo , cc at jj nn wdt vbd ppo , cs in at od ap nns ppss rb vbd cs * at ap in dt jj nn bedz vbg in at jj jj nn in wdt pps rb vbd . pps hvd rb vbn in ppo cs dt nn nn hvd in nn ben vbn in at vbn nn in at nn jj ' nn nn . rb , pps bedz jj in np , vbd at jj np in nn jj rb . cc cs pp$ jj nn , pps vbd dt nn in vbg nr in ppo . pps hvz at jj in ' ppo . nn bedz vbn in at jj nn pps vbd . in dt nn in at fw ' jj nn nn , cc ql rb in at jj jj , ex bedz at jj nn , vbn in abn at nn cc rb , in at nn . pp$ nn nn vbd in dt nn . cd nn vbn , cc vbg in at nn . nn np vbd jj , vbg rb rp in at nn ' cc rb in vbg nn . ex bedz at nn in vb nn , at jj jj . . ( nn cd ( nn , in at vbn cc jj , jj nn in dt nn . * at nn pps vbd . cc dod pp$ nns vb nn in ppo . cs in abn pp$ jjt nns cc nns , ppss rb vbd at jj , cs * jj , nn in beg in at vbn nn in nn . cc * rb cs , cc jj vbn nn vbd in ppo in at nn in pp$ nn . in abn at jj jj jj nn in dti jj nn . cs jj , in pp$ od nn in at nn , pps vbd in pp$ nn . cc in dt nn , pps bedz at nn jj in at nn . cc vbg in pp$ nn in nn , cc vbn in at jj nn pps hvd . cc rb vbg at nn . cs at nn vbd ql jj . rb , vbd to vb at ql jj , pps vbd rb rbr cc rbr at nn . cs cs , wrb at nn hvd vbn in nr , pn cc at jj jj nn in at nn hvd rb vbn ppo ql vbn . cc , in cc in , pps vbd to vb , cs pps bedz ql rb in at nn . cc , ql rb , in abn cs pps vbd , cc rb dod , in at in ap jj nn , pps vbd ql jj rb cs dt nn . cc at fw bedz rb vbg at nn rb . * rb vbg . rb abn vbg nns vbg nn at nns bed ql jj to , cs cs ex bedz jj cc pn , rp in ppl , to vb cc vb nn , rb . cc rb vb rb , in dt cd nn , at nns cs nn in nn bed vbn in pp$ nn , cs rb abn nns vb at jjt nns to vb ppls in . rb , cs jj , at jj , vbg nn in at jj , nn nn ppss vbd to , vbd rb to vb ppo in pp$ nn . in , cs wrb at jj in vbn , vbg nns , np cc np , nn nr in at jj , jj nns . rb at jjt , jjt , ql nn in jj jj nn md in ap vb rb dti ap jj nn , to vb jj jj in jj nns . cs np dod , in at nn , at ap vb in at jj nns in dt jj nn . rbr cs rb dod pps vb rb at jj nn in at nn , wdt , in dti ap nn , md hv rb vbn rp in at nn . . . ( nn cd ( . . ( nn cd cd nn nn . nn nn , np ( dti nns vbn , cc nn cc nns abn jj , at fw rb vbd vbg in at jj np nn , wdt , in nn , ql rb vbz in at nn in at jj np in at nn . at ql jj , jj , vbg , vbn , vbg , jj nns , bed cs nn nns in jj nn , vbd rp in in vbn rp , in nn in nn nn . at vbn cc jj nns vbd jj nns in jj vbz , vbg in nr in jj nn , at nn in pp$ jj vbg nns , at jj vbn nns . in vbg nn , ' nn jj to vb in jj jj nns cc jj vbg nns . cc abn at nns in dt vbg nn dod * rb vb jj vbz cc nns in at jj nn . rb ppss vbd in at nn , rb wrb at rb jj nns in nn vbd rp . rb , nn vbd pp$ nns cs at jj nn ap nns in jj nns . cc abn dts jj nns , ap cc ap ppss vbd in np ' nn nn . jj nn bez rb jj . cs cs , at rbr vbn in nn , at ap nn hvz to do in nn wps vbz cs nn . in nn in nns , at jj nns md jjt vb pp$ nns to vb at nn in jj nn . pps bedz rb in nn . rb cs rb , in jj , pps vbd ql ap to vb in at jj nn , cs rb vbg , pp$ nns bed ql in at nn , cs in , at nn in at nns . pps vbz cs vbg rp in cd ' jj nn , in in pps md vb in ppl , in in in at jj nn cs ppo to be vbg dt jj nn , to vb in pp$ nn in vbn nn . ql , ql at cd in cd nns , wrb at nns in at nn bed vbn , cc at nn in nn vbd at nns in at nn rb . cc wrb cs at nn bedz to be vbn in at nn , at nns vbd ppo * rb rp , cs in nn , . . ( nn cd ( cc in dti nn vb ppo in pp$ nn , in nn in vbg pp$ vbg nns . wrb dt nn in jj nn md vb to vb , rb , at jj nn md vb at nn in nn . cc cs rb at jj nn md vb , nn in at nn nn , to vb pp$ vbn nn . dti vbg nn in nn bedz in ppo . in in nns cs dts , pps rb jj in vbg at nn in nn . cs in pp$ vbd nns , vbg nn in cd nns in pp$ jj nn , jj md hv ben at vbg nn cc nn in dt jj nn , cs pp$ nns md hv ben in at nn nns in nns . cc rb , at nn bedz in ppo ql jj in jj nns . cc cs in jj , nn in jj nn pps bedz vbg at nn in jj in nn , np , at jj od nn , vbd rp in rb , cc in at jj vbn , nn nn , vbn cs cs nn np bedz vbn to vb at nns , rb , at pn md vb rb . cc ex md be dti nn in vbg at nn . vbg pn rb cc rb in at nn in nn , cc at nn in ppo , in at jj nn . uh . np , ppss dod ' md * vb np rb . bem ppss at nn in nn , np , vbd np , cs ppss in vb ppo dt nn . cc vb pp$ nns . ppss hvd vbn . rb in pp$ rb jj . wrb jj cs ppss vb in jj , to vb ppo in at vbg cd in ap . -- in np , nn , cc nn . vbg in at jj vbg nn in at ql rb jj jj nn , np bedz jj at nn . rb vbd rb , ppss bem * vbn to be vbn in dt nn , nn . ppss do cc ap cs abn cs pps , uh . nn . jj nn in pp$ vbn nns , cc rb vbg rb , cs cs to vb dti jj nn . ql , nn . * rb , vbd np , vbn , ppss md * rb be vbn at nn , nn . rn be vbn cd nns at nn , cc at nn , cc at nn , cc jj , cc ppss ' ppss vb at nn in ppo . cs pps vbd dt , np vbd in ppo in jj jj nns in pp$ nn , cs np rb vbd . nn bedz rb vbn ql rb in vbg at jj nn in ppo , vbd np , cs pps vbd ppl vbg at nn in nn . . . ( nn cd ( pps ' vb ql jj . vb , np . rb , rb , ppss nn ' nn rb vb cs to vb rb cc vb ppo , cc in in wdt ' in dt . -- in rp rb in pp$ nns cc vb in ppo . rb , wps bedz at nn vbg rp in ppo . cc pps md be at od nn ppss rb dod vb . ppo ' in jj . ql jj . cc pps ' vb jj rb . rb , vb ppo nn cc rb , pps ' vb in at jjt jj nn np rb vbd in . wrb pps vbd in ppo . -- in pp$ nns cs nn in nns . bez pps jj . rb rb ' np pn in pp$ nn , cs jj cs ex md be pn in at nn wrb pps vbz . pps nn in pp$ nn rb , rb , ap cs cd nns rp in at cd in cd . cc pps nn ' nn vb rb . dod ' nn cs nn in nn , at nn , vb ppo cs in at nn pps rb vbz at jj nn ' jj nn nns abn vbn cc vbn , cc at nns rp in at nn , cc at nn rb vbn in nns , cc at nn at nn in jj jj , cs cs at vbn nn hvd ben in ppo . at jj jj nn . nn vb pps ' np vbd wdt dti nns rb vb at nn . pps ' vb at nn in nn in np in nn ppss vb in in jjr cc at nn . uh , uh . ppss nn ' nn vb wdt pps bez , cc at nn vb ppo in vbg ppo . pps ' vb jj in nns . ppss vb wdt pps vbz in at in nn in , at nn , cs nn in nn vbz ppo pps vbz . wdt ' rb cs in , ppss md vb to vb . wps ' np vbd nns in ppo in at nn . fw ' nn cs jj , rb . cc ex ' in at nn , pps ' vb at jj nn in in rb vbz in at vbn . uh ppo , pps ' vb jj at nn ' in cs to be vbn in at nn , cs rb to vb ql rb . cc rb cs ppss vb in ppo , cs ' nn in at od nn nns do , cc cs ' np at nn in jj , rb . uh ppo , cc abn nns ber jj , vbn to vb in ' ppo . cc cs ' nn in pp$ nns . vb * , bez pp$ od nn . cc vb wrb ppss md , bez pp$ od in in ql rb vbz rb . cc wrb ' in dt . dod ' nn pps vb ppo at nn . nns . pps vbd ppo cd nns at nn , cc vbd at nn in nn in nn in dt . pps md ql rb hv vbn ppo , cc vbn in ppo . rb pps dod vb ppo , cc ppss dod ' nn vb ppo , ppss bedz ql vbn ql rb in pp$ nn , rb . pps vbd cs at vbn nn . wdt at nn ' in at nn in ppo . nn nn ' nn vb rb in pp$ nns . vbg jj in dt jj nn hvz at nn in vbd ppo jj nn rp . in at nn , ppss md hv ben vbg , cs in in wrb . wql . wql . -- in cc at ap nn ' nn . . ( nn cd ( to vb ppo . ql rb vbz in nn rb . cc in at nn , ppss ' ppss vb wrb dt nn vbg vbz rp in nn in nn . . . ( nn cd ( . . ( nn cd cd np np ( wrb np hvd vbn , np vbd in at nn vbg in at nns . cc rb , cs hvd ben jj in ppo in jj , vbg at nn in at nn , pps vbd ppo rb in pp$ jj nn , cc rb pp$ nn . vbg at nn in at nn nn cc vbg at nn in at nn nn in at nn , pps vbd cc vbd . in jj nn nns , at nns in at nn in vbg jj nns bed vbn , vbz nn , in at nns in at jj . wql md pn vb in np rb , vbn in dt nn in nns , in jj ppo in at nn pps vbd . in at np in at nn , cc at nn in at nn , cc at jj nn in nps bedz nn . dti nns vbd , in wdt at jj nn vbd in pp$ nn in jj cc jj vbz , wdt vbd rb rb in pp$ nn . wql rb , pps vbd in ap , vbg at nn , dt vbg at jjr nns . uh , pp$ nn . rb md pps vb in ppo cs pp$ nn be vbn . rn hv ppss ben rb jj , * jj , in in rb , cc rb vbg in nn abn at nn . in nn , cc in jj jj nns , cs cs , cs at vbg jj , pp$ jj nns bed at jjt cc jjt in nn . wdt nn hv ppss in dt nn . dt nn wps bez vbn in nn , to vb rp jj jj nn in jj jj nns , * in vbn nn in jj nns cs pp$$ . nn ' jj nn at ap in in pps vbd at rb vbn nn in at nn . at nn vbd in at nns . at ap nn at nn nn in at nn at vbg nn vbd . in jj nn , np rb vbd at nns . . . ( nn cd ( . . ( nn in cd nn nn ( rb nn np vbd nn . abl at jj nn , nn in nn , ppss rb hvd . ppss vb at jj nn ' jj nn nn , rb ppss vbd pps vbd ppo in ppo . cc wrb ppss vbd to vb rb , in pp$ nn , pp$ jj nn , ppss vbd pp$ nn ql rp . cc rb , uh . np vbd at nn , cc ppss , cs at vbg nn , vbd vbg in ppo . cc wdt bedz rb ql jj , nn in in ppo vb wql jj abn nns ber in in in abn dt nn cs ppss bedz in , ppss rb vbd to be vbg in ppl , cs cs abn , pps bedz * ap in at nn , cs nn in jj . ( wrb , ( vbz ppss , ( wdt ' in at nn . ppo ' nn * at jj nn , rb at jj nn . ( cc rb ' np at jj nn in at vbg nn cc at jj nn . cs ' nn wdt vbz at nn in at nn , nn , cd nns ql jj to vb cs at nn in at nn . at vbg nn in in dt vbz at vbg nn , pp$ jj nn . cc vbz ppss to ppl abn at nn , nn , cs ppss bedz vbg pp$ jj nns in dt vbn nn in in ql rb jj bedz pps abn , abn at nn , ppss vb , ppss bedz vbg in ppl , ( wdt ' in pp$ nn rb , cc at nn in in at nn nn . rb , ( vbz ppss , ( pps bedz rb at jj nn in in in nn , rb at nn cs pps vbd ppo in -- * at nn nn . rb , ( vbz ppss , ( vb in ppo rb . wrb , at nn in ppo in in at nn nn in in wdt at jj nn in nn pps bez . cs , cs at jj jj nn vbd ppo , ex ' in at jj jj nn . cc dt nn bez vbn rp in at nn rb . ( cc rb vbz at jjt nn in at nn , nn . cs ppss bedz vbg rb in at nn , at nn in nn in jj jj nn , in at vb in pp$ nn , vbz ppo in at nns , cc nn ppo rb . ( wdt ber ppss ' nn . ( vbz pps . vbd . nn , cc ppss bedz vbn . abl at nn . cc , rb , ap nn ppss bedz in at nn . ( wdt bem ppss rb . ( vbz ppss in ap . ( cc wdt nn bez cs in pp$$ , ppss md vb to vb , np . nn . do ppss vb at . . ( nn cd ( nn . ( in at nn , nn , ppss hvd ql rbr vbd cs , cs pps vbd in pp$ nn in ppo , vbd rp , cc vbg rp at nn in nn pps hvd in at nn in in wdt do ppss vb , ppss vbd . -- in wrb nn jj , nn , pp$ nn bedz vbn jj in nns , in at nns rp . vbz ppss , in od nns , ( ppss vb ppss vbd ' nn vb ppo , jj nn . ( ( np np , ( vbd pps , ( jj np . ( cc vbd vbg ppo abn at nn , at nn in vbg in pp$ jj nns cs at nn nn . vbg pps vbd ' nn vbg to vb vbg rp pp$ ( jj np , jj np , ( ppss vbd ppss md ql rb vb in vbg at nn rb . cc ppss hvd rb rb vbd pp$ nn in ppo , wrb pps vbd rp , ( vb cs vbg . ( ( nn , ( vbz ppss , ( wdt ' in at nn rb , jj nn . ( ( vb ppo rb , ( vbz pps . ( vb ' ppss vb at nn . nn np vbd ppo , dod ' nn pps . ( ( rb , pps dod , ( vbz ppss in -- ( ql rb pps bedz . ( ( ql jj , ( vbz pps in -- ( pps vbd pp$ jj nn , dod ' nn pps . ( ( rb , pps dod , ( vbz ppss . ( rb rb , ( vbz pps , ( jj np , wdt hv ppss to vb in . dod ' nn pps nn in ql jj nn . ppo vb ' nn at jj nn nn nn pps vbd in , bedz pps . ql , ppss bed vbn in at jj nn , cc in at jj nn nn , np . ppo ' in at nn . ppss vb ppo at nn . vb , jj np . in jj np at jjt nns vb ppo jj nn to be vbn in at nn , cc vbn nn in nns in . cc , be pp$ nn , np , cs ppss bed vbn in jj nn , cc vbd at jj nn in . vb wdt ppss vb . be vbn in ppo . vb pp$ nns nns . cc in at nn nn rb . cs ppss md ' nn vb ppl , jj np . nn ' nn ppss vb dt nn . ( in dt , pps abn in at jj vbd rb , in dti jj nn , to vb rp in at nn . nn jj . vbd rp . cc rb ppss bedz in pp$ nn . rb , wdt do ppss vb in dt nn , nn . nn nn ' nn vb . pps vbz at nn in jj in ppo , cs ' . md be , md be . cc pps ' np vbd at jj nn in ppo , nn . np ' ppss vb nn vbg rb , rb vbg in at nn . uh , at jjt nn ppss md do , nn , bez to vb cs jj nn rb . rb vb in ppo , wdt pps vbz . uh . wdt ' rb cs pps vbz . vb . nn in nn , rb . vb jj , abn in ppo . ex ber nns rb . cs ppss vb at jj cd , vbd pp$ nns in ppo . wdt nn ' ppss vb in dt rb , nn . vb ' nn ex at jj nn . . ( nn cd ( in pn jj in dt , uh . at jj jj in in dod ppss vb cs , nn . vb ppo in in rb ' np pn jj in at nn . vb in in ppo , nn . np hvz cs cs ' pp$ jj in pp$ nn . cc , jj . pps vbz dt nn . . . ( nn cd ( . . ( nn np cd np ( rb ppss ber rb vbn in at jj . cc rb ppss md be vbn in pp$ jj , jj nns . cs cs vbn to vb . cs at fw ' in jj nn vbz nn in nn in at jj nns in at nn . in at nn pps bez cc rb to vb in at nn ql jj in at jj jj nn in at ql jj nn nns cc nns in abn nns wdt ber to vb . pps bez rb vbn nn in at jj in pp$ jj nns , cs ppss md rb vb vbn in ppo . rb bez pps at jj nn . at nn in at nns in at nn , pn ap bez rb vbn . vb in wdt at jjt cc jjt nns hv vbn rp . at nn in np bez ql ql vbn cs dt wdt bez vbn np , vbz nn np , np . np . . pps bez * pp$ nn , bed pps in pp$ nn , to vb in at nn cs in at jj nn in vbg at nn in nns cc nns . . . . jj nn vbz in at nns in dt nn ( nn jj ) , vbz nn np , np . np . . nn to vb pp$ nn in at jj nns . jj nn vbg pp$ nn in at nn . at nn vbn in nns . abn dts jj nns cc vb in nn ppo nns . rb vb in at jj , at jj np , cc np np , cc np , dts nns in nn cc nn . rb , cs in jj nn ex be jj , rb in nns ex ber . . ( nn cd ( at nn . cc rb in dti jj nn , in nn , cc at nn in nns . ap ber at nns , jj cc jj , jj cc jj , nns cc nns , wps hv in jj cc in ap , vbn in at jj . vb in at ap : in in at nns in at np . np . np . np . np np np . np . np . np . np . np . np . np . np . np . nns . np . fw . np . np np . np np . np np . np . np . np . np . np . np np . at nn in np np . np . cc at np . nn . wdt . cc in wdt jj vbg nn abn dts hv vbn , at rb vbn nns md vb . in at nns in dt nn in jj nns , rb dts vbg np rb vbd vbg nns . cc cc cd in ppo bedz at jj jj nn cc nn . nn jj nn np . in at jj nn in at np cc nn in jj , pps bez at jjt vbg nn . cc np vbd pn cc vbz pn in at jj nn jj , vbn in wdt at np jj bez ql jj nn . cc rb be pps vbd , cs at np jj bez at jjr in at nn in at nns . pps bez * rb in dti nns at jjt in at nns . rb , vbg in at jj nn in pp$ nns , cc at jj nn wdt , cs dti cd nns rb , vbn at rb jj cc ql jj nn in jj , cc wdt nn in dt jj nn rb vbz in abn cc dti ap jj nns cc jj in nns . dt nn hvz ben at nn jj . nn in rb abn at nn nns in at jj nns in ap nns , md vb ppo cs at np jj , in cd nn , bedz in ppo at nn in at nns . cc at nn hvz in ap vb in at jj nn . dt bez vbg nn . vb ppo . jj nns abn , in in at np jj bez vbn , in in at jj nn jj rb nns . ex ber rb cd nns in beg wdt in abn vb to vb at vbg nn jj in ppo , cc in at ap nn , in at jjt nn vb in at nn . dts nns ber np ' rb cc np ' rb . abx in pp$ nn nns in np nr in nn jj in nns , cc abx jj cc jj nns . at . . ( nn cd ( jj nn vbg at nn jj to be vbn in pp$ nns bez rb jj . cc ql rb cs pps vbz , pps bez in jj nn , cs rb vbn in jj nn . ql rb , rb , at nn jj , jj cc jj , vbz * jj in dti nn . ql rb abn ap vbn nns , pp$ bez at jj nn . rb at jj nn in nns vb dti nn in jj jj nn , cs rb at jj nn cd in at jj , rb to be vbn in abn pp$ nns in jj nns . cs at jjr nn nns to vb dt nn in nn , ppss rb vb pp$ jj jj nns . nn nn pn jj . cs dti jj nn vbn to be jj , md in dt ap nn rb be jj . nn md * vb in at jj jj nn in at jj nn , cc in in in dt nn in ap in in in ap in dti nn . pp$ nn rb bez rb to vb at nn in at nn in nn . nn bem at nn , * at nn . cc pps bez at jj nn . at jj nn in nn in at nn in nn bez jj in ppo . to vb rp in at nn in at nn in ppo . to hv pn ' nn nns in at jj nns , nns , cc ap nn in at nn . dt bez at jj nn . wdt bem ppss cs ppss md nn to vb at nn in dt nn . at jj nns in np md rb jj ppo . md pps ( at fw ) vb at nn in ppo . vb at nn in ppo bez jj . cc ppss hv vbd in nns cc vbd in nns . ppss hv hvn to do in nns in dts jj nns . ppss bem in jj . cc ppss md vb . ex ber dti nns to vb . od : at jj , vbn nn in dt nn in np bez in at ap nn vbn in at nn , cs in dti nns pps rb vbz at jj nn cs at jj be at nn . in pp$ nn in nn , at . np . , np vbz , ppss rb vb at nns in at nn . cc in pp$ jj nn , ppss vb dt rp in at nn , nns cc nn , nns cc nn , in np ' rb vb vb , bed rb vbn vbg at nn in at ap nns in at jj . at nns in wdt np md vb hv vbn . . ( nn cd ( at nns in at nns , pps vbz cs vbz : in nn in pp$ jj jj nn , pp$ nns , pp$ jj nns , pp$ jj nns , jj jj jj nn jj , cc rb , fw jj nn fw jj . nn vbd abn dt in pp$ nns nn np cc np np , in np , abx nns in pp$$ in at jj nn , cc ppss vbd in at nn cs at nns vbn rb bed ql jj . np rb vbd ppss bed nn . be pps vbn dt , jj abn nn , ppss vb at jj jj vbn nn cs at jj bez at nn , cc vb in jj np to vb ppo . dt jj nn vbd , at ap nn bez , in wdt jj nn doz at jj vb in ap nn . rb , np hvz vbn ppo dts nns . cc in jj , ppss ber dts : nns cc jj nn . cs , abn ap nns ber jj cc jj vbn . ap : wrb md ppss vb at jj , in pp$ jj nns , ql ql rb to vb ppo in abn nn to vb . to be jj , rb , at jj bez at vbg nn in at jj nn . ex ppss hv ppo . wql vbn , cs nn bez at nn in vbn nn . at nn nns ap cs at jj , cc at nn bez * at nn , cs pps bez jj . cc at ap nn in at nn bez rb ap nn , cs vbn in at od . ql dti cd md hv vbn cs abn at nn jj in nns hv * at jj , cc at jj , cc rp in cc in in nn . cs , in vbg nn at nn , cs pps md be rb vbn , rb vbz at jj nn . in at jj nn in wdt at jj bez , ppss do in at nns vb in at nn nn dti nn nn rb vbn in at jj in at jjt vbn nps . cc , in at ap nn , nn in ppo dti nn rb rb vbn cs jj . rb , abn at jjr , vbg , . . ( nn cd ( cc jj jj nn md be vbn in dt nn in nn in np . rb , rb , vb at jj nns in at jj jj nn . od : in in nn ppss vb at nns in cd jj np ( jj in nns ) , cc dts md vb ppo abn , abx jj cc jj . nn . at nn np . np . at np np . np . at np np . cs at nn in at nn ppss vb at jj nn . in at np , at nn . in at np , at np . np . in dts ppss rb vb at vbg nns : in in ppss . at jj nn . np . at ql jj . np . at nn rb jj . nn . at np in vbn nn . np . at jj jj nn . np . at nn nn nn . nn ppss . ( np ) , nn ppss . ( nn np ) . -- in dt jj , in at jj in jj rb vbn cs at np jj , cc at np jj , cc at nn vbn jj , bez at jj nn in at jj , cc at nn in at nps , cc at np in at jj nns . pps bez , in nn , at jjt jj in at nn . at ql jj in abn nns to vb . at ql jj in nn . cc rb , in rb at ql jj in nn . pps beg at ap nn in wdt dt jj nn , nns , bez vbn . abn pp$ nns md , in ap ap nns , be vbn in . pps bez rb in pp$ nn cs ppss rb hv to do . rb vbn , pps bez jj . dti nns rb , wrb at jj jj bedz ql ql jj in pp$ jj jj nn , cc wrb pp$ nn bedz rb rb vbn in at vbn nn . in dts nns nns , pps md vb , bedz rb vbn to be vbn in at nn jj in at cd rb vbn in np cs at np cc ql jj . pps bedz at nn rb , cs dt ap nns bedz cs vbg nn in at np nn wdt at od nn in at nn rb vbz . in dts nns , rb , in bedz ql jj , * beg vbn in nn , cc rb cs at nn cc nn . pps bedz rb to be hvn in at nns cs ppss rb vb at nn in nn . wrb , cs ppss jj , in at nn in nn , at jj nn in nns vbd . . ( nn cd ( vbn , pp$ jj nn bedz rb vbn in at nns . at nn to vb pp$ nn in at nn ql ql jj in pp$ nn . cc cs at nn md in ap hv vbn to be vbn in at jj in wdt dt in bedz rb vbn . nn ppss . ( np ) , np np . ( ql jj ) . in in in cd nn dt bez at ql jj in at nns , beg at cd rb rb vbn in nn . pps vbz at nn rb vbn cs nn cc nn . cc at nn rb vbn cs jj nn , at jj nn in nn . in at nns , pps bez rb vbn in abn at vbg nns : at nn . at np nn . at jj nn . at jj nn . at jj nn . at ql jj . ex bez at nn in nn in at nn in at nn rb rb vbn . wdt rb bez at jj , wdt ppss vb in at od nn in pp$ np . pps bez at jj nn in at jj nns . at np nn in at jj nns . at nn np in at jj nns . at np nn in at nps . pps bez at jj wdt in ap cs cd nns nn hvz ben vbn in at jj cc jj in at jj nns . pps bez at jj wdt at jj nns hv rb vbn in at jj nn , in at np np , in at cc ' jj nn , cc ap ap nns in at nn , vbn in ppo ql jj cs nns . dti vb to vb at nn in at np jj in at jj cc at ql jj in at nps . cc ppss rb vb in abn pp$ jj nns . cc hvz ex rb ben vbn at ap jj nn in wdt to vb at jj nn . pps bez in jj nns vbn in at ql jj nns , cs dti nns in jj nn vb ql rb jj . at ql jj md be rb vbn in in dti nn , in nn in vbg at nn jj . nn ppss . ( np ) , np np . ( nn in nn ) . -- in in dt nn ppss vb at nn wdt , in at jj nns in nn in rb , jj in nn , cc jj in np , hvz ben vbn rb in at nn cc bez rb at jj wp$ jj nn bez ql rb vbd in nns vbg at jj , in at jj np . . ( nn cd ( nn in nns . in at nn pps vbz , cc in pp$ nn , at nn in rb vbz at ql jj , cc bez in at ql jj nn , cc at jjr nn , vbg in nn . pp$ jj nns vb at nn in jj nn , vbn in at vbg , vbg nns in jj nns . pp$ jj vbg nn , at nn , in wdt pps vbz pp$ nn , bez rb at jj nn . dt nn bez dti cd cc cd nns rb , vbg rb in at jjr nn in at nn , in at jj nn , cc in at ql jj vbn nn . rb cs * at jjt ap nn in at nn be jj , dt vbn nn md , in nns , be vbn rb vbg in at nn . wrb at nn bez ql jj , cc rb vbn in jj nns , cc dt nn in jj nn vbz rp cc vbz nns in at vbn nn , pps md rb be vbn cs at jj nn vbg ppo rb vbz at nn , in pp$ nn cc jj nn in nns vbn in ppo . rp cs np in nn at nn rb vbz rb . at nn in nn bez * jj . pps vbz at jj in jj , cs dti nns ber nn in nns . ql jj . rb vbg jj . rb vbg in at nn in at jjt cc ql jj nns . pp$ jj cc ap jj nn vbg cs at jj jj nn in at jj nn . jj in jj jj nn cc nn in vbg , cs to vb abn jj nn in nn . dt nn vbz at vbn cc jj np in pp$ nn , vbg in pp$ nn cs nn in pp$ nn . in hvg at nn in pp$ nn , at nn in nn bez rb vbn in at ql jj , in at nn nn vbn np vbz , wps bez , vbz in nn . in dts rb vbn np vbz , ex md vb to be ap nns , ap in wdt , rb , ber ql vbn . jj in jj nns cc jj nns . nn in vbn nns . vbn nns . in in vbn nns cc vbd nns , ber at nns ' in nns in at ap nns . in nn in dt jj in np vbz , pps bez in jj nn to vb , cs rb abl at nn md be jj in vbg nns in dti nn in nns , cc pps bez in jj to vb at jj nn in at jj , vbn in dtx pp$ nn , cc vb , cc nn , cc nns . rb cs dts vbn nns cc nns ql . . ( nn cd ( rb vb rbr vbn to vb at nn in at jj nn in np cs dti ap vbn jj nns , wdt at jj , in pp$ nns , vbz . wql rb . at nn , vb , rb in nn , cc nns . dts ber nns wp$ nns ber rb vbn in abn nns in nns , in dti nn in wdt md be at nn in pp$ nn in ap cc ap jj nns . rb , at nn jj cc at jj jj , dt hvz at nn . cc ex at nn vbz . rn , dt ap jj jj cc at np jj , dt in dts hvz nn . cc ex rb at nn vbz . cc pps bez rb at ap in at ap nns rb vbn . in jj nns in nns , ppss vb jj jj nns . cc , in at nn in dti cd in ppo vbn , abl at jj nn . cs rb to vb abn jj nn vbn in abl at nn . in dt nn at cd in at jj in nns hvz vbn . cc pps md rb be vbn cs , in at jj nns in at jj , in pp$ nn in in rb , in ap , ppss md be jj to vb at jj nn . rb . wdt nn , in nn , bez rb in at np jj ' nn nn ql jj cs pp$ nn . rb ppss hv vbn cs in pp$ nn pps bez jj rb to vb at np jj . cc cs ppss vb in at nns in at jj nns , wrb rb ppss md * vb nns at od nn cs jj in at nn cs dts jj nns rb vbn . wdt rb vbz . pn cc to vb vb in at nns rb , in pp$ jj jj nn , cc rb vb ppo dt nn . cc dt bez at jj nn rb vbn . cc pps bez at ap cd wps md rb vb , in ppo rb bez jj . to vb . nn nn . ( nn ) , nn nn . ( vb rb ) . -- in dt jj bez rb vbn in at jj jj nn . pps hvz ben rb vbn rb , cc vbd in nn . pps hvz at jj nn in ppo cs at nn . cc ppss md vb ppo at nn cc nn jj . in dti nn , at jj nn in ppo doz * rb vb ppo , cs at nn jj rb hvz at nn , cs at jjr cd . pp$ nn bez * ql jj . pps hvz nn . pps bez at ql jj cc nn in jj in abn . . ( nn cd ( at nns , vbg ql jj nn cc jj nn rb cs dti ap in ppo . nn ppss . ( np ) , np np . ( np nn ) . -- in in dt jj ap bez vbn cc pp$ nn . nn hv vbn ppo in at nn in nn nn . in at vbg nn , pps vbz abx nns cc nns . cs at nn , pps hvz rb rb vbn dti nn in ppo cc pp$ nn , wdt vbz in at jj jj nn . vb ppo vb . nn vb ql ap in ppo , cc doz pn rb . nn ppss . ( np ) , np np . ( nn nn ) . -- in dt vbg nn , in at nn nn , rb vbd in vbg in at jj nns in dti in pp$ jjr nns . pps bez rb vbn . in ap ppss hv rb vbn ppo in in at jjr jj nns , cc rb rb in ql jj at nn to vb pp$ nn . pps bez rb vbn . pps md vb rb in nn in nns in nn . nns ber vbn in ppo . fw , nn nn . nn md vb pn ap cs bez jj in ppo , cc md at jjt np . rb vbz rb ppss . ( np ) , cc rb vbz rb np . ( fw ) . nn . dts vb at nns in vbg nn , in wdt in nn md be vbn : in in ppss . , at nn . np . , at jj nn . np . , at nn . nn . , at np . np . , at np . nn np . ( uh ) , nn ppss . ( nn ) . -- in cs dt nn , wp$ jj jj nn , cc rb vbg , hvz vbn at nn in nns , bez ql rb vbn at jj in at jj , rb bez pps * rb vbn in nns . cc vbg abn at jj jj nns in at fw , ap nns hv vbd ppo in cd . pps bez in jj nn nn , vbg in cd in cd in cd nns in nn , cc in jj nns in at nn . pps vbz in nns . pps bez rb rb vbn , cs pp$ nn bez jj . . ( nn np ( in nn , cc ql jj in nn . in dti nns pp$ nn bez vbn cs jj in at nn in at jj nn jj . nn np . ( uh ) , np np . ( np np ) . -- in ppss vb at jj nns ' in nns in abn dts nns , in rb ppss ber at jjt . wrb dti nn vbz to be jj cc jj , ppss md vb rb , cc vb dt . nn do ql rb , vbg at np np , ql vbn , cs nn bez at nn in rb abn nns . ql , vb ppo at nn nn , cs ppss vb . pp$ nn bez rb vbn , cc in at nn cs at jj nns in pp$ nns ber vbn rb , pps vbz at jj nn nn in pp$ nn . dt jj nns dti cd cc cd nns in nn . pps bez vbn in rb abn nns . pps hvz at jj nn in vbg pp$ nn vbn nn in vbg , wdt vbz pn cs at jj nn . wrb * ql rb vbn , at nn jj nns rb vb at nn jj , to vb rp at nn in jj nn in jj nn in in cs dti jj nns , in at nn in nn , cc ql rb in ppls , vb jj nn rb in jj nn . cs pp$ nn bez ql jj , dti in dts nns md vb ppo rb in cd nns in nn . nn np . ( uh ) , np np . ( np ) , dt bez , np jj . -- in dt nn in at rb vbn jj , ql vbn ppss vb in pp$ jj nn beg rb vbn in at jj nn . at nn bez dti cd nns in nn , cs pp$ nn nns cd nns , cs dti vb cd , cc rb vb in cd nns . rb vbg , dt nn bez cc at vbn nn , vbg rp in at nn in at nn at ap vbn in at jj . cc pps bez rb vbn in at jj nn , wdt hvz at jj nn , vbg pp$ nn pn jj in at nn in at jj nr in vbn nn . wdt jj nn dt nn nn cc nn nns , pps md be jj to vb . pps doz * vbn to be vbn cs at nn in at nn in nn cc nn in nn . cs dti nns vb ppo cs at nn vbz ppo in at nn in vbg in at nn in at nn in nn . np np vbd pps bedz vbn in at nn in nn . in at nn , vbg in at nn in at jj nn , . . ( nn cd ( cc vbg ppo vbn in nn , vbz pp$ nn rp , cc rb vbz rp . cc ppss md vb dtx in dts nns to be jj . pp$ jj nn bez , cs rb dt cd in vbn nn md rb be vbn in at nn in in rb wps md be in in ppo md rb be ql jj in ppo in at nn in vbg nns . at nn ppss hv vbn vbd at jj jj , at jj jj , cc at np jj . pps bez rb at jj nn in at nn to be vbn in rb at nn in vbn nn . in jj vbn jj nns ppss hv vbn cs dt ap nn in nn ' jj nn bedz in jj nns vbn cs at jj nn in nn , cc ql jj , nns in pps vbd jj nns . pps bedz rb vbn in at jj nns in nn nns , at ap nn cs at nns in at jj nns ber vbn in nn . rb pps bedz in ppl vbd at nn in jj nn . jj nn vbz ppo cs np np np in pp$ nn in dt nn , wrb nn np dod rb vb pp$ jj nn in ppo in at nn in np nn , cs pp$ jj nn vbd rp at np . wrb np np vbd in dt nn , vbz jj nn , in jj nns pps vbd in pp$ nn at jj jj nn in at nn , wdt in at jj nn in vbn in at nn in np . at jj nn nns cs at nn in np , in jj nns , dod rb vb in pp$ nn dt nn , vbg in at nn nn in at nn nn . at nn hvz at ql jj , nn in jj nn , beg in at nn in jj nn nn , vbn in jj cc jj nns in jj . pp$ nn bez ql jj , jj cc jj . cc ex bez ap in ppo , cc pps bez rb vbn . pps bez rb vbn in at jj nns . nn np . ( uh ) , nn nn . ( np ) . -- in in dt jj ap bez rb vbn in at np , cc pn in abn in at vbd nn . in wdt ppss hv vbn in ppo in at nn , ppss md vb cs pps bedz in at nn in at nn . pps bez ql jj in in at nn in np nn . pps rb vbz at jj np vbz in at nn , cc vbz rb cs at vb , cs at jj nn bez vbn in nn . at np bez rb vbn . nn rb vbd wdt nn in nn pps hvz . nn . . ( nn cd ( md be vbn in at nn vbn in dt jj , in at nn in pp$ nn . cs ppss ber abn nns , in nn cc in nn . np cc np vbd . nn np . ( uh ) , np np . ( np ) . -- in dt nn bez jj in pp$ nn , wdt pps vbz in at nn in vbg pp$ nns . pps vbz at np jj ' rb rb , cc cs pps vbz , pps vbz pp$ nn in nn ppo . cs dti nns vb rb in at nn in at jj nn . ql ap bez vbn in at np cs in at np . abx ber nns , rb in at jj nns . rb vbz nn np . ( uh ) , cc vbz rb np . ( np ) . nn . -- in dts vb at jjr nns . nn . at nn np . np . at np np . np . at np -- vbd np . to dts wps hv * vbn rb to vb at nn , pps md rb vb jj , wps vbz * rb vbg cd cc cd nns md be vbd in nn in in at nn , wdt , in at jj nn , rb vbz at nn in nn . cc at nns vbd rp rb cs nns ber rb vbz , in at nns in pp$ nn in wdt at jj bez in in nn . nn . at vbg nn , in at jj nn . nn np . ( np ) , nn ppss ( nn np ) . -- in dt bez at jj nn vbd rb abn in at nn . at nn bez in pp$ jj nn . cs ex ber ap cs cd nn in nns , cc pn md be vbn to vb ppo . nn vb ppo rb , cs pps rb vbz in jj nns , wdt in at jj nn vb vbg ppls in nn cs nns in at od in in in np nn . pp$ nn bez rb vbn in nn in at nn . jj in jj nns , ppss rb vb in at jj nns in nn . ppss ber at nns wps rb vb cs at nn . ppss ber vbn at jj nn . cs ppss ppl md vb cd nns in nn dts jj nn , rb nn vb ppo . at nn in jj nn bez * in ppo . at rb in vbn , jj nn np md vb ppo pn jj nn in jj nn . cc at jj cc jj nn vbn in pp$ nns bez ql jj . pps bez in nn in nns cc nns . . . ( nn cd ( nns vb ppo in pp$ nns . np nn bez jj vbg , ppss vb . pps md rb hv vbn in ppo cs at nn nns . qlp , pp$ nn bez ql jj cs pps bez * ql rb jj . cc at ap nn ppss hv at nn , vb ppo . cc ppss md rb vb at jj nn jj ppl in nn . nn np . ( np ) , np np . ( np np ) . -- in at nn . ql jj . pps bez rb vbn , ppss vb , in at jj . pps bez ql jjr cs at nn np , cc ap in at ap jj vb . vb ppo , cc pps md vb in at jj . nn hv vbn in ppo ap nns , cc rb rb vbd ppo vbn . nn np . ( np ) , np np . ( np -- vbd np ) . at jjt nn in np . cc rb vbn in at jj , ql rb cs pps bez vbn . at rb jj nn , in wdt pps hvz rb ben vbn , bez cs in at nns in in nn in np np , in at nn cs pps bez rb vbn in at nn in dt np . in nn , pps vbz in dti nn in at nn np , beg in at ql jj cc jj nn . rb , pps bez in abl at jj cc nn in jj nn . pps hvz at nns in pp$ nn ( ql ap nns hv ) , pps hvz at jj nn , cc jj jj nns in at nn nn . cc pp$ nn in nn nns abn . cs pp$ jj nn rp in pp$ nn nns bez in at jj nn , cc at nn nn , jj cs at nn in at nn ' jj nn , vbd at jj nn , cs nn nns ppo in nn in nn , in cd jj nns , jj in cc jj rb . at jj vbz nn in pp$ nn , cc at nn in pp$ nn , wdt vbz ppo vb cs cs pps hvd rb vbn in at jj nn in at nn in nn . at ql jj cc nn nn . pp$ nn bez ap cs dt in at jj nn . in at np , dt nn doz * vb , rb cs at np bez at jjt in at nns . rb , ppss hv abn at nps in nn . cc ex ber at nn in jj , jj , abn in jj nns , wdt , cs at jj nn , ppss vb in nn , cc * rb . nn md vb ppo in pp$ nn nns . in rb abl at nn md be jj in jj nns , wps md vb wdt ppss hv rb cc vbn . cs dti in at nn . . ( nn cd ( nns , md rb be vbn cc vbn , rb pps md rb be vbn in dt nn , in in pp$ np , uh , cc np nn : in in at nn in nn nn . at jj nn . at in in vbn nn . at nn nn . at vbg nn . at np nn . at np nn . at jj nn . at nn nn . at np nn . at np nn . at jj nn . np . in np , np , cc jj jj nns , ex md be vbn ap nns in jj nns , vbn in abn nn in jj nns . cc ppss vb ppo ql rb jj . cc md rb vb vbg ppo in jj nns , jj in nn , cc vbg pn . rb : pps bedz vbn in at nn , cs dt nn md * be rb , cc in rb , vbn . ppss md cc rb vb cs ppss hv vbn pp$ nn . cc ppss rb vb pp$ jj nn vbg rb jj , rb cs at jj nn in np bedz vbn , in at vb rb vbg in at nn in at vbn nn . in jj nns md be vbn in pp$ od nns . jj nns , jj nns , rb vb at nn in nn . nn vb ppo in rb vbg pn . dt jj nn bez cc at nn in in rb , cc at nn in at nn . uh nn , nn , np , cc np . . . ( nn nn . ( ppss bem jj cs rp in at jj nn , at nn vbd np cc nns ( vb in nn cc nn in nn in at nns in np ) ber vbn in ap nns in at nns . cc cs dts nn in nn ber at jj , jj nn , rb vbg in at nns in nns , cc vbg in jj nn , cc rb cs ppss do * nn , ppss vb pp$ nns cs nns . cc hv vbn ppo in pp$ nns to vb at nn in np . . . ( nn nn . ( wrb dt nn in nns bez * vbn at nn bez ql jj . cs , cs at nns in dt nn , cs jjr cs dts in at ap nn , rb vb at jj nn in ppo in nn , cc at nn ' jj nn nn in pp$ vbn nn doz * vb at nn in at np nn , cc at uh nn doz . . . ( nn cd ( . . ( nn np cd np np ( in at nns in at jj in nn , dt vbz ql jj at nn cs dti to vb rp at ap jj nn in nn in nn , vbg in at nn in at nn nn in nns , at nn jj in nn in dti ap nn cs at jj in nn . at jj nn vbn in at nn ' jj nn bez vbn in at nn , cs rb in at jj np np , cd nns cc ql rb , at nn in at jj nn bedz . . ( nn cd ( * rb vbd in at nn rb vbd at nn , cc bedz vbn in ppo cc at nn vbd at np . rb dt nn vbz jj in nn . nn , rb , in nn vbd ppo jj to jjs nn . in dts nns , at nn ' jj nn bedz vbn in at nn cc jj nn in at nn : cs in at jj in vbg nn cc abn pp$ nns , at jj cc jjs nn vbd jj . in at jj np np , in at vbn nn in nn , dt jj jj nn bez rb vbn , cc pp$ ap nn bez rb vbn . in jj pps nns rb cs jj nn . cc ql jj , bez cc cd in at nn ' vbz ql jj nns . rb , cs in at jj nn in at nns at nn in at vbg nn rb vbz , cc cs in at jj np pps bez * rb at jj nn in at nn , cc in ap nns ( nn nns in at vbg nn ) at nn in at nn ' jj nn bez rb pp$$ . rb at jj jj nn in at nn nns , cs pps md rb vb rb in at nns in at nn , cc be in dti nn vbn cs pp$ jj jj . cs rb , in ppo , rb vbn cs pp$ jj jj . rb , at jj nn vbn in nn cc nn in nn , bez dt in in at od vbz rb , at ap rb . rb , in jj in nns cc nns rb , at nns hv pp$ nns in at nn . cc rb , rb , in ap in at jj nns at nns ber vbd in at in nn in at nn . wps bez to vb , ppss vb pp$ nns in at nn ' jj nn , cc nn in at nn rb vbg in ppo . cs at jj nn in at jj vbg nn ( in rb at jjt in abn nns rb cc rb vbn in nn ) , at jj nns in ppo , cc at nn in nn vbg in at nn , abn in wpo , jj cc jj , vb in pp$ nns , * rb vbn nns , cc in pp$ jj nn , rb in pp$ jj nn , nn , cc jj nn . cs abn dts nns do in dti nns vb to vb at ql jj nn cs in nns rb . rb , rb vb wql ap cs at jj jj nn dts nns md , in dti jj nns , vb rb . in abn dt , . . ( nn cd ( at jj nns , in ap , in at nn in nn ber rb ql vbn , cc in at nn vbn rb . qlp , ap ber at np nns in wdt ppss md vb at nn vbg pp$ nn in nn in at vbn nn * vbn in dti jj nn . rb , jj rb cs ap jj nn cs cs pps vbd at jj nn , cc * at jjt in nn in nn . cc cs in abn nns at jj nn in at fw bedz at ap vbn in dt nn in jjt nn . cc cs at ap nn pps rb vbd , bedz jj , jj nn . cs pps vbd at nn to vb at nns in pp$ nns cs vbg in at nn in nn . cc cs ex bed nns wrb , vbg in jj nns vbn in nns rb to be vbn , pps vbd ppo in jj nns , cs in nn cc in nn , cc rb . rb rb nn np bedz in at nn jj in at jjs nns cc nns in at nn . cc , rb , md pps vb to be rb vbn , cs in dts nns cc nns , cs pps bed , pps rb vbd ppl . rb vbg nn in ppo in ap cc ap jj nns cs ppss bed rb vbn to vb . dt jj nn in pp$ nn , wdt hvd rb in at jj nn vbd vbn . in dts nns cs ap nn vbd jj in at jj nn . in be at nn ' in jj nn wdt pps md , pps md rb vb at jj , jj nn in ap nns , in at nn in dti nn in jj nns cc nns , rb , in ppls , ap cc ap jj cc nn . dt pps bez , cs in rb vbz np ' rb jj nns in at nn in at nn ' np nns . cc vbz at jjt nns cs dt nn md vb , in dts nns wps vb jj ap in pp$ jj nn in at nn vbn nn in at jj nn , cs in pp$ vbd nn in at jj nn in at nn . abl jj nn vbz in dts jj nns wrb jj jj nns vb ppo , cs in dti jj nns rb in nn nn ppss hv vbn nn . cc wrb , cs in at nn in np at nn , at vbn nn in jj nn nns at jj nn . . . ( nn cd ( rb , at jj nns vb jj cs at jj nn . cc , md at jj nn wps md vb jj nn in pp$ jjt nn cc jj nn , rb vb at nn , rb ql jj in pp$ nn , cs at pn rb vbn to . cc np , pp$ nn , rb vbz in ppo in abn pp$ np nn cc nn . cc in dt nn vbg nns cc nns , ppss md * vb cs ppss hv rb to do in at jj jj jj in nn cs ppo . cc , rb , ql rb jj nns cc nns ber vbn ppo . uh , np . wdt md be jj in ppo , pps md nns be vbd in in at nns , cc vbd in in at jj , cc vbn in at jj nn . . . ( nn cd ( . . ( nn nn cd np nn in np ( pps bez nn . cc nn in nn , at nn , vbg pp$ jj nn in in in nn nn in at nn in nn , vbz nn in pp$ nn cc nn . wps , vbg in at nn nn in nn , hvz rb ben vbg at nn in at nn . cc bez rb rb nn at nn in at jj , nn in vbn nn , vbn in dt jj nn in at jj nn in pp$ jj nn . in pp$ jj nn in at nns , ppss md vb cs jj nn hvd * vbn pp$ jj . cc rb , vbg nn in at jj jj , pps nns ppl in at nn , cc in at rb , vbn nn , vbg , nn , np . np , vbz in at nn . wrb at ap nn in pp$ jj ' nn nn hvz vbn rb , cc np , at od np , hvz at nn to vb cs pps bez vbn , rb np vbz in pp$ nn , vbz at ap nns in at nns , cc , cs at jj jj in at nn , vbz , in dti nn in nn , nn , np . np , cc vbz at nn . at od np nns in at nn . . ( nn cd ( rb , cc rb rb vbg at jjs nn , to vb cs pps be ql jj in dt jj nn , pps rb vbz rp at jj nn , cc in at jj nn , np . nn , vbz in pp$ nns . cc at od jj , rb vbg ppl ql rb in at nn in nn , vbz to vb vbn in dti jj nn . in , vbg abn nns in vbg nns in abn nns in nns , cc vbg rp pp$ nns , pps vbz in at jj cc jj nn in at jj nn in at jj np ' nn nn . cc rb , in at jj nn , vbg pp$ nn rp in at jj in at nn , pps vbz rp vbg , ql rb in ap cs pps vbz jj in at nn , vbg abn ap nns , in vbg rp at nn in nn . cc cs vbg in at nn nn rb , pps vbz , nns at jj nn rb , cc , rb , jj , jj jj nn vbz nn nn ' jj nn , in at nn in fw , cc at nn . pps bez * at ap in at jj nns vbn in at jj nn in nn in nns , cs cs in at jj nn in at nn dti nns md , in nn , vb ppls rb cc rb qlp in pp$ nn . rb , cd in cd , vb dts ap nns at ap nn vb rp in pp$ jj nn in dt ap nn ' jj nn , cc rb pp$ jj , * to vb jj cc jj nn in ppo , cs pps vbz in at nn in at nn . dt bez jj , rb ql jj . wrb dt nn . at nn . rb * . to hv ben np , nn in np . cc to hv ben np , * rb cc rb , rb rb md hv ben dti nn in jj nn . cc pps wps in at ql jj cc jj nn vbz in pp$ jj jj nn in nn in vbn nns , cs nn ' in jj nn cc nn in jj nn in at nn . dt nn ' jj nn in nn vbz np ' rb , in np bedz * at jjt . wps hvz cc rb vbd pp$ nns , hvz vbn wdt pps bez to be np . pps bez at nn in jj nn wdt ex bez ql rb . rb , cs in dt nn ppss hvn at jj nn in at nn in nn , rb , in nn , ppss md vb at nn in dt nn in nn in nn rb vbn . . . ( nn cd ( in pp$ nn in vbn nn , np vbd cs at jj , jj nn in nn in at jj nn nn , vbn in pp$ jj cc rb jj nns . in pp$ jj jj nn , dt nn vbd to be vbn . ppss bed ql ap nns in nn . cc rb , in np , ex vbd * to vb at jjt jj nn . in cd nn , pp$ jj nns abn vbn in at jj nn ' jj nn , cs pps vbn at jjs nn in ppo . nn do * vb cs in at nn ppss md hv vbn dt nn in at jjt nn , rb in ql jj at nn cs at nn . at . cc wrb vbg rp pp$ nn cc nn , in wdt at nn in nn bedz vbn , vb rb vbd np ' nn nn in ppo , at nn vbd pp$ nn cs cs vbg nns . cc vb ppo rb . cc at ap vbd cs , rb , at nn vbn in at nn . cc vbd ppo rb . cc vbd ppo , * in nn . in , cs at nn nn in np , wrb at jj nn rb vbz in at cd jj nns , cs dts nn nns bed rb jj nns , vbn in jj nn . cc rb in nn jj nn vbd * nn . rb pps ppl bedz jj . wdt at nn pps bedz in vbg np , wrb at nn vbd at jj nn in at nn rb . cc jj jj nn , pps bedz at jjt nn , cc ap nn in dt jj nn nn . pp$$ bed at nns in at jj nn . pp$ md hv ben at nns . in nn to hv vbn to vb ppl , dt md hv vbn in ppo jj to nn in at od nn . hvd pps vbd ppl in dt nn , rb , rb ql md pps hv ben jj to vb pp$ nn rp in dt jj nn . rb , jj to vb , vb rb vbd ppo . cc hvd nn vbd ppl , at nns bed np hvd rb ql ap cs vbd ppo . ap in abn , dod nn vb to vb ppl in nn . cs pps vbd at nns in at nn vbd ppo in ppo , in nn in pp$ vbg pp$ jj , jj nn . cc cs pps vbd cs , in ql jj at nn in jj jj nns , nn bedz in at nn , cc rb bedz * in ppo , at nn . wrb pps bedz , nn , uh . bedz at jj nn . dt nn . nn bedz at ap nn rp in at nn , . . ( nn cd ( cc nn bez at od nn rp . vb . in rb nn ' jj nn bedz rb vbn in nn in nn . np cc np abx hvd at nn in ppo . cc rb ppss rb hv at nn in vbg in at nn . cs np rb , wps bez cc at nn jjr cs nn , vbz to hv cc at jj nn , cc rb vbz nns in vbg pp$ jj , rb nn md vb ppl , pps md * vb ap cs cd nns dt nn . cs pps bez in jj nn in np to vb nn in at nn . rb pps bedz dt nn rb vbn in jj , cs rb cs pps hvd vbn in at nn in at nn , in dt nn pps hvd rb vbn wdt pps bedz to be rb cs jj , ap cc ap . in wdt pps vbd dod * ql rb vb pp$ nn , cs vb ppo jj in ppo . nn cc nn , vbd nn , hv in rb vbn in pp$ nn . nn bem at nn . cc , wrb ppss vb ppss md nn at nn in jj in vbn nn in at nn , cs ppss vbd to wrb ppss bedz in at nn . ex ' in at nns in nn rb . ex ' in at nn in nn : ex ' in at nn in nn . rb , cs pps bed rb cs dti jj nn in at fw hvd at nn in nn in nn ' in jj nn , abn dt nn hvd to do , in nn to vb jj nn , bedz to vb rb in nn in nn , cc vb at jj in nn in at nn nn in nn , vbg jj cc vbn in jj nn . rb , np cc pp$ cd nns vbn wdt md be vbn at od nn in at fw ' jj nn . cs pp$ nn , vbg nn in vbn nn in pp$ nn , at nn nn bedz vbn , cc rb bedz vbn in dti vbn nn in at jj nn . cc rb at cd nns bed jj in at nn , ppss beg pp$ nn vbz . ppss vbd at nn in jj nns ' nn in at jj cc jj nn . in jj nn in at ql jj nn cc jj jj nns in at nn ' jj nn , bedz at jj nn in jj nn cc nn , at ql jj nn in dts jj nns at nns . cs pp$ nns , at nns , vbd jj in at nn in at nns in pp$ jj nns , at nns vbd pp$ nn in abl at nn cs ex bedz at nn in ppo . ppss vbd cs nns . ppss vbd pp$ nns cs jj nns abn nn nn in nns . abl jj . . ( nn cd ( nns hvd np cc np , cs to vb rp at nns vbn in at jj jj , rb at jj nn in nn bedz vbn to vb in at jj nn in nn in nn , rb vbn rp in at jj nn . cc cs pps bed * jj in ppo , cs pps dod * vb in at nn nn in vb in cc in nn , rb np hvd at jj nn in vbg ppo in vbg at nn in pp$ nn , jj . cc rb nn , vbn in at jj nn , vbn nn in nn ' jj nn in jj ppo rp rb , cc vbg pp$ nn in at jj jj jj nn , cs np , nn in nn , vbd vbg rp at nn jj in vbg ppo . pps bedz rb at ql jj , vbg nn in jj nn , dt nn in vbn nn . at nn in at jj nn cc at nn nn . cc wdt in at vbg nn in at jj jj nn , cc at nn jj nns in dts cd nns , nn in nn ' in jj nn bedz cd jj nn in jj . rb , in vbg at nns vbn in abn nns ppss vbd , pps md vb in pp$ nns in pp$ jj nn vbg , cc rb vb rp in ppo in at nns in pp$ nn , cs abn bedz rp . pps bedz at nn to vb np vbd rp in np , vbg pp$ vbn nns in at jj ' nn : rb in ppo , nn vbn in at nn , in at nn md hv vbn pp$ nn in vbn nn in at jj nns . in at nn in pp$ jj nns , vbg at jj nn nn to vb , cs wrb at jj nn vbz nn in at nn . cc in abn dt , at jj jj bedz ql jj , * to vb jj . pps vbd ql jj cs in jj ql jj nns pps md vb rp at nn vbn in ql jj , jj , cc jj at nn . cc , rb , dt jj jj vbn jj cc vbd rb in at vbg nn in nn . cc in pp$ vbn nns vbd in at jj nn in at nns . * in nn cc in nn , ber nns vbn cc vbn . cc np , pps hvd at jj , jj vb in at nn in vbg in in at jj jj qlp in -- ql ql rb , cs at vbg nn in nn rb vbd to vb cs dti nns in nns vbd in pp$ jj jj nns . cc wrb pps md vb np vbg rp in ppo to vb ppl , . . ( nn cd ( cs pp$ nns md be vbn , at jj in jj nn abn cc vbd at nn vbg in ppo in at nn , in pp$ jj nns in at nn . cc dod at nn wdt at nns vbn in pp$ nns , in pp$ nns cc ap nns . cc in wdt nns , in nn , ppss md rb vb pp$ nns . dt nn nn dod * in abn vb to vb jj nn in nn . wql md pps vb cs in pp$ nn nns , np , in cd , md rb hv ben jj in dti jj , jj nns . uh . nn in nn . jj nns at jj nn wps vbz in nns . * at nn md pps vb in pp$ nn , cc at nn . in jj nn , cs , in pp$ jj nn , at cd nn in nn nns md vb cc vb . in pp$ jj , nn in nn nns , abn pp$ jj nns vbg in ppo in at nn , cs jj nns in nns . cc , cs dts nns vbd in at nn , cc rb vbd rb . rb , beg pn cc jj in pp$ nns , ppss bed rb rb in ppo in in nn in nns , cc rb cs vbg in nn , wrb ppss vbd in ppo in pp$ jj jj nns . in dt cd nn , np vbd at nn in ql jj jj nns , wps , cs at nn , in nn in at nn cs in nns at nn ' jj nn vbz in ppo . cc cs pps bez in nn rb cs pn rb bez , in dti nn , vbn rb . cs dt , in jj nn , at nns cc nns in at fw md ql rb be vbn to hv vbn rp in at nn cs in ppo . in wrb ppss dod vb ppo , pps bedz pn cs at nn in nn vbz at nn . vbg rb in at nn , rb to be vbn rp at ap . cc , cs at jj nn , vbg in at jj nn . cc dod ppss vb ql rb . in at nn bedz at nn . rb , np bedz jj . cs rb vbn in at nn in np , pps bedz rb at nn in ppo . pps vbd in at nn , cs at ap in at np nns vbd in vbn np . cc cs wrb nn cc nn hvd vbn , cs jj np in at nns , nn ppl in at nn in at nn , vbd rp at nn rb , vbg pp$ jj nns . rb , in pp$ jj , vbg jj nn , np ' nn nn , vbn rp in at vbn nn in pp$ nn , rb vbn in at jj nns in pp$ nn . . . ( nn cd ( . . ( nn hv cd np nn in nn ( pps bedz in at ql jj nn , cs in jj nn in at ap nns pp$ od nn in nn vbd rb . in ql jj nns at nn in nns ber vbn ql rb in at nn ' in vbg pp$ nn . rb cs pps md hv cd cd nns , cc ap , to vb cs vbg pp$ jj vbg nn . cc cs , cs at cd , cd , cc cd nns ' nn pps bez vbg rb nr in pn jj in ppo in -- uh , at jj jj rb in in rb , pp$ nn in nns ber vbn vbn in at ap . cc * vb ppo vb in nns vb in in at nns in at nn , doz pps rb vb at nn in vbg cd jj ap . rb , cs at nn in vbg nn in nns , rb cc rb , bez at ql jj cc jj cd , vb ppo in dti nn vb rb . nn vb ppo , cs at jjt nns in nn in nns bed at jj nps . rb , in abn pp$ nns , ppss vb pn rb in ppo . in cs pp$ nns , at nns in np , md rb , in pp$ nn , hv vbn to vb at jjt nn in nn in abn np , cc np cc . rb ( cs at jj nn bedz vbn in ppo ) cs cs jj nn nn in pp$$ md be vbn to hv vbn in at nn , in at nn nn in np ' nn nn . rb , ppss md vb dts np nns nn in at nps . cc cs at nps bed at nn in nn in nn nns , bez at nn vbn in at jj nn in nns , cs at od nns bed vbn in jj nns : at nn rb vbn in at jj nn in jj nn in abn cd nns in dts nns . wrb , in jj jj nns in pp$ nns , dts jj nns bed jj to vb in at nn , cc vb rp in jj nns . rb cs at nn in nns in at jj nn vb rp in at nn , cc at jj rb vbg in nn . in nn nns , at jj jj nn in jj nns , wps vbd ppo at jj nn nn in at nn cc vbd at jj ap nn in . . ( nn cd ( pp$ nn in pp$ nn , vbg pp$ nn in at nn in at nn . in ppo ppss hv at jj nn in at jj nn in in in nn in nns . wps bedz * to be vbn in pp$ nn in nns cc nns , nn , nn , cc nn . cc rb vbg pn rp in at ap , rb vbd in pp$ nn . in jj nns in in in nn in nns ppss hv cc at jj nn . jj nn , nn , cc jj nns . wps , cs rb jj in vbg rp at jj nn , ber rb ql jj in at nn in vbg rp in vbg dti jj nn . ex bez np . wps , in at nn in at nn in np , vbz in nns vbn , dti cd cd cc cd nns in at nn . jj , rb , wps vbz at nns rb . cs np np , np np , cc np at nn . jj np , rb , vbz jj rb in pp$ vbg nn in nn in np , cc cs pn in np ' nns , pp$ nn vbz cs nn in jj nn in wdt ap nns md vb . np np , rb , in at nn in nn in nn , vbz pp$ nn in nn in np nn . cc rb wrb ql vbn in dt np nn , nn bez rb vbn cs at vbn nn bez rb . in wrb ex bez nn , md be nn . cc cc jj np , cc np , cc np , md vb at ap nn in rb , rb rb vbn in nn in pp$ nns at vbn nns in wdt ppss vb . wrb pps md be vbn , cs pp$ nns vb in at jj nn in at nn , cc vb wdt nns cc wdt nns md be vbd . pps md vb jj in nn in dti nn at nn in nn nns in at nn in dts in at nn . cc cs in nn pps bez * rb , bez rb vbn in at nn in wdt nn np , at jj nn in np , vbz jj . at jj nn vbz ppo , cs in at jj nns in at jj nn , cs nns bed rb vbn in nn in at nn , at nns in dt nn vbn jj nns in at nn in nn , in wdt at nn in nns vbd in nns in vbn nns , pn cs vbz vb rb in at nn in nn . at ap nns rb dt ap nn bedz vbn in at nn nns in jj np , wps , in vbg at nn , vbd nn in at jj in vbn nns rb at nn . cc dt nn hvz rb vbn jj . vb ppss rb in at cd jj nn in nn , cs in at jj in nn . . ( nn cd ( in nn . at cd nn in nns ber vbn vbn in nn in nn in nn in nn . at nns vbg pp$ jj nns ( cs in at nn ) , cc vbg dt ap at cd nns . in at jj nn in at nns pps bez ql jj at nn in nn . rb , in at jj jj nn pps bez jj . ex ppss vb , at cd nns in at jj nns , vbg in at jj , cs cs at nns bed jj nns , cs in ppo cc in pp$ nns , cs pps bed , vb at nn nns in at nn , rb cs nns rb vbd in at nns in at jj nn in jj np . ex ppss vb , vbn in at jj nn in at nn , in pn vbn cc at nns . at vbn nn rb vbz . at jj nn nns nn . pn vbz ppo in jj . in at ap nn , in dt jj vbg nn , at jj nn vbz ppo . ppss vb at nn . vb at nns . nns in jj nns in nns rb vb ppo in jj nns . ppss vb in at jj nns . jj nns . nn in nns . ber rb vbn in at nn in wdt ppss md hv in nn in in in abn pp$ nns in cd nns cc ap ber rb vbn in nns , cc pp$ nn in nn bez jj . in cd in dts jj nns , in at jj cd cc cd nns ' nn , cs rb vbz , at nn in at jj nns ppss vb in at nn in nn md vb in ap jj nns . cc pps bez ap to be vbd cs at nn in wdt ppss vb ql jj at nn in at jj nn in pp$ jj nn , md be ql rb jj in pn vbg in at jj nn , cc vbn to vb at jj nn in nn , jj cs vbz in at nn , at nn , at nn , at nn nn , at nn , at nn , cc dti ap in dts jj cc jj nns in wdt nns rb vb ppls . pp$ ql jj nn in vb bez at nn in at nn ' jj in nn , wrb ppss vb in cd jj jj nns ( ql jj in nns ) vbd at nn ' jj nn in nns . rn , vbd rb in at nn , at nn vbz rb cs jj cs pps md vbg in at nn ' np nns . to be jj , in jj nn ppss md vb pp$ nn rb in ppo , in at nn in at nn in nn . cc rb vbg at jjt nn in nn bez at ap in at nn in at jj nn . in cs at nn bez vbn rb . . ( nn cd ( in pp$ rb nn , cc md rb vb rb in ppo , cc rb vb rp in ppo , in vbg jj nn in vbg ( cs at jj nn vbg at jj nps in nn ) . cs at nn in nn bez * ql ap in at nn cs pps bez at jj nn , cc jj nn nn ppo . ppss md vb at nn cc nn in nns in pp$ nn , cc at ap md ppss vb at jj nn in pp$ nn in nn . in abn dt , pps bez ap to be vbd cs at nn in nns in at jj jj nn ber jj in dts jj jj nns cc nns , vbn nn ' nn in nns , in wdt at nns in at np jj ber vbn in at jj nn in at vbn nns . in at nn in nn nn in nn nn , vbn at nn in at nps , in nn in at np nn , cc rb in at nn in nn in at nn np nns in jj np . in dt jj nn , abn nns in nn in nns ber vbn in at ql jj nn in at rb rb vbn nn ' nn in nn in at np , wdt bedz at nn in nn nn ' in jj nn . pps vbd ppo at nn ' jj nn ' nn in nn , in nn in ppl . pps beg at jj nn cc vb , cc jj in abn jj jj nn , cc vbg cs cs ppss vb pp$ jj nns in pp$ jj nns ( ppss nns beg at jj nns cc nns ) , ql rb md ppss vb in ppls dti ap nn ppss md vb . in nn , at nn ' jj nn ' nn in nn bez pn cs at jj jj cc nn . pps bez jj rb , rb , wrb pps bez vbn in at jj nn in nn to vb in nn in pp$ nn in at jj nn . beg vbn in at nn in at nn , ppss vb in ppo in at jj nn in nn in at nn . in at in nn , cc nn in at nn in at nn , bez at jj nn , in at nn in in nns , nns , cc nns . in nn bez at nn nn , in wdt to vb pp$ vbg nn , nn , nn , cc ap jj nns . wrb nn nn in nn vbd pp$ nn in nn in dt nn ' jj nn in pp$ , pps vbz ppo cs pps rb hvd at nn in ppo ( rb vbn in at nn ) , rb in at nn nn cc nn , in at nn in vbg rp at jj nns , cc jj nn nns vbg dts nns . cs ppss md rb vb in ppo in . . ( nn cd ( at nn vbg in at nn in at nn , cc to vb rp in ppo bez at ql jj nn . rb , pps bedz rb at nn in nn in nn nn to vb , cs pps doz , abn at ap vbn nns in pp$ nn ' nn in nn . cc cs pps rb nns in ap in dts , cc cs pps vbz ppo in at ql jj nn in pp$ nns in dt nn ' nn in nn , in at jj nn pps vbd rb in at nn in vbg at nns vbg in wdt bez vbn at jj nn in abn nn nns . at nn jj in at jj nn in at nn in at nn ' np nns , cc in at np ' nn nn , rb , in rb hvg ben ql ap vbn in rp nns in pp$ nn . ppss vb , cs cs at nn bez ql jj cc jj rb , rb , in abn pp$ vbn nn nns , jj nn nns , cc jj nns , pps vbz ql rb , nn nn , cs pps bedz * ql rb vbn in dts jj jj nns , cs to vb beg vbn rb in dt rb vbd ap nn in nn , ql rb vbn in in cd nn in pp$ nn ' jj nn , in jj nn in pp$ nn . cs , in at jj , ppss rb vb cc rb vb at jj , at jj , cc vbn nn . rb ppss vb ppo ql jj in ppo cs pps md ql rb vb dt nn in nn , vbg wdt at jj nn cc nn pps md hv ben , cs in jj nns cc jj nn pps bedz vbg at nn rb rb in dt nn ' jj nn in cd cc cd nns in at nn . cc cs ppss jj jj in nns ber * ql rb vbn rb cs nn nn cc pp$ np in nns bed . rb dt nn bez rb vbn in at rb vbg nn in dts jj nns in wdt ppss jj nns rb vb . in cd , ppss vbd to vb rp at nn ql rb , vbg in at nn to hv at nn in np , cc dti pn rb in nn wpo ppss md vb rb . rb vbg at jj nn rbr , cc vbg at jj nn in at nn in nn nn , vb at jj nn in at jj nns , cc rb in ap nn in pp$ jj nn . vb ppo vb at jj nn in ppo rb , cc rb vb cs ppss vbd cc jj nn . in at nn in at nn vbg in ppo , wrb md ppss in in beg vbn rb in ppl . . ( nn cd ( in abl at nn in vbg nn , in in wrb md ppss cc rb vb pp$ nns to vb abn jj in nns ' vbg nns , vb pp$ nn nn jj , cc vb rp at nn . cc vb ppo in dt nn rb vb ppo , ppss vb in nns in np . vb in nn in pp$ jj nns dti nn in jj nn cc jj nn . vbn in jj nn . cc wps vbz to vb in at fw rb in nn in pp$ nn . vb in abl at cd , ppss vb . pp$ nns md be vbn cs ppss md be vbn . cc dt jj in vbd jj np md nn ppss cd vbz rb at nn , cc rb vb ppo cd nn in nn at jjr . cc ber dts nns in abn jj . in rb , at jj in nn vbz at jj in ap jj , jj , cc jj in vbn jj nns , vbn in at nn vbz in nn , cc vbg nn in nn cc nn . np np * rb vbz ppl in at nn in nn in dti jj vbn jj in nn , cc in jj nn vbz : in in vb rp , ppss jj cc jj jj nn , nn . cd cd nn in nns vb in ppo in jj . ql rb do at nns in jj nns vb dts jj in vbn jj nns in nn , vbg ppo in * vbg jj nn in at nn . abn in vbg cs ppss ber ql rb vbn in abn jj nn , cs cs in pp$ jj nns ppss md rb * vb vbz cs rb . cc abn in jj . dts jj nns hv at nn cs pp$ nn bez jj . ppss ber jj in vbn . wdt nn , rb , to vb at jj nn . ppss hv vbn pp$ nn in nns in nr . wrb , ppss nn , vbd at nn in cd in dts nns , ppss ' ppss ben vbg rb jj in cd nns , cc ppss hv * vbn at jj rb . nps ber jj cs nn ' np nns wrb ppss nn rp rb . rb ppss bed . cc rb ex md hv ben nns in ppo in at jj nn . cc vbn in abl at nn in jj nn in jj , jj nn bez dt jj in vbn nn in at vbg nn in nns in nns , cs in ap pps vbz pp$ nn . vbz at nn . . ( nn cd ( nn in pp$ nns in at jj nn in dt jj , jj , jj nn , vbg nn cc nn . cc at jj , abn in vbn , vbg , jj nn wps vbz ppo . at rb in vbn , jj nn in dti jj nn , vbz in ppo at nn in dts jj nns cs ap nns at nn in rb vbg in ppo . in dt vbn nn , pp$ nn vbz rb in wrb pps vbd . vbz vbn in nn cc nn . cs jj ' np vbd jj nns , vbg in ap at nn in at nn at jj nn rp . ex bez at nn in ppo , rb , in dt nn nn vbn in at rb vbg nn . in ppo , vbn in at nn . in at nn , in at jj nns in np . cc cs dt nn , dt nn bez in ppo , vb pp$ nn cc nn at nn . vb pp$ nn in abn . cc pp$ nn vbz rb in nn . rp jj nns ppss vb . cc rb , in jj in nn , in at jjt nn , in cd abn in vbn nn ppss vb in dt jj nn in at nn nn , at ap to vb in rb . vb ppo rb , ppss nns . . . ( nn cd ( . . ( nn fw cd np nn in nns ( ( vb nn : rb , abn . ) pps bedz * at jj nn in at nn in at nn , cs cd nn rb in nn , np , cs bedz pp$ jj , vbd at nn in nn in at nn . ex ap nn in nns rb vb in dt nn , cs nn nns , in at ap nn , vb at ap nns in at nn . rb pp$ jj , jj nn bedz vbn , cs in cc rb pps vbd pp$ jj nns , in nns ql jj in pp$ nn , cs ppss bed abn in vbd , cs jj nns , in at jj nn in pp$ nn . dod ppss rb vb , rb , in dt jj . . ( nn cd ( cc vbd nn . ex rb , ppss md vb rb nn nn in nns in in at nn in nns in pp$ cd nn , rb in vbg nn . cc in at nn in nn , dts nns vbd jjr , rb cs pp$ jj nn cs nn vbd at jjr nn . cc , ql jj in pp$ nn bedz np , cs in at jj nn cs pps vbd , rb in at jjs in nn cc rb in at nn , ppss md rb vb dt nn nn in ppo cs pps vbd , cc nn in ppo cs pps vbd . ql rb vbg ppo , rb , cs pps abn cc vbd at rb vb in at jj nn . np ' ppss vb ppo , nn . vbd np . at nn cs ' nn in ppo nns at nn . nn ' md rb be rp . at nns vbd rp . in in nn rb vbn rp in pp$ nn . nn , vbg at nn , in at ap jj nn in nn in pp$ nn . pps vbd in at nn in nn . rb pps vbd in at nn in at nns , cc vbg pp$ nn nn in at jj in nn rb , cc in cd nn vbg at nn , pps vbd np to vb pn rb . uh . vbd at nn , vbn in at nn rb cc rb vbn in nn in nn in in dti jj nn . vb pn rb , vbd np . nn in nns , rb . vb rp . wrb at jj nn ' jj nn bed vbn , cc in jj cc * ql jj nns , bed vbg ppo , cs pps vbd * in at nn nn wrb at nn bez vbg rp , np , cs rb vbg in at nns , cc rb vbg pp$ nns in at nn , vbd in pp$ nn . cc cs cs * at nn bed rb ppo vbd pp$ jj nns in at nn . in vbn nn cc abn in jj nn pps vbd to vb , jj in at vbg nn in at nns . cs np rb vbd in nn , cs np md hv vbn ppo rb in at nn in vbg at jj nn . cc dt dod * vb rb . rb vbg , pps vbd : in in wdt do ppss do wrb ppss vb at jj , nns . vb rp in ppo . bedz at jj nn in at nn in vbn nns . . . ( nn cd ( jj . vbd np , in at jj nn in pp$ nns . vbg at jj nn in wdt pp$ jj nn hvd ql rb vbn ppo . cc wdt do ppss rb , nns . jjr rb , cc in ppo . cc wdt nn bez pps ppss vb to , nns . at jj jj cc at nn nn . rbr cc rbr rb cc rb jj cc vbg , vbd at nn in at jj nn in at nn . cs at nns vbd to vb rb in dt ap , cs cs vbg wrb pps bedz cs ppss ppls vbd ql vbn in jj ql jj nns . cc , ppss bed abn nn rb , cs np , rb abn in vbg in pp$ nn in nn , in cd nn vbg jj rp at nn , cc rb , ql rb vbg ppo , vbd ppo rb : in in abn ppss nn in nns hv rb rb vbd ppo vb nns in at jj jj . vb ppo . nns ' ppss vb dt jj nn in nn . -- in vbg rp at jj jj nn in at nn in in ppo bez at cd nn nn , nns . np ' ppss vb ppo . cd . np , vb ppo rb nn in vb . cs at nn bedz vbg at nn , np , in vbg , bedz rb vbg at jj nn in at nns in pp$ nn , cs cs to vb pp$ nn , cc in vbg dti nns bedz rb jj nn in ppl , vbg at nn ql rb vbn cc jj cs pps vbd at jj nn in at nns in pp$ nn in ppo . vbg at nn in vb in np , pps vbd in at jjs in nn in at nn vbn in cd nn , vbg at nn in at ap , cc in at jj vbn nn vbg : wps in ppo vbz ppo at jj in vbn jj in at vbn nn cc at jj nn . wps in ppo vbz ppo cs jj in vbn jj , in cd nns vbn in pp$ jj nn in in vb ppo , wps in ppo vbz ppo cs ap jj jj , pps md hv dt nn nn , pp$ nns . fw . nn . vbd at nns , cs in vbg nns ppss vbd at nn in vbg at nn in at nn . ppo ' in at jj jj , ppss vb , vbd np , cs pps vbd rp . . ( nn cd ( at nn in vb . at jj jj . nn pp$ nns in ppo , nns . vb jj in jj nn . cs ppss vb cc at nn , vb rp . abn dt cs np , nn , cc np hvd vbn rp in rb ql jj nn cc nn in at nn , cc in at nn in at vbn nn cc jj nn ppss hvd vbn cs cs dt bedz rb vbn in dti jj nn . nn nn , vbd np , cs jj jj md be at ap cs dti nn np np . np np . vbd np . do ppss vb at jj jj rb , nn . doz pps vb in nn at ap jj , nn , cs pps vbz rp . vbd at np in np rb . cc hvz pps at jj nn , rb , vbd nn , ql jj , rb in at jj , cc ql jj , nn nn . cc pps hv cd , cd , nn in -- uh . jj ap nn in ppo vb , rb , nn , vbd np rb , abn jj in nn jj , vb ppo in in ppo in in jj jj in at nn , cc vbg pp$ nn nn cc rb cs cs jj at nn in in vb ppo in in ppo in in nn . vbd np , rb , np , at nns vb abn vbd cc vbd in ppo . rb , nn , pp$ nn bez at jj cd , cs at jj nn in nn , cc jj cs at nn in pp$ np nn in at jj jj nn in vbg . rb , np , cc pps nn in nns cs at vbn jj in at nn . nn cc nns . nns , pps bez np np ppss hv vbn in in np np in in np np . nn nn , vbd np , wps , in np cc nn , hvd rb rb ben vbg pp$ jj in vbg nn , cc in ap vbd vbn in at nn wdt rb vbd abn at nn . nn nn , ppss hv vbn in np np in in cc pps bedz * np np wps vbd rp pp$ nn . wps vbd ppo cs . vbd np . rb vbg , nn , np . rb , pp$ nns abn nn . pps bedz np np cs jj ppo . np np wps vbd ppo in dt jj nn ppss vb rp rb . rb , rb , pps vbd in at jj , jj , nn nns , cs cs in at nn in vbn jj . np , rb . pps bedz wps vbd jj jj wps vb ppo . vbd at jj vbg . . ( nn cd ( nn in ppo in rb cc at nn . rn vbg abx nns , in jj nns pps vbd rp : np , rb . cc ppss ' ppss vb ppo rb jj nn , cc rb at nn , cc rb at rb nn , cc rb vb ' np nns cs ppss vb ppo rp . cc dt bez wdt ppss hv vbn in , nns . to vb cs jj jj in abx nns in nn , cc in abn nns in nn , cs pps nns jj nn cc vbz nn rp . wdt vb ppo , nns , md ppss nn nns in ppo , rb . nn vb ppss do vb jj . rb , rb . vbd at nns cc nns , vbg rbr in at vbn jj nn : at jj nn in at jj nn . at jj nn in np np . nn vb ppo , pps vbd in abn nns cc abn nn . nn vb ppo , nns . nn . vb vb at jj nn in nn . cc wdt ' in dt jj nn rb , np . np . md ppss * vb at jj jj . ber * nn in np np . nn bem nn in pp$ jj nn , cc in at nns in nn rb , nn nn , cs pps rb vbz in at nn in at nn ppss vb . cc ppss vbd rb to vb nns , * pp$ nn ' jj nn . wql ap nns md pp$ nn vb ppo rb cs ppss vb ppo , nn nn . pps md * vb ppo rb in pp$ np nn . np nn . vb . cc vb rbr , np . ppss jjt at ql jjr nn . cs nn ' vbz to be at nn , nn , cc at nns hv vbn pp$ jj vbg in nn at nn , in jj ppo in nns , cd in at cd nns in at nn . rb , vb ppo vb ppo , cs pp$ nn md vb at jj nn rb . pps nns pp$ nn , vbd np , wdt ' rb cs in . vbz pps vbz ql jj , cc jj . nn in at jj nn . vbd np , wps rb vb ppo in jjt nn . nn . to be vbd in at jj nn , nn nn , vbz jj . vb ppo rb rb , in in at ql jjr nn . abn jj nns , nn , ber cc ql nn nns . cc in dt nn in in in at vbg nn , at vbd nn in in rb , dti jj cc rb vbg nn vbz rb at nns in pp$ nns in in at jj nn . cs nn md vb , vb rp . . ( nn cd ( at nn . wql md at nn vb rb in in vbg in at nn . to ppo , at jj jj bez dt nn , vbd rb in ppo . rb ppss vb rb ' np pn in . cc ' rb qlp . pps nns ppo . pps nns ppo . ppss vb in ppo jj nn , in at jj nn vbg ppo . dt jj nn bez rb wdt ppss vb . cc be at jj jj nn , cc be at jj jj nn , ppss md vb dt nn in ppo . vb * in ppo in nn , nn . ppss ' nn vb at nn cs pps vbd ppo . in md at nn do dt , rb md ppss do at ap . cs ex bez rb at nn in jj nn rb , nn vbg in abn nns . cc * pp$ nn , nn , bez rb cs jj nn . wps ' nn in ppo . nn hvz at nns . vb rp pp$ nn . ql jj cs vbz ' nns bez at jj nn . ql , ql . ppss jjt cc jjt . pp$ nn hvz vbn ppo in nn in nn . cc vb ppo , np , wdt bez vbn in nn , cs nn nns ppl . ex ber nns in wpo jj nns ber jj nn . nn vbd * to nn ppo . vb ppo vb . vb . vb rb jj nns in vbn jj in in vbg , vbg nns vbn in at nn . at nn nns in in at vbg cc vbg nns , wps vb . cc vb , cc vb at nns in at jj nn ppss vb . at nn , nn , at nn . ber ppss * cd cc abn in np , in dt nn in at jj . vb np . pps vbz . vb rb jj . pps vbz to vb in ppo . vb rp in at jj nn , pp$ cd nn nn md , np . cc wdt bez pps . vb ppo . ' np cc to vb vb at nn . at jj nn in np . wdt bez pps ql . in dt cd jj nn , rb , at jjt nn rp in abn np , rb pps md * vb rb , wrb at nn in nn hvz vbn at nn . uh . nns vb ppo . ppss vb . at nn vbz ppo . vb , cc vb . -- in nn , rb . pp$ nn , rb , cs nns ppo . ( rb ) pn vbn in pp$ vbn nns , pps hvz vbd ppo in pp$ nns . np rb bez pp$$ . md vb ppo rb , in nn . nn vb ppo . -- in vb ppo abn . vbd np , jj . cc in pp$ nn in at vbn , jj nn in at nn , np dod * vb pp$ nn nn . cc rb at jj nn in at nn . cc rb at vbg nns in . . ( nn cd ( at nns in at nn . cc rb at jj vb in at nns in at nns , cs in at nn pp$ nns vbd rp . in rb np ' rb jj nns vbn rp in at nn in nn . at jj nn vbd rb . at nns vbd rp . at nns vbd rp . at nn vbd cc vbd ql rb . uh , ppss nns cc nns . wrb vb ppss * wrb ppss vb . cc rb ber ppss nns cs nns , ppss nns . rb * ql ap nns in in , cs nns in at vbg nns in . in in ap jj in nn ppo , at jjs nns in pp$ beg , dts rb vb ppo rp . at nn . at nn . vbd np . vbg at nn np , cc vbg in at nns , pps vbd ppo to vb pp$ nns . rn vbg ppo in ppo in at nn , in pp$ nns in pp$ nns , cs pp$ cd nns vbd in pp$ nn in pp$ nns , cc at nn in at nn ' jj nn vbd at nn in at nn . pps vbd in at nn rb vbg at nn in pp$ nn . cc dts jj nns vbd pp$ , cs at jj nns in at nn nns vb at nn in pp$ nn , cs pps vbz rp in pp$ nn in at nn in at nn . cc , uh . ap to vb in at vbn nn in at jj . nn cc nn . pps vbd , vbg at jj vbn nn in at jjt nn . at nn rb rb nn . rb in ppo , rb . jj nns in in jj nns , nns . ' rb jj cs np ' nn nn . ql , ql . pps vbz rb rb . pps vbz in ppo . nns rp in at nn in vbg nn . rb vbn . rb vbn . dt nn pps vbd , dt nn pps vbz . nn pps ppo in in rb ' np at nn . nns , ppss vb at nns . cs nn nn bez vbd cc vbn . nn , vb . vb rb , pp$ nns . nn hv vbd ppo abn in dt nn . cc ppss nns , nn ppo in pp$ nns . cc ppss nns , vb rb in pp$ nns . cc ppss , jj nns , vb ppo rp , cs ppss md in dti nn vb at jj nn in pp$ nn nns in ppo . nn nns , ppss md rb vb cs in in nn . uh , vb rb . jj nns vb * rbr . nn pps ppo . wrb , rb , dt np hvd vbn nn rb , jj ' nn * ppss ber . np ' nn in in rb , ppss nn . nn , ppss nns . vb pp$ nns jj in ppo . uh . . ( nn cd ( vbn . vb ppo vb at nn . ql vbg , in vbn nn , pps vbd at cd nn , vbg nns in pp$ vbn nn . cs cs vbg , rb cc rb vbd ppo . rb , vbg rb in np in np . in np in nn . pps vbd cs cs , in dti jj , jj nn , pps md vb hv vbn in ppo at ap jj nn vbn in at np nn in pp$ jj jj nn . at cd nns jj cs pp$ jj , vbn , cc jj nn . np cc nn vbd rb in ppo . at jj nn in np vbd jj . in jj . vbd np . cc , rb , ' rb rb . in dod ppss cd cc rb vb at jj in vbn nn , rb pp$$ jj jj nn , wps hvd rb vbn in in ppo . rb , rb , pps md hv vbn ppo jj . rb ppss vb ppo * . rp nns . cc rb , ppss nns , ppss do vb ppo cd nn in nns in pp$ cd nn nns rb in in rb cd ql jj nns cc nns , pp$ jj nns . vb at nn . wdt , wrb at jj nn nns at nns in nns , vbg pp$ nn in jj . uh , pp$ jj nns . pp$ jj nn , wps md vb ppo in ppo . nn do * vb ppo . ppss md ppo . vb pp$ nns cc vb at nns , ppss nns . rb vbg at nn , at cd nns rb vbd in at vbn nn nn in pp$ nns , dti cd nns rb , vbn , nns rp , in ppo . nn ppo * in dt jj nn . nn ppo . nn ppo rp . vb ppss * at nn nn . vb rp at nn . ql , ql . rb , ppss nn in nns , nn . at nns . vb ppo . vb ppo cs ppss vb . nn , rb vbg in cd nn in at ap , pps vbn at vb nns in at jj nns in at jj . rb , cd in cd , ppss vb . vb at jj nns . vb ppo , ppss wps ber rb vbn nns in dt jj nn . uh . np . cc at nn bez vbn . rb jj nn rb vbz to vb in ppo . nn , ppss nns . nn cc vb , ppss nns cs nn at jj nn ' jj nn in in nn in np np . nn vb ppo abn , cs ppss do * vb np np in pp$ nn . at jj , jj nn nns bed vbn . cc in nns cc nns in at jj jj , at nns . . ( nn cd ( bed rb vbn rp in at nn . np vbn , cc vbd , cc vbd . rb rbr , cc rb , at vbd np vbd at nns in at jj nn . wrb , vbg pp$ jj nn in ppo , ppss abn vbd . cc np vbd in pp$ nn . . . ( nn cd ( . . ( nn np cd nn ( at nn . in at jj nns . np vbg rb , cc vbg rp . nn vb at jj cc jj nn . jj nns , jj nns , wrb ' rb ppss vb . at jj nns jj vb to vb pp$ nn . vb ppo . cc rb ppss vb . rb , in at rb in nn nn ' jj nn , at jj nns vb cs nn . at jj nn nns at jj . at nn nn in in jj vbd in nn , in in vbz rp . pp$ nn vbz rp . pps nns in pp$ jj nn . bez , rb , at nn ql jj cs ppss vb . dt jj nn in np . rb bez pps jj in ap at nn . nn , at nn , vb * pp$ jj nns . cc rb vb dt nn vb cs , cs rb vbz . ' np nn in in cs ppss vb in -- * nn . ' np vbd , rb in in cs ppss vb . at jj nn nns ppo rb , pp$ nn vbz to vb in at jj nn . rb , nn nn , pp$$ . at nn wps vbz at nn in at ap nn in vbg nn . jj nn in pp$ nn . uh . nn bedz , wrb cs at nn rb vbd ppo , cs at nn vbd . ql rbr . dt jj nn , pps vbz * ppo . abn nn bez nn in ppo , cs ppss md fw ' nns vb . jj in at jj nn , ppss vb at jj , vbg nn . vbn , ql rb cc ql rb . vbn in at nn in nn . jj nn in in jj nn . ( vbg pp$ nn , pps vbz in at nn . ) ' np * ql jj at nn . nn vbd to vb cd jj , in . . ( nn cd ( at ap . cc pp$ cd jj nn vbz in abn pp$ jj nns , cc ppss vb . cc , cs ppss md , cs ql ap nn in nns in nn , ppss abn vb in ppo . cc ppss pp$ nn . uh , rb . cs to vb nns , at nn ppl md nns be vbg . wdt ppss ' ppss vbd , ppss ' ppss vbd . cc wdt ppss ' ppss vbd , ppss ' ppss do . ppss vb ppo jj in in np doz . cc ppss ' in jj , ppss bem nn vbn . dt jj nn cs ' vb ap nn to vb ppl . at nn bedz cs ppss md be vbd . cc in in nn . nn vbd dt nn . nn rb nn cs ppss md jj pp$ nn . rb , rb , be at nn cc at nn cd . cs ' vb ap cs ppss , ppss jj nns , rb bed . nn nn cc nn in ppo , ppss nn in nns , ppss nns , ppss jj nps cc vbn nns . nn md * vb cs nn in nns do in nns , in in vb dti cd in pp$ jj nn . nn ' nn vb ppo . ql , ppss ' ppss vbd ppo rp , cc ppss bem rp rb . cc ppss hv vbn cc vbn . vb rb in in pp$ nn nns . nn hv at jj nn to vb ppo . vb , np ' np nns in ppo . vb cc vb cs ppss md vb ppo . vb ppo . ppss md vb ppo , rb ppss vb ppls . nn hvz ppss rb . vb ppo . at nn in pp$ vbn nn bez vbn in nn nns , wrb pp$ nn bez vbn to vb . rp jj nns , in at vbn nns in nns , in nns ' nns , rb ppss vb . pn ' in at nn , pn ' in at nn in at nn nn . . . ( nn cd ( . . ( nn np cd nns ( in at nn . np vbg in ppo . pp$ nn bez ap cs vbn . pps ' vb jj . cc in at nn . jj nn , cs nn md nn nns in abl at nn . cc pps vbn rb rp , cc vbd abn pp$ nn rp in ppo . nn vb ppss vb pp$ jj nn . cc vb dt . . ( nn cd ( ppss md vb ppo in ppo . md ppss , rb ppss , at jj nn hvz vbn ppo in ppo . vbz ppo in at nn ppss hv at nn to vb . jj jj nn . wps ' nn in ppo , pps vbz . in in rb , pps md be at nn in abn rb . vb , wrb pps nns ppo rp ql rb . uh . nn rb vb pp$ jj nn , in in to vb , vbg . cc jjr rb , to vb in nn in nn . in in pp$ nns ppss vb dti jj nn md vb ppo rp , hvd ppss ppo . rb bez ex nn . nn cc nn nn jj . at vbn jj hvz at jj jj nn to vb in , cs at jj nn in nn hvz pp$ jj nn . pp$ nn in jj nn , np md nn rb . nn md in nn , bed pps * vb nn . cc pp$ jj nn ' ppss vb rp . pp$ nn at abn in vbg nn , ppss hv at nn to vb rb . ( at nn in nn in at nn . ) uh , np . to vb in abl at jj nn wps hv jj nn in jj nns in ppo . np rb in at jj nn . at jj jj bez pp$ nn . vb . at jj nns . dt nn bez rb . vb at jj nn rb . np pps vbz nn . jjs in at vbg nn vbz in at jj , vbn , vbg nn , cc rb to vb jj nn in ppo , wrb pps nns in pp$ jj nn , vbn in at jj nn in at nn , cc rbr rp , vbn in pp$ jj nns . at jj nn nns ppo rp . nn . ppss nns , cc vbd at nn . uh , nn . ' nn in at nn cs dt , in nn vbd rp cc vbd in nn , in in ql jj , jj nns ber vbn to vb in -- uh , nn . ' rb rb cs ppss do vb at jj nn in ppo . cc ' nn * ppo . dt nn ' vbz rp in ppo . cc in at jj nn in at nn in ppo , rb md ppss vb to vb ppo , ppss jj , nn nns . vb in ppo , vb ppo , vb ppo , uh ppss vbn nns . . . ( nn cd ( . . ( nn cd cd nn nn in nn np in nn ( ( np nn , cc vbg at nn . ) cd . uh . uh . uh . nn . vb pp$ nn . -- in ppss ' ppss ben vbg in ppo rb cs , cc cs uh , uh ' in at jj nn . wrb rb . cs at nn ' in at jjt , jjt nn in abn dt ' np jj . cc vb wdt md , cd nn ' cc rb vbn in in dt jj nn bez , pps ' vb abn jj . nn vbd * abn pp$ nn in np . cc in pp$ jj nn np rb vbd pn cs ppss at ap nn vbd . be jj at jj nn hvz vbn ppo , rb . nn vbd ppo , vbd ppo . hvd hvn at nn , md rb hv vbn ppo in in in wrb ppss vbd pp$ nn in pp$ nn ppss vbd ppo . uh , np , jj np in in dt ' in pp$ nn in -- uh , np , wdt in ppo , np . rn ' in at nn . nn vb * abn dt md be vbg , cc be ppo wdt pps md , ppss ' ppss vb in ppo vbg . abl at jj vbg cs vbz in abn pp$ nns . nn vb jj . uh , fw . rb , rb . wdt ' in pp$ jj jj nn in nr vbg rb . vbg pp$ nns rp . -- in vbg at nn in at ap vbn nns , ppss md vb , jj cs at vb ' np nn , cc rb bem ppss in in nn , fw . rb , rb . uh -- in ppss ' jj nn in in nn in nns cs nn , to vb , cs jj cc jj cs nns wps vb , in at nn ' jj nn , cc vb in at nns cs nn . at jj vb dt in in wps vbz . nns . nns . rb , rb , nn in -- ( rb ) pps ' vb pp$ jj , pps hvz pp$ rb , cs ppss ' rb * vbn . -- in nn , rb , nn , rb in in dt nn in in vbg . . . ( nn cd ( . . ( nn np cd nn , np np nn np ( ( np vbz cc vbz at nn vbg , vbg , vbg , cc vbg in jj nns , abn vbg in nn . ) nn cc fw in ppo , jj nns . uh cc fw in ppo , nns in np . pp$ nn ' np vbd . -- in od np nn uh , nns , nn ' nn be jj . pps ' vb jj in at nn . vb at nn , vb ppo . ( np , cc abn vb . ) pp$ nn vbd in at nn , at nn in nn in pp$ nn , at vbg in dts jj nns wps vbd in at nn . uh , pp$ nns in pp$ nns , pp$ nns , cc in pp$ nns vb , cc ppss ' ppss hv cd in dts jj nns , nn , nns , in nn . ql , be jj , pp$ nns . md pp$ nns rb vb . cs at jj nn bez vbg at jj . nn ' jj nn in at nn in nn cd nns rb , rb . od np nn in at nn . cd nns rb . nns ' ppss vb , nn in nn . vb at nn cd , ppss np . ppss nn . cc vb ppo vb at nn . nn ' jj at nn in nn in dt in in at nn nn . ql , ql , ( nns pp$ nn in at nn , ) nn in in nn in in nn in nn in nn in nn in np , at in nn in nn in nn . cd nns rb rb . vb rp . jj nn jj vbg in in nn , jj . jj nn in dt . nn vb dt in pp$ jj nn ' jj nn . pps ' vb rb cs nn in dti cs . . ( nn cd ( nn in nns . ppss vb . ppss vb in in rb , vb rp rb , cs nn in jjr nns . in ' ppo rb . ex , vb dt nn in nn , cc nn ' ppo in ppo . vb ' ppo to vb vbg in pp$ nns . vb ' ppo ppo ' in at nn . ppss md vb pp$ ap , cc vb in nn . cs ' np at nn in in dt ' vb ppo . pp$ nn vbn ' nn vbn in vbg np nn . nps nn nn , nns . vb ' ppss hv at nn cc cd cs ppss vb in nn in nn nn . wdt vb ppo . ex vbz at ap nn . vb in abn nns . uh . ap np . nn in pp$ nn . uh ( jj cc jj . ) np ' nn vb wrb pps bez . nps nn vb pp$ nn , rb , cc vb pp$ nns . nn ppo , nns , ppss vb . jj ' in at nn . nn . uh ppo , vbd ' nn ppss vb . nn , rb , jj in nn , cc nn in at nn in nn . vb ppls . nns . nns . np nn ppss nn ' nn cs pp$ nn , jj . pps ' vb ql jj in pp$ nn . nn ' rb vbn in nn in nns . nn ' in jj to vb jj nn in at nn . cc vb ppo . jj nn ppo rb . wrb ' ppss pp$ nns . wps cc at nn md vb pp$ jj nn in pp$ nn , cc vb in ppl , wrb nn ' ppss do . nns . nn md hv nns . jj nn nn . nns cc at nn . -- in rb ppss ' jj nn in ppo . rb , vb nn . rb in nn nn uh , uh , ppss nns , ex ' jj nn ap in ppo . nn nn wrb ppss md , ppss vb . abn nns vb to vb rb . uh . rn vbz at nn . rb in ppo . jj nn ( in , cc vbg at nn in at nn . ) . . ( nn cd ( rb ppss ber , np . cc ex ' in at nn in nn . rp ppss vb . rb , nns . ( at nn in ppo nn in at nn . dti vb rb . dti nn cc vb in at nns in nn . nns at in nn . ) jj nn ( vbg . ) vb ppo , np . uh ppo , nn in nn . vb ppo , vb ppo , vb ppo , vb ppo , nn in nn . vb nn in nns . vb at nns . uh np , ppss vb . -- in ex vbz dt , vbd rp . ppss vb ppo rb . nn nn nn pp$ nns , rb , cc nn rb . vb at nn in jj . nps nn jj in jj . vb rp pp$ nn , np , cs ppss vb in ppo . vbn nns . vb ppls . np ( rb vbg . ) dt ' np at jj nn . pps vbz cs nn : nn . nn vb pp$ nn . jj np nn ppss vb cs dts jj nns vb ppo in wdt ppss ber vbg rp . nn ' jj nn in pp$ nn , ppss md -- in dt ' np at jjt nn in pp$ nn in nns , wps vbd nn in nns jj nns . nn np . to vb in at jj nns cc at nn in jj nns . uh , uh . jj at jj nn ' in at nn , cs ppss nns hv ppo . cc ql ' rb jj to vb cd nn in ppo . vb rp , nns , ppss ' nn jj . ppss bedz rb . od np nn np uh . -- in vb . dt bez jjr cs vbg in nns in at nn in in vb ppo at nn , nn . ( ppss vb vbg , cc vb in nns . rb at nn vbz in in at nn vbz . ) . . ( nn cd ( np nn in nn . nns , pps ' rb be vb vb rb . at nn in vbn , jj in nn np vbd to vb . ppss jjt pp$ jj nn , np . jj nn ( vbg cc vbg pp$ nn . ) pps ' vb at nns in in at nn ' rb vbz nn in nn pps rb . ppss ' ppss vb pp$ nns rb . rb md abn at nns bed nns , rb ppss ' nn vb vb , cc vb in ppo rb . ex ' rb pn ql jj in nn in in nn md * vb ppo . -- in cs dts jj nns in jj , jj nns in at nn , wrb at in in vbg nns vb jj jj , vbg nns . jj nn ( vbg . ) vb ppo * in ppo . vb ppo , nn in in nn nns in at nns in in jj nns in in nns in in nns . nn . nn . nn . abn vb : jj nn cc vb . * nn , vb ppo , rb vbn nn . uh , nn . ( vbg . ) jj nn ( vbg in at nn . ) vb , jj nn in pp$ vbg nns . -- in at np in np . uh . rb vbn , rb vbd np . nn rb vb ppo in pp$ nn , cc at jj nn hvz vbd . nn vbd ppo vbn in at nn , pp$ nn . jj at od nn nn vbd ppo rb . rb vbn cc vbn rb . uh ppo . -- in * ppss cc ppss md vb at nn . wql rb , cs rb be vbn in rb nn . vb ppss at vbg nns in nn ' jj nn in nns , wrb ppss vb rp at nns cc vb at nns . -- in at nn . at nn . rp , nn , cc vb ppo . ( np in pp$ nns . ) jj nn wrb at nn vbz nn ' in at nn . vb in in nn , nns . at nns ber rb vbg nns , vb in jj ppss ' ppss vb vbg rb . jj nn nn , nn , jj nn . ql jj cs ppss jjt , ppss jjt . rb vbn . at nn rb vbz ppo in ppo rb . pps ' vb at ap . . ( nn cd ( jj cs at nn nn in nn , vbd rb to vb at jj in nn in vbd nns , in wdt at nn in nn nns . od np nn pps hvz pp$ nns , vb ppo cs . nn vbd jj nn vb ppo pps md rb vb at nn , pn cs ppss vbd at nn in at nn in in nn pp$ nn nn in ppo . jj nn nn . cc cs jj nn ' in at jj jj nn . ppss ber at nns to vb ppo rp pp$ jj . abn nn . rb . jj np nn wrb at cd nns vb . nns ber at jjt nn in nn to vb wrb vbn in dti ap nn , cc rb rb ' np pn in at nn ' np vbd nn . jj , nn . jj . dt bez at nn in nn wrb jj nns vb rb , cc jj nns vbn in nn . pp$ nn hvz pp$ nn in nn . vb rb , nns , ex ' in dt in at nn in in jj -- cs , ppss vb , ql rb nn jj . nn wdt in dt . wps ' in jj in jj ' in jj in ppo . nn ' np vbd rp in ppo . jj nn ( rb . ) pps vbz to vb , uh . -- in at jj nn vbz ppo jj . ( vbg . ) np , nn , pp$ nn bez at jj jj nn in nn in in jj nn in dt . at nn . nn ( rb ) pn . nr . nn ' jj nn cs np ' rb jj cc jj . cc wps md ' nn be , cc rb in pp$ cd nn pp$ jj nn ' jj nn in nns ber ql jj in vbg . od np nn wdt ' rb cs ppss vbd in in nn . rb . . . ( nn cd ( jj nn rb . nn vbg pp$ nns . nn ( vbg ) nn pp$ , nn . jj nn , jj nn . jj nn ( vbg ppo ) nn ppo rb . jj nn , jj nn . abn at nn . at nn . at nn . np ( in at nn ) at nn at ' jj , cc at nn rb in in nns cc nns in in abx nns . nn . nn nn at nn . nn at nn . at nn be vbn , at nn . nn in in ppo . jj nn jj nn . vb at np ' nn nn . at nn , at nn . jj np nn jj vbn . ex . at vbn nn . in dt nn np vbd np . jj nn , jj nn . at . wrb rb , np , jj ' nn ppss at nn . nn ' jj nn in at nn nn nns in at nns . in nn in jj nns . vb in in jj nns . abn at nn . at nn . vb , pp$ nns . ( ppss nn . ) np ( vbg in at nn ) np . nn vb jj nns . nn , nn . ex vbz at jj in nn . vb in nn . nn . vb jjr , np , rb vbz at jj nn . ppo ' nn jjr cs beg in at vbd nns , at ap nn in at nn . wps ' nn vb vbg in nns rb . cc rb ppss vb , abn vbg , cc rb ppss nn ' nn . jj nns in ' ppo . ppss ' nn in at nn in nn . vb rp rb . np , wdt at nn . cc dts nns ex ber jjr cc in in ppss ber pp$ jj nns , ppss . jj nns . jj jj , vb . . . ( nn cd ( vb . rn hv ppss vbn abn pp$ nn ql rb , cc at jj jj in in vb . vb . -- in cc vbn in rb . cc rb dt nn in -- pps vbz ppo vb abn in cs pp$ nn in in dt nn in at jj nn vbd ' ppo in to vb ppo . uh , ppss jj jj np rb ex rb in rb nn , hv nn in dt jj jj nn rp rb . vb ppo in abn nns wps hv at nns to vb nn . . . ( nn cd ( . . ( nn nns cd nn nns ( ppss , np , bedz cd in dt nn . pp$ nns hvd vbn rp in at nn . pp$ nn hvd ben vbn in pp$$ . cc jjr ppss vbd , cc rbr dod ppss vb cc vb pp$ nn , cs in at nn in pp$ nn . at jj , jj , jj nn bedz in ppo . np ' rb jj nn vbd pp$$ . in jj nns ppss vbd at nn in dt jj nn in wpo ppss cc abn at nns hvd vbn pp$ nns in nn cc nn . in dti nn nn , cs in nns rb , at jj , vbn jj nn hvd vbn dts vbn nns rb vbd in at jj nn nns . cc * abn in ppo vbd in pp$ nn . rb at ap in ppo , rb , hvd rb vbn ppo . cs at nn wps ql rb hvd rb cc rb vbn nn in ppo , bedz jj qlp . in , vbg in at jj nn in jj in nns . at jj nn ppss bed vbn in at jj jj nn , ap in ppo rb vbg pp$ nn in jj nns , ql ql rb cc rb in at jj jj cc ap in at nn , to vb at ap nn in vbg nn in dti nn . at jj nn in dt jj nn . at nn in at nns in vbg in nr . abn dts , in ap nns , jj cc jj , rb vbn . . ( nn cd ( at nn in at jj nn in jj vbg in nn in at jj vbg nns in np np . pps bedz rb to be vbd , cs ap nns vbd to hv vbn , in jj cc abl at nn , cc in jj cc abl at np , at jj nn in jj nn cc nn , wdt jj , cs vbg jj nn in pp$ nns , hvd rb vbn ppo . in dti nns pps bedz * at jj nn , ppss vb , cs at jj in nn md hv ben ql ap cs jj np . rb cs in jj at jj nn nn hvd ben vbn in jj cc * jj nns in jj nn , jj , cc nn in at nn vbd . rb pps bedz , cs dts wps in nn rb vbd nn in np np . jj nns , rb , in at ap nn , bed jj to vb at jj nn pps vbn , rbr , cs pps bed , in at nns in at jj nn nn in jj , cs in at jj nn . in dt nn , rb , at jj nn in np cc at jj hvd rb ben rb vbn . cc cs in dts wps , rb vbg in at jj nn , in nn vbd nn in ppo . in at nn in at nn ppss hvd at cd in ppo , rb , cs rb cc rb vbn in ppo , cs in dti ap jj in dt nn . cc in nn , jj nns dod vb in dts nns in -- * vbn in vbn nns cc nns , vbn nns , cc nn nns in in cc jj in at ap nn in nn . dts vbn jj nn , abn vbg cc vbg pp$ nns in np np . dts nns hvd vbn rb to vb at nn in ap jj nns , in wpo at nn in at jj nn hvd rb vbn . cc dod jj nns in abn nns vb to vb , cc rb at ap vb at jj nns in dts jj nns . in * rb do jj nns rb vb rp in at ap nn in abn jj jj nns , in in cs at vbn nn vbz nn in pp$ fw . cc , in jj nn , ql ap cs in dt in fw fw , jj nns vb , wrb ex bez dti jj nn in ppo to vb to . cc cs at nn vbz at nn in dt nn , cs at jj nn vbz at ap nn in jj nn , in at nn cc nn in at . . ( nn cd ( nns wdt rb vb rb . in * rb ber nns cs at nn vb in dt nn cc nn jj in abn nns . cc in abn nns , ppss ber in abn nns at ql rb vbn in nn in wdt bez ql jj in at nn . nn to vb ppss * rb nn pp$ jjt nns , cc , nn in nn , vb nn in ppo . rb , in jj jjt nns , cs cs ppss vbd at cd nns , cc vbd at cd nns , ppss md * vb in dti vbn nn , cc nn jj in dt nn in at nn . in jj nns cc nns , vbg ql jj at vbg cs pps doz , at nn bez vbn in nns abn vbg to vb pp$ jj jj in ap at jj nn . at nn , rb , cs rb vbg nn in at jj nn in at jjt jj nns , at jj nns in at jj nn dod in at nn vb in ppls abn nn in jj nns , cc abn in vbn jj nns in jj nns , wdt rb vbn np np in jj nns jj in pn wps rb vbz . ql cs in ap nns abl at nn dod pps rb vb , cs ap wps in dts nns , in ap , hvd vbn in at jj nn , ap in dts nns bed jj to vb at nns in pp$ nn . cc ex bed rb ap cc ap jj jj nns in nn . * rb in at jj nn hvz at jj nn in at jj nn , cs rb vbn in abn ap nns in at fw , vbd rp in at nns in at nns cs at nn . ex ber dts dt nn in ppo , wps , cs jj cc jj qlp in vbg nn in at np cc ql jj , md rb in in dtx in jj nn , cc nn , cc nn , vb at nn in at jj nn . in dti nn , ex ber rb in nns , rb in dts vbg nns * vbg in at jj nn , wps hv rb rb vbd at jj nn , cc wp$ jj nn in at nn bez vbn in at fw nn rb vbn in at nr . vbn in pp$ nns , dts nns md vb in at jj nn in nn nn cc nn , in at jj , jj nns in . . ( nn cd ( jj vbg . cc bez at jj in jj nn in at jj nn nn rb ql rb vbn , cs in nn in dts nns wdt vb ppo . cc cs cs at rb vbn nn in pp$ nn hvd in ap jj nns vbn pp$ nn in ppo . ppss vb dti nn nns in in fw cc np in in vbg at jj nn * rb to be at nn in at ap nn in at nn , cc rb to be ql ql jj cs rb to be nn in jj nn . cc rb rp in ql jj at nn cs np ' rb , bed dts cc ql jj nns jj . in in pp$ jj nn , at np ppl vbz cs in nn in at jj nn , abn nn ( nns vbn ) ber vbn in at ql jj nns , cc rb in at nn in pp$ nn vb ppls in at nns in jj nn cs to vb jj nn . cc rb at jj nns in at nn md vb jj nns cs dts . rb in pp$ jj nn , rb in at jj nn in np , at jj nn in ppo bez , in dti nns in pp$ nn , vbn in at nns in at nns . ql cs vbn in at nns cc nns in ppo , * at ap in at nns vbd , in nn in np np , at jjr nns in at jj nn nn , wrb pps bedz rb jj to vb rb vbn jj nns to vb in at nns in dt jj cc vbg nn . jj nns vbg cs cs ap nns md be rb vbn , rb to vb cc nn nn in abl at nn cs at jj nn bedz * in jj nn . cs to vb ppo , md be rb to be vbn in at jj nn . in dt nn , ex ber dti jj nns wps md be vbn . rb , dti ex bed , wps rb in at nn in dts nns bed jj to vb nn in np np . cc at rb jjr nn wps , jj rb to vb in ppo rb cc rb , in at jj nns in dti jj nn , cc in jj nns , bed ql jj * to vb in at nn cs vbn . pn in at jj nns vbn in , cs in ap vbg to be vbn in at jj nn in at nns in at rb vbn , bedz at jj nn cs np np bedz . . ( nn cd ( jj . cs pps hvd rb ben vbn in jj nns in cd cc at ap nn in nn . cc , jj cs jj nns md hv ben , bedz dt nn rb in dti jj nn in jj nn . in cs at nns in at nns in at nns hv rb rb ben vbd , rb in at ql jj nn . cs at vbn nns in at jj nn wrb in at nn vb , in jj nn , jj in pp$ nns . cc in nn in nn hv vbn at ql jj cc jj nns in ppo , rb in at jj nns wrb , in vbg in at jj nn , pps vbz ppl in jj jj nn in at ql rb jj nns . pps bez at nn rb vbn in abx jj cc jj jj in nns , cc ql rb at nn vbn in jj nn nns rb in np , cs dti nns hv ben vbn rb nr in at jj , in wp$ nns hv ben vbn at nns in nns vbd in at np nns . cc bez pps to be jj , cs in dti in dts nns pps hvz ben vbn cs at nn in nn in at cd nns md * hv vbn ql ap nns . rb , in nn , pps hvz ben vbn in dti nns , cs at cc ' nr nn , ql rb at nn in nn , bedz rb at nn in at jj . ql ql rb , in at jj vbg nn in vbg nns , at nns vbn in jj nns in at rb np nn in np ( in wp$ nn ex bedz vbn to be at nn in wdt at nns in nns vbd rp in at nn ) . cc cs rb ql jj nn in at np nn in np ( wp$ nns bed vbn to hv vbn in at jj nn in at jj nn ) . dts jj nns ber ql rb vbn in at nns in at nn . vbn in nn , rb , in jj nns cs dts . cc vbg cs cs vbn , jj nns , at jj nn hvd vbn jj . pps md be ap nn in nn cs dti nns md vb rb rbr in pp$ nns . vbg np np * rb jj , cc jj ( in nn bez cc nn in nn ) . cs cs nns in nns md be vbn in pp$ nns , pps md rb vb rb vbn . cc cs rb pps md rb be vbn in nn jj . . ( nn cd ( nn , abl at nn md be cc at jj nn . in rb in jj nns nns in nns rb , pp$ jj nn md rb rbr be vbn . cc rb vbn in dts jj nns , ex bedz ap in at jj vb cc jj nn in at nn to vb at nn in jj nn . in , pps bedz * ql ap pp$ jj nn cs ql ap vbn ppo in ap nn vbz , cc , cs bedz rb vbn rp in in at jj nn in jj vbn nn , cc at jj , jj jj vb . dts bed pp$ jj nns . at nns wrb , rb in at jj , jj nns , pps vbd pp$ nn , in at jj nn , in dts wps vbd ppo . at nn in pp$ nn bedz ql vbn , cc vbd , cc vbn in at ap vbn nn , cs , in at nn , pps hvd vbn pp$ jj nn in at jj nn . at nn , rb , rb vbn in pp$ jj nn , wrb vbn vbg in jj nn in at jj jj nn , vbg at jj in nn nn in jj nn , abn jj in jj nns . cc bedz pps pp$ jj nn , cc pp$ jj nn , cc rb pp$ jj jjr nn , cs ql ap vbn at jj in jj nn , cs cs vbn , jj nn wdt , in in jj nns , pps hvd rp cc rp rb vbn in pp$ nns . rbr cs abn , pp$ jj nns vbd ap in nn cs rb nn rb . in , wrb vbg in pp$ jj nns , in at jj nn in nn , pps hvd ap nns ben vbn to vb rb rb , cc , vbg rp in ppo , cc vb pp$ nns in nns , cc vb ppo rb in nn in pp$ nn . rb ap nns hvd vbn pp$ nn . cc cs jj nns , wql ap vbn rb , bed in at nn jj in at nn . rb , in ap nns , jj vbd at jj nn ' in jj rb in nn , cs at nn cc nn cs pps vbd , bedz * rb vbn cs hvg ben vbn in at jj nn . vb , rb , in wdt nns in vbd , vbd nn at . . ( nn cd ( nns in pp$ ql jj nns bed vbn , wrb in at nns in vbd nns , cc at vbg nns in vbn nns , ppss vbd rp in at jj nns in at jj ' in jj nn in at jj , jj nn , wps vbd rp , cs cs in at nn cc at nn . pp$ cd nns nn in ppo , cc vbz cc nns abx vbg in at nns . cd nn , vbg at nn in nn in pp$ vbn nn , hvd vbn in at jj , cs at np nn in pp$ nn , rb vbg in at cd nn nn to vb at vb in jj nn in at jj . dt nn bedz nn . cc rb pps bedz , cs rb vbg pp$ jj in vbn jjr nn in ppo , np np hvd vbn rb vb ' np nn , cs at jj at nn in nn in at nn . ql jj np , at vbn jj cc np , md hv vb ppo in ql jj nn . jj nn bedz ex to vb , rb , cs rb cs dt ql jj nn , np hvd vbn at jj nn in at jj , abn at ap vbd in dt in pp$ jj nn pps in ap vbd to vb in ppo , * rb abn pp$ jj nn , cc abn pp$ jj cc jj nns . at jj nn vbd in ppo cs at nn nn in abn dts jj nns wdt dti jj nns vb vbg in ppo , cs ppss ber vbn vbg rp in abn at nn cc abn at nn . dt jj nn wdt hvz ben in at nn . in wp$ nn rb at jj nps vb pn in abn in at nns . wdt at jj nns in at nr vbd in pp$ nn nn . in in np dod * vb rp cc vb ppo vb ppo . cc rb vbg pp$ nn in at vbd jj jj , pps vbd ppl , abn vbn , in ppo . abn dt ap nns cc nns . abn wps vbz rp at nns in nns . abn nn in nn in ppo . abn wps vbz at nns cc nns at nn . abn at jj nns in nn cc vbd . abn nn , in jj nn , bed rb vbn , cc vbd ql jj in np np . pps vbd in at jj ' in jj vb at nn in abn at jj nn cc nn vbd in pp$ jj nn in np rp . cc rb , cs cs pp$ nn hvd ben at nn , pps vbd pp$ jj nn ' jj nn in ppo . . . ( nn cd ( pps bez * jj cs dt nn in ppo vbd pp$ nn nn in at jj nn in pp$ jj nn . rn , in vbg in at nn , nn in nn , pps hvd rb vbn jj in at jj , jj , nn nn . cc wrb pps vbd at nn wps vbd ppo , pps rb cc vbd at jj jj nn , cc pn ap . rb , wrb in dt nn vbn to vb in nr , cc in jj nns in nns cc nns , jj cc nn vbd vbd rb in cd nn , vbg in jj nn cs jj , vbg jj nn . rb pps bedz , cs pp$ vbn nn cc nn nn vbd in cd dt . cc ql jj , vbd ppo jj . wpo pps bedz rb rb , in at rb nn , cs at nn , cs at jj nn vbd ppo , vbz abn cc jj in at nn cs , in nns in at nn , pps bedz at ql jj . cc , cs jj in at nn , cc jj jj nn rb vbd in pp$ jj nn , cc bedz rb vbn in pp$ nn , cs pp$ nns bed vbn in nn ppo rb , rb rb , cs pps vbd , vbg in pp$ nn . in at nn in nn , pps vbd in at jj nns in at nns . cc , wrb vbg in ql jj nns , at nn , in jj jj ' nns vbd , vbd in at jj nns , cc , in abn nns , at jj nn ' jj nn vbd nr in ppo in at nn nn nns , cc pps vbd rb in pp$ jj nn in at vbn nn cc nn . rb rb , wrb pps vbd cs nn , vbn nn , wql jj , cc vbd pp$ jj nns rb rb . cc pp$ nns vbd np at jj nn bedz rb vbn . rb rb , np , in pp$ vbn nn , jj in . jj nn bez rb at jj cc ql jj nn . wrb ppss vb pps vbd , pps md hv cc vb vbn in dti ql jjr nn . np ' rb jj jj vbd * , cc rb vbn . cs at jj np , wrb dt jj np vbz rb , cc ql in at np nn . cc , cs in pp$ jj in vbg nn , * cd nn in nn ' in jj nn hvd ben vbn in . rb in dt jj nn , * cd nn in pp$ jj jj nn hvd vbn . cs cs vbg nn , rb vbd at vbg nn . cs abl at jj nn md vb , pp$ jj jj . . ( nn cd ( vbd pp$ jj nn , cc vbd ppo , cc vbd abn pp$ jj nn in pp$ jj jj nn . rb cs rb in hvg vbn pp$ nn , np , in dt cd nn , dod rb vb at cd nn ap nn cs rb pps hvd rb vbn to vb in dti cd jj nn . dt bez rb . rb vb ' in jjr , jjr , jjr nn vbz vbn . cc jj to vb nns , cc abn nn bez jj . vbg rb rp in in at ap nn in dt vbn nn fw jj wrb ppss rb vb in in wql jj cc jj , rb vb ppo . in in cc vb pp$ nn , ppss jjr , jjr nns , in dts jj jj nns in np . wrb rb in at jj nns in nn ' in jj nn , pp$ nn in nn , pp$ jj jj nn vbz in jj nn . at nn vbn in nns , cc vbn in nn . ql in at vbn nn , at jj nns jj cs jj nn . rb cs at nn , pps nn vbz , vbg in pp$ vbn nn at vbn nns in nns . vb ppo rp rb , ppss jjr , jjr nns . nn cs jj , jj nn . at nn nn . rb , pps dod vb ppo , ppss jj vbn nns . cc in pp$ jj jj rb md at jj nn in nn vb . rb , in pp$ nn , np hvd dti nn in dt , rb : abn pp$ nns ber jj , pp$ nn cc pp$ nn jj . rb in nn to vb , cc nn , cc vb at nn . pps rb vbd cs in nn pps dod rb rb vb . in dti nn , dod rb . cc dt nn in pp$ vbg bedz rb jj in pp$ nn , * in pp$ nn jj . rb , ql rb dod pps vb in dt vbg , cs wrb in nn nn pps vbd rb in ap , at np vbd ppo rb cs cc rb vbn , cc cs in at jj , in at jj nn wdt hvd vbn ppo . at nn in pp$ jj nn in nn bedz rb rb vbn in at nn nn . cc ql rb , abn at vbn nn wdt rb rb , in at ap nn in vbg in at nn in at jj nn , vbd vbg in pp$ nn . cc bez pps ql ql jj , cs rb in vbg pp$ nn in dt vbg nn , in nn in jj jj nns , at vbg nns in dt jj nn bed vbn to . . ( nn cd ( vb at nn , cs in dts ap nns pps bedz abn at rbr vbn cc vbn in nn , in at nn ql jj in nn cc nn cs at jj nn in nns . vbd in cc vbn in , in at jj , jj nns in dti jj nn . abl at cd , md pps be vbn , md vb at ap nn to vb pp$ nn cc vb pp$ nn in at ql jj in abn nns . cc , cs in dti nn vbd to be rb vbn in dt , rb abl at pn md vb rb jj to vb cc nn in pp$ nns in at nn . cc be abn dt cs pps md , jj pps bez , cs in at jj nn in pp$ jj nn vbd rp cc vbn in ppo , np hvd rb vbn in at jj nn in at cd rb cc abn in jj nn in vbg at jj nn . hvn dti cd in pp$ jj nns in nn cc abn vbn in wdt bedz vbg in ppo rb , wql rb md pp$ jj cc jj nns hv vbd at nn in abl at jj nn . ppss bed vbn in jj nns , at nn to be vbn rp in nns in at nn . pps bedz jj in at jj , jj , cc jj nn . rn , rb , bedz dt nn in vbn , jj jj nn , vbg in nns at np ' rb jj in at nn , in at nn in at nn , rb , rb vbd rp in jj nns , cc rb , cc nns in in rb jj rb , in at nn in jj jj nn cc nn in nn in np , at jj nn in nn cc nn in np , cc at vbg nn in nn . abl at nn , ql vbn , vbd rb vbn cc vbn in dti jj nn to vb ppo in pp$ nn nn . wrb pps bedz cs ppss ql rb vbn in at jj nn ' jj nn in in in wdt jj nn pp$ nns bed vbn , cs in nns pp$ nn vbd rb pp$$ . at jj nn cs ap pp$ jj nn cs pp$ . wrb abn dt vbd to be in in wdt at jj nn bedz in ppo , cc wrb in pp$ jj nns , rb , in dti jj , vbn nn , pps md hv vbn at vbg jj nn in at nns in nn , in in abn dt to vb , md be to vb jjr cs np md vb . at jj nn wps vbz in ppo abn , wrb md pn vb rb vbz pp$ nn in at rb vbg , vbn nn in pp$ nn . wps doz * vb at . . ( nn cd ( jj nn nn . wdt nn in nn in at cd in cd md vb rb . in cd , ppss vbd ppl rp in at nn in at nn cc at nn . cc cs rb abn at in nn to vb at jj , md vb pn in dt nn cc at jjt jj . . . ( nn cd ( . . ( nn np cd np np np np np ( wdt at jj jj bedz to vb , hvz ben vbn . wdt , in nns , pps bedz in ppo , cs rb vbz jj . rb in dts ql jj nns vbg np np , wdt md * cc rb vb in dti nn ' jj nn dti nn , ex bedz dt nn , cc ql jj , jj nn in ppo , wdt in nns in pp$ nn rb vbn abn at nn . cc rb ql jj cc ql rb jj bedz pps , cs ppss rb vb in vbg ppo in at jj nn . pps bedz at nn in at jj cs in abn nns vbn ppo . cc wrb md ppss vb to vb ppl rb . cc rb , in dti jj , jj nn , vb ppl ppss md , rb abn dts nns md be pn . cs in ap jj nns , nn rb vbz nn , cs cs nn dti jj nn in pp$ jj , cs in nns , nn , cc nns . cc cs jj nns hv in dti nn vbd at jj jj jj in nn in dt nn . rb at jj , jj jj nns in nn vbg at nn nn in at jj nns in abn pp$ ap jj nns in nn . cc at jj nns in np vbg at ap nn in jj vbn in at jj nn . cc at jj nn vbg at cd nn in at nn in jj nn . cc at jj jj nn , jj , nn in nn np , hvg in at jj nn at ap jj nn . cc cs dt jj in nn in pps vbz in at jj nn ppl , vbg at jj nn jj nn in at jj nn . cc cs , in abn dt , nn hvz ben . . ( nn cd ( rb vbn jj in nn , in in at nps at jj nn vbd at jj nn . cc cs in ap jj nns cc nns , dt ap nn bez vbn at nn in ap vbg , jj nns in in at nn in nns , at nn in nn . cs in at jj nns in np at vbg in at jj nn in ppo bedz at jjt nn in nn . cs in ap nns , nn vbz at nn in nn in at vb in at nn , cc vbz in at jj nn in nns cc nns vbn in nn in jj nns . cs rb in at jjr nns in at ql jj nns pps hvz ben vbn at nn in at jj nn cc nn . in at jj nn nns , at jj vbn nn beg vbn at jjt in at nn . cc in at jj nns , jj nn ppl vbd jj in at nn in jj nn . cc cs in at jj np , at jj nn in at jj jj nn bedz in rb at jjt nn in pp$ nn , cs jj , jj nn beg vbn at jjt nn ppss md vb in at jj nn in at jj nns in pp$ jj nn . cc cs rb in at jj nn in jj , ql jj nns vb at nn in cd nn in pp$ jj nn , at nn cc nn , vbn in at nn . cc cs in at jj nn in at jj nn , jj bez rb vbn in at nn in at nn in pp$ nn . cs in at nn in nn . nn , jj nns ber vbn in at vbn , cc at cd -- cc in cd nns vb vbn in jj cs at jj jj nn , cc at jj cd wpo nns rb jj cs nn . rb in abn dts vbn nns , in wdt bez jj , cc jj , cc nn , ex rb vbz at jj pn in at jjs nn in dt nn , wdt vbz ap in nn in at nn cs dt nn wdt nns in nn . dt jj nn pps bez , wdt vbz at nn in nn , wrb vbn in ql jj nns , cc vbn in dti nn jj in ppl , to vb dt nn in at jjt nns . vb at jj nn in at nns , cc at jj jj in at nns . wdt cc pp$ jj , jj nn vbz ppo at jj nns ppss ber . dt jj nn pps bez wdt vbz abl at jj nn , rb . . ( nn cd ( ql jj cs jj , in at jj nn in pp$ nn . ql cs * at jj in jj nn in pp$ jj nn md rb vb nn cs at jj in vbn nn cc jj . vb ppo in at nn , wrb vb dts nns in jj nn cc jj nn , in wdt dt jj nn nns in abn nns . * np rb vbd dt nn . cc np ' rb jj , jj nn , nn . . . ( nn cd ( ql jj in pp$ jj nns cc jj nns bez dt in at jj vb in at nn . at jj nn in jj nn , jj in vbd , jj in vbn , nn in jj , cc in at nn in at cd nns in pp$ jj , nn nn . pps bedz at vbn nns in jj nns in jj nns , wp$ nns in dts nns bed rb vbn in at np nns cc at nns . in pp$ vbg nn pps rb vbd ppo cs cs vbn nn wdt at nn vbz in at nns in nn . at vbg vb in pp$ jj , at vbg nn in pp$ nn , vbn ppo in nns ql jj cs nn cc nn in nns md hv vbn ppo . at ql jj cc jj nn in dt jj , jj nn , wdt in at nns in at jj nns cc nns vbd at nns in dts jj nns wrb np vbd jj cs at nn , nn in vbn cc jj cs dt jj nn . cs vbg in pp$ nns cc nns in at nn in jj nns wps rb vbd ppo in at nns , cs at np . cc cs in pp$ nn nns vbg ql rb in at nn , at jj vb rb vbn ppo in jj nns nn in pp$ jj nn . in wdt nn pps vbd ppl , rb in at jjt nps pps bedz at nn in vbg nn cc nn . cc md ppo be vbn in wdt vbz in jj nn in . . ( nn cd ( dt jj nn , cs pps bedz pp$ jj nn rb , wdt rb vbn ppo in nn . cc cs dt nn hvd dt in ppo wdt , cs vbg nn , in at ap nn vbn at jj jj nn . cc ex ber ap nns wrb dt nn vbz abn dt nn cc jj nn wdt vbz ppo in at jj vb cc np . wdt bez pps wps in at nn nn ql rb vbz cc rb vbz at nn , cs cs rb pps bez vbd in pp$ jj jj cc nn . pps bez dt nn wdt vbz ppo , at nn vbn in at nn pps vbz . at nn bez ql rb vbn cs ap nns in in hvz at jj nn in -- cc rb dt jj nn in abn in vbg nn vbz ppo ql ql jj cs at jjt nn . wrb md dt be rb . cc , in ql ap nns , doz nn in pp$ ap jj cc * at ql jj nns , vb to vb in pp$ nns dt vbg nn in at jj . in pp$ jj nn , at vbn nn in at jj nns hvz ben vbn at jj nn . cc , in dti jj nns , hvz at nn in jj nn vbn ql jj at nn . wql rb pps vbz at nn in dt nn in np , wrb , vbn in at jj nn in pp$ nn , at jj jj nns in np nn pp$ nn in at nn in nn . cc , in dti nns , doz at jj , jj nn in abn nn vb to vb nn in at nn in dt nn . pps md rb be vbd , cs at cd jj nn in at nn in at jj wdt ap nns at nn , bez at nn nn vbg rb . cs cs rb dt nn bed ql ap cs at nn in nn in at ap nn , cs in jj nn rb . cc in dt nn in at jj , ppss vb at jj nn in at nn in wdt ppss vb ppo . cc rb in pp$ nns do ppss vb to vb at ap jj nn in pp$ nns . abn nns vbg in at nn in jj nn in in rb , cs dts nns vb ppo , vb ppo vb , cs rb at nn in nns , wrb vbn in at nn , vbz in pp$ jj nn . rb , in pp$ ap nns , vb wdt jj cc . . ( nn cd ( jj nn pps md in nn , at nn md vb cs in pp$ jjt vbn nn pps vbz rp at jj nn in at nn . cc cs in nn dt nn be vbn , wrb bez jj nn to vb in ppo . to vb ppo , md vb jj . md ppss , rb , in at nn in dti in dts nns wrb dt nn in nn in in cs in at nn cc rb cc in jj nn vbn in abn jj nns vbn to vb in ppo nn jj , cc , rb , bez vbn to vb in ppo at ap nn , rb vbn . in in md ppss rb vb to vb in dti nn nn to vb ppo in at vbn nn ppss vb . vb ppo vb . cc in at nn cs dt , nn nns in nn , cc in nn at nn md vb dt in dts nns . cc cs , rb , dti in ap in at jj nns in to be vbn md hv ben vbn in ap nns , cc ap rb bed ql jj in ppo in at nn , cc rb md * be jj to vb ppo rb . wrb in at nn in jj jj , wps vbz to be cc rb vbn in at jj nn in at nn , doz at jj nn in np nn in at jj jj jj , jj , jj nns in jj in vbg nns , jj cc jj in jj in vbn nn . cc , in at nn , jj jj in at jj jj nns , wrb doz at vbg nn in at jj nn cc at jj nn , vb abl at jj nn in at nn . cc wdt bez rb rb in at nns in vbd nns cc nns ( wdt md * rb vb in ppo ) wps vbz at jj np in np vb ql ql ql rb in at nn in at vbn jj , cs dts ap jj nns , pp$ nns in in at np np , cc rb at np . cc dts nn nns , at jj nns in jj np , wrb , in jj nns , vbz cs jj nn in at nn in at jj nn in dt nn , cs at nn in np ' rb jj nn bez jj in at jj , jj , jj nn . cc wrb , jj in abn nns cc nns , doz at nn in at jj nn vb abl at nn . . ( nn cd ( in at nn , cs cs in at jj nn nns ppo in jj nns in jj vbn jj nns in at nns , vbn in at jjt cc rb jjt in nns . cc , to vb at ql jj nn , ql vbn in at nn , wrb , in vbg at jj nn nns in jj np , doz at jj jj nn in at np nns , wp$ jj nn rb vbz in at nn in at nns in in wrb bez dt nn ql jj cs abn at vbg nns in at np . cc bez pps , rb , at nn in pp$ nn in vbg nns . cc at nns in pp$ jj nns : cc at nn in jj nns wps rb nn . cc at nn in pp$ jj nn in vbg nns , vbd vb in nns , cc vbz abn vb ( cs vbn nns in vbn nns ) . cc pp$ jj nns in nn in nns vbg rp in dt ap , cs at vbn nn in nns . in in ppo bez * dts nns rb wdt vb jj np , at jjt , jjt nn ppss md ' nn vb . in np hvz vbn at jj nn . cc ex bez at jjr nn in dt nn in pp$ nn . jj cs np , dt nn vbz pp$ nns in rb jj . vbz * at jj nn in jj nn . vbz in pp$ vbn vbz at jj nn in at jj cs nns pp$ jj nns . nn vb cs , in at jj nn , dt nn in nn bez * vbn to be at jj nn in vbg at nn in nns rb jj . cc in at jj nn bez ex nn in nn in dts nns wp$ nn in dt nn ql rb vbz in dt cd nn , rb wrb vbn in dti nn in abn vbg in nn cc nn . wdt ppss vb in dts cd nns md rb be rb vbn in at vbg nns . od : at nn , wrb vbg rb at nns in jj nns , cs in nn pps vb at nn in nns , vbz in nn , cc vbz rb qlp in nn to vb abn pp$ nns . cc in rb jj nns , vb ppo be vbn in pp$ nn to vb pp$ nn vbg in at nn nn in jj nn in in cs cs in vbg nns nns in vbn jj vbz bed vbg in ppo , rb pps vbz . . ( nn cd ( at jj , jj nn . at vbn nn in at vbn nns bez jj in ppo cs at jj nn . in jj at nn vbz ppo pps bez rb in nns . nn cc nn ppss abx vb rp . pps rb vbz cs jj nn bez in ppo rb . rb wrb bez at nn wps md vb ppo , np , pps bedz * ql ap at nn in jj vbn nns , cs at nn in dt jj nn wps rb vbd ppo . od : in at jj jj in np , at jj nn in at nn in nn np vbz pn in nn , rb , rb , in at jj vbg in at jj vbd nn vbg in jj jj nns , cc at jj nn in wdt at nn pps md be to vb ppl in jj jj nns . ap at ap bez pps in at nn in at nr , wps in jj nn nns at jj nn vbn in vbn nn , at nn in nn cc nn to vb at vbn nn in nn . * rb at nn , jj at nn in at np nns . wrb in nns , in dti jj nn in nn in at nns in nn cc nn , pps , vbg cc abn vbn , rb in nns vbg nn cc nn in pp$ nn , nns wdt vbz at jj nn in nn vbg in ppo in pp$ jj nn nns cc vbn nns . cc ppss vb , vbz dt jj in nn nn in nn bez cc at jj nn vbd rp in at jj nn . ppss jjt in at nn , np . vb ppo , wrb dt jj jj nn , vbn in dti jj nn in np , rb vbn in abn nns in nn in in wrb bez pps wps in at jjt nn , cs ppss cc vb at jj nn nn in ppo , cs cs pps md rb vb ppo , cc rb vbz pp$ jj nn nn in in wrb md pps vb , vb , cc in vbg nns vb at nn in nns in nn . ex bez at nn in ppo in dti nns in jj nns in pp$ jj jj nn , cs cs at jj nn pps vbz md vb in ppo pn vbn in at nn in ap nns . in wdt vbz pps , dt jj np nn , in at jj nns in jj nn . at : cc rb ppss jjt rb in at jj nn , at nn in at nn in at nn in at nn . cs . . ( nn cd ( nns in nns in np , rb wrb pps vbz cs jj nn , at nn , jj nn nns ber ql jj cs in at vbn jj nn in at nns , wdt dt nn ppss md be nn in nn . rb , rb , at vbn nns in at jj nn . at jj nns in at jj nns in nns . at jj nns in at jj nns in nns . abn dts , to vb , ber cs at vbg in dt nn nn in at vbn nn . cs cc vbz wrb vb at jj nns in wdt at jj nn vbz rb jj nns . rb in ppo , cs in at nn , rb dts nns md vb . cs in ap in pp$ nns dt jj nn vbz vbn in nn , at jj nns bed vbn in nn . cc * rb hv ppss vbn at nn in dt nn , cc vbd wrb pps vbz in jj nn in at nn . cc ql jj cc ql ql jj in in wrb , cs ppss hv vbn , pps bez in rb at ap nn nn in jj nns , rb , at ap nn in at jj ' nn nn . cc rb md be cs pps bez , at vbg nn in nns at ql jj in nn . bez pps wps in pp$ nn ppo nns rb at jj vbz cc nns in at nn , cc rb nns ppo in in in at nn in nn , wrb jj at jj nns in at jj nn . cc bez pps , cs cs in nn nn bez * ql ap at nn cs at jj nn in nn , cc in at ap nn at nn in abn nns . bez pps in dts nns cs ex bez abl at jj nn , jj in nn , in at jj nn in nns in in at jj , abn in nn in nn in wdt ppss vb . cc wrb ppss vb dt ap nn in at jj nns , cs abn ap jj nns in in at jj cc jj nn in in at jj nns in nn nns cc nns . rb , cc at vbn vbz in nns , cc at nn nns in jj nns . abn dts ber cc jj nns , * rb jj in nns , cc rb vbn rp in in . rb cs abn vbn nn rb vbz cs at nn , wp$ nns vb pn cc at nn in nn in . cc wrb ppss vb rbr , cc vb cs at jj nn wdt vbz at cd in pp$ nns , at jj nn in nn , in rb vbz jj cc jj in ppl , cc cs . . ( nn cd ( vbg in nn in nn , md vb abn nns , rb nns cc nns , in pp$ jj jj nn in in vbg abn dt , at vbn nn vbz in ppo at jjr . cc cs jj nns in np , wps vb to vb vbn cc vbg nns in pp$ nns , cs at jj jj vbz ppl jj in at jj jj nn cs nns abn at nn in ppo . cc in abn dts nns at nn jj bedz at nn . vb ppo rb in at jj nn . . . ( nn nn . ( in nn in at jj nn , pps md rb be vbn in ppo wps md vb vb rb rbr in dt nn , cs pps bez * at nn , rb vbn , wdt vbz at jj nn in dt nn . in , vbn , cs vbn nn , pps md be vbn , rb vbz in at nn , cs at jj nn in at nn vbz vbn in at nn in jj nn cc nn . cc rb , in vbg rb cd jj jj nns in pp$ nns , at jj nn vbz ppo in ql jj at nn . cc rb vbg abn dt to be jj . rb , bed pps * in at nn , ppss md * hv dt vbn nn . cs in at jj jj , at jj vbg nn in nn in dt nn , wrb vbd in pp$ jj nns , rb nns in at ap nn in at jj vbn . dt nn bez ql rb vbn in at jj in at nn ppss vb in dt nn . at jj nn in at jj vbz in nn rb ( jj nn ) , wrb nn vbg at nn ppl , cc dti ap jj nn . rb , in nn in at jj , jj nn in nn in dt jj , cc at jj nn in pp$ nns , at nps vb ppo np . nn vb at od nn ppss rb vbd . pps bedz in at vbn nn , in nns jj in at np nns . in pp$ nn vb rb , ppss vbd in at jj nn . cc rb , vbn in at jjs nns , ppss vbd at jj , jj nn in vbn nn , cc in at vbn , jj nn nn . in nns , pps vbd rb pp$ jj nn nns , cs cs to vb dti jj jj . jj nns cc nns vbd ppo . cs rb vbn , pps vbd nns , cs dti nn ' jj nn in jj nn . in pp$ jj , jj nns , rb ppss vbd in nns wdt vbd vb in np . cs np in at nns , ppss vbd ppl . at jj nn bedz ql jj , pp$ nns ql jj , cc in dts in rb vbn nns , ppss hvd vbn at jj vbg nns in nns cc in nns . rb ppss vbd in dt nn in nn . nn md vb , md rb vb , at nns wps vbd in ppo rb . cc in ap ppss vbd . cc vbg , vbd at nn wdt nn bedz dt . at nn , pps vbd . np . nn rb hvd vbn dt nn rb . bez pps jj cs dt jj nn bez ql jj in nns rb . rb . cc dti nn in , ppss vbd dt nn bedz dti nn ' jj nn in nn . ql cs in at nn md np ' rb rb vb hv hvn . . ( nn nn . ( nn to do in dts jj nns wdt bed pp$$ , wrb ppss vbd dt nn in pp$ nn . in dtx hvd ppss rb vb at vb , cc vbd at nn to be at nn . rb , in vbg dt , ppss do cc rb nn at ql jjr at jj nn in at nn cc at nn . nn vb , rb , cs in at jj jj nn in at nn rb vbz at nn in at nn . at nn at ql vbn in dt , cs in at nn in nns ex ber nns vbd jj nns . cc dts ppss hv rb vbn , cc rb in jj nns cs wrb ppss vbd at np nn . cc wrb hvd at jj nn ben vbn . vb ppo * , cc ppss md vb . in at jj nn cc nn , cs at nn vbd in at nn . in ap at nn vbd at nn in ppo . vbg at vbd , jj nn in pp$ nn , in at nn ' jj nn cc nn . cc rb vbg ppo vb . cc ppss vb * , cs jj nn , vbd in nn , bedz vbn rp in nn , wrb at jj nn vbd to vb at nn in vbg , at vbg , cc jj nns . . . ( nn cd ( . . ( nn np cd nns ( . uh . dod ppss vb dt nn , np . pps bedz at nn in nn . at jj nn . at nns bed vbg in at nn , vbg in cd in at jj in nn nns in at nn , in at nn in nn in at jj . in dt nn , ppss vbd at nns to vb at nn in nn . vbg , in at ap nn , in at vbn nns in at nn in nn , ppss bed jj * to vb cc vb pp$ nns . in nn in nn , at nns vbd in at jjt nn , rb vbn in at jj vb in at nn , cc at jj nn in at rb vbg nn . pps bedz in at nn in dt nn , cs np , cd in at nn , wp$ nn bedz in at in in nns , vbd in pp$ nn , at nn , at nns rb . uh . dod ppss vb dt nn , np . vb at nn , md ppss , np . wdt nn nn ' ppss vb . ex pps bez rb in in in at nns in in nn ' nn ppss vb ppo in in at nn in -- pps vbd cs at nn . vb be vbn . vb in dt nn nn . ex rb in in rb pps bez . -- in pps vbz cs cd cc cd nns vbg rp , rb . fw . hv vbn , nn , md ppss . ppo ' in at cd vbn nns ppss vb in nn vbg rp rb in ppo in in pn rb . vb in at nn . . . ( nn cd ( vb wdt ppss md , nn . ppss ' jj jj nns . rb , ppss ber at nn , jj ' nn ppss , wps vbd at nn in at jj np ' rb vbg in nns cd nns in nn in np . ppss ' nn at nn . nn rb . ppss ' ppss vb wdt vbz rp . vb ppo , np , ex bez pn rp in at in in nn wps hvz * rb ben vbn in nn . cc ppss vb pp$ jj nn vbz pn in ppo rb . nn vbd np vb nn , cd nn nn , cs ex bedz pn in dt nn in at nn . nn . at nn . . . ( nn cd ( . . ( nn nn cd np nn ( hvd ppss vbn nn vb rp in pp$ nn in at nn wps vbd nn in at nn vbg dt jj nn in pp$ nn in pp$ nn , ppss md hv vbn ppo vb in at nn in at nn , cc vbg rp at jj vbn nn in jj nn nns , vb ppo in ppo in pp$ vbn in in nn . rn vbg ppl in ppo , ppss md hv vbn ppo rb vb at jj nns cc nns wdt ex vbd pp$ nn . cc in jj cc jj nn nn jj nns in nns wps rb bed jj . in nns , pps md vb to vbz in jj nn in nns in ppo , wrb bed vbn rp at nns cc nns in wdt , in ap ap nns in jj nns , nn nns hvd ben vbn cc vbn . cs rb vbn , at jj jj nn vbn in nns in pp$ nn , rb vbd in at nn in at nn , cc in rb vbd vbg nns cc nns in nns in pp$ vbn nn , cs pps rb vbd cs cs pps ppl bedz vbg rp nns cc nns in at vbn nns , dti jj nn bedz rb vbg nns cc nns in at rb vbn nn in pp$ nn . cc pps bedz * dt nn in jj cs , in at nn in . . ( nn cd ( pp$ nn , np rb vbd rp pp$ nns . ql at nn ppss bed vbn rp . rb at nn dti nn nns bed jj , cc nns bed vbn . in in at nns in abn cd nns in ppo , np bedz vbg at nn in nns cc nns , in at nn in at ql jj nn in dt nn vbd in pp$ nn . rb , in dti cd * rb vbn in at nns in at nns , pps md vb at rb jj nn rb to vb rp cd jj nn in at jj nns in dt nn . cc * rb dod pps vb to vb , wps vbd at nns in abn nns cc nns . cc rb vbg at nns in at nn jj ' nn nn . cc , rb , vbg to vb at jj , vbn nns in vbg ppo in jj nns . md vb in jj nns , rb vbg in nns , in at jjt nn to be in dt cc dt nn in nn in pp$ nn . ql vbn , rb , bez at nn in at nn in at nn jj ' in vbg in vbn nns , cs ap nns vb cs , md pps be rb vbn cc vbn in at nn . bed at nns in cd nn in at jj jj nn rb vbn , rb at nns in at nn jj md be vbn to vb in nn in dts in at nn in nns cc at nns in nns . in dt nn , nns hv ben vbn to vb jj jj nns in at nn jj . rb , wrb vbg at nn in cd vbg in nn in dt , at nn vbz , vbn in dti jj nn in -- uh , rb , jj nn in at nn in in rb vb in . . ( nn cd ( nns , cs ppss ber vbn . vbg pp$ nn in at vbn nn in nn in jj vbg nn , cs at nn rb vbd pp$ nn , in dti nn , in cd jj in jj jj nn . cs , in dts nns , at nn vbn in dti cd jj be jj cs at nn ' cc rb , cc cs at nn in nn be rb vbn in pp$ jj jj , jj nn , cc at jj nn in wdt in dts nns pps bez vbn to vb , rb vbz dti ap nns in nn ( rbr cc rbr , cs at nn bez vbn to vb cc nn ) . cc rb vbz at jj nn in at jj in nn ' jj nn in nns , wrb rb vbg in dt jj nn . at nn bez , cs in jj nns in dt nn cc in dt nn , vbg nns md in jj nn be vbn in . cc rb * rb in jj nns , in rb vbn jj nn in nns , md vb nn to vb pp$ nn . cc in vbg at jjt nns in nn in dts nns pps md , in pp$ nn , cs nn cc nn ppl in pp$ nn , cs rb rb * to be rb in nn in at nn . ex bedz at nn wdt in od nn vbd to vb pp$ jj cc rb jj nn . cc * rb in at nn , rb . cs at jj nn nns hv pp$ jj nns in jj nns , rb in jj ppss md vb cs at nns wdt vbd jj cc abl at nn cc nn dt nn , vb , md vb rp to be rb at ap in dts wps bed vbn rb at vbg nn . cs ex ber jj cc jj nns wrb at nn in dt hvz vbn jj . in jj , at ap nn , rb in at ql jj nn , vbz in at nns cc vbz in at vbn , vbn nn vbz . ql cs cs np np hvd in at ap nn ben vbn , in nn , in wdt bez vbn at np nn in at jj nn , cc np nn in at jj nn . rb pps dod * vb , wps bed at nn to vb dtx in dts nns in dti jj jj nn , pps md rb vb ppo rb . ql , ql , in dti ap vbg nns , wrb pps hvd in nns vbd ppl . cc abn dts vbd rb pp$ jj vbg in nns cc nn in nns , rb to vb , * pp$ nns in vbn nn . cc wrb np ' np nns in vbg . . ( nn cd ( pp$ nn hv rb ben vbn in , nn hvz rb ben vbn in wdt nn in nn , nn , jj nns bed pp$$ , cs at jj nn nn cc nn bed vbn , wrb abn nns md vb nns , cc , cs np rb vbd , at nn at ap nn in at nn . dt jj nn nn cc nn bed vbn in at cd jj nn in in at nn in in in at in nn . cs ex cc rb , in ap jj nns , np np hvd ben rb vbd , vbg in dts nns in rb , cs at nn , in pp$ jj nn , nns in at vbn nn in dti cd nn in at np . ex pps bedz , rb , cs ap in at jj nns in at jj jj hvd vbn nn . ex at nns bed jj in pp$ nns . ex rb bedz dt jj nn wrb at nn jj nn hvd vbn at jj nn in pp$ nn . cc in at jj nn cc jj nn in wdt np vbd pp$ vbg nn in dt jj nn , pps md * vb ppl to vb abn pp$ nns in at cd vbg nn in vbn , rb vbg pps md be in dts nns . cc in at nn in pp$ nn md pps rb vb pp$ jj nn cs to vb abn vbg nn . rb , at fw hvd vbn in np in at ap nn in at nn in in in at in nn . ql jj nn rb md vb pp$ nn to vb at jj nn rb , jj nn nn , cc rb vbg rp cd nns in nn vb in at jj jj in nn in nn rb . rb , pps md vb in at ap vbg nn . rb at jj nn in at fw ' jj nn hvd , rb , ben rb vbn in np , in at nn in dt ap nn in nns . cs , at nn in cd cd cc cd in cd nns cc nns bedz in ppo . at nn wdt , rb in rb vbg rb , pps md vb in at jj nn . cs in nn at jj nn , vbg pp$ nn in nns ql jj in pp$ nn vbg in nns , md vb rp pp$ vbn nn in at jj nn , cc in at np nn , cc np nns , cc in dti ap nns vbn in pp$ nn . ql cs np , np , cc in nns , np , nn . dti nn cc at np cc nn , md vb np np in . . ( nn cd ( at jj nn in nn nn in nn in at fw ' rb vbg nn . cc vbg abn dt . rb , vbn rb cc rb , vbz ppo * cc at jj nn , dt . cs in at jj jj nn , cd jj jj , rb cs vbn , md be vbn jj in jj nn in pp$ nn , rb cs at jj in vbn fw in at vbn nns in np . rb . in at jj nn in jj nn in np np , cc pp$ nn in jj vb , md * rb be jj . cc hv ppss * vbd at jj , np md vb in ppl , cs cs vbg rp pp$ nns cs jj in nn pps md vb ppl rb in nns in in vbd ppo , cc md pps vb . pp$ jj nns ber vbn , cc vbn rp cs at vbn nn ' jj nn . cc rb , pp$ jj nn md vb rp in at jj nn . cs at nn cc nn in vbg vbd in ppo . cc in at jj nn in at nn pps md vb to vb pp$ nn . uh , np . wdt nns in nns doz dt nn vb wps bez vbn in cd jj jj nn . pps vbz in vbn nns . cc vbz in pp$ jj jj nns in pp$ nns . rb , wrb vbn in pp$ nn in vbg cc rb jj nns in at nn , wdt , vbg pp$ jj jj nns in at nn , vbd ppo rp in at vbg in nns , cc vbd ppo rb cc rb in pp$ vbg nn , cs at ql vbg in pp$ nn in nn vbd jj nn . cc wrb , cs bedz rb at nn , dts jj nns in ppo vbd pp$ beg rp in pp$ nn , cc at nn vbd vbg in ppo , in wdt vbn nns cc nns vbd rp , cc vbn nns vbd ppo to vb rp in ppo . wrb dt nn in ppl vbn in ppo , at jj nn md be vbn in at nn . cc in vbg nns nn md vb in pp$ nn nn , cs cs vbg in at nn wps bedz in nn . rb dts , rb , rb in beg at jj nns in dti jj nn , cc nn in pp$ jj nn , bed cc at jjt nns in pp$ nn . in , in jj nns , jj nn , at vbg , rb jj nn in at jj jj . dt nn wps hvd vbn in pp$ nn , bedz * at nn wps rb vbd . . ( nn cd ( ppo to vb in ppo in nn rb . at ap bedz at jj , vbg nn cc nn in ppo . cc in nn , beg in at nn vbn in at vbg nn , wdt in ap nns vbd ppo in pp$ jj nn cc nn , pps rb vbd nn in at jj nn in at jj nn , in wdt , in at nn , pps bedz ql rbr at jj . cc cs at nn doz * vb cs vbn in at nn , rb pps md hv ben cs , in nn ' jj nn , vbg rp abn pp$ nns cc vbz in pp$ cd jj nn . dt nn , in pp$ jj jj jj in nn , vbd ppl in nns cc nns in at nn in nn in vbn , jj beg in pp$ jj . rb , md rb vb cc vb , cs at jj nn in wdt pps bedz vbn , vbn nn in vbn in at jj cc vbd nn . rb , at vbn nn wps vbd rp in jj nns , wrb wdt vbd np vbd in pp$ nn , bedz in at nn cc at vbn nn , at jj jj nn , at nn in vbg nn , to be jj , cc in at nn in nn , cc rb at nn in ppl . nn vb ppo , jj nn , pp$ nns hv vbn at nn in ppo . cc pps wp$ jj nn rb vbz ppo at np . at nn vbz in dt nn in rb . dt nn at ap nn pps vbz . . . ( nn nn . ( cs at jj bedz vbn , at nn bez rb vbn rp in at jj jj , vbn in nn np , in at jj nn , np , np od , . in dt jj , pps vbz cs rb abl at nn bez in nn in nn . cc nns in ppo ber vbn in at jj . dt nn vbz at nn in nns in cd nns in nn in cd nns in nn . rb in dt in wdt nns ber cd nns in at cd nns . cc rb in dt in wdt nns ber cd nns . pn to vb at nn in nns wps hv ben vbn in dt nn in at nn , cc at cd nns to vb at nn in nns in wdt vbz , nn cc nn , hv ben vbn . . . ( nn cd ( . . ( nn hv cd np nn ( ql rb cs wdt ex md be in at nn in dt nn . cc , rb , cs rb vbg cd cc cd ql jj cc jj nns in at nns in nn vbz , at vbg nn , in pp$ jjt nn , bez ql jj at cd cs md be vbn in dt nn . cc at vbg nn in pps vbz to be ql jjr cc ql rb vbn in , in nn to be rb vbn , cc rb to vb rb dti nn wdt at jj nn in at jj nn md . . ( nn np ( vb in dti nns , cs in at jj nn in at jjs nns in dt nn . nn vb * to vb dt nn in pp$ nn rb . cc md be jj to vb at vbn nn in jj nns in nns , rb cc rb vbn in ppo cs at nn . cc in dts nns , ppss vb ppo in in at nn vbn in md rb vb in ppl . od : ppss hv rb vbn cd nns wrb at jj , cs vbg at nn , hvz vbn at jj nn . cc , cs at nn ( in cd nn in cd nns ) , hvz ben rb vbn in at ap nn , cc vbn . wrb at cd nns , abx vbn in at ap jj nn , hv ben vbn in at nn . in at nn wrb cd nns vbd in at nn in at cd nns . cc ppss vb pps md hv ben pn ap cs dt . at nn wps vbd ppo vbg , in at nn , to vb in at vbg nn in at nn in np , vbd rb rb , vbd at nn nn , cc vbd rb in at nn , wrb pps vbd in at nn in rb cd nns , rb vbn in nns , nns , nns , jj nns , in abn at ap jj nns nn in vbg in at nn in jj nns . rb , at jj pps hvd vbn md rb hv ben in pp$ nns . at nn pps hvd rb vbn at nn , vbg in pp$ nns abn at nns in np . cc in at nn . dt nn cc dt jj rb vbd rb , cc at pn vbd at ap . nn vb ppss , ppl , hv vbn cd nns jj in dt . dt bez in cd in ppo ppss vbd at nns vbd . cc , in at od nn , vbd at cd nns in at jj nns vbn in ppo , rb vbn in at jj nn . in at cd in nn nn , pps rb vbd rp cs ppss bedz in at nn abx nns , rb cc rb , cc at ap nn rb vbd at jj nn in jj nn in at jj ' nn nn , wdt ppss hvd vbn rb cd nns jj . nn vb cd nns , cc ppss bem ql jj pps bedz rbr cs dt . rn ber cd nns , rb , wdt ppss rb vb at nn in . cc ppss hv vbn in ap ap nns in nns wp$ nn in at nn ex bez at jj nn in nn . rb : pps bez rb vbn in at nn np np , . . ( nn cd ( wql jj at nn rb md be in ppo , cs ex hv ben ap jj jj nns wrb at jj jj in at nn hvz ben in jj nns cc nns rb jj . wrb abl at jj vbd rb vbn bedz * rb cc rb vbg in pp$ jj nns cs vbn in ap nns . in rb jj in dt nn dti nn jj md be , ppss rb vb at nn in pp$ nns in vbg ppo , cc vbg ppo rp in at ql jj nn . at : at nn bedz dt : cs in at jj nns in at nn rb vbd at jj nn in nn in abl at jj cs ex dod in np np , rb cs ap nns bed jj in jj ppo in rb vbg pp$ nns wrb pps md be vbn vbg in ppo in at nn , in vbg to vb at ql jj nn . cs dti jj nns rb cs vb to vb at jj jj nn , ppss vb jj jj nns in ppo in at nn , cs cs ppss vbd at nn rbr , ppss md vb at nn nn in pp$ nn . cc * rb dod dt in dts jj nns vb jj jj nn in in rb , ppss md vb ppo at nn in jj nn . * rb bedz pps jj in nn cc rb bez jj in nn nns in nn , cc pps bedz vbn in abn at nns , nns , cc nns in at nn . hvd ql ap at nn rb cs nns cc np . bedz pps * rb , np np np . ppss jj nn , vbn cs at nn , wps ql rb dod ' nn vb in at jj nns in dt nn , wp$ nn bedz rb vbn in at jj nn in np . bedz pps * rb , uh jj np np . ppss nn in abn nns wps vbd pp$ vbz in at nn in at nn nn . bedz pps * rb , uh jj . nn in np , wp$ jj nn ppss vb in nns vbd at nn in at nn in jj nn in at nn . bedz pps * rb , np np np . ppss jj jj , vbn cs at jj nn in jj nn in at nn . in jj nn , rb ber cd nns ql rb vbn in at nns in jj nn cs np cc np in at jj nn . cc dt bez * abn . jj np np cc np np , cs in ap nns vbg jj nn in at nns in jj . . ( nn cd ( nns , bed rb vbn in nn in , rb vbn rp , vbn cc vbn in jj vbg nns , wps vbd rp pp$ nns in dt jj nn cs ap in nn , cs in vbg rp in at np nns , nn np in jj hvd ppo in pp$ nn to vb cs jj jj jj nn , at jjt nn in at jj nn np . nn do * vb wrb ppss md vb at jjr nn cs rb rb , to vb nn in cd cc cd ap nns , wdt in ppo vb jj , cs in vbn nn vbg in abn nns at nn in at jj nn in at jj nn , ql rb at nn . in dt bez cd in dts vbg nns wrb nn vbz jj cs ap vbg cs nn . ql jj ber ap nns in dti in at jjt cc ql jj nns in at nn , cs in dti nns vbg at jj nns , jj cc rb , in at nn , ppss md vb in np np cs at jj nn , cc rb jjr cc ql jj , at jj cc jj nn . od : cs ap nns hv dti jj vbg nns in at jj nns in at jj nn , cc ppss hv pn cs at vbn , jj nn in dts nns , cc at nn in wdt ppss vb . cd nn rb bez , cs * cd in cd in at jj nns cc nns in nns in at nn , rb vbz at jj nn in nr , rb jj cc rb vbn cs nn . do ppss vb cs dt jj nn rb , wps dt nn rb vbn in at jj in nn in at nn in jj np , bez beg vbn rp in at nn in at nn in at jj nn in in do ppss vb cs dt jj nn ' jj nn md vb in at nn nn ppss md vb to in nn in pp$ nn . at : cs at nns ber ql jj in rb cc jj np . in nn , dod ppss rb vb wdt md be vbn jj nn jj cc jj in jj np . rb ppss vb ppo cs in cd jj nn wdt ppss vbd in at jj , in ap nns ppss vbd cd jj nns , at cd in wdt hvd hvn at nn in at jj , dti in ppo rbr cs pn , cc cd wps hvd dt vbd at nn ' jj nn . in np ' fw fw , be jj in pp$ nns cc nns . * at nn ppss vb , cc in ap cd nn in nn ' jj nn bedz vbn in ppo . . . ( nn cd ( rb : nns rb hv rb dti jj nn cs at jj bez at jj nn in jj nn . cc ppss hv rb vbn cs wrb nn in ppo dti jj nn in dt cd in nn nn , ppss hv rb vbn ppo in pp$ nn . wrb , ppss vb in pp$ nn , ppss hvd at ap nn in beg jj cs np , wrb pps vbd at nn in at nns in np . cc rb at jj nn ppss rb vb md be vbn in nn ql jj in pp$ jj . dt nn bez dt : at jj nn bez in dti nns ql jj , vbg , cc rb jj , cs in jj rb to vb in , rb vb , cc vb at jj nn . cc wdt bez ql , at jj nn hvz vbn ppo . od : in at nn at nn np , nn np , in np , bedz vbg in at jj nn . cd nn pps vbd nns , vbd pp$ nns , cc vbd nn in at nn in nn vbz . cs jj , ap in at nns bed vbn . wrb , rb , at ql jj jj vbg in at nns , vbn in at nn , cc vbd rb rp in at nn . vbg pp$ nn in pp$ nn , pps rb nn ppo rp , cs in ap cs cd nns pps vbd rp cc vbd rp . * at vbg nn in ppo hvz ben vbn in . cs at jjt nn , nn in at nn vbd at nn in pp$ nns . beg vbn nr in ap , nn np rb ql vbn in at jj in nn in dt nn , cc at nns vbn ppo rb in jj nns cc nns . in at od nn pp$ nn bedz ql vbn , cc rb vbg at nn , pps hvz rb vbn ppo rb . in dt nn nn np bez at nn in np . nn hv vbn np np , wps bedz jjs nn in at np in at nn in at nn . ppss hv vbn pp$ jj cc jj nn . ppss hv vbn in pp$ nn . cc abn dt in at ap nns in at nn in at nn . . . ( nn cd ( rb : at nn nn , rb in np , bedz in at nn rb vbn rp at nns in at jj nn , cc at jj nns in dt nn ppss hv rb vbn to vb , cs in at jj nns ppss hv rb cc rb vbd jj nns in ppo . rb : dti cd cc cd nns rb nn np in in in rb vbg at jj nn in in in nn in at od nn , vbd to be vbg in at nn in vbg nns , in nn at np nn in at nn in uh , np nns . nn vbg in nns , at nn bedz vbn to be jj vbg at jj nn vbn in ppo in at jj nns rb . pps rb vbn in nn , cs dti jj md rb nn pp$ jj nn in in in nn cs to vb ppo in nn ql rb cs at jj . ql jj . cc ex bez ql vbg . dti nns in , at vb vbn nn in dt jj nn in np . cc pps bedz vbn in at nn in at jj nn jj , wps vbd at ap nns ' jj nn in ppo . dt nn vbd in vbg at nn ' jj nn . . ( nn cd ( abl at nn , cs in abn pp$ nns vbg pps vbd rb in at jjt nn in nn rp cc nn . nn bem * jj , cc ppss vb at nn ' jj nn in dt jj cs jj . bedz * np in np vbn in nn in at jj nn . nn vb ppo , at nn jj md vb at nn . nn md rb vb ppo to vb ' np nns in at jj nn in nn , ql jj in at nn wrb . rp , ppss md vb in at nn , bedz vbn in at jj nn jj ' in jj nn nn in at nn in at jj nn . nn in rb vbz pp$ od nn . in at od in np pp$ nn bedz jj to vb , cc at ap nn ppss bed rp in at jj nn , in pp$ nn in nn . at nn bedz ql jj cc jj , cc ql rb jj cs ppss bed vbn to vb in pp$ nn nn . in dti nns ppss hvd ql ap nn . pps bedz * cs at od cs at jj nn in at nr vbd rp . at jj jj jj , at nn in wdt bedz jjr cs at nn ppl , vbd rb in at nn in at nn , cc bedz * vbn in dti cd in nn cs at nn wrb at nn , wdt bedz in jj nn , bedz rb in ppo , cs cs pps bedz jj to vb pp$ jj in ppo . ppss bed rb vbn in at ql jj nn , cs dt jj nn , vbg rp pp$ nn , vbd at nn cd nns in ap rp in at nn . at nns vbd , cc at nns vbd rb , cs ppss wps bed rb abn vbd rb in at nn , vbg cs ppss hvd vbn in dti nn . rb in dt ppss vbd at nn vbg rp in at jjs nn cc nn . nn np ' np vbd rb in at nns to vb cs cc * at nn hvd vbn dti nn in at nn , cc ppss vbd cs ql rb pps hvd vbn ql jj . rb , at nn nn ' nn rb vbn in cs vbg at nn in nn , bez at jj np , wps , in at jj nn in jj nns cs at nn in nn , dt nn vbz in at nn in np in np . nn hv at nn in beg at nn in pp$ . nn hv rb vbn ppo in dt nn in nn . pps vbz at nn . . . ( nn cd ( at nn , rb , bedz in at nn at jj cd : at jj nn vbn in at jj nn , cc vbn in pp$ nn in nn rb at nn in wdt pps vbd in nr . in dt rp cc rp jj nn in jj in vbn nn , ql jj , rb , in jj nns in in at nn in np np , cd in jj np ' rb jj nns in in ppss vbd at jj nn vbd rp rb cs cs rb vbn in nn , cs ppss md vb vbg ppo rb in at jj nn , cs abl be vbn . np , pps vbz , bedz in pp$ nn in np np , cs pps vbz at jj np np . in pp$ nn rb , pps vbz , in cd nn ' nn in at nn , wrb ppss bed rb cd cd cc cd nns in at jjs in np , pp$ nn vbd at jj nn , wdt vbd pp$ nns in jj nn cs ppss md rb vb wrb ppss bed cc wdt to vb . cc at pn vbd to vb in nn . cc , rb , at nn bedz ql jj cc jj , cs ppss vbd ppo in vbn at nn hvd vbn in at nn . cc wrb at nn bedz at ap in , ppss vb at nn , cc vbd , cc vbd at nn . at nn in at nn vbd at nns vb in pp$ nns , cc ap in at nns bed vbn rp in pp$ nns . nn np , wps vbd in pp$ nn in at nn , bedz vbn rp in pp$ nn . np rb vbz rp to vb at nn in at nn , cc vbz to vb at nn in vbg cs at jj nn , rb in dt nn , dod rb do jj nn in at vb nn . cc nn md * rb vb cs , in at nn in dt jj nn in at nn , at nn bedz in abn vbn in at jj jj rb vbg at nn in in . nn md vb in ap ap nns , cd nn cc dt vbn in ppo , in at jj nn cc nn in nns in at nn jj . in ap cs cd nn , pps hvz ben vbn , * rb to vb at vbg nns rb in pp$ nns , cc to vb at nn ppl , cc rb vb abn at nns vbd in ppo in pp$ nns . at jj nn jj nn md vb at nn in dt nn . cc , cs in pp$ nn , vb ppo vb , cs ex hv ben nns wrb at nns vbn in . . ( nn cd ( at vbg nn jj hv , in at jj , ben vbn in at nn , cc vbn rb . at jj nn pp$ jj nn in at nn , cs at nn vbz rp in at nn . rb , pps bez ql rb vbn cs , cs at nn jj , rb vbd , bez vbn nn to vb , pps rb vbz , * ql rb in jj nn , cs in jj , jj nns in nn in pp$ nns . cc bez pps in vbg dti jj nn in pp$ nn , cs in beg vbn pps md rb vb pp$ nn , cc vb ppo in dt nn nn in ap jj nns . cc ppss md be jj in rb cd ap cc at vbg nn . at jj cc ql jj cd , in wdt ppss md * vb to vb , cs * rb bez at ql jj nn in dt nn vbn in jj nns in at jj nn , cc cs dts nns ( cs abn nns ) ber jj nns in at nns . rb cs in at jj nn ppss vb uh in np in in rb ex bez pn jj in at nn . in at od jj nn vbd np , at jj nn in np , in at nns wrb np bedz nn cc np jj . ql ap vb , pps vbd at nn in pp$ jj nns , at nn at nn in jj nn . in at jjt nns , pps hvz rb ben vbn at ql jj cc vbg nn , in in dti cd cc cd nns , * in abn vbg at nn rb to be vbn . rb , in dt nn in pp$ , np vbz cs , in at nn in pp$ nn in np , at jj nn in nn bedz vbn in at vbg np , cc nn in np , in hvg vbn nns in nns in dts nns in at nn in ap cs cd nns . at nn rb vbn rp in jj nn md rb be jj . cc bez ex dti nn pps md be . in wdt jj nns dt nn in nn bedz , bez * vbn . cc cs pps vbd nns , ql rb cs in ap nns , pps md hv ben at jj . cc ppss bem rb vbn to vb at nn jj . cc ppss md vb ppo wrb . in at jj nn ppss vbd cs at nn jj hvd ben rb jj in at np cc at jj nns vbg in ppo . ql rb ppss bem jj cs dts nns ber * , cc rb rb md be , in at jj nn in . . ( nn cd ( nns , at nn in pp$ jj jj nn . cc jjr nns hv rb vbn in ppo , cs in jj nns ex hv ben vbn nns in at nn in at nn jj in at np . nn bem vbn , in jj nn , cs in at jj nn , at nn np in at jj nn vbd at nn in at nn jj . rb , cs at nn in nn rb vbz in at np , rb at nn jj md , in at ap nn , vb rp in at np in at np . in at np , ql rb cs ppss md vb , pn in dt jj nn vbn nn bez to be vbn , at nn in at ql jj . cc ppss hv at nn to vb cs at nn in at nn jj in in jj cc nn in nn in in vbz in at nn in dt nn , cs jj nns , cc in at nn at jjt in dt nn , hv ben vbn in pp$ nn . cs , rb , ppss rb vb dts nns rb , cc nn in ppo at nn , ppss md rb vb cs , in in abn jj nn , np ' nn nn in nn , cs in abn at nn nn at nns in at jj nn , md in abn nn hv ben at nn jj . . . ( nn nn . ( at vbg ber nns in nn ' jj nn : at nn vbd to vb ppo in vbg cs pps bedz pn cc nn wdt vbd pp$ nns . pps vbd cd ap nns in at nn , in at jj nn in ppo , abx in wdt , in in pp$ nn , bed vbn to do ppo at ap nn , in beg vbn rb , cc rb . . ( nn nn . ( vbg at nn in at cd nns in at nn . to vb wdt , at jj nns wdt pps vbd bed jj . pp$ nn bedz ql jj , cc jj cs vbn nn cc nn . pps vbd rb in at nn wdt ppss hvd rb rb vbd , cc in wdt ppss hvd vbn cd in pp$ nns , cs cs vbn in nn in pp$ nns . rb : in abn nns , at jj nns vbn rb , abn vbg in pp$ jj nns , cc vbg , in at nn , nns in pp$ nn in vbn , vbg nn , in at nn in at jj ( ap in wdt nns ppss md rb vb ) , vb ppo to be vbn cs ppss bem jj in pp$ nn . rn ber pp$ nns dti nn in vbg at nn , in at jj nn in at jj nn , wrb rb vbg in vbg dti jj nn . at jj nn cc vbg nns bed pn . at nns in beg vbn rp in dti jj nn , cc vbd in vbn nns , in abn at ap jj nns in jj nn , vbd rb vbn in at nn ' np vbd . at jj vbg nn , cc at jj nn cc nn in at jj , rb vbn pp$ nns , cs nn rb vbd pp$ nn . in dt nn in in nn . cd , in in pps vbz in at jj cc jj nn in at nn . . . ( nn cd ( . . ( nn fw cd nn ( cs , vbn in at jj nn in pp$ nn , nn in abn pp$ nns cc nns rb hvd in nn at jj nn in np np . cs pps vbd jj to vb abn jj nns in dt cd nn . rb pps md hv ben cs pps bedz in nn cc jj nn ql rb vbn in at jj nn ' np nns , rb to vb at jj nn in at nn . cc in ap cs dt bed rb , ex bed * vbg ap nns ql ql jj in ppo . pps md be vbg ql rb , rb , rb vbg pp$ nn , to vb cs pp$ nn in . . ( nn cd ( at jj nn md hv rb vbn ppl in dti nn in abn nn nns , cc cs at ap nns pps vbd in ql ap at ap pps vbd at nns cs dt rb vbn jj md vb to be at vbn cd pps vbd . cc cs abl at nn be rb jj , ex bed rb jj nns wdt , cs * ql rb in in at nn in pp$ vbg nn , rb bed in at nn jj in vbg ppo . to vb pp$ nn nn md vb nns . cc in abn nns vbn in at nn in at nn , nns ber ql jj to vb rp in nn . pps vbd , in nn , cs rb jj pp$ nn in dti nns bedz in np , rb cs nn dod * vb at jj jj nn dti rbr cs jj jj nn vbz jj nn . in in at ql jj , at jj cc vb in at nn in jj nn . np ' nn nn cc np ' rb vbn md bed nn ' np , ql rb cs np vbd pp$ nn in np ' nn nn . rb pps vbd cs in abn dt at jjs nn , in pp$ nn , vbd pp$ nn ' jj nn , cc md pps , md rb vb ppl in ppo , cc rb vb ppo . pps md be cs at jj nn md vb cs at jj nn bedz vbn . in dt jj nn np md rb be jj to vb in jj nns in nn in pp$ nn ' jj nn , cs dti jj , jj , jj nns bed vbn to vb in ppo . * rb cs , cc at jj nn in nn in np np bedz rb ql rb vbn cs in pp$ jj nn cc nn in vbg dt , in at jj , at nn md in dti nn be vbn in dt jj jj nn wdt rb vbn ppo . cs at jj nn in at nn md be vbn vbn in at jj nn ( in ap nns ' in nn bez nn in vbn nn jj in nn ) . dt wrb ppss vbd pp$ jj nn nns , pp$ nns cc nns md hv dti jjr nns to vb in cs np np . in wql rb cc rb at jj nn hvd vbn at nn in pp$ nn . rb abn nns in abn nns ber ql cc ql jj cc jj in in ppss vb in at vbg jj nn , cc ppss jj pp$ nn in -- cc wrb vbn . . ( nn cd ( in dti nn jj cc jj in at nn , wql jj in nn cc nn in at nn , pps bez in abn nns nn cs jj nns cc nn md vb cc vb ppo rb vbn in at jj nn . cc bedz vb jj in dt nn . in nns in jj nn nn vb abn nn nns . cc jj nns ber jj . at jj jj nn in at vbn nn , vbd np , bez nn . vbg cs at jj nn rb vbz at nns in dt pp$ jj nn , cc vbg in pp$ nn rb nns at jj jj nn in np in ppo , rb , cs in at nn in ppo ppss vb nn in np np , ppss md rb hv nn in pp$ ql jj , jj nns . in rb at jj vbd cc nn nns in jj nns bed * jj to vb cd cd nns in nn to vb in pp$ jj nn , in vbg nns , vbg nns , cc vbg ap jj nns in at nn . hvd ppss ben rb vbn in pp$ cd jj cc jj nn in in dt jj cc jj nn , ql ap md hv vbn in in nn . nn md * vb dts nns , vbd np , in abn nns in nn in in rb , nn . ppss md nn nn rb . cc vb dti nns vb in , cc at nn nn in ppo in ppo , cc rb dt ap jj nn abn in rb jj in ppo , dt ap nn md rb jjr nn . cc bedz rb vbg rb dt jj nn ql vbn to vb rb . hvg rb , pps bez jj , cc rb ql rb vbd at jj cc jj nn in at fw ' fw fw , np bedz rb ql jj cs , in rb vbg , pps hvd rb vbn ppl jj in at jj nn in nn . cc in jj nn , abx jj cc jj , pp$ nn cs rb vbn , cc in dt nn jj , md vb ql jjr nn in ppo , cc rb rb vb in ppo at nn . in rb at rb vbn nn in nn , cc at jj nns in abl at vbn nn vbg nn , np md in nn hv ben ql jj to vb ppl . dt nn md rb vb in pp$ jj vbg nn cc nn cc nn , vbd in at jj , rb vbg . . ( nn cd ( nn in at jj jj nn wdt pps bedz jj in pp$ nn to be vbn to . in abn dts nns rb , cc nns rb ql jj to be rb vbn rb , vb rb vbd cs pps md rb in at jj nn vb jj in at jj , jj nn in at fw ' jj nn . vb abn jj nns . cc * rb cs , cc vb ppl to vb abn pp$ rb vbn jj nn in at jj nn in pp$ nn . be abn dt cs pps md , pp$ nn bedz rb rb vbn nn at cd nn in nns cc vbg ppo to vb at jj nn in rp , cc * vb vbg rb at nn . dt nn bedz * jj in nn . . . ( nn cd ( . . ( nn np cd np nn in nn ( pps bedz at jj , jj nn . at nns bed rb vbg in at nns , cc rb vbg rp in at nn in vbn nns . np cc ppss bed rb vbn vbg wdt bez vbn at nn in nn , in at jj vbg in pp$ nn . ql rb cc vbn cc rb rb vbg bedz abn at nn , cc abl at nn in nn vbd in at nn , cs dt jj nn vbd vbn in pp$ jj jj nn . nn bedz at nn cc nn in np , cs jj in at nn . cs ppss vbd vbg cc jj at nn cc jj in vb in at jj nns in at nn , vbg pp$ jj nn in at nn , cc cs np , vbg rb , rb cc nn vbd pp$ jj jj nn in at nns , cc rb vbg rp in at nn , rb cc rb vbd nr at nn : ppss vb ql jj at nn dod rb rb vb abn in at nn cc abn in at nn , rb vbn in at vbg jj nn in at nn , cs pps vbd cs cs dt bed at nn in nn , cc ppss ppl bed at nn rb vbg cc vbg rb in at np . ex vbd at vbn . . ( nn cd ( nns in at nn nn in cc cd ap , rb vbg , jj nn , cc dt nn rb qlp to vb in at rb vbg in ap nns in pp$ jj . dt nn vbd nn . cc rb , vbd ppss , in pp$ jj nn ppss vb pp$ jj nn cc vb pp$ jj nn in dts jj nns . nn , np ' rb jj , jj nn , rb vbg at jj rb , cc rb , cc rb , cc rb , cs at nn md be . cc in dt nn in at vbg nn vbg at jj nn in at jj nn in at vbn nn . dt jj ' nn nn , vbd ppss , wdt rb rb nns cc vbz abx nn cc jj . dt jj , jj nn md be nn in in rb , nn , jj nn , cc nn in in at jj jj in in abn rb vbg rb . at jj nn in nn , * to be vbd in pp$ jj nn in in pp$ at vbg nn , rb , rb vbg in dt . jj md rb vb to vb pp$ nn in vbn nns . cc nn , cs vbn in pp$ nn in at jj nns in nn , cc rb in pp$ nns vbn in jj nn , cs rb vbn in in abx , nn in vbz nns cc , cc hvz at ap vbg nn in nns . rb ppss bed vbg cc vbg rb wrb ppss vbd in at nn ql jj , rb vbn , cc rb jj cc jj , cs at nn in jj nn vbd in pp$ nn , cc ppss vbd vbg rp in at nns wrb dt nn vbd cs at nn . jj rb in at nn in nns bedz cs jj np in np , np . pp$ nn bedz vbg rb rb , pp$ nn vbd rp cs at nn , cc in jj jj nns pps vbd pp$ nns . to be jj at ap nn bedz dt ap nn rb beg vbn abn in at nns , in nns in nns ' ppss vb in nns vbn cs jj in at nn . cc in ap in dts nns md cs vbn jj nn hv vbn abl at jj nn cs in np at jj ' nn . cs pps vbd vbg in ppo abn vbn in nn , ql rb cc rb vbg in at nn , ppss md hv vbn ppo dti nn cc nn nn at nns in nn , cc in dts jj nns vbg pp$ nn . ex pps vbz . ex . ex . ex . pps vbz . pps vbz . . . ( nn cd ( wrb in rb . in at nn in nn , in cd nns rp . at nn in ppo . rb abn bedz nn . at jj nn vbz cs at nn nns , in at ap vbg cc jj nn . cc rb nns vb dt nn in ap nns in pp$ nn . ex vb nn . bedz rb at nn in np . cc at nns vbd . jj , nn . vbd np . nn . nn . nn in nn vbd rb , vbd in at nn , cc vbd at jj nn to vb . at nn bedz rb vbn rb in at nn , cc pps vbd rb vbg in ppo . np vbg cs at nns hvd vbn rp vbg in nn , ppss rb vbd to vb ppo rb rb in nn in pp$ nns . in dt jj nn in nns vbn in at jj nn wrb , vbg in pp$ nn in cd nn , pps rb , cs vbn in at nn , nns rb , cc rb vbz rp in at jj nn in in dt nn in pp$ md * rb be in nn . cs ex bedz at nn to vb cs at nn vbn in np hvd ben in dti nn vbn , cc rb vbd in abn in pp$ nn . pn in at nns vbn in nns in in dt bez , dts * vbn in at nns , in dt nn vbd at jj in at jjs in nn nn . at nns in at nn cc jj hvd vbn rp . at nn nns bed vbn in pp$ nns . at nn bed vbn rp . at nn bedz vbn , cc at cd nns vbd in at nn cs cd jj nns in jj nns . rb in at vbz pp$ jj nns in cd nn vbd in at nn , cs cd nn bedz rb vbn in at jj . ql vb at jj nn in nn in in in nn ' np nns rb to vb ppls in nn at nn ' jj nn . cc in dt jj nn at jj nn bedz vbn cs vbd at nn in at jj . in at nn abn vbd in jj nn , wps bedz vbn in cd jj nns wps vbd jj vbn rp in nn . . . ( nn cd ( . . ( nn np cd np nn nn ( at nns , in cs ppss rb vbd , bed vbg in at ap nn in at nn , cc , in at jj nn , bed vbg rb at nns cc nns in at nn wdt vbd rb . dt nn hvd rb ben vbn cd in at jj nns , cs rb vbn at nn ' np , in nn in pp$ vbg in at jj nn . at nn wps rb vbd in pp$ nns bedz jj cc jj , in cd jj nn rb vbg in pp$ nn in jj nns . at vbn jj nn in jj nn rb vbn ppo , in jj jj nns in at ap jj nn . cc rb vbg pp$ nn bedz at vbg jj jj nn , at vbg nn vbn cc vbd rb cc rb in pp$ nn . ql jj in nn , at nns in dt nn bed in dt jj , nn in jj nn jj in dti in at jj nns in at nns . in in at nn jj in at jj nn in jj , cc in dti jj jj nns vbn to be at vbn nns cc jj jj nns in at nn in at nn , pp$ nn , wp$ vbg in nn ppss vb to be rb . cs rb at vbg nn ' jj nn bed vbg in dts nns , np vbd rp in at jj in jj jj nn in pp$ nn , ql jj rb , np . jj , bedz at nn in vbd nn . jjr rb rb . nn ' ppss vb . vbg in at nn . jjr rb rb , ppss vb . abl bedz at nn in pp$ nn , cs nn in pp$ nn at nns vbd in at nn . at vbz vbd rb in at nns . in at vb , at cd nns vbd in at nn . cs , in at jj , rp in vbn nn , jj in dti ap nn , at nns , nn -- cs , vbd rp at vbg nn ' jj nn in at vbn nns rb . rb hvd ppss vbd rp in in at nn ' ppss vb , wrb . . ( nn cd ( at od nn , vbg in at jj nn , vbd rb in at nn , cc vbd at cd nns jj nn , wps , vbg jj in at nn , rb vbn np , np , cc nn , to vb ppls rb , cs cs to vb at jj nn in nn . cc in abn pp$ nns rb vbn in at jj np cc pp$ nn , at nns in at ap nns vbd * at nn . nn nn . in in vbd np . vb ppls , vbd np . vb nn , abn cd nns . ppss , nn , vb rp ap in nn . rb , rb , nn , rb vbd ap nn in nn , vbg in pp$ jj vbg nn . vbd rb . vbg pp$ nn . ex . -- in rb . -- in ex rb . ex pps vbz ql rb , nns . -- in vbd rb . rb vb rb jj nns , np . uh , ppss nn ' nn nn ' ppo , uh , vbd np . ppss vbd ppo abn in rb . dod ' nn ppss vb ' ppo in at nn . cc dod ' nn ppss vb np rb in ppo . wdt vb ppo , np . ppss ber rb , np . nn . vb , vb , pp$ jj nns in jj . vb , pp$ nns . vb , pp$ jj nns , rb cc rb vbd np in pp$ nn , dti in wpo rb vbd nns in nn . wrb nn ' nn ppss vb pp$ nns , pp$ nns . wdt bez pps ppss vb in . dts nns in rb nn . fw . ppss ber rb cd ap nns vb to vb ppo in in rb nn in wrb -- in at ap at nn . vb , rb , do vb . rb vb at nn in in nns ber jj nns qlp . ql , ql . rb ppss ber rb . cs ' np at nn in at cd nns . cs ' np at nn to vb at nns . uh in at jj nn in nn nn , pp$ nns . cd nns , nns in in abn nns jj . jj , jj . nn ' nn be in at nn in in nn ' nn be in at nn . wrb nn ' nn ppss vb pp$ vbz , ppo nns . vb pn , ppo nns . ql , ql , ql , rb . in in rb , rb . cs ' vb ppo in in dt ' vb ppo . jj cc jj . vb nn rb , vb nn . at nn vb ppo , ppss jj nns . ppss ber abn rb . vb vbg , ppss nns , cc vb . vb , md ppss . vb , md ' nn ppss . vb , vbd ' nn ppss . wrb in at nn in nns cc nn in nns nn ' nn ppss vb . -- in nn cc vb pn . vb , cc vb pp$ . . ( nn cd ( nns rp . rn . vbg rp at jj nn in pp$ nn . at nn ' jj nn in ppss vb pp$ nn , cc vb in at nn in pp$ nns . cs ' vb ppo in in dt ' vb ppo . rb ppss do pn . dt vbz cs pps , pp$ nn in nns . vb ppo in in vb ppo , pp$ nn in nns . vb ppo , vbg in nns . np ' nn nn in pp$ nn bez vbn rb in jj , cs pps hvd rb at jj nn in vbg in ppo in jj , cc rb in nn at nn in nn . cc ppss md * vb in dt nn in pp$ nns cs pps rb vbd in jj nns in pp$ nn . * in abn . cc rb vbd pp$ jjs nn . pps md vb at ql jj nns in pp$ nn , in at nn ql rb vbn in nn cc nn , cc at nn vbd ql vbn rb cs at nn in at nn , cs at nn md vb jj jj nns in vbg in jj nn , cc rb vbg in at jj nn in at nn . rb pps abn at nn vbd ql jj cc jj ppl , ql rb vbd pp$ vbg in nn , cc ql rb vbd in in jj in vbd in nns in in cs at jj nn in abl at vbg nn , in jj nn in nn , vbd cs at nn in at nn . rn rb , np bedz cd in dts jj nn in nns , wp$ nn bez rb ql rb jj , cs to vb abn nns in pp$ nn in at nn in vbg ppo . in nn in at nn in np , np bedz rb vbg rb in np ' nn nn . cc wrb in at nn cc cs at cd nns bed ql jj in dt ap , np vbd at nn . cd . np . jj nn rb , nn . at nn in ppo , uh , cs ppss vb . uh . vbd np , vbg rb * at ap nn cs pps vbd . rb rb cc rb vbg pp$ nn . pp$ nn vbd cs at nn in np ' rb . wdt vb ppo in dts jj nns , nn . vbn in nn , rb , cs at nn vbd . ( np , jj , nns . ) in at nn in pp$ nn , rb vbg rp rb rb : at jj nn , np . np . ( vb ppo , vb ppo , pp$ nns . ) cc rb nn , np . np , abn in at jjt . vb abn pp$ nn vb jj , vb wdt md . ( nn , pp$ nns , nn . ) . . ( nn cd ( ex ' np nns in nn rb , np . np , cc cs ' nn wdt ppss vbd in . ( vb , pp$ nns . ) nn , nn ' in at nn . dt in ap bez nn . nn cc nn nn in nn . rb , rb , ppss vbd ql rb , jj np , wrb at nns vbd , ql rb cs ppss nn nn in ' ppo , ppss vbd rb . rb , cc cs ' nn wdt pps vbd in at in nn in , ql rb , cs nn in nn rb vbn . ppss bed vbn rp rb . at jj nn ' nn in at nn in ppo . uh , uh , rb be ppo . md ' nn be vbn . abn nr . vb nn , nns . ppo vb ' nn at jj nn in in nn . vb nn . rb at nn in dts jj nns in abl at jj nn cs at nn in at nns in at nn , dt hvd * ql vbn at nn in jj nn in dti in at nn ' jj nn . cc np ' np vbd nn hvg dti nn rb vbd rb in ppo , cs rb * vbn rb , dt hvd in dti jj nn vbd ppo in at nn . pps vbd rp at jj nn in pp$ nn . cc rb wdt in abn dt cc np ' rb jj nn in vbg in pp$ nn , ppss bed in at nn vbn in jj nns . cs at nn rb vbd jj nn in abn nn in jj nns cs in jj nn ' in jj nn in at nn in at nn . in ppo , ppss rb vbd at jj nns ppss hvd vbn vbg in nn at fw in at jj np nn , cs rb cs at jj nns in at jj np . nn , np , rp in nn in pp$ nns , hvg vbn at jjt in nn , bedz rb vbg rb in at ap nns . at nn nn wrb jj at nn bedz vbg ppo . dts nn jj nns in pp$ vbd abn nn cc jj in nn . cs cd nn in nns ppss vbd cc vbd in jj nns in nn , wdt rb vbd at nn in at nn cs at jj nn nn rp in at np nn . cs in np , wps bedz vbn vbg at nn nn , pps hvd vbn rb pp$ jj nn , cc vbd pp$ jj nn in at jj nn in pp$ nn in at jj , rb vbn in at vbg nns in at jj nn . cs in at ap nn in at nn nn , in cd . . ( nn cd ( nn , cs at jjr ' np , vbn ql rb in at nn , cs cs to vb dti nn in nn : np bedz vbn rb vbg pp$ vbg nn cs in at cd nn nns cs at jj nn hvd vbn ppo . abn in rb at rp in vbn nn vbd at jj nn cc rb vbd vbn , cs at nn ' in cd vbz bed vbn rb jj . nn cc nn vbd jj in at nn . rb at cd vbn nns in at nn vbd in pp$ nn . at nns hvd rb vbn rb rp in at jj , rb vbg ql rb jj nn in at nn , cs in pp$ jjr nn np hvd vbn ppo . at nn vb rp in pp$ vbz . vbd np . ppss , np , vb rp . rb vbg rp in at jj vbn nn in at nn , at jj vbd jj rb , cc in ql jj nns vbd rp in at nn wrb at nn hvd rb ben vbd . rb in at jj nn in at nn wrb pps bedz rb rb jj nn in at jj , np ppl bedz vbn rb cc rb vbg ppl in at vbg nns in pp$ nn in at nn , cc rb vbg at jj jj nn in at nn . * ql ql jj nn ' jj nn bedz rb vbg rb rb . pp$ nn rb vbg in at nn in at nn , at jj nn in nn vbn in at nn , cc vbg dti cd nns in at nn in at jj nn . pps bez vbn in vbg nns in at jj nn . pp$ nn bez * ql jj cs at nn in at nn ' jj nn , cc vbg in abl at nn cs dt , nn vbd vbn in at nn in nn in dti nn wdt hvd vbn in abn cc pp$ nns . cc jj nn in nn bedz jj cc jj , cc in at ap nn ap nn in nn bedz jj in at jj cc jj nn , cs cs dt nn vb in nn in pp$ dod in at nns vb nn in nn . nn md ' nn vb cd nns rp . vb ppo rp at nn rb , cc vb ppo rp in dt . in dt , nn , in dtx nn in at jj to vb pp$ nn , rb vbd rb , cc rb vbg ppl vbd pp$ jj nns in at nn . . . ( nn cd ( jj at nn in nn cs dti , nn . md ppss vb . wpo ppss md , cc vb ppo ql rb , pp$ jj nn . rb ppss vb ppo cd nns jjr . cs vbg pp$ nns rb in cd jj nns in at nn , at jj jj , vbg at jj , vbd pp$ jj nn in nn ' jj nn , cc rb vbg nn ' jj nn in pp$ nn in vbn nn cc nn ppo vb cs pps ppl md vb , in cd jj vb vbd at jj nn jj cc jj in pp$ nns . cc rb bedz nn rb vbg , nn in cd vbd nn vbg ppo in at nn in nn to vb in cc vb ppl in . in dti nn pps bez at jj nn in at jj to vb in wdt jj nn in jj nn at nn md vb at jj nn in pp$ nn , rb wrb vbn rb in at ql ql jj cc vb in vbg nns . rb ql jj to vb ppo rb vbn in at nn ppl , in jj nns . cc at nn in jj nn vbn in jj nn bedz rb ql jj . in vbg ppl in at jj , jj , jj , nn in , jj nn , at jj jj in at nn in at nn rb vbd pp$ jj nn . rp pp$ jj nn , jj in jj nn vbd at nn in jj . at nn vbd jjr cs at nn . cs ql jj , jj , jj jj nn md rb cc rb vb in nn . cc * cd vbn nn dod pps rb vb in at jj ' in jj nn . ql hv ppss vbn nn cc nn vbg at vbg jj nn , cc at nn dod * vb pp$ nns cc pp$ nns in dt . rb np , at od nn , vbd at jj rb in vbg nns . at nns md hv vbn pn in pp$ jj nns , * at jj nn in jj nn . cc cs dt bed at nn , np , cs pp$ jj in jj nns , pps vbz , bedz vbn to vb at vbg nn in pp$ nn . pps vbd ppo in pp$ nn , wrb pps rb vbd ppo nn cs at nn . pps vbn ppo , cc vbd nr at nn in pp$ nn in nn . cc rb hvd pps vbn pp$ nn in at jj nn in nn in pp$ nn , wrb np , pp$ nn , wp$ nns hvd ben vbg in nn cs cd vbn nns , rb vbd cs nn in pp$ jj nn in pp$ nn , . . ( nn np ( vbg rp in at jj jj in nn , rb , in abn , cc vb nn . -- in rb ppss ber . to at nn , at jj , cc dti nn in at nn , md hv ben jj in dt nn . pn cc at vbn nn in jj jj nn , cc jj vbn vbz in nn vbg in ppo , cc rb vbg rp in nn , cs at vbn nn in jj vbg nns . at nn in rb vbd cc vbd , cs pps bed , cs at nn in rb vbn nns in nn . in dt jj nn cc vbg , cc rb in at jj nn in nn , rb , at nns bed vbg . vbn in nn in abn at ap nns , at vbz in nn ppss vbd , vbd pp$ jj nns cc vbn vbg nns . abn cd nns bed rb in jj nn in dt cd nn in vbn nn cc nn . cc pps vbd rb to vb ppo . pps vbd rp cc rp , cs at nn in vbg nns vbn rp at jj nn in at nns . vb , vb , pp$ jj nns , vbd np , in at jjt jj cc jjt vbn nn in pp$ nns . cs at jj vbn nn in pp$ nns vbd rb rb in at nn , rb vbd cs cd jj nns in cd jj nn vbz . pps dod * vb ap in pp$ nn , cs , cc dod pp$ nn vb pn in ppo . rb at nn in at nn bedz in nns rb vbn in cd in pp$ jj nns , rb jj in nn , rb jj in nn . wql jj at jj jj nn in nn . vb rp cc vb pn , pp$ nns . nn cc nn , pp$ nns . nn ppo , nn ppo in pp$ jj nns , nns . rb do dt in ppo , cc ppss ' ppss vb rp in ppo pp$ np ' nn nn nn , nns . in nn cc nns , nns . vbd ppo rp in in vb ppo rp . nn nn , nn . cc ppss md vb jj , vbg jj : vb . vb cs jj nn . cc rb vbg , pps vbd pp$ nn in pp$ nn , cc vbd rp cc rp in ppo . rb vbg ppo rp , vbd ppo rb rp in at nn . cc rb vbd in nn cc vbg in at nn ' jj nn cs at vbn nn in at nn . vb in dt nn rb , rb vbd np , wps , in pp$ jj jj nn , rb vbn in pp$ nns , in at jj nn , vbn in in in pps ' np vbd nns , cs . . ( nn nns ( nn hvz . vbz . rb , vb ppo vbz in in dt ' np at ap nn in in nn vbz in ' ppo . rb , rb , nns in jj . in in nn , ppss vb . in in jj ' in at nn . vb , nns in in nn , vbz in in nn , abn . cc wdt at nn ber ppss vbg rb . rb , rb , cc rb , pp$ nns . ap nn , cc vb vbg . pn ap . vb abn pp$ nns , cc vb pp$ nns in cd in in dt ' np abn . vb ppo jj in in wrb nn ' nn ppss vb ppo jj , ppss vb , cc vb abn pp$ nns cc nns . cc wdt pps bedz cs jj nn vbd in dt nn in jj nn in pp$ in in dts bed nns rbt vbn rb . cs ppss vb in at vbn nn in at jj nn . rb at jj nns in at jj nns md vb nn in jj nns , wrb , in nn nn , cc nns in jj nn , cc nn in vbn nns , np vbd in pp$ nn . rb , abn at nns vbd rp . at vbn jj nns in nn in dt jj , cs pps vbd at jj nn wdt pps vbd to be rb vbg pp$ nn ' jj nn in pp$ nn in in dts nns in pp$ bed in nns ql jj cc nn -- cs , cs ppss md vb dti cd cc cd in pp$ nns to vb at jj nn in at nn . cc dt bedz in abn nn . in at nns md vb rp pp$ nns , cc vb at nn in pp$ nns . nn vbg cs ppss md hv at nns cc nns , cc at nns cc nns , in dts jj nns . pps bedz at nn jj in jj nn cc nn . at jj nns in at jj nn . at vbg , jj nn ppss vbd , cs ppss vbd in at cd nns , cs jj nns in at jj nn in nn . at jj vbn nn in at nn , cs pps md vb in at nn in at nn in jj nn in at jjr nns , cs rb vbd vbg to vb ppo in cd . at jj jj nn in at jj fw cc nns . at jj nns cc nns to vb at nn in at jj nn . at jj , vbn in cs vb rp pp$ ap nn . in in abn dts , in at nns in at nns cc nns , cc at vbg nns in at nns , in at jj nn in at nn fw vbg rp in pp$ nns in jj nns , cs at jj nn in pp$ vbg nn . in in abn dt bedz jj . * at jj nn , vbg in at nn in pp$ nn in at nn nn in pp$ od nn . * at jj nn ' jj nn nn . . ( nn cd ( at od jj nn in at ap nn . in in dtx in dts md vb nn cc jjr nns cs dt nn doz , wps in at od nn vbz ppl vbg in at vbn , vbd nn in at vbn nn jj . at vbg jj nn vbn in at nn bedz rb vbg rbr cc ql jj , vbg in at vbg nn in at nn nn in nns vbn in at nn . at nns in nn ql rbr vbn , cc vbd rb in jj cc jj . at nns vbd vbg pp$ vbz . at nns bed vbn ql rb . np vbg nn in cd nns vbg jj in nn . pp$ nn bedz rb vbn , cc , in at rb vbg nn , ppss vbd rb . at nn vbg in jj nn in at nn , cs at nn vbz md rb be vbn rb qlp to vb beg vbn in at nn in nns . rb ppss bed vbg in at vbg jj nn in nn . dtx nn cc nn to be vbn . vb nn , nns , vbd np , vbg rb rbr rb at nn in pp$ nn . ex bez nn to vb at nn rb in at nn vbz . ex ' in jj nn rb . -- in jj to . nn . rb cs , cd nns in jj nn in dt nn in ppo vbn cs at ap nns hvd vbn rb . cc rb bed ppss vbd , wrb in at nn in cs vbg nn np vbd : vb rp . cc np , vb in nn , vbd in pp$ nns . cs * cd in at nns bedz rb vbg at nn cc nn nn ql rb in ppo rb , rb in pp$ nns in at jj nn in at nn in at nn in at nn , ppss vbd cs at jj nn hvd vbn . ppss vbd , rb , at jj vbg nn cs in cd nns vbg in pp$ nn . rb at nn bedz rb vbg in at nn , at nns vbg cc vbg in ppo cs at vbn nns in vbd nns . cs ' in pp$ vb . ex , rb , vb ppo in ppo . vbd np . at jj vbg nn vbd rp in at nn . pps bedz at vbd nn in np . rn abn in cd vbn nn vbd at jj nn in jj , cs rb at nn vbd jj in at nn . at nn vbd cc vbd . at . . ( nn cd ( nn in vbg nn vbd rp in in . pn vbd cc vbd cs at nn in ppo . at jj nn bed abn vbn cs ppss bed vbn vb in vb in at jj vbg nn in at nn . nn , jj , cc vb hvd abn vbn rb . cc at jj , rb vbn in at nn , vbd . cs rb vbd , at nn bedz rb vbn . vbg in ppo ppss vbd rp at vbg vbz , cc vbg ppo in at jj , vbd rb in pp$ nns . ex ppss vbd rp in pp$ nns in at nn , at nn vbg at nn cc nn , cs cs in pp$ jj vbg nns at vbn nn vbd at nn nn vbn rp in ppo in at nn in at nn . at nn vbn in at nn . at nns vbd pp$ nns rb . at jj nn vbd , vbn , cc vbd in ppo cs at jj nn in at nn , in wdt , vbn , ppss bed vbg . jj in dts nns in nn . in jj ppss vbd at ap nns . ql rb nn in at jj nns in at nn in at vbg nn cs nn dts nns in dt nn . rb at vbg nn , nn , cc nn , vbd jjr in at nns in nn . at nn in at nn md be vbn . at vbg nn vbd abn nns in nn in at nn . at vbz bed jj cs nns , vbg rb at nn in nn in nns . ql , vbg at vbg in at nn in nn nn nn , cs ap nns np vbn to vb at nn in at nn . rb vbg ppo in at nn nn , vbd ppo in np cs at nn in nn in dt jj nn . ex , rb , pps vbd , vbg rp dt nn nn in at nn in dt jj nn . ex , rb , pps vbd , at nn cc nn in at nn in nn , rb vbg rp nn in at nn in nn . jj , jj in , cc vbg jj , vbg in nn cc nn , ppss vbd rp pp$ nns cs at nn vbd rp . at nn rb vbn in at nn , at jj nn vbd vbn in at nn in at nn . rb np vbd in pp$ nns , jj pp$ nn in pp$ nn . ppss abn vbd at jj nn , cs in nns cc nns rb vbn in at nn . at nn vbd rbr cc rbr . at jj nns bed rb vbn in . . ( nn cd ( at jj , jj nn . vbn , ppss abn vbd in at nn cs at nn in ap vbd in nn , vbg ql rp in ppo in at nn in * ql ap cs pp$ nn . vbg in at nns ppss vbd at vbn nn , cs in cd nn pps vbd cc vbd in at nn ' rb vbz cs at nn in at nn in at nn . cc rb at jj nn vbd in ppo , cc pps bedz vbn at ap cs pps vbd rp vbg jj . rb ppss vbd in ppo , bed vbn in ppo in at nns , cc bed in ap vbn rp cc rb vbd in nn . cs at nn vbd rb in , at ap nns hvd vbn rb in pp$ nn cc vbd in at nn in jj nn . at nn hvd vbn ppo rp , cc bedz rb vbg , cs rb pps md vb in dti nn in pp$ vbg , in in at nn cc at nn nn . . . ( nn cd ( . . ( nn cd cd np np ( ex ber ap jj nns cc nns in dt jj vbn nn ppss vb nn wrb at nn vbz dt jj nn in at jj jj nn , cs at nn rb pps cc rb vbz , cc ap cs vbz cs at nn bez in pn ' nn nn cc pp$ jj . wql , pn vbz , cc pn vbz jj cs vbg . pps nns in abn nns , abn nns , cc nns , cc nns , abn jj nns jj cc jj , rb vb wrb nn . cs at jj in jj nn vbz rp nns cc nn nns . cc cs in jj nns cc nns , nns in jj nn , nn in nn cc nn . abn dts , cc nn ppl , vb in ppo rb jj , jj in jj nns , cc jj nns in at nn vbn in at jj cc jj jj nn . dt jj nn in jj nn ppss bem vbg in , vbz in at nn rb in dti nn in jj nn . pps vbz in at ap nn in pp$ nn , cs dt wdt rb cs md hv vbn in ppo at nn ql jj , rb vbz cc at nn in at jj . . ( nn cd ( nn . ex bez pn cs at nns in vbg to vb dt jj cc jj nn in jj , nn nn . cc in ppo ppss rb vbd dt jj nn in at fw , cc at jj jj nn pp$ nn . np , vbd ppss , wrb ppss hvd vbn ppo , at ap nn , in at nn , cc ppss bedz rb vbg ppl in pp$ nn to vb rp at nn . np , pp$ jj nn , doz dt nn in nn rb vb . in ap nn , cs vbn in rb vb ppo , pps vbd ppo to vb cs jj nns dod rb vb . cd . np , vbd ppss , vbg in dt jj , wps , vbn rp in pp$ nn in nn , bedz rb rb vbg pp$ nn in at nn . np . np , ppss vb ppss hv vbn ppo vb cs in abn nns ppss rb vbd , pp$ jjs nn , np . np , bez in rb at ql jj cc jj . nn vb rb , cs vbg jj in at vbg jj in pp$ nn vbn in at jj nn bez at nn in at nn ' jj nn . ap . nn ' ppss vbd in nns in at jj nn in at nn in nn nn . cd . nn , vbd ppss , vbg in jj nn in nn , wps bedz vbg rb in . ppss ber vbn in dts nns , cc ppss bem * . md ppss vb ppo cs pps bez at jj nn in dt nn , np . nn , in at nn to vb pp$ jj nn vbg ppl rb in rb in nn ' np nns . md ' nn ppss vb cs jjr . vbd nn . rb , cs ' np at nn . nn md vb to vb at nn ' jj nn vbg nn rp in at jj nn rb . uh , uh . at jj md vb ppo nn in nn , nn cs . rn rb , in cd jj nns , nn hvd at jj nn in at jj nn . vbg , rb , cs nns cc nns in at nn cc jj nns in at jj , bed nns in jj nn in dt nn in nn . in dt in at rb jj nn in vbg rp in at jj ppss md vb pp$ nn in at nns in ppo wps vbd at nn in in rb at nn wps in dt ap nn bez in pp$ nn in at nn in vbg at nn in pp$ jj jj nns . vbg cs at jj nn in pp$ jj jj nn bedz rb to be . . ( nn cd ( vbn in np ' rb vbg rp in pp$ jj rb in at nns in at nn , cc vbg cs np , rb , bedz jj in pp$ jj nn in at nn . vbg cs ppss vbd in dt ql jj np ' nn nn . cc rb vbg in wdt at nn ' ppss vb ppss bedz vbn , vbg at jj nn : vbg abn nns rb , ppss vb , ppss vbd ppss md ql rb vb rb cc vb at jj nn in pp$ nn . np , vbd ppss , vb rb , ppss md be pp$ nn , nn , cc nn . pps md vb jj cs in abn nns nns md be vbg in pp$ ap nns cc nns , cc ex ber at nns in at nn ql jj in dt nn . dt bedz at od nn in pp$ jj nn cs ppss hvd vbn at ap nn . cs at nn bedz vbn in at jj nn , ppss vbd abn at jjr . at nn bedz vbn rb in pp$ nn . rb , abn at nns ppss md rb vb md be ql jj cs at nns cs np vbd in pp$ nn . at jj jj nn in ql ap nns cc nns cs at nn md be . nn vbd ppl . pp$ nn cc nn bed vbn rp in pp$ nn . nn vbd in ppo rb cc rb , cs at jj nn in at jj nn vbg in at nns in at jj nn nn . rb rb , vbd nn , rb vbg rp at nns in pp$ nn , rb vbz at jj , vbn nn in nn cc nn , cc at nn vb at jjt . . . ( nn cd ( . . ( nn np cd nn ' np nn nn nn . np ( wps md hv vbn ppo , nn . vbd np . cs ppss hvd cc cd nn ppss md * vb ppo in at nn , cs rb to vb at nn in nn in pp$ nn nn . uh . pps ' vb at jj jj nn . nn nn ' nn vb ppo ql jj , cs abn , in dt nn , vbd . . ( nn cd ( nn . cs pp$ nn bed rp in at nn , rb , pps md be at jj nn . wps md vb ppo . cc pps hvz cd nn , cc jj nn in at ap nr , ppss vb . nn nn ' nn vb cs , pp$ jj nn . ppss rb rb vbd ppo vb . in jj in jj nns pps hvz rb ben vbn cs , in at jjs nn in pp$ nn in at nn in at nn , pps bez jj in at vbg nn to vb dt nn in at jj nns in at nn . ql np ' np nns rb vbn in nns in pp$ nns , cs cs jj nn in pp$ md to be vbn in at jjt in at nn . cc in np at nn vbd at vbn nn . vbg cs in cd nns nn bez cc at vbg nn in abn nns in nn . vbg cs at nn in nns bez rb in jj cc jj nns . cs at jj nn , rb , rb vbz at nn . in dts nns bez pps jj in dti vbn nn to vb at jj in nn in at nn . cs at jj nn , at nn in nns in at fw md hv rb vbn * . vb rb vbd cs cs pp$ nns in nr md vb ap in pp$ vbg at nn in ap ql jj nns in at nn , in at nn in beg in at nn in nn cc vbg pp$ nns in nn , rb in nn nn to hv at nn rb vbn in ppo cs at jj nn in at nn in in rb abn in nn nn to be vbn in cd jj nns , cs cs ap nn ' jj nn , pps rb vbd cs jj jj nns rb vbd at nns in at nns in at fw . rb pps hvd * vbn at nn ' jj nn in ppo , cc hvd pps in dti nn vbd pp$ nns in dt nn . rb pps hvd vbn jj nns in pp$ jj vbg abn dt nn . cs np ' rb vbn nn , at nns hvd ql vbn ppo , cs to be jj wrb , cs beg at ap cs rp in nn , abn nns hvd vbn at jj nn in vbg at nns in nn . wrb dti nn in dt nn bedz rb cc rb vbd vbg ppl in at nn in vbg nn in nns in pp$ jj nns in wdt bedz vbn to be cd in at jj nns , cc rb rb vbg at jj jj nns , wdt wrb at . . ( nn cd ( nn bez vbg rp ber vbn in at nn in at nn : wrb abn dt bedz vbn in ppo , cc rb pp$ nn in hvg at jj nn in nn in at nn in at nn , cs cs to vb ppo rbr vb at vbn nn in pp$ jj nn . cc rb at nn pps vbn in rb vbg at nn nn , cc jj nn , cs pps bez rb vbn , at jj nn in at nn ' jj nn in vbg at nn in in vbg cc nn in at jj . wrb pps bedz vbn wql rb pps vbd rp in dt nn in pp$ jj nn vbn in at fw in jj nn in at nn , cc in at nn ' jj nn vbd rp at ql rb cc vbd ppo at ql rb . abn dts nns , ppss vb , hvd vbn ap nn cc nn in at nn . cc rb pn vbd cs dt jj jj nn in nn md rb be in at nn in at jj nn in np np . cs pps hvd rb vbn pp$ nn to vb cs jj nn in nn . cc abl at nn dod in at nns vb at jjt nn cs in dti nn ' jj nn beg vbn in dt nn . rb , in at jj nns , wdt nn vbd rb vbd rb . in in at jj nns rb jj . rb , rb cc rb jj jj nns cc nns in jj nns vb rp in at jj nns cc nn in nns in at nn in nn dts vbg nns in nns . cc at nns ppls rb vb rp jj jj nn nns vbd vbg in at jj nn in nns , nns in nn , vbz , jj in nns , nns , vbn in in np vbz , cc wdt * . cs np ppl md vb rp at nn cc vb rp in at nn to vb in at nn , cc pps md * vb dti jj nn in at nn . cc be abn dt cs pps md , jj pps bez cs cs at jj nns rb vbd pp$ nn in at nn , cs rb cs pps bed rb jj in ppo , rb cs nn in jj np vbd at vbn nn in at ap . wrb pps vbd in at jj nn cs dt , in wdt nn in jj nn pps rb vbn ppl to be vbn in nn ' in jj nns . rb , ql rb cs to hv dti nn in at nn in vbn nn . nn vbz , cc pps md hv ben rb nn in ppo . abn dt pn vbd . cc pn md vb . . ( nn cd ( at jj nn in np . pps bedz abl at nn cs vbn , jj nns in at jj nn rb vb in pp$ nns , cc cs cc rb . cc at vb in wpo rb cc rb vb in at jj jj nns , rb at jj nn in at nr in at nn in in dts vbn , jj , jj nns , wdt rb in dts jj nns rb vb ap in at jj nn in nn ' in jj nns , wrb at nn in at od nn bedz at jj nn , cc abn nns pp$ nns , jj wrb pps vbd , vbd dt ap cs jj nns , cc vbd in at nn cc at nn wrb ppss bed vbn cc in wdt nn . wrb rb , in in nn , at nns rb vbd in at nns in nns , at nns rb , vb at jj np , vbd in jj nns . . . ( nn cd ( . . ( nn nns cd np nn in nn ( nns , nns vbd , cc in jj nn , at nn fw hvd rb vbn in cd ap nn in nns . cs in at nns . in at nn fw np . in at nn ( rb vbn ) , beg in at nn in at np fw fw np . cc at nn nn , at vbn , jj nn , jj in nn . np . pps bedz cs vbg in dts ap nns cs cd jj cc nn nn , wrb abn at nns vbd in jj nns in nn . cc , in pp$ jj , vbg nns , vbd wdt vbd at jj nn , * at nn : in abl at jj nn at jj nn bedz vbn rb in nn in at jj nns in at nn . vbd rp in at nn , pps vbd jj . vbd dti vbn cc vbg nn jj in at nn . np rb vbd dt nn . in in dts nn nns , pps bedz pp$ jj to vb in at jjs in nn nn , cc vb at nn in rp rb , in at ap nn cs cs pps hvd ben nn . cc rb , cs nns in nns bed vbn in nn , * cd nn . . ( nn cd ( in at cd md vb at nn in ppo . ppss md vb in wdt nns , rb , at nns vbd dt jj jj vbn rb in jj jj nns . pp$ nn cc at nn , nns in cd nn . cc wrb , in vbg pp$ jj nn rb in ap jj nns in vbg at ap nn . wrb , in abn dt nn , pp$ jj nn bedz vbn vbg dt jj , nn in vbn nn , at vbg nn vbd in pp$ nns cs cs dti vbn nn hvd vbn in at nn , cc vbd at jj nn . ex pps vbz . hvn at vb in nn vbn , ppss md * hv vbd rbr . rb rb ppss vbd at nn . in nn . in cs pps bedz at ql jj nn , rb ql jj bedz at nn , cc ql rb jj , cs rb at nn in nn rb vbn at nn . vbg at nn in jj , nn in vbg nns , np vbd at nn ' jj nns cc vbz to be vbn , cc at vb vbn . at jjt nn in at nn md vb at nn . rn , in at nn in nn vbn , at vbn in rp nn vbd rp in at nn . at jj , nn , vbg nn in at jj nn vbg at nns in ql ap nns , vbd at jj , vbg nn to vb cs nn in at nns . cs rb pps vbd rb , cs cs cd jj nns bed vbg in ppo in in cd to vb jj in nn , at ap to vb rb in dti jj nn . cc hvd ppss vbd np ' rb vb dt nn , ppss md hv vbn cs in ppo rb cd jj nns bed vbg . cs pp$ cd jj nn vbd jj nns in at nn , at nn in pp$ jj nn vbd cs at nn in nn . in nn cc nn dt jj nn vbd . cc cs at nn ql rb vbd , cc cs in at nn , cs nns , at jj nns nn , cc at jj nn bedz at ql vbn cs nn . at nn vbd pps vbd ppo rb , cc * at od nn . dt nn in nn hvd rb vbn at vbn nn , wrb , dti nns in , uh . in at ap jj nn , pps bedz rb vbn : rb pps bedz vbd in abn . cc in vbg nn to vb ppo , rb rbr pps vbd cs cs pps hvd rb ben . cc cs pps vbd ppo nn in nn , cs at pn vbd ppo cc to vb in ppo . rb vbn in at jj nn , . . ( nn cd ( cc nn , cs at nn md be . vbg rb in cd jj nn , cc cd nns , cc cd . cc rb vbg in at jj nn to be vbg rb rbr cc rbr in pp$ nn , dt jj nn vbd in rb vbg ppo rp . cc in at jj nn in pp$ nn , cc in nn in at nn , cs pps vbd , wdt in ap nns vbn at fw , bed rb vbg dti in at nns wps vbd cs wrb cc wrb vbd . in rb jj nns , cc in wql ql rb nns cc nns , cs jj nn bedz vbn in cd nn in ap jj . cc cs jj , np np . in at nn , ex vbd , rb , at nn in jj nn in dt vbg nn , cs cs pps bed rb vbg ppo rp cc rp , in nn cs at nn md vb rb in ppo , cc vb ppo in ap in at jjt cc ql jj nns . dts jj nns , ql jj cc ql jj , vbn at jj nn in at vbg nn in at nn , in wdt , in abn pp$ jj nn , dti vbd rb vbd at jj nn , cs in nns cc nns ppss vbd rb , in nns ql rb , rb jj , cs abn nn , in nn in pp$ jj nn , vbd nn ppl in nn in pp$ nn in jj nn . cc , in ap , wrb vbg in at rb , at nn nns vbd vbg in ppo , cc ppss vbd cc vbd in at jj , vbn nns wps ber rb . wrb at nn in jj fw rb vbd in at nn , cc jj at jj nns in pp$ nn , cs , cs nns in jj nns , at nn in nns vbd rp pp$ nns . rb abn dt jj nn in nn vbd rb , cc vbd nn in nns ql jj cs rb . rb in pp$ nns , jj nns in at nn vbd rb cc rb in ppo . cs jj in pp$ nn vbd at jj nn in nns . cc at nn , vbn in pp$ nns , nns in dts nns bed vbn . cc nn in pp$ nns , in at jj nn rb vbd in at jj , cs cs ppss vbd pp$ nn dti vbg , vbn nn . at nn vbn in nn , cc rb vb nn in nn in pp$ jj nns . cc vbd cc vbd , rb rb vbd at jj nn , cs cs pp$ jj nns bed at nn . cc at jj . . ( nn cd ( jj nn bed in nn cc nn in at jj nn cc vbg pps hvd vbn . nn in jj nn , do ppss vb ppo . abl nn np , cs vbn in nn . in rb vbd in at jj nns wps rb hvd vbn ppo , ppss vbd ppls vbn in dt vbn nn , wrb jj nns vbn in dts nns cc dts nns , vbd vbn to vb rp rb in dti nn in nn , cc vb cs jj nn in dti nn . cc jj , nn in jj , cc jj . rb vbg pp$ nn in nns in at nn . rb vbg ppo rp in rb , at jj nn md in nns be vbd . in abn dt nn in at nns , np , cs vbg in at nn at ql jj nn in at jj cc jj nn , vbd at jjt nn . cc ql rb cs rb vbn pp$ nns . in jj nns cs dts , cs pn rb cc rb hvz ben vbn , pn ap md be vbn cc rb to vb at nn in at nn . rn nn cc nn vb jj nns . ql , in pp$ jj nn vbn in pp$ vbn nn , cc in cd nn rb vbg at nn , nn in nns cc nns md vb vbg jj in nn , cs at jj nn in nn cc nn md abn cc vb pp$ ap nns rb . nn , at nn vbn in at jj nn in at nn in at jj nns wps rb vbd rp pp$ nns , vbd in at nn in at nns in at nn . cc at jjr to vb in at vbg nns , dt nn hvd vbn ppl in at nn in jj vbn in at nn , in wdt pps vbd cs in at vbn nn . ap cc at nns bed vbn . cc at jj nn , cs cs vbn in vbn nns in nn , nn in nn vbd rp in abn at jj nn cc nn in at jj nns . in nn at ap nn in nn in at nns in at nn vbd . rb in nn at nns vbd in at nns . rb jj jj vbd rp in at nn . rb wrb vbd nn vbd vbg nn pps md * vb dt nn in pp$ nn . rb md np vb at jj nn ' jj nn , wrb cd nn vbg rp in at nn to vb wrb at . . ( nn cd ( nn vbd , pps vbd ppo in vbn nns vbg rb in pp$ nn in vbn nn . at nn cc abn in vbn nn in at nn in wdt pps hvd dti nn rb vbd , rb rb vbg in at jj nn cc nn . in at nn in ppo vbd vbn cd in dts nns in nns cc nns wdt hv rb ben vbn in . pp$ nn vbd in pp$ rb vbn nn . cs at nn bedz jj , at nn bedz vbn rb cs cs at vbn nns bed vbn in at nn in at vb in nn wps vbd in at nn in at nn . jj jj nn . vbd np in at vb , vbg in dt nn , rb ppss rb vb pp$ nn . . . ( nn cd ( . . ( nn np cd np np ( jj in rb in at nn , in at jj np , at jj vbg nn in jj nns , at nn vbd rb , at np ( np ) in nn . cs pps rb vbd rb , in pp$ jj vb in at nn in nn in nn , ppss hvd at jj nn in dt nn ql jj in at jj in at jj nn nns in in at jj in nn , cc jj jj in nr . cs cs at nns hvd ben nns , dt nn bedz vbn cs at nn in at vbn nn . abn in pp$ nns , dt jj nn bedz vbn in jj nns in vbd nn , cs abn pp$ nns cc pp$ nn bed cs at jj nns in nns vbn rp in nn in nn . rb pp$ jjr nns bed vbn . at jj nn pps bedz to vb ppo rb in jj nn in nns in dts cd nn in nns . ppss vbd vbn in at nns in nns , ql vbn cc vbn at nn wps hvd vbn rb cd nns in vbg . vbg in nn nns vbn in at nn , ppss vbd cc vbd rp at jj nn . . . ( nn cd ( cc rb , wrb at nn rb vbd rb in pp$ nn , ppss cd nns in at nn vbd ql rb in dt ap cs ppss md rb hv vbn in at nn in nns in cd nn in dts in at ap . rb , dts jj in vbg nns , rb vbg ppo cs ppss vbd , vbd * cd nn in pp$ jj nn in nns , cs at nn in nn nn bedz beg vbn in rb . nn nn . hv ppss vbn at jj nn . cc cs at jj nn , vbg in at jj nns , bedz in at nn in vbg pp$ nn in pp$ nn , pps rb vbd in pp$ nn in at nn . cc at nn rb vbg nn , pps in jj vbd to vb ppl vbn in ppo . nn pp$ nn bedz rb vbg at nn in . cs in ap jj nns at nns in at fw bed jj pp$ nn in dt jj nn in at od jj nn in at jj nn ' jj nn in dt nn , nn in at nn vbd . pps rb vbd cs cs pps md hv vbn at nn to vb at nn , hvd * at vbg nn vbd . cc vbg nn in pp$ jj nn , pps rb vbd pp$ nn , cc vbg in pp$ nn cs at nn nn bedz at np cc rb vbn nr , pps rb vbd in in np rb . dt bez at fw , vbn in at nn . vb ppo to vb abn jj nns in at jj nn . cc dt nn cd nns , cs ppss bem * in nn , vb ppo to vb ppo to -- in in in in in dt nn at cd vbz bed ql vbn , cc rb , rb , in nn in pp$ jj nns , nns in jj jj nn , cs in dti nns rb hvd ben rb vbg in pp$ nn , vbd rb in wdt vbd vbg nns , cc vbd ppls jj cc jj in at nn ' np nns . cs in at nn in pp$ jj nns nn md rb rb hv vbn at jj nn , rb , in dti nn nn , at jjt nns rb vb nns . vb rb in ppo , do ppss . vbd np , vbg rp in at nn . ex vbd cc ap in at nns , cc at nn vbd ap in jj jj nn in at jj jj nn hvd rb rb vbn . cc vbg in at nn , wps rb rb hvd ben vbg at nn in at nn to vb . . ( nn cd ( ppo rb , pps vbd rp in pp$ jj nn nn , in in in nn . vb ppo rp in at nn . vb at nn . ex bez ap in dt nn to vb jj nns . cc rb doz abn dt nn nn . rb in jj nns in at ap nn wrb ppss vbd , wrb dts wpo ppss vbd in jj , bed abn at nn in ppo . bed dt nn at jj nn , cc in vbg rb ppss md in rb vb jj nns , cc vb nns ql jj cc jj cs dti nps cc nns in np np , rb ex bed nn in at nn . cc in nn in dts jj nns ppss vb in , cc in vbn nn in dt nn nn cs , dti nn cc ap , vbz cs abn jj nns . cs vbg jj in dt jj nn , ppss rb vb ppo rp in jj nns cc rb vb ppo vbn . . . ( nn nn . ( at nn in nn bez vbn at vb in nn , cs in vbg in at nn in at nn , at nn , cs rb , md vb ppl in at nn in at nn . . . ( nn cd ( . . ( nn np cd np nn ( at jj nn wrb np dod * vb in nn in at jj ppss hvd vbn bedz dt : at nn cc nn jj nns . cc rb hvd dt * ben at nn , pps md * in abn , rb , hv vbn ppo in in vbg in pp$ jj nn in jj nns in in cs cs pps hvd ben dt , in at nn in nn , pps hvd vbn at jj nn in at nn pps vbd . in , cs pps rb vbd rp , pps vbd * to vb , rb in cd nns , in dti nn nn , in pps md vb dti in dt nn pps ql rb vbn . cc abn dt md vb rb vbn , bed * pn vbd rb in at jj nns in vbg in nns wrb nn dt ap in jj nns , cc rb in at jj nn in nn . cs cd nns vbg at nn np in jj np nn , cc at ql jj np jj in np . cs . . ( nn cd ( rb nn dt ap in jj jj vbz , dts nn , in at nn in ppo , md rb vb at jj nn . cc vbg in at nn in nn at nn . cc , rb , vbg rp in at nn cc vbg in nn : rb , wrb ql ql jj cs in at jj nn np cc np nns in at nn , cd vbg nns vbg dt ap in at nns in at nn in in in jj np ' nn nn , cc at ql rb nn ' np np . wql ap ql jj , ppss vb , cs in jj nns dts nns md * rb nn vbz , cc vb in rb rbr , ql jj cc jj nn . cc rb md dt vb to be at nn in nn , in at nn in nns vbn in cd nn , cc wp$ nns , nns , cc * at ap in at nns ber rb vbn in dt ap . cc rb , hv abn nns in jj jj nns to vb rb . in at jj jj nn , at jj in nn , rb , hvz nns in nn . in dti nn , pps md be jj to vb ppo hv dti nns in at nn at nn cc cd jjr cs at ap cd in pp$ vbn cc nn in vbn nns . cc in nn in dt nn , at jj in vbn nn md vb at jjt vbg nn in at nn in nn in wdt pps md be vbn , at nn in at jjs nn in ppo . cc in nn , abn dt md vb jj in vbg nns vbg dt ap ' jj nn in at nn in nn ppl , rb cs ppss ber ql jj jj in nr . in cd in ppo md hv vbn at nn in nns in dti od , cc rb ql jj nn . cc dti in dts nns md be in at nns in at nn pps rb vbz . rb , ppss md vb at vbg nn , cc hv at jj nn . in * rb md ppss vb in abn at nns in nns , cc rb in abn at jj nns vbg in at jj nn cc rb vbn nns cc nns . cc md nn in nn vb dti ql jj nn . dt bez , ql rb cs abx nns vb cd nn , cs bez at nn in nps cc nps . cs , to be jj , in at jj nn in jj nns , jj nns do * ql rb vb , cc wrb ppss do vb ex bez ql jj to be at nn in nn in ppo . in pp$ np bez rb . . ( nn cd ( vbn , cc pp$ jj , pps doz * vb dt nn in nn in pn cc ppl . rb , at jj nns rb vb at nn in jj nn in at jj nns . in at jj , jj np , in pp$ jj nns , cs at nn in nn in nn . cc wrb dt nn in at jj nns doz rb vb , pps md be jj to vb , vbg cs at nps in cd nn , rb , vb ap nns in abn at nps , rb , in cd nns . cc dt bez at jj jj jj in at jj jj in nns , wdt at np doz * vb ap in nn . rb , cs pps vbz cs pps hvz at ap nns ppl . ql , rb , ppss vb cs in abn nns rb vbg at nn , at nns hv ap nn to be jj in in cc ppss ber rb . cs , dti nn nns vbg dt ap ' jj nn in at jj in np , md rb vb rp in ql ap cs at ap nn in nn , rb vbg dt ap in at jj nns , cs at nn in nns in np . cc abn at nn vbg , rb , in jj nn in dt ap ' jj nn . cs in nns in in in nn , wrb ppss vb to vb in nn , ppss rb vb in abl at nn in jj nns cc nns , abl at vbg in vbz , cs ex doz * vb to be ql jj in in jj nn in nn cc jj nn in ppo in abn . ql jj nn in nns nn , wrb , ppss ber in abl at jj nn , ppss vb rb in dt ap cs rb cs jj . cc cs in nns , wrb ppss vb to vb dt ap ' jj nn in nns , at od nn bez in in wql ap nns . -- in at ap nn cs nns vb in in wql ap nns . cc dt nn rb vbd , nns rb vb rb , cs ppss ber jj nns in abx nns , cc nn ' nn vb to vb rb in dt ap ' jj jj nns . cc vb in at jj , jj , jj , jj , jj , jj -- cc in jj jj . wdt doz at jj do wrb pps vbz dt jj in dti nn in jj nn . pps hvz at nn , at nn ql ql jj in abn ap nns cs ppss rb vbd in at nn rb . cc cs in nn ppss md vb in ppo , ppss rb vb in ppo , cc vb jj nn in nns cc nn in nns , cc jj cs jj nns . wrb pps bez cs abn nn in nns , cc rb abn . . ( nn cd ( nns cc nn in in in nn ' np nns , cc nn in nn nns , vb abl at jj nn in nn in nns . dt bez at nn pps md be jj to vb . cs , in at nn in nns , vb , ppss md vb to vb cs dt nn in pp$$ hvz dti jj nn in ppo . ppo rb vbz in jj nn , rb . cc rb in at nn . cc rb , wrb at nn bez vbn in dt jj nn , pps hvz at jj nn in pp$ jj nn . rb , ppss vb , cs in vbg ppl to be jj vbd in at nn , in dt nn at nn hvz at jj nn to vb rp . cc wdt bez at jj . ppss md vb rp pp$ nn in nn vbg rp cc rp at nns in nns , cc rb vb at nn . cd . np rb vbd in dt nn . np np ' rb jj doz * vb ppo . rb , dt ap jj nn hvz rb in ap nns ben in jj nn in dti cd cd jj vbn nps . rb pps vbz at nn , cc md be vbn in at np . in dt nn , vb ppo rb vb ppo . nn . nn in in at jj nn in cd ( cc ap ) nn in nns , rb in at nn in nn . wrb , in vbg vbz , ppss vb nns in nns ' nns : at cd nns vbg , in at nn , in nn in cd nn , cc at cd jjs nns in at ap . ex bez dt jj nn in vbg wdt md * be vbn rb . abn nns hv pp$ jj jj nns in nn . rb hvz at jj nn . in at nn , nn in in in nn , cc nn nn , wrb at nn bez vbn rb in pp$ nn , pps rb vbz in at jj nns in at jj , rb jj nn rb , cc rb nns ppl in at ql jj nn ' jj nn vbn in jj nns cc nns . cc at jj in nn hvz at nn jj , at nn in dt nn wdt , cc at nn in abn . jj nns rb , cs vbg nns bed vbn in at nn in nns cs jj jj nns in nn nns . cc cs in at nn , at jj in nn rb vbz in dti jj jj . cc rb cs in nn at jj nn ' jj nn md vb at nn , cc rb cs at nn jjr cc nn bez in at nn , cs nn bez at nn in at nn , cc at nn , hvg at . . ( nn cd ( nn to vb in , bez vbn rp in pp$ nn abn vbg cs at nn nn . cc rb ppss md vb cs beg jj in at nns in at jj jj nn vbg in ppo in at nns in at cd nns , dt vbg nn bez ql jj in at nn in vbg pp$ nn in vbg pp$ nns . cc bez dt dti ql jj nn . in in pp$ nn bez at jj vbg vbg nn vbg ppo rb cc rb in at jj in pp$ nn , at in in nn nn in vbg pp$ nns in nn . pps bez rb ql vbn cs cc rb , cc md rb vb ppl rb in vbg rp in pp$ vbn nns . cc at jj , jj nn in at nn md rb vb rb to vb ppo , cs nn in nn bez pn in jj nn . rb vb at nn nn in cd nns , cc ppss md vb ppo rp . rn , rb , pps md rb do in jj nn in at nn ' rb vbn nns , pps md rb do , ppss vb , in dt vbg nn to be vbn vbg ppl at jjt nn in vbg nn in pn in pp$ nns . rb , cs nn in pp$ jj , jj nn in nn , pps rb vbz pp$ nns in pp$ nns ' nns . cc rb beg rb ql jj , jj nns , pps vbz ppo rb in nn . rb ex hv vbn nns , rb jj nns rb , wrb at nn hvz ben vbn in at ql jj nn cc cd , in at jj nn vb in in to vb vb in at jjt nn ' jj nn , cc vb rp rb cs jj nn . . . ( nn cd ( . . ( nn nn cd np nn in np ' np np ( ( cs vbn in at jj nn . ) at nn in jj nn , cc abn at jj nn nn in rb , bez ap cs dti vbn cd nns in at jj nn , wrb ppss vb ap nns cs in dti ap nn . pps bedz * ql jj in vbg at np cs dt . . ( nn cd ( rb in vbn nn , at nn in nn , bedz vbn . pps bedz vbn ql rb in nps . in at jj jj wps vbd pps vbd ppo jj nn in np np . to dti at jj nn in at jj nn bedz rb rb vbn in at nn in at nn in nn ' jj nn , wdt vbd rb to vb in at jj at jj jj , vbn nn in cd in dts rb vbn nns in np wdt in nns ber vbn to vb dti nns . dt ap nn , in pp$ jj jj nns , vbg wdt md be vbn at jj nn in at nn in to be vbn , rb vbd at nns in nn nn cc pp$ nns . in dt jj nn in at nn bedz jj in at nn in at nn in in ppl . pps bedz at jj nn in cd jj jj nns in dt nn , cd in wpo , pps vbz , vbn ppo in np in jj nns in nn , cc at vbg nn np vbd in pp$ nn , cc vbd ql ap in ppo in dt nn , cs wrb pps bedz vbn pps md * rb vb at nn . rb , ql jj at nn dod dt nn hv in dts nns in at fw wps vbd in at jj nn in ppo , cc in abl at jj nn , to vb ppo rb , bed ppss vbn in dt nn , cs ppss vbd at nn in ppls cs cs pps rb vbd rb at fw ' jj nn in nn . vbg in pp$ jj nn dt jjr nn in at nn ql rb vbn in at nn , at nn in dt jj nn ppss rb vb to vb in vbg nn . in pp$ nn ' fw fw , ppss md vb at nn in wdt ppss rb vbn ppo in np , in at vbg nn in pp$ jj nns , cd nn ' jj nn , vbg in at jj in jj vbn nn in at jj nn . in dts jj nns , at jj nn , np cc jj , bed in at jjr nns in ppo . cc rb at vbg nns ppss rb vbd , cc wdt ber rb vbn in at nn . dti cd nns rb in pp$ od nn at nns wdt ppss bem rb vbg in ppo , nns , at nn in nn , nn . . ( nn cd ( nn in np , bedz vbg in pp$ jj rb , * ql ap nns ' vb rb in at nns in dt jj jj nn . pps bedz rb in at rb in at nn . cd nn in vbg at nns , in in jj nn , pps bedz vbn cs pps vbd ap nn in pp$ nn in jj . ppss vbd at nn in nn hvd vbn ppo , nns . cc at nn , hvg dti jj nn in vbg dt jj jj nn vbd ppo in dts nns . cc rb beg ql vb to vb ppo , cc at nn * beg rb vbn in abn jj , cs , rb , ppss md * vb ppo in vbg at nn cs jj rp cs bedz jj in ql jj nn , at nn rb vbd pp$ nns , at nns vbg in at nns in jj cc jj nns . cc at jj nn vbd . ap nns vbd in , cc * rb bedz at nn cc jj , cc pps rb vbd . ql ql rb , cs rb vbg dti nn , at nn , vbg abn nn , vbd rb in at jjt nn in at nns , rb to hv pp$ nn vbd rp cc vbn . cs at jj nn bedz in ppo , rb , cs at jjt nn vbd , pps dod * in abn nn cs pp$ nn md nn in at nn , cs pp$ nns bed in at jjt , cc beg rb vbn in ppo , dts cd -- cc in cd nns in pp$ md rb vb at nn jj . rb vb cs at nn md vb in ppo . in nn , rb rb at nn in dt nn beg vbn in ql jj nns , at nn in nn hvd abn cc rb vbd in jj nn in pp$ nn in at nn in at ap nn , hvd pps * ben in at jj vbg in np , at nn , at nn , cc at rb vbn nn in vbn , at nn cc nn in np . ( nn . -- in np . vb , wdt bez at nn , cc wrb bez np . ( vbd np jj , vbg in pp$ vbg nn in nn . in at jj nn in pp$ nn np , np . cc in in ppss vb pp$ nn in in md be , ppss md rb vb rbr in abn dt . rb , nns , in nn in nn nns cc cd in jj nns , rb in rb ql jj cc jj cs dti cs rb vbd rp in pp$ jj fw in jj nn . dt nn , in at nn in vbn nn in pp$ np , hvd rb ben jj in abn dts jj . . ( nn cd ( nn nns rb vbn in at jj nn . in in pp$ vbg nn , dts jj jj in nn nns in pp$$ in in np , cc np , cc np , cc jj , cc np , in in vb at nn in jj nn , in ap in at nn ' pp$ jjt nns . in ap in pp$ vbn nns in nns cc in nns . ppss vb rb vbz in jj nn , rb cs at np nns do . in jj nn , ber jj in cd jj vbg nns , cs at jj bez . ppss vb jj jj nns in pp$ jj jj nns in at nr , vbn abn in pp$ nns . rb cc ex ber vbn in in nns , cc in at nn in cs jj nns in jj nn . ppss hv vbn at nn nns in jj nns . in nns , ppss vb pp$ nns in jj nns , wp$ jj vbn nns nn in in pp$ nn nns . in nns cc nns ber vbn in jj cc vbd nns , wrb at jj nns vb cs jj nns in nns in jj nns . dts ap nns vbg jj np nns in nn , cc jj nns wp$ vbn nns vb nns in np nns . ppss vb at vbn nns in np cc np , ql rb cs nn nns . ppss vb rb at jj in vbn nn nn , at vbn nn in at nn , at nn , cc at nn nn . ppss ber vbn in np cc jj nns cs jj cs dti wps vb at vbn nn . ppss vb wdt nns ber , in rp in nn in nn , wql rb , ppss hv vbn ql ap at nn nn in abn pp$ nn nn . rb , nns , cs at jjr , vbn bedz jj in nn vbn , cc jj in nn jj . cs ap in at jj nn cs dti . cc in np , cs in pp$ nn pps md hv vbn ppo rp in at jj np nn , in nn in pp$ jj nn . cs in in nn pps hvd rb vbn pp$ jj jj cc pp$ jj jj . rb bedz pps ql ql jj cc jj in jj nn cs at jj nn , jj in at nns in nn in nn vbn np in nns . rb bedz dt np at nn in dti jj in jj nns . cc dt nn , at nn , wps cs at nn in nn rb , md rb in jj nn , rb vbn in dt jj nn in jj nn wdt bez at jjt nn ' jj nn . rb . . ( nn cd ( vbn , dt vbn hvd rb ben vbn jj cc jj . in abn nns , pps hvd vbn ql rb rb . cc np bedz vbn cc vbn jj , cc vbn in -- cc , nns , ppss md vb . pps bedz * ap cs at nn cc cd in at jjt in vbg pp$ nn in pp$ nn nn , cs at nn in nn ' jj nn vbd rb vbg , cc rb rb cs to vb at nn cc ap in at nns at nn . ppss md vb cs in at vbn cc vbn nn cs pp$ jj , in nn , dti nns vb ap in vbg pp$ jj nn in ppo . cs in at rb , jj nn , md at nn in at nn vb to vb pp$ nn in dt nn , at nn md be cs pps cc pp$ nns md rb rb vb ppo , in nn in abn nns rb nn in at nn . cc in at jj cc jj nns rb in ppo in at rb , nns , bez pps ql jj in nns to vb nn in pp$ nn in nns in jj nn rb in at nn in jj nn . dt bez , cs pps vb in at ql jj nn , cc cs dti ap jj nn bez vbn ppo . pps bez rb wrb at jj nn bez in dti ql rp in at nn nn in dts nns , dti rb jj nn , cs pp$ nn vbz to vb at ql jj . ap dt nn hvd pps ben in at nn in nn . rb wrb pp$ nn bedz vbn vbg rb rbr , ex bedz in nn dti jj nn vbn in ap in pp$ nn . rb in nn at nn . pps vbd at jj nns to be rb vbn , vbn nr rb , cc at nn vbn in at nn . rb dt np , ppss vb , bedz ql ap in at nn , cc ql ql vbn in dti nn in jj nn vbg pp$ jj nn cs dti jj , jj nn in nn cc in nn cs ppss md rb vb , nns . rb wrb pps vbd dt nn in at nn in at nn , dti in at nns vbd cs pps bedz rb in nn in pp$ beg at nn nn in ppo . ql wrb ppss bed vbg dt nn in at nns , ex bedz in dt nn at jj nn rb vbg rp in ppo , cs ppss vbd in pp$ nns rb vbd in at vbg jj nn . jj cs dti nn nn , nns in in cs vbg in . . ( nn cd ( at nns vbd in at nn , cc vbd ppl rp in jj nns in at nn nn in nns . rb , cs ppss rb vb , pps bez * rb at nn in dt jj nn in pp$$ in in jj cc rb . dt wrb at nn vbn in nn in pp$ nn in nns vbz cd in ppo to be ql rb pp$ jj in jj nn in nn , rb in dt nn pps vbz at jj nn cc nn . cc cs pps hv at nn pps md vb rp cc vb dt nn ' jj nn , cc vb at jj nn in nn in ppo . be dt nn in pp$$ cs pps md , nns , in abn nns vbn bedz at jj cc jj nn in at nn cs at jj , cc at vbg jj nn cs at jj nns in pp$ ap jj ' in jj nn . cc at nn , cc at nn , cc at nn in ppo , nns , wdt hvd vbn vbn np , hvd pps ben vbn nn in np ' nn nn . cc np , at nn , bedz jj cs at nn . rb cs jj , ql jj , ql jj . pps dod * vb vbn , cc vbn vbd ppo . vbg at nn vbg rb cs pps bedz jj in at nn in at nn , at nn vbn * to vb ppo , cc vbd , vbd rp in pp$ jj nns . ( np , rb , pp$ jj nns , pps ' vb at jj nn dt . vb at nn , cd in ppo , cc vb ' ppss hv at nn . in at nn , pps ' vb jj vbg . nn vb ppo wdt , nns , jj nn ' jj nn md vb in ppo . pps hvd rbt vbn rb pp$ nn in at nn cc nn ppo nr . at nn bez , nns , cs nn in nn rb vbd at nn . pps ' ppss vb rb rb in at nn in nn in nns , vbd in nn , cc nn in nn , cc wdt * . cc at jj nn in ' ppo ber rb jj in nn vbg cc vbg in at nn . vbg nns , ppss vb . cs jj nn bed rb rb , ppss ' nn vb ppo to vb rb cc nn ' ppo . ppss ' nn vbg at nn in pp$ nn , ppss md vb ppo . cc pps ' vb at jj jj nn , in in nn , cc at nn rb . nns , ppss vb at nn in pp$ nn bez vbn in vbg in nns . nn vb cs pps ' vb vb at jj nn cs ppo at nn in pp$ nn . ( ( vb pp$ nns . wdt ' in dt nn vbg in . ( vbd np , vbg * to hv vbn at nns ' vb . ( nn rb in ppo . ( . . ( nn cd ( ( nn , rb , nn , ( vbd vbn , jj cs at nn . ( rb , nns , jj , rb . ( cc in cs at nn vbd cs cd nn in nns . at nns vbd pp$ nns rp in ppo , cc cs jj cs jj vbg in at nns bedz vbn wdt vbz at jjt nn in nn ' in jjs nns . vbg at nn in ap , in at nn in pp$ nn , at nn vbd rb abn vbg , cc vbd ppl rp in at nn . pp$ nn jj jj , pp$ nns jj , cc vbg at jj nn in pp$ nn . rb wdt jj nn pps bedz , nns , wps vbd np to vb in abl at nn in dt rb vbn nn , ppss vb * . cc cs pps vbd . rb vbg in at nn , at nn vbd ppo to vb at nn cc vb rp at nns , cc rb at nn , cc vb dti jj nns jj in vbg at nn to vb in jj . rb , nns , vbg at nn ' jj nn in nn bez at nn in nn nn wdt in abn nns cc vbg nns bez rb vbn in at nn . pps hvz ben vbn to be vbn in at nn in nns rb vbg in at nn . abl , nns , bez at nn in nn in nns cc at jj nn in nn in nns . dti in wpo md * rb vb in rb vbg pp$ nns . cc in abn nns dt nn nn bez at jj nn in at nns , cs nns rb be rb . rb , pps bedz at jjr nns in at nn in nn wps hvd ben vbn in nns , vbg nns in at nns . cc beg at ql jj nn in ppo abn , vbn hvd ben rb vbn nn in cd in at nns . rb pps md hv ben vbn in dti jj nn * vbn in ql jj nns , jj beg at nn in pp$ nns . nn vb abn dts nns cs cs ppss md vb rb wrb dt nn vbd in at cd nns . cc ex bedz ap cs dt : at nn in at nn bedz ql ql rb vbn to vb cc vb vbn , cs cs np hvd vbd in pp$ nn . dti nn wps hvz vbn nn in at jj in nn md vb dt . cc abn dt cc rb ql rbr , at nn rb vbd wrb at nn vbd pp$ nn . cc cs pps vbd rb in at nn , cc cs pps rb vbd in at nn ' in jj nn cc . . ( nn cd ( vbn at nns in nn in nns vbn rp in ppo cc at jj in nn rb vbg rb in ppo . cs pps rb vbd abn dt , cs jj nn cc nn to vb rp at jjr nn in dti rb jj beg in in at nn ql vbn , wrb vbn in abn , in ql jj nns rb wrb vbn in in dt jj nn nn , nns , vbd rp vbn . rb , in pp$ jj nn , rb at ap vbn in at jj nn pps bedz rb in , pps vbd ppo vbg cs vbg at nn bedz * pp$ nn , cc pps md * do ppo . cc rb , in in abn vbg in at nn , pps vbd in cd nns cs at jj nns . wps , * beg vbn in at nns , hvd vbn jj cc pn abn nn . to dt , np vbd in at nn , in at ap vbg cc jj nn rb vbg pp$ nn . rb vbg in at rb vbn nn , in at vbn jj ' nn nn nn wdt pps hvd vbn in at nn in in . vbn cc vbn cs pps bedz in pp$ jj nn in at nns , in abn pp$ od jj nn in nn at vbg vbn md cc jj nn dt nn in at nn . cc rb rb vbg at nn in ppo , in vbg pps vbd rb vbn in pp$ nn , cs in ap at vbn np vbd at nn in at ap nns in pp$ nn , rb vbg ppo to do pp$ nn . vbn nn , cc rb vbg in at nn , rb vbn in at nn in pp$ vbg nn , rb vbd pp$ nn * to vb . vbg , rb , cs pp$ nn hvd * at jjt nn , in at jj cc jj nn in pp$ vbn nn pps vbd rp at jj cc vbn nn . cc pps bedz in at nn . cc in dt nn at cd vbd rb rb in at nn . wrb , vbn in ap ql rbr to vb , vbg ppo cs pps hvd rb vbn ql rb cs vbd in pp$ nn , at nn vbd in at nns cc rb vbd in at nn : ( cd . np , ppss md * vb ppo . vb dt nn rb , cc vb in ppl . ( cc at jj nn vbg rb rbr in ppo , wrb at nn vbd vbn , rb vbd at . . ( nn cd ( jj nn in at nn in pp$ nns . rb vbg at nn in jj nns . vbg * at od nn in at nn . nn ppo in at nn in at vbg nn in pp$ nn , nn , vbg pp$ jj nn in ppo cc rb vbg ppo rb , vbd pp$ nn cs cs at nn cc vbd pp$ nn pps ( vbn ) md vb ppo . cc , nns , at nn hvd ben vbn in at nn in at nns . rb at nn vbd at nn . at ap nn at jjr nn in at nn bedz nn in pp$ nn . pps vbd in at nn vbg nn cs at jj . cs at nn md vb rb vbn bedz vbg cd in at nns vbg ql rb in wrb cd in pp$ nns bed vbg pp$ nn in nns . ppss bed abx nns . ( np . ( vbd np np , ( ppss hv vbn ap jj in nns in pp$ nns , cc rb vbn in pp$ nns . vb : wps cc wdt ber ppss . ( ( np , np , ber at nns vbg in pp$ jj np nn . ppss md hv vbn in ppo . ( ( np , np . rb in dt jj , jj , ql jj , cc jj nn , ppss vb cc ap in pp$ jj nr . ( ( nn . ql rb , np , vb pp$ nn . pp$ nn ' vbz ql jj . cc cs vbg rbr ppss md vb ppo wdt pp$ nns ber . in jj nn md vb nn in nn in pp$ nn . ( in cd cd cc cd nns , nns , in at jj nn in at nn in jj np . in jj jj nns cc ap vbg nns . in jj , jj , vbn nns , cc jj , vbn nns , vbd in nn . in nn in nn cc nn in nn . in at jj in in in nns in jj nns . in jj nns in jj nns . in nn cc nn . in jj nns cc vbn . in abn at jj vbg nn in dts jj np nns . cc rb , in nns in nn in jj nns , wp$ nns vb rb cs nns , vbz cd jj nn in jj jj cc rb jj nn . ex ' in pp$ jj nn , nns . ex nn pp$ nns . wrb ppss rb vb ppo , ap nn in ppo . in at jj in vbn nn , cc at jj vbg nn in nns . in in dti jj nn , cs pps bez rb vbn in pp$ jj nns . . ( nn cd ( cs ppss rb vb in at nns in nn , cs nns , nns , ql vb in jjt nns . ( bez cs at nn vbg . ( vbd np np , vbg rb in at vbn nn , in jj nn . ( rb in pp$ jj nn , np np ' nn nn nn in np , ( vbd np jj . ( vb , np . ( ( at nn . vb . ( vbd dt in at nn . ( in at nn in abn ppo nps , ppss cc nn to vb in ppo , nn nn , cs ppss hv in at nn vbd pp$ nn in * vbg jj np in jj np in pp$ jj nn . uh . do * vb cc vb vbn . ppss vb at nn abn in dt nn in in nn cs np . ppo cc vbz rp pp$ vbg , rb . nns ql jj cs nn in nns , cc in rb jj in in cc nn cs np . ql , ql , np . ppss hv ben rb . at jj nn in at vbn nn , nn . nn . -- in nn . np , vb ppo . pp$ nn . nns : rb ppss vb . rb , ppss vb rp rb . ( np vbd in pp$ jj nn , nns , at jjr md vb at jj jj nn , ql ql cc ql jj bez pps . cs np np , in nns cc nns in pp$ nn in vbn , nn np , pps rb vbz , rb jj in pp$ jj in vbn np , vbg pp$ nn nn in at jj nn . cc rb , abn dt jj bez vbn . at jj nn wdt at jjr cs rb nns . pp$ jj cc rb in jj nn vbn pp$ jj nns . at nn in at vbg nn in at nns in wdt pps vbz . pp$ jj nn cc jj nn ber * vbd in nns . rb at nn in pp$ jj jj , ppss hv vbn jj nns in cd in dts nns . ppss vb ppo rb . md vb be * jj . cc pps bez rb cd in at jj vbg nns in pp$ nn in nn , cs in nns pps hvz ql jj at nn to vb at jj nn in at nn , cs to vb at jj cd . in nn , nns , wdt at nn in dt jj nn bez , bez rb vbn in dt . cs pp$ jj jj in nn vbz ql ap in pp$ ql vbn nns , cc cs jj dti nn in nn , in np nns , ber ql ql vbn in pp$ vbg nns . cc doz ppo in abn vb at nn in dt nn , cs in ap nns in pp$ . . ( nn cd ( jj nns cc jj nns vbn in pp$ nn , at jj nn in at jj nn vbz at jj nn in rb vbg in at jj nn in nn , cc rb vbg at nns in at ql jj nns . ( ppss vb . nn vb . ( rb vbd np np , vbg pp$ nn in pp$ jj vbz . ( at nn to vb . at nn ' in cd np . nn hvd vbn , rb , cs in pp$ jj jj at nns bed jj cc jj cs at nns . -- in cc at nn . ( ppss vbd rp , nns , wrb at nn vbd at nn in nn . rb hvd pps vbn rb , wrb pps bedz vbn in at cd jj nns cc at cd nns , wps abn vbd ppo in at nn . cc vbg rp at nns cs jj nns , at cd np vbd in at nn , cc vbd to vb pp$ nn rp in ppo in at nn . nns in at nns vbn in ppo in dt nn , cc at vbn nn vbd . cs vbg rp in nn ' jj nn , at jj nn vbd rp cc rp in at jj in nn , vbg in pp$ nns to vb cs jj nn , cc vb ppo rb in at nn in nn . in nns , pps vbd rb rp in at vbg nn in at nn , cc vbg in at nn in ppo in pp$ nn , vbd in nn in at nn in pp$ nn . cc vbn cc pp$ nns bed ql ap in ppo abn . ppss vbd in vbg at nn nn , wrb , rb jj in cd cc cd jj nns in at nn in at nn , dts nn in nps vbd ppls in at nn . ( vb rp in dt , ppss nns . ( vbd at nn , rb vbg ppo in at nn in dt nn , rb vbn in ppo in at nn . ( vb rp in dt , ppss vb in nns . ( np vbd in at nn , cc vbg rp cc rp rb , vbd at jjt at nns md do . cc vbd at nn to vb rb , cs pp$$ ( vbn ' np ) nn md be at nn in at jj nn in at nn in abn nns . vbg in pp$ nn cs dt md vb cc ql jj , at nn at ap jj , cc rb vbd at nns rb to vb in pp$ nn . ( md ppss vb * to vb ppo , cs ppss do . ( vbd pp$ nn . . . ( nn nns ( ( vb to . vb to . -- in ppss vb at nn . in in in pp$ nn . do ppss vb to vb at nn , in vbg rp in at nn cs dt . vb to . ( cc pps rb ql vbn at nn . ( vb at nn . ( vbd vbn . ( np , vb pp$ nn . * at nn in ppo vbz to , cs ppss vb * to vb at nn in nn in ppo . wdt vb ppo , nns . ( vbg in pp$ nns . at jj nn bedz pp$ nn . at nn rb vbd at nn , abn at nn vbg pp$ nn in at nn , cc vbg rp jj nns cs dts : in -- ( pps ' vb * pp$ nn . ppss dod ' nn vb ppo . ppss vbd ppo to vb pp$ nn rb . pps bedz nn ' jj nn . pps md hv vbn ppo cs dt . ppss vbd ppo * to nn at nn . ppss vb ppss hv vbn at nn rb in pp$ vbn nn . vb ' nn dts vbg nns rp in at nn rb , nns . vb in dts nns , pp$ nns . nn , in np , vb in ppl . vb at nn . nn ' nn be at nn . vb ppo abn . ppss ber jj to vb to . vb ppo rb , cc ppss ' nn pp$ nns . cc ppss vbd ' nn be vbd . ( ( vb to . nn vb at nns , vb to , ppss vb . ( ( vb ppo , rb , ( vbd at nn , nn in pp$ nn in ppo . ( ex ber at ap in ppo rb ( cc ppss bem pn in ppo ) wps hv vbn in at nn , nn ' ppss vb . rb cs ppss rb vb , nn , ppss md vb pp$ nn ql rb cs at nn bez rp . cs ppss nn ' nn vb at nn . pps ' vb * pp$ nn . ppss vb to be jj . ppss ber jj to vb , cc ppss vbd ' nn be vbd . ( ( vb to . ( vbd at nn . vbn vbd in ppo at nn , cc rb vbd : in -- ( ppss vb ppo wdt pps bez rb , nn , rb cs vb ppo , cc be vbn in abl at jj nn , ppss vbd ' nn vb at nn in ppo cs ppss vb ppo . cc cs ppss vb at nn in * vbg ppo , ppss vbd ' nn do at nn ' jj nn . ( ( rp in at nn rb , rp in ppo , ppss ' ppss vb ppss rb cs ppss ' nn jj in ppo . rp ppss vb . ( ( md ppss . ( vbd at nn in pp$ nns . rbt in ppo bed in ppo . cc in nn , in nn in vbn , ppss vbd ppo rp in pp$ jj nn , rb vbg , cs vbz in at nn . cs at nn ' in jj nn bedz rb nn in at nns , . . ( nn cd ( at nn cc pp$ nn vbd at nn , cc rb vbg in at nn in at nn , vbd pp$ nn in nns in ppo , cc rb vbn in at nn to vb at jj nn nn , vbg in at nn in nn . rn vbg at nn at ap , at nn vbd pn in at nn , vbd ppo , cc vbd at nn in ppo in in cd in nn in in vbg in nn dti cd cc ap , wps rb rb hvd vbn jj . abn nn at jj in jj nn bedz vbn in abn at nns , rb cc rb , rb in at nn nn cc nn nn . in wdt ap nn pps bedz vbn at nns md vb , in vbg in at nn rb . cc at nns in nn vbn in nn . at nns wps rb vbd in pp$ nn jj rb in at nns , wp$ nn cc vbg in nns in at jj nn rb jj in at nn . in nn at nn vbd rb , cc vbg in at nn , vbd at nns to vb . cc in at nn ppss vbd . nn bedz rb vbn rp in ppo , cc at nn in nns in nn bed vbn in ppo . wrb rb vbg at nn in ppo cc vbg ppo , at nn vbd in at nn in nn . rb at nn in cd nns dt bedz vbn . cc in at od nn at vbn jj , cc rb at vbg bedz vbn , cs at jj nn bedz vbn . cc rb cd nns vbd rp in at nn , vbg ppss bed jj to vb to . at jj nn in at nn , cc at nn nn , vbn rb in dti nns in jj nn , hvd vbn ppo to vb in nn . vbn in dt , at nn vbn pp$ nn in at nn , cc vbn vbd rp in ppo at jj nn to vb pp$ nn cc vb ppl wrb pps vbd . in at od nn cd nns in at nns vbd rp in at nn in at jj nns in dt vbd to vb ppo . ap cd bed vbn . ( rbr vb to , rb . ( vbd at nn in at jj nn . ( vb ppo rp rb , md ppss . ( vbd vbn . ( uh . rb , ( vbd at nn cc at nn vbd . pps bedz in dt nn , nns , wps vbd in at nn . . ( nn cd ( in cd in pp$ ap nns , cc vbd in at vbg nn wps hvd rb vbn ppo , cc vbn in pp$ jj nn in at nn cs jj cs at nns in nn . pps bedz rb cs vbn vbn in at cd nns , rb ql rb in cd nn in ppo , to vb rp in pp$ nn in at ap nn in at nn . cc vbn in pp$ jj vbg nns ( rb , jj , jj nns in at nn in dt nn ) vb at nn in at fw in at jj . cc cs in dti nn in nn jj , vb at nn . in ppl , pps md do dt , pps vbd , cs ppss vbd ppo cc * . wps bedz at ap nn pps md vb in dt nn . cc at nn vbd in at nn in at nn in at ap cd . ppss vbd ppss bed jj in dt , cc in dti ap jj nn , in pn in jj cc at nn . cc wdt bedz ql , ppss dt vbd in beg at od nn in nn , wrb at nn to vb at nn md vb . cc in dt pp$ nn ql rb vbd , vbg dt nn in ppl . rb cs pp$ cd nns md * vb , at cd in at ap , in at nn . cc abx in ppo md * be rb , in at nn md cc vb cd nn in at nn . cc rb , nns , at jj nn in dts nns md vb rp . in vbg at jj nn in pp$ nn , dt in pp$ jj jj nn hvd rb vbn , pps md vb , in at ap nn in nn , rb : to be rb in vbg rp , in nn to be at od in at cd , cs at ap in at cd , to vb . cc rb vb wdt jj nn in nn jj nn md vb . cc wrb np vbd vbn pp$ nn rb to vb ppo in at ap , ppss in dti nn , in dti jj nn in nn , vbn pp$ rb jj nns rb . cc wrb pp$ nn vbd in at vb , rb vbd pp$ nns in dt ap in cd nns . cc vbd at nn in nns , cc vbd ppo in nns . cc vbd rp in at nn in nn . vbg nn in nn , cc vbg in at nn in at nn , pps cc abn pp$ vbn nns cc nns vbd in at nn . in at ap nns at nn bedz vbn , cc , vbn nn cc nn , at rb vbg nn bedz vbd rp in at nn in pp$ jj nns , wps in rb vbd at . . ( nn cd ( nn in vbg at nn wps hvd ben ql jj in nn . cc abn dts bed vbn , cc vbd in at nn cs jj nns . cc , nn in nn , bed vbn rp in at jj nn , cs cd nns in nn , cc rb ppss vbd cs nn . ( vb ppo , ( vbd at nn , vbg to cc rb in ppo , ( at nns md * vb ppo , ppss nns . ( in nn pps vbd abn nns . cc vbg dts wps hvd vbn in dts wps hvd vbn at nn in at nn , pps vbd at ap cs pps hvd at jj nn to vb ppo abn rb -- in nn , in at jj , pps md do rb in -- pps md to in in nn vbd ppo . cc in at jj , vbg pp$ jj nn , pps md vb ppo vb in at nn , wdt pps rb vbn in at nn . ( cc cs in ppo , ppss vb nns , ( vbg in at cd nns in at nn in -- ( in ppo , ppss vb to vb ppo rp in at vb in nns . ( cc , vbg at nn , pps vbd ppo in abn pp$ nn in at nns in at cd nns , cs ppss vbd at ap , cc rb vbd pp$ nns rb , cs at cd vbn nns ber vbn . ( pp$ nn bez vbn in ppo . ( pps vbd , in ap . ( cc ex bez rb nn ap nr in ppo , pp$ jj rb , wps md ' nn vb rp . vb dt nn in pp$ nn , cc vb ppo vb wdt pps md vb in ppl . ( in at nn at vbn nn vbd at jj nn in pp$ vbd nns , cc rb rb vbg in pp$ nn , vbd in at nn in nn , ( wdt ppss vb bez dt in -- cc vb ppo rb in in in cs ppss vb ppo , ppss vb ppo . ( ( vb ppo rb . rn vb wrb ppss vb ppo ( in in cc at nn vbd rp in at nn to vb . ( np * , ( vbd at nn . ( cc ppss md , ( in in cc at nn bedz rb ql vbn rb in at nn . vbn rb vbd rp pn , jj in abn cc at nn . wps , in at nn in abn nns , vbd rb , vbd at nn rb cd cc cd nns , cc rb rb vbg rp pp$ nn , vbd , ( ppss vbd ' nn do ppo in in vb ppo vb in in vb ppo rp : nn ' ppss vb . ( cc cs at jj nns bed vbg to vb at nn , . . ( nn cd ( at jj nn , in at vbn nn , vbd ppo in in np at jjs nn . rb cs at nn , pps hvd vbn in pp$ nn . cc dt nn , vbg at nn in at nn , pps hvd vbn rp , cc rb rb hvd vbn at jj nn . abl bedz at nn in pp$ nn , cs pps md rb vb . cc vbg pn in pp$ beg jj cc jj to do wdt at nn vbd * vb , pps vbd at nn cc vbn in pp$ vbn nn . ( ppss ber at nn . ( vbd at nn . ( cs ppss bem , cc vb dt . ( at nn bedz in at ap nn in jj , wrb dt nn vbd pp$ vbn nn . pps vbd : cc rb vbg at ap , vbn jj pp$ nn , nn in vbn ' np nn , wdt dt md hv ben . at cd nns bed rb vbn rp , abn nns bed vbn to , cc , rb vbn in at jj nns , at nn nns vbd ql rb . rb in jj cs nn , wrb cd nn hvd vbn rb , at nn bedz vbn in at nn . cc at cd vbg nns vbg rp , vbn at nn nn , vbg ppss nn * nn in at nn . np , nns , cc nns md * vb ppo rb , rb in pp$ jj nn ppss bed vbn rp in at nn ' ppss vb in nn . rb , at nn in nn vbd in at nn . in at jj , pps vbd , cs rb in vbn ' np nn , ppss hvd vbn to vb at jjt nn , vb abn nns in at ap , cc , wrb at nn vbd nn , vb ppo in at nn . cc in nn to vb at jjt nn in at nn , ppss abn vbd in dt nn in in rb , * to vb rp in nns , in nn dti md be vbn . in , nn in pp$ nn , cc nn in abn pp$ ap nns , at nn in nn rb vbd pp$ nn in nns , cc pp$ nn bedz rb ql jj to vb in at nn cs nn , cs in at nn pp$ nn rb vbd at vbg nn . cc np at nn bedz ql ql jj to vb pp$ nn in at nn , cc in pp$ vbn nn vb in nn in nn at jj nn in at jj . cc cs at nn hvd vbn at nns to vb dt nn in nn in pp$ nn , pps vbd pp$ jj nn ( in ap cs abn bedz rp ) in pp$ jj jj cc jj nn in at nn wps hvd vbn ppo in at nns . . ( nn cd ( in pp$ nn . pps bedz in np at jjs nn ' jj nn . cc cs cs at vbn nn vbd to vb rbr cs abn nn to vb pp$ nn , cs at nn in at nn , pps vbd , in at jj nn in at nn , in vbg at nn in pp$ nn in nn . in dt , cc cd cc cd ap nns , vbn rb vbn at nn in pp$ nn . in at nn , np hvd at jj nn in vbg in at nns in at nn in nn , cc vbg pp$ nn in at jj in at nn wdt bedz vbn rp rb , at ap in at nn ' jj nn . in dt nn , pps bedz rb vbn , pps rb vbd . ex bedz at jj nn in at nn cc at nn , cc rp in dt bedz at nn . vbn vbn pp$ nn , cc vbd cs pp$ ap nn in at nn md vb rb in cd nn ' nn , in at nn in at od nn in dt in wdt pps hvd ben vbn . in pp$ nn , pps vbd at nn in vbg pn ql rb in pp$ nns rb . ( wdt ber ppss vbg rb . ( vbd at nn . ( wdt do ppss vb . wdt doz pps vb cs . ( ( cs at nn in pp$ nn . cc pps ' vb at jj cd , vbz in ppo . ( ( rb , ql jj , ( vbd at nn , vbg ppo in nn ' jj nn in ppo . ( cc ppss vb pps md vb . nn , ppss nn ' nn ap nns , in in hv ppss dti . ( cc ex bedz pn in at nn . ( rb ppss md vb dti in jj nn . ( cc pps vbd to vb rb . ( ppss nn ' nn vb to vb at nn in ppo . ( vbd at nn . ( wrb * . do ppss vb pps vbd ' nn do ppo at nn , wrb pps ' vb to vb ppl in at nn , nn . ( cc vbg in at nn , pps vbd in ppo rb , cc vbd ppo in dti nns to vb pp$ nn . pps bedz vbn ppo in -- cc nns cc nn bed vbn rb . cc at ap nn at nn nn , rb vbd , rb vbd in at nn in at nn ' jj nn nn , cs pps bedz vbg at nn in pp$ nn in at nn . cd in cd nns in , pp$ nn in at jj nn in in rb in at nn wps bedz jj to vb rp at nn rb jj vbn in at nn ' jj nn in in dt jj nn bedz rb to vb . cc in . . ( nn cd ( at nn in vbg nn in vbn , at nn bedz rb jj cc vbd cs at nn , in pp$ nn vbn in . cc , nns , at nn vbd at md in be nn in at jj nn pps hvd vbn . rb jj nn pps hvd , cc in beg at nn . in in at jj nn , nn ppl vbd to vb rp to vb rp in pp$ nns in pp$ jj at vbg nn pps md hv vbn . pps bedz rb in nn cc nn in at nn in at od nn , wrb ppss bed vbg rp at nns , cs at jj np nn , vbg nn in at jjs in nns , abn in rb vbd rp , ( ex pps vbz . ex pps vbz . ( np , wdt at jj . pps bedz np np . ( np np . ( vbd np jj . ( nn . np . uh nn , cc do nns hv nns . wpo vb ppo np np . ( ( at ql jj , cc jj , cc ql jj jj nn , np . in in cc wps md be ql jj at nn . ( ( wql . wql . ( vbd abn at jj np , vbg . ( np , np , np -- in rb , rb . nn md vb cs rb . vb ppo vb ap in at nn , nns . ( ( at nn . at nn . ( vbd np np . ( pp$ jj nn vbz jj . in in vb rp pp$ jj nn . ( at nn , nns . cd nn , cc ppss vb . -- in rb , nns , ql rb vbg at jj jj in cd nns in at nn in in jj in at nn in at nn in in in at nn in at nn , at np nn hvd rb cc rb vbd pp$ nn in at nn , cs in dti ap nn in ppo hvd ben rb vbd in at cd jj nn in nns . abn bedz rb at jj . ( at jj nn in in at jj nn . ( bedz at nn in nn , nns , cc nns , wps , vbn in jj nns , bed abn jj to vb ql jj cc jj at nn . cs at jj nn vbd rb , cc in nns , at jj nn in at jj jj nn , wps vbd rp in at jj jj nn , vbd cc vbd cs at vbg jj in at jj nn nn . nns , at jj nn vbz at jj nn in dts nns , cs cs rb vbn rp in at nn ppl bedz vbn . at nn bedz at nn in at nn , cc wrb rb in at nn , pps bedz pp$ nn to vb in ppo , cs np vbd . . ( nn cd ( rp in pp$ nn in at nn , cc vb rp cc vb at nn , in at nn in nn . rb , wrb at cd nns bed vbn , at nn ' np vbd at nn . cc pn vbd ql rb in nn cs dod vbn , cs pps vbd in pp$ nn . cs at jj nn , pp$ nn vbd rb , cc , nn in nn , np vbd in at nn . pps bedz rb at jj nn , pps vbz , in at nn . cc rb pp$ vbn nn bedz , in nn ppo in at jj ' in jjs nn . pn jj , pp$ nn vbd ppo rp cc rp , in at vbg nn cs nn cd nns rb . cs in at jj at nn vbd cs in at jj nn , cc vbg rp , vbd rp at vbg nn . dt nn , cs pps vbd in at jj ' in jj nn , at nn jj , cc bedz vbn rb in at jj , cs np bedz vbn rp in at nn , in at ap nn in at jj . pps vbd rp in at nn , cc , in at nn , bedz rb vbn in dt nn , rb vbg to vb ppl in at nn in np np . cc at jj vbn nn in at jj nn . vbd at nn in pp$ nns . cc vbg jj rp in ppo , vbd jj rb , cc vbd rp . nn , in at od nn in at nn ' jj nn , at nn hvd vbn at nn , cs cs to vb jj in at nn . rb vbg rp , pps vbd pp$ jj nns . cc at jj , jj , rb vbg in at nn , rb vbd pp$ nn in at nn . pps vbd ppo . cc at jj bedz jj . cc , in dti nn , np np vbd rb , in dti nns in np ' rb jj jj nn , vbn in at nns wps hvd vbn ppo . abn cd nns vbd nn rb . cc at jj vbd ppo , cc rb rb vbn . in jj nn , at nn in nn vbd pp$ nn in in at jj , jj nn in in wrb at vbn nn vbd . ex , vbn in at nn , abn in cd cc cd in at nn in nns rb vbn in at nns . rb , cs pps vbd rp , vbg at jj jj nn in nn in at nns , cc vbg nn in dti ap nn . at nn ' jj nn beg vbn in cc at nn , at nn vbn in at nns to vb ppo in at jj nn in vbg rp at nn to vb at nn . cc in jj jj nn in pp$ jj nns bedz dt jj . . ( nn cd ( nn in nns vbn , abx in nn cc in nn , cc ql jj bedz at jj nn ppss vbd , cs in at nn beg jj rb in nn , ppss bed in abl at vbn nn cs at nn nn * vb rp in ppo in ql jj at nn . cs vbg nn in pp$ nns , pps vbd at nn ql rb in nn cs jj . vbn cc vbd rp pp$ cd nns in at nns . vbn pp$ nns in at jj . cc vbg at nns * to vb at nn in pp$ nn , vbd cd nn in ppo , cc vbg at nn in pp$ jjt jj in nn , vbd rb in at nn in np , cd cd nns jj , to vb at nn in pp$ nn . in at od nn in at nn , at jj nn bedz vbd , wdt vbd to hv vbn in at jj nn in nns . pps vbd rb in ppo . cc at jj nn vbd rp in ppo . cc rb at nn in vbn vbd ppo in nn in , cc pps md vb ppo in nn . at nn vbd at nn . in cd nn in dt nn in at jj nn in nns , at nn vbd ppo in nn . vbg ppo cs cs at nn ql rb cs vbn in at nn , pps md vb ppo in nns cc nn . ( wdt do ppss vb in ppo . vbd at nn . ( wrb ber ppss vbn . cc in wdt ber ppss vbn . ( vbd vbn . ( at nns . ( ( ppss bem vbn in np in ap nns . ( ( ql jj . vb ppo vb ppo at nn in in ppss vb in nn . ( in wpo pps vbd in at nn , vbd in at nn . cc vbg at jj , vbd nn to vb in at nn . ( nn pp$ nns , nn . vb rb pp$ nn . rb , vb in ppo . ql rb cs vbn vbz ppo , ppss vb in nn dt nn in rb nn , cc vb rb cd nns . cs ppss do * , md nns vb ppo . ( ( at jj nn , ( vbd at nn . ( np , np . ( cc vbg in at nn , pps vbd rb in pp$ nns . vbg at nn cs pps bedz ql vbd , cc vbn rp in at nns in at nn in nn nns , vbn vbn nn rb , cc in jj nn vbd in np , pp$ jj nn in nn . ex , nn vbd ppo . cd nns bed rb to vb in np , cc bed rb in vb in rb dt nn . . ( nn cd ( in nns wdt at nn vbd . ppss vbd . cc rb in rb vbd at nn in pp$ ap nn , hvd pps ben in abn vbn to vb ppo jj nn . dti cd nns in at jj nns vbd , at jj in nn vbd , cc at nn bedz vbn to vb dti in at ql vbn nps , wps hvd ben ql vbn in at nn . vbg at jj jj nn , pps vbd in ppo in pp$ nn . cc vbg abn ql rb , rb vbd pp$ nns . wrb vbn rb bez , nns , pn vb . cc in at nn in np , at nn in np rb vbz in at nn wdt vbz to vb rp pp$ jj . rb in nns vbz at ql jj jj wps vbd ppo . ( ber ppss rp . ( vbd np jj , rb . ( ppss bem , np . ( ( rb ppss vb ppo , vb ppo cs in at jjt in pp$ jj nns , dt nn bez in nn ql jj . pps bez rb vbg jj . dod ppss vb ppo in at jj nn . vb in ppo cs ppss vb to vb . ( ( rb vb in abn in ppo , nn nn . cs ppss abn vb in np jj ' nn nn , ( vbd at nn , in vbg nn . ( bez rb at nn in at jj nns in at jj nn , nns . ( ( np , ( vbd np jj . ( cc ppss vb at jj nn in in , wps md rb vb pn in ppo . nn vb in ppo . cc ber ppss rb vbd . dt md vb ql jj . ( ( md ppss be ql jj cs to vb at nn rb , np . ( ( cs ex ber at nn in nn in np in np rb , ( vbd cd in at nn in dt : ( ppss vb pp$ nn nn vbz nn in at jj . vb ppo vb ql rp in at nn . nn vb at nn in dt . ( ( vb ppo in vbg in ppo , np jj . cc md ppss rb vb cs ppss md be jj in nn at jjt jj nns ppss md . ( ( dt bez at nn , pps vbz ppo at nns , ( vbd np jj , rb , vbg in at jj cc jj nn . ( vb ppo vb pp$ nn . rb , jj nn , ap in at nn , cc vb at jj nn in ppo cs ppss md vb ppo . ( . . ( nn cd ( ( rb vb ppo nn , cc in pp$ nn at nn ppss hv vbn ppo , nns , bez in nn cc pp$ jj nns , jj . nn vb ppo to be jj . pps vbd in dt nn . ppss nn at nn . ppss vbd at nn . ppss hv vbn cc vbn in vbn cs at nn in np . ( . . ( nn nn . ( at jj jj in nn in rb vbg at jj in at nn in nn , rb vbn in nns in vbg at jj np vb . . . ( nn cd ( . . ( nn hv cd nns np nn nn nns nn ( ppss md cs jj nn in ppo ql rb cs pn md in nn , pn cs at jj nn in at jj cs pps rb vbz in at nn in at nn wrb in pp$ jj jj nn at jj bez vbn in at jj in nn cs cs pps md be ql vbn in rb . pps md be jj cs , rb , rb to vb in dts jj jj nns in ppo wdt rb rp in at jj nn rb vb at nn in at nn . pps bez nn to vb at nn nn in dt nn , in vbg jj nns in at jj abn jj . pps md be cs at jj nn in abn dts jj nns md be vbn in at jjt np , jj , cc jj nns . in rb cs dts jj cc jj nns wrb in at nn nns in nns , at nns in nns , cc in nns , nns , nns , cc nns , at nn bedz vbn in nns in nn in nn cs np ' rb , cc at vbn nn cs nn . np ' rb . rb cs rb hvz pn in at ap nn in nn vbd , * rb in ql jj nns in at jj , cc in ap jj nns in ppo . rb , in abn nns , at ql jj jj nn rb vbg to be at jj ' nn , bez to be vbn in at jj nn in nn in np , in np . at nns vb cs in at ql jj nns in dt jj nn , abn at nns cc nns , at jj nn in nn , bed vbn nns in dti in ppo rb vbd in beg . at nn rb , cs in dti nn pp$ jj nn . . ( nn cd ( in vbg md hv ben rb vbn rb . at np jj vbd to , vbz in at jj nn in at nn , vbg at nn in np in at nn in nn , rb vbn cs at np np . cc cs dt nn bez abn nn cc abn jj , ql ql rb to vb at nn in at ap , rb cs jj nn in ppo bez ql jj . pps vbz rbr cs at vbg nn in at nn , cs at jj nns in at jj jj ' in jj nn . cc vb in at jj nns , cc vb rb in at jj jj nn ' jj nn in dt nn . cs pps vbz ql rbr cs at jj np . pps bez np ' nn nn in np vbg np in at nn in nn cc jj . wrb dod np vb at nn in abl at jj nn cs dt . cc doz np , in vbg at ap nn in pp$ jj np in , vb rp cd nn rbr . at jj nn in dt jj nn vbz in at nn , rb vbg cd nn in nn . pps hvz at nn in nn in pp$ nn , cc pp$ jj jj nn in wdt at nns ber vbg , md be vbn in at nns ' nn vbg in at np in nn in at np . rn , ex ber at np vbz in at jj jj nn , cc np ' rb jj , cs vbn in at nns in jj nns cc at nns in jj nns . wdt md be vbn in dts . cs in at nn in nn ' in jj vbg cs at nn in nn in at nn in at vbg nn in in cs vbn cc vbn in at nns cc nn in nns in ap nns abx jj cc jj in in dt bez at ql jj cc ql jj nn , vbn , ppss vb ppo , in at jj nns in jj nns . cs rb vbn at nn , ppss rb vb dt nn in nn ' jj nn at nn in at jj . cs pps bedz ql vbn wrb at nn bedz rb vbn . pps bedz vbn in at jj jj nn rb in at od nn , in at nn in nn . cc in dts nns , cc rb rp in at ql jj nn , nns bed rb vbn to be at nn in at jj . in at nns cc ap nns in dti jj nns ppss md in nns vb in ql jj nns in at jj , wrb abn nn in nns , nns nn ' nn , jj nns cc jj , np cc np in np , vb vbg rp in pp$ . . ( nn cd ( jj nn . in at nn in nn in at jj nn in at nn in nn ppss md vb dti jj nns . cc vbg abn dts jj nns , vb ppo vb in dts nns in fw vbg to be jj , jj nns , in dts wps vb . in jj np ' nn nn in nns ex ber dti nns in nns vbn in at jj nn in nns , at . np . , vbn at vbg nn in nn in at nn nns in at nn , np np in np , nn . in cd in dts nns at nns , cs jj nns in nns , ber vbn vbg in nn in nn , in jj vbz vbg in pp$ vbg nns . in dt nn , at jj nn bez vbn in vbg at jj in jj nn . rn rb , ex bez at vbg rb , vbn in cd nn np , at nn nn in at jj nn , vbn at jj jj nn nn in at jj nns , in at nn in vbg at np nn nns . in dt nn bez at nn vbg to be at nn in at np cc np jj , vbn in nn in cd vbn in at nn in np , np , , cc vbd in nn . nn nn * at nn hvd dt jj nn vbn in at nn in pp$ nns . to vb cc cd nn in ppo , vb ppo vb cs pps hvz at nn wdt vbd , rb in at vbg nn , in at jj vbn nn jj , md vb at nn in dt jj at nn in nn dti cd nns rb . uh , pp$ jj nn , wrb dod ppss * vb ppo np vbg rp in dt nn . cc ber at ql jj nns in jj nn in at nn in at jj cc jj , jj in at ap nn in nn . vb in dt jj nn np ' rb vbn nn . in at vbn np nn in , ex ber nns in at vbn jj cc at jj . nn do * vb to vb nn , cc dt jj jj vbz ap cs at vbn vb . cc , cs in at jj , cd nn in ppo bez qlp to vb cd , cs in dt od nn abl at nn md be vbn in jj in dti jj nn in nns . rn , rb , in , np nn , nn np np , . . ( nn cd ( at jj nn , vbd at jj jj jj nn , wrb ber ap nns in at jj nn in at jj . abn dts ber * rb jj , cc at nn in at nn cc np jj ( dt bez to vb , at ql jj ) , rb np , at jj vbn nn cs vbg dt nn , vbz * to hv pp$ nn in nn . cc at vbg in at nn in nn in abn dt nn nn bedz vbn in at jj np np , nn in at jj np . rp , pps vbd at jj nn in np , in wdt pps vbz wdt pps vbz at nn in at jj nn . cs vbg dt nn in dti np , ppss hvd rbt vb in pp$ nn nn in np . in at nn , np np ' rb jj nn bez * at jj nn , cc at nn . in nn , pps rb hvd at nn in at vbg nn ( jj nns rb hv ) , cc wrb pps vbn dt nn , wps md vb . rb pps vbd ppo cs pp$ jj nn in at ap nn , np , vbd cd in pp$ jj nns . dt bez , in at jj nn . cc wdt nn in jj nns in at nn dts nps ber , ap jj nns cc nns vb ppo . cs in at nn in nns ' vbz vbn in at nns vbg in at nns in nn in nns , wdt md be vbn in ppo . ppss ber rb np np . vbz , in jj nns , cc ql jj . nn in cd cc cd nn vbz , wps bez nns jj in nns : pp$ nns vbg in nns in nn cc jj nn . cc dts jj nns in vbg at jj ber * ql ql jj in abn . vb . rbt in at jj nns hv ben vbn in at vbn nn . cc dts ber rb ql jj cs at nn in at vbn nn , in vbn rb , md rb vb at jj nn ppl in abn pp$ vbn nn in nn cc nns . cs nns hv vbn in pp$ jj in nns , at vbg jj hvz rb cc rb vbd ppl in pp$ nn . at vbg jj , in pp$ jj nn cc nn , bez rb to be vbn in nn in jj nns . cc rb at jj nn in ppo bez rp in nn , cs at vbn nn in in in nn nn . cc rp in dt nn pps bez at nn rb jj in jj nn to vb . . ( nn cd ( ppo rb in at nn , cs cs to vb abn pp$ jj nns cc nns . cc , * to vb in at ql jj nn in nn in at jj vbg jj cc at jj in vbn jj jj . rb , rb in at nn in cd in dts jj vbg nns vbn in at nn ' jj nn , jj bez rb at jj , nn -- cs , vbn , vbg nn in ppo , cs pp$ jj nn at nn ppl md * vb . cc pps md be vbd , cs in at jj nn in at vbn jj , jj nns md be vbn vbg pp$ jj nn . * in abn . cs pps bez cd in at ql jj nns in dt jj , cs pp$ nn vbz ql ap nn in pp$ jj nn . cs np np ' nn nn , wdt vbz in nn in at nn in cd in pp$ nns , rb vbz at nn in at jj in jj jj jj nn , in abn np ' rb ap vbg jj nns . rb pn in dt nn md be vbn in dti nn ' rb vbn nns . in nn , cs at jj nn vbz , at jj nn in at jj vbz at ap nn in at rb vbn cc vbn nn cs at nn doz in at nn cs ql rb nns ppo . dt nn bez rb vbn in at nn , cs in dti nn in dt nn md be rb vbn . pps bez rb ql rb vbn in at nn nn , at nns in wdt ql rb vb in at nns in at jj nn , cc rb at nn . dt nn hvz cd jj nn in nns , at nn , nn , nn , cc ap nn . cc abn dts ber rb vbd in pp$ jj nn , cs at jj nns in at jj nn . wql rb at jj md rb vb ppo , vbd jj np cd nn , pps md rb be rb vbd to vb ppo in nns . in abn dts nns , rb , dti nn ppss md vb in ppo , ppss md vbz vb cs at jj jj bez cs cd nn in at nn wdt md vb jj in at ap . jj , cd nn md vb at nn ql rbr cs dt , cc pn md vb ppo in dti ql jj nn in nn . cs ex bez at jj nn in vbg rp rb wdt at jj rb vbz cs . cc at ap nn in wdt ppss md vb rb at jj nn in pp$ vbg nn , bez in . . ( nn cd ( vbg at vbg ppl . cc in rb vbg , ppss vb at jj nn in beg rb nn cc vbn in ppo . wrb , pps vbz in ppo ppss hvd jjt * be ql jj in pp$ nn vbg dt jj . . . ( nn cd ( . . ( nn fw cd np np np nn nn nns nn , nn np np ( nn np np nn in nn in at jj nns in nns , ppss bem rb vbn rb to vb in dts rb ql jj nns in ppo wdt ber to be vbn in jj nns , abx jj cc jj , rb in np , nps , nn , np , np , np . cc ppss vb dt nn in . nn vb in rb cd vbn nns in at jj nn nn . np ' rb , np ' rb , np np ' rb , cc np ' rb . in at jj nn np cc np hv ben vbn to . np ' rb bez ql jjr cs pp$$ . cc , in jj nns , np ' rb bez at jjt . abn np ' np nns in dt jj ber jj , in at jj nn in at nn in cd nns in jj nns , jj pp$ od nn . pp$$ rb , nns vbg nn np , cs at nn vbn to vb at jj nn in dti nn nns , bez ql jj cc nn -- cs in pp$ jj nn . dti in at jj nn nns in np . np np ber ql jj in nn . cc ppss ber rb vbn . wps bez * pp$ nn cs . in at jj nn , at jjt nn nns ber in np . cc ppss ber vbn in ql jj at nn to vb at jj nn . pps hvz cc cd nn in vbg nns , cc dt bez at jj nn , cs pps bez in jj nns rb , wrb in abn rb vbn , cs ppss md vb pn cs at jj nn in at vbg jj cs vbn in pp$ vbg nns . cc , vbn in abn in abn , in rb at jjt , cs in dti nns * at ql jj , nns in nns cc vbg . . ( nn cd ( nns to be rb vbn , ber cd jj jj nns , rb vbn , cc vbn in nns in cd np . rb , ppss vb nns in at nn cc ql jj . in at od nn at jj nn nn bez vbn in jj nn in nn , rb vbn in at nn in at nns in at nn , cc vbg jj in at nn in pp$ nn at jj nn in at jj nns . at nn in at nn bez ql jj , cc bez vbn rb vbg in at nn ' jj nn . cc vbg in dt nn , in dt cd ap jj nn in nn , ppss vb at nn , abn vbn in at vbn vbg nn in at jj , cc in at nn in vbg , cs cs in at nn . at nn in at jj nn bez ql jj cc jj . at abn in vbn nn in nn vbz in at vbn nn . at jj nns in at vbn nns rb nn in ppo . at nns in at vbg nn ber vbn in at jj in vbg nns in nn . cs in at jj jj nn at nn bez vbg rp in at nn . jj nn md be vbn in at jj nns in dt jj , cc vb dt nn . rb , in at nn in ppo , ppss md * vb ql jj at cd . in at od nn , at nn bez in at nn in vbg in at jj nn in at jj vbg nn nn , wps vbz pp$ jj jj nn in at nn cs dti jj nn in nn in at jj nns . pp$ nns ber jj , jj , cc jj cs nn . rb cs in rb vbg at nn in at nn , ppss md vb ex md be at jj nn vbg in at jj nns rb . nn nns ber nn in at jj nns , nn in nn , cc ap nn nns cc nn , wdt at jj nn rb vbz in pp$ jj nn . cc abn at cs at jj in jj nn bez vbg in at jj , vbg nns in jj jj nns in pp$ nn , cc vbg at jj nn in nn in at nns cs at nn vbd rb at jj in nns in at nn nn . rb , at nn bez abn vbg nn . cc rb , in jj jj nn , bez at jj nn in at nn vbn , at vbg vbn nns in at jj nn , cc at jj nn in at jj jj , at vbn nn , in at nn in nn rb vbg in at jj in nn vbn in pp$ nn in nn . . . ( nn cd ( wps np at nn bez , cc bedz , ppss vb * . cc pp$ nn in ppo pps bedz rb ql jj in pp$ nn , cc rb ql jj in dti vbn nn . at nps ber at nns in vbg nn . vb cc vb in abn at nns in np , cc wrb md ppss vb abl at nn in vbg cc vbg nn in nn , cs in dt jj nn in np . wrb at nn vbz pp$ nn , vb in jj , in at jj jj nns in np . wrb at nn vbz at nn in at jj nns , cc at jj vbn nns cc nns nn in , cs at nn in vbn nns . * ql jj in at nn in dt nn , ber dts nn nn in nns in np . at jj nn in at jj in vbg at nn in nns vbz to be rb vbn in wdt nns cc nns ppss hv in pp$ vbg nns . in * cd od in np ' nn nn in at nn , cc * at od nn in dt in at nps , ppss hv rb vbn abx nns in at rb vbn nns in abn jj in vbg at jj nn in at jj nn . in at ap nn , at jj cc jj jj nns vb ql jj in vbg at jj nn in nns , jj cs at jj nn in at jj . wdt , ql rb cs nn in nn bez vbn , bez rb jj in vbg at nn in at nn . rb np , at ql jj nn nn , in vbg ppo at jj jj nn in at np jj , cc cd cc cd jj nns in nns cc nns , vbz ppo in at nn in jj nns in nn nns , vbg nns , cc nns . cc in at jj nn in at nn vbz in at nn in at vbg nn cd in cd nn in nns in vbn jj nn nns . nn vb at nn in at jj nn ( ppss vb ppo in at nn ) , cc in ql jj at nn pps bedz rb at nn * to hv vbn in at nn at vbn nn vbn in at np nn in at nn . in nn in dts jj nns in np , ex ber cd ap jj nns jj in nn , in dti pn wps vbz ppl nn . nn . pn in ppo , cs * rb . . ( nn cd ( vbn in pp$ jj nn , rb vbz nn in ap nns . pps bez at jj nn in nn in at nn in at jj . at jj jj vbn , rb , in at jj , cc rb vbg nn in nn . at vbn nns in at nn , cc at jj nns in at nns in at nn , abx vbg rb in at jj nn . at nn bez ql jj , wrb vbn in nn in pp$ vbg at jj nns in cd in pp$ ap nns in jj nn . at ap nn bez abl at jj nn : at nn vbd in in in at jj nn , cc in at ap nn in at jj nn , in at jj nn rb . at nn ( in at nn in vbg in in ) vbd rp in at nn cs cs in at jj . cc at nn , rb vbg rp in dt nn in nn , bez rb vbg nn in nns in at nn . at nns cc nns vb vbn in nn . cd nns ber rb vbg at nn in pp$ nn . cs in at jj nn in at nn , at jj nn vbz abn in vb rp in at nn , cs at vbg nn . in at nn , at nn in at nns in at vbg jj bez vbg rp cs at nn in at nn in nns . cc in nn , at jj nn , vbg rp in jj in nns cc nns , vbz to vb at nn in at vbn nns . . . ( nn cd ( . . ( nn np cd nns nn nn nn . nn np . nn nn . nn ( nn in nn . nn np . nn nn . nn np in np in nn , cs ppss vb rp in at np nns , ppss md hv vbn at vbn nn ( cc nn , cs at nns vb ) vbg at vbn nn in ppo , vbg at jj nn in wdt pps vbd pp$ nn . ex ber cd nns cc cd nns . cc cd in at nns ( vbn to vb at vbg nn in abn pp$ jj nn ) bez beg vbd in at nns in at jjs jj . dti nn dts cd nns , ppss vb ppo , hvz dt nn vbd rp dt nn , cc vbd . . ( nn cd ( cs nn in at jj nn . cc at nn in pp$ nn hvz rb vbn . pp$ cd nns ber ql jj nns cs bed rb vbn in vbg , in dti nn . cc pp$ nn cs jj at nn cs dti ppss md vb in at jj nns . cc , cs in rb vbn in dt nn , rb at nn in nn doz at jj nn vb . cc , in jj nns , vbz rb vbg pp$ jj nn . in at jj , cc rb in np , cc jj np , cc vb nn , ppss md vb in jj nns in nns cc vbg in nns , jj in at nns ppls in jj nn in nns , cc nns ' nns vbd rp in at jj nn in nn , cc ap cs nn nns , cs at nns vb at jj jj jj nns ppss rb vb rp in at jj nn , in pp$ nns in nn nn . dti in ppo hv ap nns in jj in vbg nns , rb vbn in at nn nn . cc , in jj , ppss nn in pp$ nn in nns rb . cc , in dt ql jj nn in at nn , ppss md vb ppo rp pn ppss vb , in at nn in at nn ' jj nn . jj nn in np cc nn rb nns at nn in dt nn in wdt np vbd ppo , nn . nn . wdt bez vbn nn . pp$ jj jj in nn bez ql ap at jj cs at np . nn ppl bem at jj . vbg at nn cc in at nn in at np . cc jj in dti nn to vb in ppo . rb , cd in at jj nns in at jj in pp$ jj nns , bez pp$ jj nn in nn . at jj jj nn in nn cc nn in jj , in pp$ jj nn cc nn in vbg , bez ql jj at nn in jj nn cs at jj nn . in , in cc at nn in vbn nn in nn cc at jj ' nn nn , cs jj nn in jj nn in nn hvz ben vbn . cc pps hvz vbn jj nns in jj nn . cs in at jj jj , rb in at jj nn in jj . in at ap jj nn , cc in at ap ap jj ' nn nn , in pp$ cd jj nn in nn , pps md vb ppo at nn in nn nn , * ql ql jj , cc ql rb . . ( nn cd ( vbn in pp$ nn in nn , cs at jj jj , np ' nn nn . cc jj in jj nn cc nn , cs at nns in dt jj jj jj jj , np np . jj nns , cc vbz vbn in nn rp in at jj jj nns in at jj jj nn nn in nn , ber rb vbn in in at nns in jj nns . dti in ppo ber vbn in ap nn . in dti jj nn in vbn nn nns ppss md vb nn nns vbd in at nn in nns in at nn in nn nn . wrb at nn bez jj , at nn in vbn jj md be jjt . cc dts vbg nns ber rb jj cs jj nns . in at nns in dti jj in vbn nns ppss md vb nn in nn vbz vbn rb in nn in nn . cc ppss ber ql vbn , cc rb cs ber in abn nns cc nns ql vbn in nns rp . ppss md vb ppo rb qlp to vb in pp$ nn . in jj , jj nns in at nn , wrb in at nn in jj vbn nns nns in nn vb vbn in jj nns in at jj , ppss md rb vb nns cs in at vbn nns in at jj rb vbn in nn , wdt in at jj nn vbz in ppo in at nn in jj nns . rn , rb , in jj nns wrb at nn bez rb vbn in jj nns . rb cc rb in dti jj nn in nn ppss md vb vbg nns in at nns in nns vbn in at vbg nns . cc ppss md be at jj nn , to vb dts nns . cc * rb cs , cc cs ppss vb to vb in abl at nn rb , ppss md be jj cc vb at jj vbg nn cc nn in pp$ od nn in nn , rb cs nn -- cs ber jj nns in at nns , cs pp$ jj , jj nn in nn md vb at jj nn in nn . cs at np nns , wdt rb vb nn , cs rb jj in jj vb nn ppo cc jj nn vbn ppo . cc wrb rb vbn in pp$ nn , md ppss vb to vb rp jj nns in at vb nns , cc nns in nn in ppo . cs wrb rb vbn in nns in nn at jj nns vbd nns vbn in nn in at nns . rb in at nr hv ppss vbn jj nn cc nn . . ( nn cd ( at nn in at nns in at jj nns wps rb vbn ppo in ppo . cc in at jj np nns ppss hv vbn at nn in np , cc vbd at nn in at vb np rb in at jjs nn in np cc at vbg nn . in at vb ' np nns in pp$ nn in nn cc vbz in nns in nns , md ppss md vb cs jj cc vb at jjs nns , to vb cs at jj nns in abn pp$ jj nns rb vb vbn in pp$ jj nn . . . ( nn cd ( . . ( nn np cd nn ( vbg nr in rb in at np , ppss vbd rp in jj nns in nn , at nn , jj nn , in wdt at jj nn rb vbz . in nns cc nns pps vbd in ppo , cs cs ppss vbd to be vbg in jj nns in jj cc jj nn . in at od nn , nns in jj nns bed vbn , wps , vb in at nn in at jj nn cs at fw , in jj nns rb vbd in at nn , wdt , vbg in at nn rb in dt jj jj nn in pp$ nns , bedz in dt nn vbn in at nn wps vbd in at nn . cs nn vbz , wps nn in nn rb cc rb vb pp$ nns in at jj jj nn in jj nns . rb cs dts nns vbd , vbg at jj , jj , vbg nn . cc vbg in ppo jj nns in jj in at jj nn . . . ( nn cd ( cc pps bedz rb at nn ppss vbd cs ppss vbd at nn wdt in abn vbd cd in nns . vbn in at nn in nns , rb wrb ppss vbd cc bed jj in at nn , pp$ jj jj nns vbd rbr cs jj nns in nn cs pn rb . cc cs in at jj vbg nns in np , at nn in at nn md rb vb in at nns jj nns in vbg ppo to be jj , vbg ppo in jj , vbn nns in at nn . rb rb , rb , in ppo , wps in at od nn vbz dt nn in at nns in at nn . cc rb wrb vbd in ap , pp$ jj nn vbz ppo ql rb rb to vb cs jj jj nns in nn md rb be nn , in abn nns , in at ap nn in nn wps vbz in at nn cc at nn . qlp , in ap nns , ppss md rb vb dti nns in at jj in at ap nns cs ppss do dts in at nn . in cs dti jj nns hv vbn cs abn nns in at nn ber in pp$ nn in at nn . cc cs vbg at jj jj nn in at nn , dt md ql rb be . rb vbg in nns , wrb , in nn , doz at nn vb dti nn cs in nn nns in at jj nn in at nn . at vbn jj rb md in dti nn nn be vbn to vb jj nn in ppo . cc cs , in nns in jj , at jj nns in at nns hv rb ben vbn in nns rb jj cc jj . cs ppss vb at nn to be at jj fw nn , cs cs np vbd rp jj jj nns to vb pp$ cd jj jj cd . cs , in jj nns , at ql jj in abn jj nns hv rb cc rb jj nns cc nns in nns in dts wps hv vbn in at nns . cs cc at nn ' jj nn md vb , cs rb nn nn md vb in pp$ nn cc nn , cc wql ap , in at vbg nn , cs nn cc nn md vb . rb in rb cc in rb , in at nn in nn , at nn md vb cc vb ppo , cc vb at jjt , vb vb pps md vb . rb , in at jj nn in dts . . ( nn cd ( ap nns , nn hvz vbn dt nn in at jj nn in at nn wdt rb vbz in ppo . at od nn ppss vb in , vbd in at nn , cs in jj nn hvd vbn at jj nn in vbg ql ap cs at nn . wpo ap nn nns rb . cs ap nn vbd at vbn nns in ap nn . rb , jj nns , np ' nn nn bez * rb vbn . cd nns in at jj nn pps rb vbz . wrb vb at nn cc at nn , cs at nn in cd bez * at nn in at ap . jj nns vbd in at nps , wrb in at nns in np cc pp$ nn at jj nn vbd cc vbd ppo rp in rb . rb * at jj nn rb vbz , cc in rb at ap nn at jj nn nns in nns cc nns . cc * rb bez at nn abl at nn in nn wps bez at jj in ppo , cc pps bez rb at nn in pp$ jj nn . jjr cs at jj nn wps vbn pp$ jj nns . vbg * at nns wdt ppl hvz vbn . cs at jj nn cs vbg in at nn vbz pp$ jj nns , cs at nn vbz rb at jjt nns in at nns , cc vbz ppo rb nn in nn in at vbn nns in nns . at nn , at nn cc pp$ jj nns ppo . vbg cc jj cs at jj nn nn wps hvz vbn pp$ nn , at jj nn vbz at nn . vb at nn in at nn . wrb pp$ ql vbn nns vb in nn , jj in at ap nn , cc rb vbn in at jjt nns in nn . vb rb at jj nn cc nn in ap in pp$ ql jj nns , cs at jj vbn nn in ap nns in nns . vb , rb rbr , at jj nn in at nn . abn wp$ nns nn in dt ap , vbg in jj nn in at nn vbd . vb abn dt . cc rb vb in dt nn , jj , cc ql jj nn . vb ppo abx , at nn cc at nn . cc do ppss * vb at jj nn in pn in ppl . in cs dt jj nn nns at jj nn , rb in at nn in nn rb vbz cd jj np , jj in nn cc nn , cc vbn in abn at nns in at ql vbn nn . . . ( nn cd ( np vb ppo . vb * rp in dt nn , ppss vb rb vb . . . ( nn nn . ( dt nn in at nn vbn in nns cs at np np doz * vb dt nn cs at nns in np do , rb in ex beg nn cc nns rb , cc rb in dt jj nn in jj nn , vbn in at jj nns in nn rb vbg in dts nns , wrb at jj nn bez rb vbn . . . ( nn cd ( . . ( nn cd cd nn ( rb nn in at nns in nn , at fw rb vbn in pp$ nn nr in rb in at nn in np . at jj nn vbg pp$ nn , cs cs in at vbg nn pp$ cd jj vbg nns rb vbd in dt jj nn , cs cd jj nns in at jj . cc rb , in jj nns in at jj nn , at jj , vbg nn md be vbn . cc cd jj jj nn , wrb at nn ql jj nn in at nn , wql jj in dti jj nn . wrb at jj vbn nn in nn in at nns vbd at jj nn vbn in ppo , vbg dti nn . wrb at jj nns vbd rb cs ppss rb vbd rp . in dt jj nn in at jj nn at jj nn bedz vbn in nn in at jjs in nn in nn . in at nn , at jj jj nn rb vbd , cc vbg jjr cc jjr , cc jj ppl in at nn , in ap vbd cs pp$ nn cs at nn in nn , jj vbd in at nns . rb vbg in at nn , cs rb pps vbd , cc vbd . rn cs ap vbd , cc rb vbd . pps vbd * at jj . cc rb bez dt np np . vbd nn . rb at nn vbd rp , cc in nn in vbg rb rbr , in at nn in jj nn wps vbd at nn in pp$ nn , at jj vbd rp in in rb . ex rb . ex pps vbz . ql rb . at jj nn , at jj nn . in dt , at nns vbd in at nn in nns , cs in vbg in nn at nns nn in at nns . jj in vbn in at jj nn , np vbd in at fw , cc in cd nn vbd rb in in nn to vb pp$ nns in at nn , nn . . ( nn nns ( pp$ jj nn in at nn vbd rb in at jj jj nn in nn . cs at vbg nn in at cd rb cc jj nn hvd rb vbn in np , cs cs pps bedz rb vbn to vb at nns in nn cc nn in at od nn in at jj jj pps vbd . wrb dt bedz , cc cs pp$ nn vbd ppo . wdt nn pps md hv ben , ql rbr dod pps rb vb at jj nn , cs in at jj nn pps rb vbd nns in vbg . at cd nns bed rb in at nn . np ' rb in nn , cc abn rb vbg in pp$ nn . rb pps vbd rp , cc cs , in vbz vbn , ppss bed vbg pp$ nn , uh . in at ap nn wrb pps vbd , rb rbr pps rb vbd . ql vbg in at nn abn nns in np np , ppss rb vbd in at ql jj nn wdt at jj nns hv rb vbn in nn . at jj nn nn , nns in nn cc nn , in at vbg nn in nn , vbd vbg in at nn , jj jj nns vbg in pp$ nn , cc vbg cc vbg cs at nn in nns , cs cs rb to vb in dti jj nn in nn . ql jj nn cc nn dod pps hv . at jj nn in dtx nn cc nn . cc vbd rb in at nns , at jj , jj , nn in jj nn in nn . cs in at jj vbg nn pps rb vbd rb , np rb vbg in at vbn nns wrb pps hvd vbn , in at jj nn vbd in in ql rb hvd ppss vbn np np cc vbd ppo , cs to hv vbn ppo , ppss jj nn . wdt bedz pps , np . vbd nn . at jj vb jj , wdt ppss vb , ap jj in nns rb vbd , cc vbd in pp$ nns to vb in ppo . cc np vbd pn . vbg pp$ nn , pps vbd rb in at nn . at nn ql rb vbg . wdt nns at nn nns in jj hv vbn in at nn in dt nn , jj pps bez , cs at nn in ppo beg ql ql jj , cs nn hvz vbn rb to vb ppo in nn . ql rb bez pps vbd , cs cs cd cc abn in ppo vb ppo to be at jjt vbn nn in at nn , rb ql ap in ppo hv dti cc . . ( nn cd ( at ql jj nns in pp$ jj nn cc nn . rb , ppss vb ppo to vb in at nn jj pp$ ap nn . in cs ap nns in nns vb pp$ nn in nn , cc md be vbn in nn in at nn in vbg , at nns jj vbz pp$ jj nn in jj nns in at nn . cc rb in nn bez pps cs dti pn md vb in wdt , rb , cs nn vbz . in nns , wrb rb vbn , pps md nn wdt ber vbn to be at vbn nns in at jj . dti in ppo rb vbd vbg cd cc cd nns in nn . ppss vb cs at nn in wdt dts nns vbd rb vbz in ppo in at nn in at nn . cc cs at nn jj , in ap nns , bez vbn in nns in nn to vb cc vb ppo . ex vbz dti nn to vb cs at jj vbn in np np md rb vb ppl in nn . at nn in wdt at nn vbz ppo , cs rb vbg cc vbg , in dti ap nns pps vbz , in abn dt at cd vb . cc ap nn bez jj in nn in at jj nn pps vbz ppo . in dti nns wps hv rb vbn nns in at jj nn , rb vbn in , pps bez vbn in at nn in nn in nn , in wdt , rb , in ap jj nns pps md vb to vb , cc rb cs at np in at nn . . . ( nn cd ( . . ( nn cd cd np nn ( in nn in at vbg nn rb to be vbn , cs rb cs in at jjr nn in abn jj nns rb vbn , ppss hv rb to vb in at jj , rb jj jj in nn . at nn rb vbn in at nn bedz in at jjt jj , rb vbd in nn , * jj in ppo , cs in at . . ( nn cd ( nn in jj nns . in nn nn , cs rb vbn , vbz at jj ql jj in at nn in nn , cc rb vbz at nn ppl ql jj in at nn in jj nn nn . rb , * rb md at jj nn ql rb vb at jj in nn in at jj vbg in wdt pps md be vbn . cc cs ap nns ber vbg to vb , nn in jj in at nn vbz in at nn ' jj nn cc nn , wql rb pps md vb ppo nn cc nn . in jj nns at nn nn hvz in at jj nn ql rb vbn jj cs at nn in jj in nns . in , cs * ql jj cs jj , pps bez jjr , cc rb ql jj cc jj . cc ppss md vb ( cs ex bez at nn in abn nns ) , bez ql ql jj cc vbg in at nn , cs jj . np bez at jj , jj nn , at nn in np . cc nn bez cs at jj in jj jj to vb . at jj nn bez rb cd nns in at nn in nn . in od nn , ppss md * vb ppo ql jj cs pps rb bez . in nn pp$ cd cc cd nns md dt vb at nn in cd cd cc cd nns . rb cs at jj nn md vb at nn ql jj in cd nns . in nn , at jj nn jj in nn nns pn in cd cd nns . in at nn in at nn pps bez rb vbd rb in at nn , * cs at nn in nn in at rb cs , cc rb cs to vb pn rb , nn in vbn nn in rb vbn vbz , cc nns in jj nns , in dti jj cc at nn , cc jj jj nn vbn in at nn in at nn . cs at ap nn cc jj in at vbg md , in vbg rp , rb vb pn ' nn nn , nn , cc jj nn rp , at jjs nn bez vbn in nn at nn in pp$ nn . dti nns md vb rb at jj nn in dt nn , vbg at nn jj rb cc rb jj pps rb in at nn in at nn , cs cs in at nn in vbg to vb ppo in abn jj nns cc nns . in at jj nns cd nns ber vbn rb in cd . at ap nn beg rb vbd in abx nns . ex bez dti nn in dt . cs dts nn in nns beg ql jj ppss vb ql rb in at nn , cc do * vb ppo ql rb . cs , at jj nn , rb cd nns in nn cc . . ( nn cd ( in jj nn , vbz at ql jj nn in at nn wp$ nns ber cc cd abn in nn in nn . in at nn in at jj in nn bez cs jj nn , wdt md vb rp at jj vbn nn , cc * ql ap in at vbn cd . wrb at vbn nn nn bez vbd in at jj nn in nn , at nn vbz cs cs pps bed vbg rp in at jj jj nn in nn to vb in at nns . abx nns in at nn ber vbn . at jjr nn vbg in at nn in nn cc nn vbg rp in at nn in at nn in at nn , cc vbg rp pp$ nn ql jj in pn . dt nn in at jjr nn bez jj in cd nns . od : in nn to vb at nn in ppo in at jj nn in at vbg nn , in nn at vbn jj md vb ql jj cs to vb to vb rp at jj nn rb vbn in at nn . in dts nns , at jj in nn bez vbn cs at nn in nn , cs pps bed , in at cd nn in at ap . cs at od nn rb vbz in nn to vb pp$ nn . od : dt nn bez jj in jj nn ' jj nn . in bed at jjr nn in at nn in dti nn vbn in at nn , cc bed at jj rb to vb at nn rp in at nn rb in at ap , vbg nn cs pps rb doz , pps md * vb rb , in at vbn nn md rb be vbn rp in ppo in at nn in at nn . cc in dt nn at nn in nn md rb vb ppo rb . cs vbg at nn in at nn , at jj nn in at nn bez vbn rb in at nn , cc vbg in at nn in nn rb , bez rb vbn rb at jj nn in at nn , vbg rb in at nn cc nn in at nn ' jj nn , cs cs pps vbz in pp$ nn in nn . cc rb vbg in at nns , cs ppss rb vb in at jj nns , in at jj nns cc nns in at jj vbn nn in at nn , wrb at jj nn cc nn at nn in at jj nn , vbz ppo in vbg rp . in at nns pps vbz in at jj nn in at nns , cc bez rb vbn in at nn rb . cc dti cd cc cd nns ( vbn nn in nn ) beg vbd in at nn in at nns , pps vbz pp$ nn in at jj rb at ql rbr rb , cc bez rb . . ( nn cd ( vbn in at jj in nn in in at nn wdt bez rb vbn in at nn . cc jj in dt nn , at jj in nn vbz in jj nns ql jj in nn . rb at jj in nn nns at jj nn in pp$ vbn nns , vbg cc vbg in ppo in rb at nn . abn at nns ber vbn in pp$ jj nns . rb cs in at jj nn in at nn , ppss vb cs jj nns , in at jjt nns rb vbg pp$ nns . cc md dti nn in jj nn , in at od nn , nn ppl in dts vb nns , cc cs vbg pp$ nn in at nn , vb ppo cs in dti jj nn at nn md be vbd , cc abn dts jj nns be vbn in nn cs vbn nns . pps md be rb vbn in at vb wps vbz at ap nn in pp$ nns to vb in ppo cs at vbn nn . rb nn in in jj nn . wdt md nn vb . -- in np nns , ql jj nn , jjr nns , cc jjr nns , ppss rb vbd rp pp$ nn , cs ppss md vb rp at abn in nn jj nns in at jj in nn , wrb rb vbn in nn ' rb vbz . cc , cs at cd nns in np in np np , at cd nns vbg at nn nn in at nns in nn , in at nn in at nn , cs ppss md vb . rb at ql jj nn md rb vb ppo to vb in dts vbn vbg nns in in dti ap in wdt ber rb vbn in in in dt nn cc dt nn beg vbn rp in at nn in at nn , cc vbn . in , wrb at nn bez vbg rp , to be vbn rb in at nn , bez cs beg vbn in at nn in at nn vbz in at nn in nn in jj nn , wrb at vbg nn , cc nn , cc nn , bez vbg ppo . pps bez jjr . cs ppss md vb jj in at nn in dts nns , cs at nn bez vbg cs at nn , cc ppss ber vbn cd nn cc at ap , in at jjt nn . cc rb in at jj nn in vbg nn cc nn in nn cc nn , md ppss vb beg vbn at nn in , cc vb rb in wrb at abn in vbg nn ppl md rb jj ppo rp . rb : cs at jj nn wdt rb rb vbz . . ( nn cd ( cc vbz in at nn , bez rb ql jj cs at nn ppl . in , rb , at nn bez cc at nn cc nn in at nn . cc vbz ppo in ppl , cs at ql jj nn vbz at jj nn , cc at nn , cc at nn . cs at jj nn in at nn , cs pps rb nns in at nns in beg vbn in jj nn in in dt bez at nn wdt vbz ap in jj nn cs dti ap nn in dt jj nn . cc wrb vb rbr . abn nns vb jj in jj in nns . abn ber vbn in vbz in pp$ nns . cc pps bez rb wrb vbn in at jj , jj nn in nn , cs nns vb at jj , jj , rb in jj nns in nn . cc cs ppss be at nn , cs vbn in at jj in nn , ppss md * in nn vb cd nn ap in nn , cs cs vbn in pp$ nn nn in at nn , cc * at nn , in pp$ nn . . . ( nn cd ( . . ( nn in cd np np np np ( cs in np at nn in at nn bedz at nn in nns , in np pps bedz abl at jj nn . wrb ppss vb ppo ' jj , vbd at jj , vbg pp$ vb in at nn in pp$ vbn nn , rb ppss rb vb ppo ' vb jj . at ap nn bedz ql rb cc jj , cc in pn jj to vb ppo , at fw ' jj nn md rb vb at nn in nn vbn in abl at jj nn . in dt nn in at jj nn in wdt ppss rb bed jj bez * wdt nns vb at jj nn . dt bez , pps vbz ap nns in nns , nns , vbg in nn , cc ap jj nns in ap vbg nns , cs dts in at np fw fw np , cc at in in nn nn in np . pps bedz pp$ nn to vb in at nn in nn . cc in pp$ nns vbg in at vbn jj jj , in cc . . ( nn cd ( rb ppss rb vbd in wdt vbd at vbn nn . at nn md vb ppo . in dt jj nn vbg abn nn , in ap pp$ nn vbd rp in pp$ nn . cs pp$ nn rb vbd to vb cs at nn md , rb in at nn wdt rb vbd pps bez vbn . cs nn rb vbd in ppo , ppss hvd vbn cs at nns in at jjs cc jj nn in nns bed rb jj . ql cs in ap abn cd in ppo rb vbd in at nns , cc in at nn cs ppss vbd ex bedz at nn in rb in at vbg nn . at nns , rb , vbd pp$ jj nns . cc in at jj nn in at nn , nr vbd in nr , cc at nn in abn . rb nns vbd vbg in pp$ vbn nns . cs nns pp$ nns vbd at jj . dti jj , jj nn vbd ppo . in at nn ppss vbd rb in nn . cc uh . rb in pp$ nn , * cd nns rp , at jj nn nn vbd vbg in at nn cs at jj nn in at vb , pp$ jj , jj nn , in at jj nn , vbg in at nn ' np nns cs at nn . cc rb vbg in at nn in at nn , cc rb cc nn rb vbg pp$ jj nn , at jj vbd cs at jj jjr vbg pp$ nn in at jj nn . cc dt nn , jj jj , bedz pp$ ap . cs cs vbn in dti nn ' jj nn , at jj nn cc at nn in ppo abn in rb vbn in nn . cc ap cs at nn in nns in abn nns in at nn , rb in at cd nns in rb , vbd rb at vbn nn , cs at jj nn rb cc rb vbd at jj jj in at nn . jj rb at nns . jj . vbd np . cc vbg pp$ jj nn , pps vbd at nn rp in at nn md vb at nns . at jj nns in at nn md hv vbn at jj . cc cs at nns bed rp , ql vbg , pps vbd rb in at nn , cc in abl at jj nn , cc vbg ql ap nns cs pps vbd , cs vbg in abn pps md * ql rb be vbn , np vbd nns cs * at nn md be vbn , cc at nn md vb cc in nns . ql vbn cs np nps in at nns in at nns , . . ( nn cd ( ppss rb cc rb vbn rb . at jj * vbg in at jj nns beg vbn . rb , cs ppss rb vbd in nn , at nn rb vbd pp$ nn cd nns in at nn , cc rb vbd rp in nn cs at nn vbd rp . ex vb nn . bedz at nn , at nn rb vbn in np ' rb vbg pp$ nn cc nn pp$ nn , in rb at nn bedz vbn . cs at jj nn in pp$ vbg hvd vbn , at jj nn rb , cc beg rb in nn in at nn ' jj nn , cc ql rbr in ppo cs in dti in at nns , np vbd in at nn in at nn . pps bedz jj , rb , cs at jj hvd in nn vb jj in pp$ nns . abn nn in nn bedz rb ql rbr in nn . nps bed vbn , cc vbz vbd rb in nn . cc rb vbg in pp$ nn , np vbd in pp$ nn in at nn . rb , at jj nn hvd vbn in at nn . abn jj in pp$ nn , pps bedz vbg nn rp . dt nn rb vbg in at jj nn wdt pps vbn . vb ppo , vb ppo , pp$ nns . nn ' nn vb ppls . vb nn in nn in -- cc vb ppo . vb ppo cs nn in nns , cs ' vb abn , vbd np , vbg rp at nn cs pps vbd . vb ppo , rb . vb ' ppo at jj cc jj nn , vb . vb ppo , nn , pp$ nn in in vb ppo , abn . cc vb jj , vb jj in in nns bez at nn in in jj , jj in in rb vb ppo cs jj nn cc vbg nns , cc vb at vbn jj jj rp in pp$ nns , nns in in dt ' np abn . vb ppo . vb in nn . nps in nn . vbd at np in np in nn , vbg dti jj nn in nn in at nns . cs at nn in at vbn nn rb vbd rb in at cd jj vbg nn wdt at jj np vbd . . . ( nn cd ( cc pp$ jj nns bed vbn in nns ql ql jj . np in nn . np in nn . vbd nn , vbg rb cc rb in pp$ nn , cs at vbg nn in pp$ nn . nps in fw . nn in vb . vbd np , cs cs jj pp$ nns in at nn in nn ' jj nn . cc rb in vbz cc vbz at nns vb at nn . rb , np vbg pp$ nn in at nn , rb vbn pp$ nns in at nn , abn at nn vbg at nn in pp$ nn . cs nns ppss vbd cc ppss vbd , cs at jj nn bedz vbn in in vb rp , np . -- in vb ppo in ppo . at nn bedz vbn . jj abn . at nns vbd nn . at ap nn pn vbd jj cc vbg in at cd in pp$ nns . pps bedz at jj nn . at nn rb , np hvd rb vbn cd jj nns in ppo in at nn , wrb , in nn in pp$ vbn jj vbz , at vb jj nn rb vbd rp cc vbd in at jj nns in pp$ nn . cs at nn vbd rb cc rb at nn . ql rb , rb cs vbg dt nn , pps rb vbd rp cc in abx in np ' np nns , in wdt at nn in nns , cc nns in vbn nn rb vbn in dts nns , hvd rb vbn . pps bedz cs vbg at nn ' in jj cd in vbd nn in at nn , cc dt nn abn at nn vbg to vb ppo rp in pp$ nn . jj at nn . jj at nn . vbd vb in at nn nn ( ppo vbn in at nn ) wps , vbg rp pp$ nn , vbd at nn in nn in ppo . ap nns bed vbn , cs cs at nn vbd vbg pp$ nn . at nn rb vbd in at vbg nn cs at jj abn nns . np cc np rb vbn nns in in nn in nn in in at jj nn rb in dt nn nn . in at vbg nn vbg at jj nn in at jj nn in at nn , cc in pp$ rb beg ql jj cs at nn , ppss md hv vbn at nn hvd cd nns in in cd nn at nn , at ap at nn in in cs at nn vbd . . ( nn cd ( rp in abx vbg nns in rb . at jj vb vbn in at nns . at jj vbg nn in pp$ nn . cc , in at jjt nn in in , rb cc in at jj nn , at vbg , vbg nn vbn in pp$ jj jj in at nn . rb ppss vbd . dt nn in nn cc jjs vbg in pp$ nn , to vb beg vbn in at nn . cc at jj nn in np in at vbg nn vbg ql jj , in nn to vb rp pp$ nn in nn . jj nn cc nn vbd vbn cs ppss vbd in pp$ nn , cs in nn at jj rb vbd pp$ nn . vb rp in in nn in . vbd np in at nn . cc , vbg rb in at jj , abn nns vbd vbg at nn rp in ppo , cs rb at nn bedz beg vbd in . rb vbg rp in pp$ nn , np , rb vbg pp$ nn in at jj nn , vbd nn in nn in at vbg nn . in at nn in nn , at nn rb vbg rp in at nn in at jj ' in jj vb , cc rb vbg rp in dt vb . at jj nn rb vbd in abn nns in at nn cs nns in at nn . pp$ vbn nn vbd * in jj cc in nn , wdt vbd cc vbd in nns in in pp$ nn . at vbg nn vbg in dt jj nn in at nn , vbd rb pp$ nn in at nn , cs cs ppss abn vbd in dt ap cs jj nns . cc abn at nn , nn in nn in jj nn bedz rb vbn in at nn in at jj , cc jj vb in vb in at nn in at vbn nn . cs in at nn , vbg rp in pp$ jj nn ( in at nn vbn in ppo ) , np vbd ppo rb cc rb , in at ap jj nns in at jj , rb rb cc rb vbd ppo in at jj . vb rp in in vb rp . pps rb vbd in at nn , cs at vbg jj vbn in pp$ nn . vb rp . -- in jj to . cc at nn vbd in at nn ' jj nn . wrb vbg rb in at nn , np rb vbd pp$ jj jj nn in at nn , cc vbd ppo rb , rb vbg cc vbg , cs cs rb vbg to vb in dti jj nn cs at jj md hv vbn , cc wdt pps bedz jj in vbg cs pps md vb ppo rp . cc cs jj nn pps vbd bedz at jjs nn in at nn . cc rb pps bez vbn . in , vbg . . ( nn cd ( in pp$ nn in dt jj nn vbd pp$ nn , at nn rb vbd in pp$ nn , rp in vbd ppl in jj , jj , vbg nn , cs cs at vbn nn , rb vbg jj , hvd ap nn rb to vb rp in dt vbn nn in at jj nn in at nn . cc rb nn in pp$ nn , at jj rb rbr vbd rp in nn . vbg in nn in nn . rb vbg cc vbg pp$ nn in nn , in jj , vbg , vbn nns . in ap , nn in nn in vbn jj jj , cs cs pps hvd ben at jj nns in jj nn , vbn in at jj nn . cc vbg rb rb , vbd vbg rp pp$ jj nns in at nn . pp$ nn hvd vbn . pps ' vb jj , np . np , vbd nn . rb . abx nns vbd rp . cc vbg pp$ jj in pp$ nn , np vbd at jj nns in at nn . cc , in at nn , vbd rb vbg at jj nn pps hvd vbn . . . ( nn nn . ( pps md be vbn in dti ap nn in wdt at ql jj nn at jj nn in at nn jj ' in jj nn vbz . cs rb at ql jj , pps bez in rb at ql jj nn in ppo . ql cs in nn pps vbz ppo in at nn , cc rb doz rb wrb vbg in pp$ jjs nn . rb , jj bez at nn in at jj nn in at nn in pp$ nn , cc abl at vbg nn in nn nn in at jjr nn , cs in rb jj pp$ nn , pps rb md be vbn to vb ppl in at nn in vbn jj nn in at jj in vbn jj np nn in nn . . . ( nn nn . ( rb to vb at nn in dt nn , pps md rb be vbn , cs , in at jj jj nn , at nn bedz vbn to vb at vbg nn in nn . in ap ap nns , at jj jj , cc nn , bez vbn rb in dt nn . pp$ nn , rb , bez at ql jj . . . ( nn cd ( . . ( nn np cd np nn ( at nn in at nn in at ap nn . rb in at jj nn in at nn , at jj in nn vbz rp in at nn , in at nn cc jj in nn cs jj nn , cc at nn cc jj in nn vbg at jjs nn , at cd vbn cs at nn in nn . rb pps vbz at jj , jj nn to vb at od nn in at nn . in rb , in wdt bez vbn at jj nn , at jj nn hvz to be vbn in at nn in cd cc cd nns . cc rb vbn cc vbg at nn , at nn bez vbn to vb pp$ nn rb in at nn . rb , pps bez vbn to vb at nn in jj nn in at nn , * rb in jj nn , cc in vbn jj cc jj nns . cc wdt pps bez to vb vbg in at nn in cd ' jj nn , cs abn at ap . . ( nn cd ( nns ber vbn cc abn vbd in in wdt dt bez pn vb cc dts wps hv vbn ppo . in cd , ppss md vb ql rb cc vb ql rb in cd cc at ap nn . in dt vbg , vbg nn , rb , in pp$ nn in at nn , abn in rb at vbn nn vbz at jj nn in in vb rp , cc vb ppo in ppo . pps rb hvz to vb cc vb pp$ nn , vb rb in pp$ nn abn nn , vb pp$ vb in at nn , cc in wdt jj nn md vb , pps nns in nn pps rb in at jj . at nn , vbg at jj nn in nns in at nn , cs rp in cd jj nns in at nn , * cd ber jj . at nn cs ql ap jj nns ber rb vbn cc jj . at nn cs dti in ppo rb vbd pp$ nn in nns in at nn . at nn cs dti nn nns ber jj cd nns in cd nns . at nn cs in ap nn nns , vbg bez cc at vbg nn . cs pps bez at nn wps vbz at nn , cc cs ppss vb at nn rp in pp$ nn wrb md ppss vb to vb ppo rb wrb ql vbn . rb , cs at nn be jj , rb in at od jj nn , dt bez , wrb at jj nns to vb , at nn in nn cc nn rb vb in vbg nn cc rb , in at jj nn in ppls cc at pn rb . pps bez rb ppss vb nns . cc at nn , at jjs nn in at jj nn , vbz pp$ jj nn in at nns in at nn . rb , ppss vb * wps vbz at jj , cc abn dt bez abx jj cc jj . at nn md vb in at nns in od to vb . pps md abx vb at vb cc at nn , cc at nn wdt md be vbn in ppo , in in nns jj in dti nn . nn vb cs dt md rb vb at jj nn in nn in at nn . cc jj nn in jj nns in ap cs cd nn hvz vbn ppo cs in at jj nn in nns in at nn , pps hvz * in dti nn ben ql ap at nn in at jj cs at rb vbn nn in at nn wps hvz vbn ppo . to vb at jjt nn in at nn , at nns in dt nn md vb in pp$ nns in rp in nn , cc * in rp in nn . . . ( nn cd ( . . ( nn np cd np nn ( rb in at nn , at nns vb . rp in ppo , at nns . ql , in jj nns , vb at nns . at nn vbn in in at jj nn vbz jj nn . pps bez at vbn nn in at jj nn , dti cd nns in nn , wdt bez rb vbn in at jj jj in at nn , in at nn in vbg at nn in at jj nn in at nn , wp$ ap jj , jj nn rb vbz in at nn . rb at nn bez rb in nn in pp$ nn , wps vbz ppo rp ql rb in pp$ nn cs at nn nns pp$ nn in at nn . pps bez jj to hv cd nns jj in at nn , rb vbd at od cc od nns . cc dts cd nns , dt in pp$ jj nn , ber abx vbn in at nn . at nn beg dt : to vb ppo abx , cs jj , pn rb in at ap in at ap jj . rb cs cs , in at vbg nn , pn md vb rp , at ap md rb vb at nn . pps bez at vbg in at nns . cc pps ql rb vbz cs vbg in at jj , jj , jj vbg in at jj in vbg at od nn , pps vbz jj in at nn , wrb nn in cs in pp$ nns , in nn at od nn in ppo . rb , cs at od nn bez rb vbn in at nn , cc at nn bez vbg , rb cs nn md , in abn nns , be rb vbn rp in at nn , rb cc rb . rb at ql jj nn md vb abn nns . vbn in at nn , pps rb bez in jj nns . at jj nns in nn nn ( vbn in at vbg nn ) vbg dt nn , in ap nns , rb jj . cc dt jj nn bez * rb jj in at jjt cc ql jj nns . rb : ppss md vb cs wrb at od nn bez vbn rb , pps rb vbz at vbg , jj in vbd . . ( nn cd ( nn , rb nn in abx nn cc jj , jj at nns , cc vbg ppo , cc vbg at jj nn in abn nns . cc , in jj , bez pps jj to vb ppo rb cs at jj bez ql vbn cc at nn . vb , rb , wrb pps md be in at nn in cd nns abn jj pn ql jj , jj , cc vbg jj . wrb vbg in dts nns in ppo , cs rb cs in at cd vbg nns in abl at jj nn , cd cc cd jj od nns md be rb vbg in ppo . in , in nn , dt nn bez vbn in ap nns to vb rp in at nn md at od cd be rb vbd in nn . abn dts nns ber rb vbn rb , cs ppss md * vb to vb ap ql jj , wql jj nns , in nns rb to be vbn . . . ( nn cd ( . . ( nn nn cd nn ' np np ( np ' rb jj hvd ben vbn dti nn in at nn . pps bedz at nn . rb , vbg at nn in cd nns , ppss vbd at jj nn in nn at nn in at fw . cc rb , cs ppss cd nns in pp$ cd in cd nns , cc cd cd cc cd nns cc nns , rb vbn nn in nn in dt jj , jj nn in at nn . cc pps vbd rb to vb in abn , in in jj nns . jj nn bedz rb vbn in at nn in at nn ppss vbd . in , in at jj jj in vb in nn , cc wdt ppss vb ppo , in np , cd cc cd nns in at nn in nn md vb at jj jj nn in at nn in at nn at nn . cc dt jj jj ppss vbd rb vbn rb , cs cs jj in nn in nn in nn . nn vbd rp . cc cd nns rp cc rp in at fw ' jj nn in vbg rb vbn pp$ nn . cs vbg rbr ppss vbd np vbg cd in ap ap nns in at . . ( nn cd ( nns . rb vbg at vbg jj in at nn , pps vbd at jj nns in vbg ppo in at nn , cc rb vbg pp$ nn in at nn , vbd pp$ nn in at nn , cc dod * vb rb rb cs nn . cs , in vbg at nn in dt jj , nn np hvd vbn pp$ jj nn , to vb ppo rb . rb rb cs at nn bedz jj , dti jj nn , cc nn , cc nn , vbd vbg in ppo . cs cs at nn in dt jj nn vbd ppo cs np np bedz rb to be vbn . cc cs at cd ap nns bed vbn in pp$ nn , abn wps md * cd nn vb pp$ jj , nn nn . ql rb ppss md hv vbn in at nn in at fw ' np nns , cs abn nns bed vbg to vb nn in at jj . in jj nns ber beg vbn in at nn , cc vbd vbg rp in at nn in nns . cc in dts vbg nns , at jj nn ppl , * at nn , bez to be vbn . vbn in at nn in at nn , cc in at nn in at nns , at jj rb vbz in pp$ jj nn rb in at nn ' np , cc vbn in at nn in at nn , wdt vbd at nns cc vbg rb , at cd in in nn cc jj , vbd jj rb cs jj nns , wrb pn vbz cs at ap nns vbg . cs jj nn bedz rb abn nn , in ap ql rb cs md be vbn in nn , np , pp$ od nn , vbn in nn , vbd at jj cc rb jj in jj nn . abl at jj nn bedz pps in cs at vbn np , pp$ . . ( nn cd ( jj jj , rb vbd in ppo in at nn at jj nn in nns . pn jj , vbg nn in abn dt nn in np , bedz rb vbn ql jj . np bedz at jj nn . pps bedz ql rb jj in at jj cs at jj nn in pp$ nn . at nn , at nn , cs ppss vb . ppo , nn . rb ppss vb , cc vb ppo cd in pp$ jj . rn be pps vbn , cs cs dts jj nns do * , cs at jj nn , cc rb in at jj jj nn , vb at nn vb at jj nns in at nn ( in ap in vbg at nns in at nn ) , cc rb cc rb ppss vb dti in dts nps wps hv at jj nn in dt jj nn in at jj nn vbn in np . vbg at vbg nn in at nn . in nn cs nn bedz vbn cc vbn . cc vbn in cd nns in nn nn , np rb vbd rp in pp$ nns nn in at nn in nn , cs cs dt nn bed at nn . cc bedz np at ap nn in jj ' nn nn cs nn . vbg pp$ nns in pp$ jj nns , nns in nns in nns , vbg in at jj nn , rb jj in pp$ nn . at ap nns rb in pp$ nns bed rb vbn in at jj vbg in pp$ nns in at nn , in at ap nns in at nns ' nns . vbg in at nn ppss md rb vb ppo ( cs cs ppss vbd ppo ) vbg in at jj , jj nns , cc vbg rp in pp$ nns cs ppss vbd rp jj jj nns in at jj in at nn in at jj nn . dt jj nn in at jj vbz abn cc jj . wql , in abl at rb jj nn , ppss vb in nn in jj jj nns , vbz at nn in at jj nn in abn nns . at nn ppss rb vb in at jj , md rbt be vbn in at nn vbn in at nn in nn in at nn . cs in abn at vbg nn cc nn in at nn in nn , nns md be vbn rb vbg rp in at nn ' np nns , cs jj nns in at nn wrb jj nn bez beg vbn , jj to vb rp at vbn nn wps bez vbn in ppo . cc cs , cs at jj nns in at nn in nn ber . . ( nn cd ( rb rb vbg dt ap ' ppss vb nn in vbg in nns abn vbn cc vbn , at nns , rb , in pp$ nn in jj nns , ber rb vbg rb in at nn in at jj nn . cc cs , bed ppss to vb at jj nn rb rp , pps md rb be ql ap at ap nn , dt bez to vb , at jj jj nn ap in abn nns . cc cs nns rb ber at jj nns in abn nn nns vbg at jj , rb vbg rb , to be jj in nn at nn bez to be vbn rb , cc at jj nn to be rb vbn . cc cs cd cc cd ap cs nns md be vbn rp , vbg at vbn nns , nns , cc nns , wrb nns do ql rb vb , cc ql rb nn . rb bez ex at jj nn cc nn wrb ppss md vb ppo in jj jj nns , cc in jj cc ql jj nns , cs in at jj nn jj , vbn in nn in at jj in nn in nn . cs ppss hv rb vbn cs nn , rb vb pp$ nn in at nn in nn in nn , cc at nn in jj at nn . cc , ql rb , np vbd * at nns in at nn wps bedz vbg in ql rb ppo , at ap cs at nns vbd at nn in pp$ jj jj nns . vb , vb . -- in wrb ' np cs jj nn . pps vbd in nn , vbg pp$ nns rb rbr , cs cs to vb at ql jj nn in pp$ nn . cc , in at ap nn vbg pp$ nn in at nn , cs cs nn in pp$ nn . nn , ppss vb . -- in vb dt nn , nn . at jj jj , * in dti ql jj nn in hvg ben rb vbd in pp$ jj nn in at ql jj nn , vbd vbg rb in pp$ nn , in , cs ap jj nns , ex bedz pn at nn in pp$ nn in nns , wdt pps dod * vb rb vbn cs pp$ ap nns . dt jj nn , cs ppss vbd ppo , vbd vbg cc vbg rb , vbg pp$ nn in pp$ nns , wdt , cs at jj nn , bed vbn in vbn nn nns . dt jj np vbn rb , cc in nn in at nn in nn , vbd in at jj nn in at jj nn in np ' nn nn . wrb , . . ( nn cd ( in abx nns vbn in ppo , cc vbg in pp$ cd in jj nn , pps vbd pp$ vbn rb rb rbr rp , in at ap nn rb vbg pp$ nn , cs cs to vb pp$ jjt nn in nn . vb , vbd np , rb vbg at ql jj nn in pp$ nn , nn ' nn ppss vb dt nn bez rb vbn . ppo ' ppss ben vbg dt nn ql rb , nn . pps ' vb ql jj . nn ' nn ppss rb vb cs to be jj , at jj in nn md be jj . ex ber dts nns rb in at nn , nn ' nn ppss vb ppss vb ppo jj cc jj . wdt at jj ppss ber vbg rp . vb , vb cc vb to ' ppo . vb ' ppo ppss ber jj to vb ppls rb , cc in nn , cc ppss md vb jj . vb ppo , cs ppss md vb pp$ jj nn . rb , nn , cc vb pp$ nn . rn , vb dt nn , nn cd in pp$ nn . rb rb , vb cc vb to ' ppo . rb vbg at vbn nn , jj nn vbn in at nn in at nns . cc rb , in cd nn vbg pp$ nn jj in at nn , cs cs to vb at jj nn in pp$ nn , in at ap nn pps rb vbd pp$ nns , cc vbg rb in at nn in at vbg nn vbd vbg at nns , cs np , rb vbg rb , vbd abn wps bedz vbn . nn in nns : ppss ' fw vbn rb to vb nn ppss md vb nn nn nn vb . ppss vb . vb nn nn vbg ' fw fw nn . rb np vb nn ppss md vb pp$ jj nns rp in fw nns , cc in np . ppss md vb nn nn nn . vb , rb vbn np , vbg at nn in at jj vb in at nn , in in np . wrb , uh pp$ nns , ppss vb ' nn vb dt nn wrb ppss ' nn nn . cs ' np at nn to vb nns , np . wps nn . nn vb in ppo ppl , rb vbg to vb . ql , np . vb rp , vb rp . uh , nn , nn nn in nns : in in nn . vbd np , rb , vb ' ppo in ppo . vb dt , cc np vbd . do ppo bez abn nns , cc in nn nn jj , cc ppss . . ( nn cd ( rb in ppo , nn in nns , nn nn nn in in ' nn nn nn vbg ' fw fw nn . wrb ppss vb to vb , ' vb ppo vb rp abl at nn vbg ' cc jj ' vb . vb , vbd np , vbg ppo , ppss jj hv dt nn . vb to ' ppo jj . rb ql at nn vbd . pp$ nn , nn in nns , ppss nn ' nn vb ppo ql ap in . nn bez nn , cc md ' nn be vbn . cc to vb nn jj nn , nn bez fw nn . ppo bez nns , vbg . cc cs ppss vb fw jj in ppo , wrb nn ppss be nn . in abn nn bez * ' in ap nn fw ql rb jj . rb , vb rb , vbn ' nns , rb vb nn to be jj , at vbg nns in nn jj . nn ' nn be vbg ' fw nn in pp$ nn ' jj nn , ppss vb . bez * cd jj nn rb cs nn to vb jj . cc , in np , pn in ppo hvz fw rb to vb jj . nn jj vb in dti pn rb . nn vb dti nn ' ppss hvz nn nn nn , nn nn nns . cc nn fw nn rb rb hvz fw jj nns . cs fw fw nn fw fw fw bez * in jj nn , cc to vb rp fw nn in fw jj vb jj nns , nn md ' nn vb in fw fw to vb ppls . rb vbn , jj nn . vbd np , cs ' np np . vb rp . at nn vbg ' in . fw jj nns md vb at jj ' cc vb ' dt nn , np np . ppss nn ' nn vb cd nn . at nn at in np ' in jj nn nn ' nns cs ppss vb ' ppo , cs vb nns bez jj , cc vb nns bez jj . cc wrb ppss do vb ppo jj , ppss jj vb ppo nn . in nn ppss vb in fw nn , vb rb to vb in fw nn , cc md ' nn vb * ' nn in abn , at ap , in np cc np . in pp$ nn , ppss bem rb in at ap nn . rb vb at nn , nn , cc ppss ' pps rb in pp$ nn . in dt , nn , vbg abx nns in at jj nn , vbd pp$ jj nn , cc vbd in in vbn nn in nns . vb rp fw jjt nn ql rb ppss md . vb pp$ nn ' nns ' cs ppss vb in -- cc nn vb . rb , nn , vbd np , vbg pp$ nn in at nn . vb rb wrb ppss vbd rb , rb , rp in ppo , cc vb jj nn . . . ( nn cd ( abn nn , vbd np , rb vbg rp in pp$ nns in at vbn nn . uh , vbd np , vbg ppl rb rb . ppss md rb vb rb in at nn in dt nn . in at od nn , wql jj ber ppss , nn . wdt nn do vb fw ' nn , vbd at jj jj , rb . nn . wql jj ber ppss , nn . ' in cd , ppss vb , pps rb vbd . cc hv ppss vbn in dt nn rb in cd cd nns , nn , cc nn ' nn vb rb wrb to vb at jj in nn . rb vbg dt nn in at ap nn , cs cs dt nn vbd at nn in at nn . wrb bed ppss vbn , nn . ' nn fw nn , in nn in nn , vbg ' np np np . vbn in at nn in nn . cs ' pp$ jj , rb . cc ppss vb to vb wdt nn ppss bed vbn in , nn . dod ' nn ppss vb fw nn nn . pps vbd , rb . ql , ppss dod ' nn , nn . cc ppss ' ppss vb ppo wdt ppss ' rb vbg to , vb . ppss md vb nr cc be vbn rp rb . ppss nn ' nn vb wrb to vb at jj in nn rb . np pp$ nn , cs ppss vb nn cd , pps vbd , rb , vbg rb to vb . vb rb , nn . in in rb , vb ppo dts nns . in in rb vb dt nn in nn rb , cc vb ppo cs ppss vb dt nn vbd cs pps md be . vb ppo , ppss vb in in vbg at nns in ppo in in vb ppo , cc vb ppo . rb jj pp$ vbn nns in ppo in at nn , at jj jj vbd , np vbd ' nn ppss vb nn . jj , nn jj . vb , vbd np , nn ppl rb ql . do ppss vb in at nn . vbd pn rb in nn in np , vbd at jj nn rb . cc ppss hv rb in pp$ nn vbd at jj nn in nn in nn , wrb ppss rb vbd at jj nn vbg pp$ nns cs pp$ jj nn in nns , hv ppss , nn . cc rb ppss vb rb , cc vb ppo abl at jj nn cs ppss dod rb rb , uh . vbd np . wrb do ppss vb to vb to , vb . . . ( nn cd ( vb in nn nn rb , pps vbd , abn in vbg cs pps vbd . nn . nn in . nn vb wrb ppss vb , vb . ppo ' in at jj nn . rb wdt ' in pp$ nn . wrb rb jj vb nn vbz , vbd at jj rb , vbg pp$ jj nn cc nn , pps ppl vbd ' nn vb rb . cc dti jj nn md vb cc vb ppo . vb ppo . wql . in at nn cc cd , cs ppss jj np . cc vb ppo wrb . rp rb , vbd np , vbg pp$ nns rb in pp$ nn , cc vbg ppo rb ql rb . ql , rb , ppss vb to vb rp in pp$ nn in nn , do ppss , nn , wrb ppss ber jj . cc nn ' nn ppss vb at jjr ppss vb , at jjr pps vbz . jjs in nn , uh . dod ' nn vb nn nn ' abn , vbd np , rb in at nns . ppss vbd rp rb , dod ' nn ppo , cc rb vb ppl , cc vb wrb pp$ nns ber vbg . cc , rb ppss vb to vb in nn in vbg in at nn ' jj nn , nn . cc rb , rb , nn , ppss nn ' nn vb rb , in ppss vb at jj nn , rb in at nn . ppo ' in at jj nn , cc md be vbn , cc rb pps ' vb at vb . cc pn in ppo ber in nn rb . vb pp$ nns , nn , cc vb pp$ nns . do ppss vb . vb pp$ nn in cd nn , cc nn nn ' ap at ' nn in pp$ nn , wrb ppss ' rb vbg pp$ nns , nn . wdt . cs pp$ nn , rb . -- in dt ' in pp$ nn . rb . rb . -- in dt ' vb ppo in in rb ppss hv ppo . vb ppo rb rb , cc vb nn . abn ' nn , vbd at jj jj , in abx nns vbd cs vbn , rb vbg pp$ jj nn , cs cs to vb abx nns in nn in cd cc at ap nn . ql rb , nn . ppss vb dt jj in nn in pp$$ bedz ql ql jj , cs ppss hv vbn ppo rp in nn ql rb cs jj . ppss vb cs , nn ' nn ppo . uh , in at nn , wrb ppss vb dt jj in nn in pp$ jj nn rb , at nn , ppss ' ppss vb ppo wdt to do rb cs * to vb ppo in vbg . vb at nn in cd nn , cc vb at jj nn in ppo in at ap . cs vbn , nn ppo . rb ' ppss vb . cc rb in in nn , nn , wrb ppss ber vbg in at nn , be jj ppss vb in to vb at nns in pp$ nns . hv ppo vbn in nn . cs in at nns in at nn , hv ppo vbn , nn . ex , rb ppss md vb . . . ( nn nns ( cc np hvd rb vbn cd nns rp , wrb pps bedz vbn . vb , vb ppo nns in nn in in nn nn in at jj in nn . np ' ppss vb . rb ppss vb , rb . -- in nn . vb . vb at nn cs ppss vb . -- in nn vbg rb . fw in nns in nn in in nn ' nn vb . vb , in jj . jj vb ppo , ' nn in ppo vb jj . nn ' in jj cs pps vb ' nn ap in jj nn np vb ppl , vbd at jj nn , vbg rb . in wdt nn nn pps vbd in pp$ nn . . . ( nn nn . ( at ap nn md ql rb be vbn rb . at jjt cc ql jj vb wdt at nn hvz in at jj wrb vbn rb , bez in at nn cc nn . cc cs in pp$ jjr nn cs nn bez ql jjr cs dti ap ( in at nn in nns ) , pp$ nn rb in nn , vbz ppo to vb jj in at nn . rb cs in at nn ppss md vb in ppo in at nn , in nn to vb at nn in ppo . cc dt nn bez rb vbn : at jj , jj nn bez vbn in at jj vb in pp$ jj nn , cc at nn in pp$ nn , cs at ap nn bez vbn in at nn . in jj nn at jj vb bez to vb in at ap nn in at nn , cs cs rb hvg vbn at vbn jj , at nn bez rb vbn to vb nn . cc beg vbn in at nn , bez in ap vbn rb in at jjt nn in at nn , in at nn in nn in pp$ jj nn cc nns . . . ( nn nns ( . . ( nn hv cd np np nn at nn ( dt jj nn md vb in at nn wps vbz pp$ nn , cc , cs np , vb ppo in pp$ jj nn , cs ppss md vb . dt vbz ql jj at nn cs pn md vbz vb at ap in at nn cc nn in ppo . pps bez in nn , cs cd nns rb at nn in at jj nn bedz vbn at jj nn in np , cc vbd jj nns rb . rb , cs in np nn ' jj nn , at jj nn in at nn vbn at jj nn in vbg at jj nn to be vbn in vbn nns , wdt , ppss vb , ber at nn in jj . nns , rb , ber in dt nn vbn jj nn . at nn bez vbn in nns in at nn in nn nns , cc beg rb vbn cc vbn md be vbn in nn in nns cc nn nns . at jj nns in nn bed ql jj in ppo . ppss hvd at jj nn nn in at nn . at nn bez , cs in pp$ nns in ap , at jj md in abn nns be vbn at jj nn , bed rb * ql ap in ppo . cc wrb ppss vb to vb rp in at nn in nn rb cd cd nns rb , pps vbz rb pp$ nn . rb at ql vbn in nns cs np , rb vb in . . ( nn cd ( vbn nns . cc at fw ber * ql jj . ppss abn vb wrb ppss vb in nns , cc hv jj jj nns in jj jj nn nn . np , cd in pp$ ql jj nns , vbz nns in nn in nns , cs beg ql jj cc vbg . cc dt vbz ppo cs ap nps , wps rb rb bed rb vbn in np in at vbg nn in in cs dts nns rb vbn in ap nns in at jj nns in nns wdt hvd ben vbn rb in vbg rp at nn . in at jj nns dts nns ber vbn nns . wdt , rb , ppss rb vb , beg jj cc jj , cc vbg pn cs jj np nns ' nn in nns cc jj in nns , wrb jj . ppss hv abl at jj nn cs at ap nn in vbg nn md rb vb pp$ nns rp . cc wdt jjr vbz at jj cs at vbn nn , bez pp$ vbg nn . pps bez at jj nn nn in at nn , ql jj to be rb jj . vb in pp$ nn , wdt md be ql jj vbg cs at nn ' np ( wdt bez vbn at jj nn ) , bed pps * abl at jj nn in nn . cc at nns ppl , wrb jj cc jj dt bez . cs at jj , abn in jj , jj nn in at nn in at od nn in pp$ nn , cc rb ql jj to vb at nn in nn . rb , ap nns hv at nn in vbg ppo in dti ap nn , cc rb vbg in ppo . in at jj nn nns in at nn pps bez at jj nn in at nns to vb pp$ nn in nn in at jj nn in nns cc vb ppo vb rb rb . ap at jj nn hv ppss rb vbd . in at nn in at jj nn nn at nns ber vbn at jj nn . at nn in at nn bez vbn in in at nn , cc at cd jj , jj nns beg vbn ( rb vbg cd jj nns ) , ppss ber rb vbn in nn , cc vbn in at ql jj nn , in nn ql vbg nns ' nn , wdt bez abl at nn in dti nns . cc at pn vbz cs dti jj nns in at nns , in rb vbg in nns ' nns , in cc in vb to hv at ap nns in pp$ jj , cs cs to be jj to vb at nn ' jj nn in pp$ jj nns . wdt , rb , vbz jj nn . cc dt bez at nn wrb . . ( nn cd ( at jj nn in at jj vbg nn ' jj nn in ppo , bez rb cd in at jjt nns ppss md vb . at nn vbz at nn in rb in ppo , in at ql jj nn . nn . pps bez * , rb , rb cs at jj bez ql ql jj cs nns vb to vb at vbg in ppo in nn . dt vbz to vb , in dti nn , in at nn rb vbd : nn . nn . wpo at nn md vb at rb vbn nn in at nn , cc vb ppo rb in pp$ jj nn . cc at nn at od nn cs rb vbn at nn bedz vbn cs at nn . rb pps bedz vbn . cc cs pps hvd ben vbn in pp$ nn in nns , pps rb md hv ben . cc pps rb vbd ppo cs dti nn doz . vb in at nn in nn in at nr nn cc vb at nns in jj nns vbg rp in at jj nns in jj nns . doz * dt nn vb at nn rp in at jj ' nn nn . nns . wps bez * at jj . nn vb ppo pps md be ql jj in at nn cs vbn in at jj nn in pp$ nn in at vbg nn . pps md be ql jj in dt jj nn , ppss vb , in at nn in nn , cs in ppo , vbn cc vbn nn , wps jjt nns in at nn cc jjt in pp$ vbn nns in pp$ nn in fw -- fw -- nns . cc np , pps vbz at jj in pp$ jj nn , doz pps . cc dt bez vbg nn in nn , bez pps . vb in pp$ nn in nn , rb , pp$ vbn cc vbn nn vbg rp dt nn nn , wdt bez dt nn vbn in . -- in wdt cc at nns in at nn in at ap nn ppss ber vbg . cc wdt do ppss vb pp$ nns in , in nn cs jj nn . in at nn in at ap nn . cc in wdt nn dod at nn in at nn in at nn in np in np rb jj pp$ nns . pps bez rb in at ap nn cc cd wpo dt nn vbd at nn to vb pn cc nn nns . . . ( nn cd ( . . ( nn fw cd np cd np ( wrb in at jj np , at vbn nn nn , in jj cc jj nn , bez vbn in jj in nn , pps bez * , cs at jj nn in ap , jj to vb in rb in at nn in vbg ppo rp . in dt nn bez at ql jj cd . bez * ql rb vbn . cc vbz abn nns to vb in ppo . rb , at jj nn bez to vb in abn nn . vb at nn at ' vb . cc rb vb at pn rb in pp$ nn cs nn , in at nn cs , cs dt nn , nn in nns md be vbn . dt bez , cd cc cd in at nn , dt nn , at nn in nn md vb at nn to vb cs abn vbz rb . cc rb , rb in at nn in at jj , dt nn md * vb in abn . cs jj jj nns in nns vb in at vbn nn , wps bed pps vbd rb in cd nns , vb , in at nn , ql ap cs at nn md be jj in nn . in ql ap nns in at nn , rb , wrb dts nns do * ql rb vb , pp$ jj nn md be in nns rb vbn , in rb vbg ppo rp in jj vbg in nns , at nn rb , wdt , in dti nns , rb vbz in jj ppo in ql jjr nn . cc pps bedz * rb in at jj nn in at fw ' np nns . rb , to be jj , dti nn jj in jj nns , to hv vbn in pp$ nn cs nn , md hv rb vbd at jj jj nn bedz cd jj nn , cc dts nns at nns in ppo . rb , rb vb vbg at nn in nn in pp$ nn bedz vbn . cc wrb , rb , np cc at nn nn vbd in nn , at jj nn bedz vbn in at nns . in rb vbg at vbg nns in at nn , cc vbg cd nns , cs cs ppss vb jj nns in nn in at jj nn , dts . . ( nn np ( cd nns , vbg pp$ jj vbg in nns , vbd rp at jj vbg in at nns , in vbg at jj nn jj in pp$ nns , rb pp$ ap jj nn . cc in at jj nn in pp$ vbn cc vbg nns , at nns md * rb vb pp$ nn . cc dt vbd in jj nns in at jj nn in at nn . ppss rb vbd , * rb in dt ap ' jj nns , cc cs jj nns , vbd rb , cc vbd pp$ jj . cs dts nns vbd vbn rp cc rp rb in at ap nn , to be ql jj in at vbg nn . cc bedz dt abn . pps bedz jj to vb in at nns cc nns in dts nns . at nn in nn cc jj nn vbd to vb in pp$ ap nns cc nns , in wdt md be vbn at jj nn hvd vbn . vbn cc vbn in nn in at nn in pp$ nn , cd in dts nns rb vbd jj np ' nn nn rp , wrb pps vbd to vb rp at jj nn in pp$ jj nn . np at nn wdt nn vbd ppo jj , vbd at jj , rb vbg pp$ nn rp cc rp . jj nn nn cc np nn . cc fw nn nn vbd jj md be cd jj nn . . . ( nn nn . ( at vbg in nn vbn in vbg in in bez vbn in at ql jjt nn . bez in at nn in at nn ' np vbd nn . cc in jj nn , vbz in at nn nn in wdt pps bez vbn . rb pp$ nns ber ql jj , cc pp$ jj nn ql jjr cs at jjr . dt nn bez rb vbn cs jj cs jj . cc wrb beg vbn bez rb vbn , rb cs at nn . in pp$ nn , at jj nn , in cd in cd nns rb , bez vbn in at nn . . . ( nn np ( . . ( nn np cd nn nn ( pps bedz at nr nn , cc abl at np cs vbn . fw fw nns in np nn ber abn nns . at nn fw bedz vbn in wdt vbd at nn . . . ( nn np ( at nn at nn . ppss md hv vbn ppss bed vbg rp cd cd jj nns in at nn nns . in at od nn , at jj vbg nns , in ap jj nns vbg at nn in nns rb vbn jj , cc wdt at ap nn md rb vb in in dt jj nn in nns bedz vbn rp in at jjs in nn cc rb vbd in at jjr nn in nn , at jjt nn rb in at nn ' jj nn . at nn in at nn in jj nn vbg in dts nns , bedz rb vbn in at nn , cc at jj jjr nn in at nns bedz vbn in at jj . in dt nn at jj nn nn , vbg dti cd cd nns , bedz vbn . cc rb vbn in nns in at nn , np cc np , at nns , vbn in pp$ jj nns , vbd vbg at nn in at nn in at nn in at nn rb in at jjt in at cd nn in nns . dt vbn , at jj , jj nn bez vbn in at nn , at nn bez vbn , cc at jjs nn in at nn vbg rp at jj nn , rb vb vbg in cd jj nn in at nn . wrb rb , at jj nn nns rp in pp$ nn . at nn in pp$ nns cs at nn in nns in at jj nn in jj nn . pps vbz , nns , cc nns pp$ jj nn in nns in at nn . rbr cc rbr pps vbz rp in at jj , cs at vbg nn in at nn bez vbn in at vbg nn in at nns . cs in ap , at jj , jj nn bez vbn . in at jj jj at nn vbz rb cc rb in at jj , cc at jj nn vbz in nn vbg in ppo at jj jj nn in at od nn in nn . rb cs at nn nns at jj rb cs at vb doz at nn , rb bez pps vbd rp in at nn rb cs at nn bez rb vbn in vbg ppo . in at nn rb vbd rp in at nn rb vbz at jj vbg rp cc rp in at nn , cc cs at nn in cd nn rb vbz rp in at nn vbd at nn , rb vbn in at nns in np cc np , at nns . cc rb ql rb cs pps bez rb vbn rp , cc rb in dt ap nn ppl , pps bez abn at nn beg vbn jjr cc jjr rb cs pp$ jj nn vbz at jjs in nn . at nns in at nn rb vb vbg , cc in at nn . . ( nn cd ( cc cd at jj nn in vbg nn rb in cc rb cs cs vb rp in at nn , cc at pn rb md vb jj vb to vb ppo wrb pps nns , rb pps md vb pp$ nns cc nn ppo vb rb . pn in at vbg nns rb nns in at jj , jj nn vbd at nn in nn , cc vbg pp$ nn pps rb nns in at jj nn in at jjr nn in at vbg nn . in dt nn , at nn in at od vbg jj nn bez rb vbn cs cs to vb at nn in at nn , in nn to vb in wdt vbz . cs , dt vbn nn , vbg abn nns to vb rp , rb ql vbz at jj nn in at nn , cc in at ap jj , jj , vbg nns , vbz ppo rb in nn . rb cs cs at jj jjr nn bez rb rb , at jj jj nn , vbd at nn in nn , nns jj , cc bez ql jj in vbg . at nns rb rb vb pp$ nn , cc cs at cd nn bez vbg cc vbg at od nn in at jj , at ap bez rb vbn rb , cc rp vbz at od nn in at jjs nn ql rb , in at vbn nn vbd at nn in nn . in dt nn nn jj nn nns vb vbg rb at jj nn in nn cs cs pps bed at jj jj nn in jj nns . cc rb at nn nns . at cd nns vbg cc vbg rb . abx jj cc jj nn , at nns vbg , at nn in nn nns vbg , at nns nn , at nn vbg , cc abn nns vbg rb , in nn in nn at jj nn . . . ( nn cd ( . . ( nn np cd np nn ( ppss hv vbn at jj nn in cs * vbn nn , at nn in at jj . nn hv hvn nns in ppo in vbn nns rb , cc vbn nns rb . . . ( nn cd ( pp$ jj nn vbz jj . cc pps bez rb at nn . at nn bez , wdt cc wrb bez at nn in at jj . rb ppss vb wdt pp$ nn bez . dt nn bez pn in at nn in nn , rb in jj nn , cc jjr , ql jj cc jj , cc nns in cd cc cd in cd cc cd nns in nn . rb , rb jj pps md in od vb to vb in dti nn ' jj nn cs beg in dt nn in nn cc nn , rb in nn in nn dts ber at nns in abl at nn . cs ppss md vb dti ap jj vbg nn in at jj ' nn nn cc cs ap nn . cc at nn vbg nn in dti nn , cs ql jj , wdt md dt be cc at nn . jj , in at vbn jj nn in at jj , ppss md vb rp in pp$ nn at ql jj , jj nn , rb vbg at jjt nns in nn , rb pps bez ql ql jj cc jj cs nn . dt bez , jj in beg vbn , wrb pps * ap nns cc vbz , cc vbz ql jj cc jj . nn hv ap jj vbn nns , wdt ppss vb in nns in pp$ jj in nns . pps bez jj , cs ppss vbd rb . cc beg vbn in at vbn nn , ppss hv rb vbn ppl in vbg pps vbd at vbg nn . in dti nn , pps bez jj to vb rb vbz in pp$ jj nns , cs ppss md vb . cc wdt ppss bem vbg in rb bez dt . wpo ap ql jj , jj nn , wdt , ppss vb , vbz at jj nn in at jj , bez * ql ap to be vbn cs at nn in at nn , cs at nn in at nn , rb to vb . cs pps bed rb jj to vb , cs at jj nn in at jj jj bez jjr cc ql jj cs at nn in at jj in vbn nn . cc at ap in dt . vbg at nn to be at nn in at jj . rb , wrb dt nn , cs in at nn in at ql jj nn nn , md vb at nn in cd cd nns in nn . cc , wrb pps bez vbn cs , in nn , cc in nn , cs nn , in pp$ vbn nn , bez rb cd nns , cc * at jj nn in at nn . dti nn md rb be hvn in at nn in dt vbn nn , at jj nn in wp$ jj . . ( nn cd ( nn vbz abl at nn in nn cs dt . nn cd nns in at nn , ppss hv cd nns in at jj nn in rb cd nns in at nn in at jj ' nn nn . in nn , at jj nn in at jj nn bez * at ap in at ap nns pps vbz . ql rb pps bez abn rp rb vbn cc nn in vbn in jj jj nns in jj nn , pn cs dts in at jjt jj nn nns . cc dts nns do * vb to be vbn in at jj nn in vbn , cc vb to be vbn in ppo , cs cs ppss bed vbn in at nn ppl . cc bez dt abn . in dti nns , in at jj , jj nn , dts jj nns , cs in at jj nn , cc vb at nn in ql ap nns . dts ber jj . dt bez , cs ppss vb dts jj nns in at nns in nns nn , rb dt bez at jj nn to vb in at jj nn . in pp$ jj nn in at nn in cd jj nn in jj , ppss bedz rb vbn in at nn vbg at jj jj nns vbn in at jj jj nns in at nns in at jj np . cs dts jj nns , rb , at nn in vbn jj nns jj . dt nn in at jj nns vbz ppo in dt nn . in abn at ap nns wdt at nn in at jj nn vbz , pps * rb vbz at nn , cc ql rb pp$ nns , jj in jj nn in at jj jj nn , in nn in jj jj nns , rb in at jj , jj nn . nn md vb cs dts jj np nns in at nn in nn , wdt np vbz to vb at nns in jj vbg nn in jj vbg nns in in ppss md vb , cs dts nns md * at ap vb at jj nn in dt jj . ppo rb vbz in ppo cs jj nns in at jj ber rb vbn in jj nn in ap nns . cs ppss hv ql vbd ppo in at jj , jj in vbn nns in at nn . at nn cc cd ap in dt nn in at nn cc nn in at jj . pps hvz rb ben vbn , cs pps bez nn in ppo in jj nns , vbn nn in nns . cs ap nn in nns , dt pn bez ql jj cc jj . in at jj bez . . ( nn nns ( rb jj rp in pp$ nn cs in at jj nn cc nn . cc , rb rbr , at jj nn nn in pp$ nn , cc vbg pp$ nn . pps bez in nn in dt jj vbg in pp$ nn , cs at jj bez vbn to vb ppl jj in abn nns , in abn nns , nns , cc nns . wdt md vb in at np jj , uh , in dts vbg , jj nns in at nr , cs vbn in pp$ jj nn . jj , ap nn ber vbn ql jj in dts np nns . cc dts , be pps vbn , ber pp$ jj in vbn , jj nn , wp$ ap nns ber nns . nns , wps vb ppls in at nn in at nn , cs at nn in nn md vb cs at nn nn . cs , cs nn , at jj hvz nns cc jj nn . vb pp$ nn , cc pps vbz . wql jj bez pps rb in in in in nn in in cs dt jj nn , in wpo jj nn bez ql jj cs pps bez in nn . wql jj cs pps md be vbn in nr , vbn in pp$ nns in nn in dts jj nns . wrb , wrb nns vb rb , ppss ber rb vbn , nns rb , rb vbn in at nns in nns in nn , cs at nn bez vbn vbn in jj . cc ql jj bez pps to vb , cs hvz ben vbn in nn , cs at nn in at jj jj bez jjr cs dt in at np jj in nn . pps doz vb in ppo , cs rb ppss vb at jj nn in at jj jj nn , cc at jj nn in jj nns , cc at jj nn in jj nn . uh , nn . vb cc vb ppl in at jj . do ppss , rb , vb jj in nn . do ppss , rb , vb in dt nn in beg in ppo . be jj in at nn . vb pp$ nn nn in at nn . cs at jj nn in nn . np ' rb , cc cs at jj jj , vb , uh nn . in abn nns at nn in pp$ jj . cc wql jj cc ql jj to vb dts jj nns . in nns , wql ap ber vbn cs nn . np ' rb . in nns , wql ap jj cs at jj . . . ( nn cd ( . . ( nn cd cd np np ( np in at nns . vb at nn vb jj . at jj nns hv rb vbn pp$ nn . at vbn jj nn in at jj jj nns cs at nn nn . cs vbn in nn , pps hvz * rb vbn pn in nn . pps bez rb jj . rb pps vbz ap cc ql rb , at nn in ppo vbn cc vbd in at vb nns , cc at nn in vbn in jj nns in vbg nns , wp$ nns ber cs ql ap jj nns in at jj . at jj jj jj nn vbz jjr cc jjr in at nn , cc at nn cs pps rb vbz , wdt vb jj nns in nns cc jj nns in nns , vb at jj nn . in nns cc nns in at ql jj nn cs jj nn bez vbn . in at jj cc jj nn nn , in at jj nn in at jj nn , jj in at jj nns , cs jj nn in nn vbz rp cc rp , cs vbn in jj nns . ex ' in at ql jj cc ql vbg nn . at nn in nns abn in jj vbg , at nn in nns ql rb in jj cc vbn . in nn cc ap in ppo md hv vbn at jj , ppss np , cs nn pps hvd vbn ppo . cc in at nn in pp$ nn ppss ql rb do vb . uh , jj nn in nn . in wdt * at jjt jj bez jj . cc bez dt at nn . vbn cs at nn bez , at jj nn vbz cc vbz in ppo to vb . jj in dti jj nn in in in nn cc nn nn in nn in rn , wrb at nn nn at vbg nns , rb rb vbz at jj nn vbg in at nn , cc at jj nn vbg jj in ppo . rb at jj ' in jj nn , in vbg nns bez vbn rp in at nn in in nns , nns , cc nns rb : vb . cc in nns rb , . . ( nn cd ( rb , nns vb at nn . vbg in ppo cs jj nn nn in at nn , cs pp$ nn rb vbd rb wrb at nn bedz vbn . ex ' in pp$ nn in nns . ex ' in pp$ nn in nns . ex ' in at nn in pp$ jj nn in jj nns rb jj in at nn , cc rb * rb vbg in at nn . ex ' in jj . rb , cs in nn at jj jj ' nn nn md hv ben at jj nn in pp$ nns , in pp$ nn pp$ nn vbz at jj nn in at nn . ber ppss at nn in nns , pp$ nn . ex ber ap nns cs at nn in np cd , cc ql jjr nns in nn np wps vb in ppo . . . ( nn cd ( . . ( nn cd cd np ( ( pps md * hv ben vbn cs jj to rb vbg at nn in at fw , pps bedz jj . rb , at vbg in at jj nn bez at jj jj nn , in wdt vbd jj nns ql rb vb ppls . cc * in nn . vb cs at jj hvz pn wps md rb be vbn at nn . in at jj , wrb pp$ nn cc nn vb to vb , rb , in dt ap nn , bez at jjt nn in ppo . vb , rb , cs at nn md vb in rb , dti cd cc cd nns vbg in ppo cc pp$ nn , cc dt nn rb vbn in at vbn , vbg , cc rb jj cc vbg nn . vb in nn , rb , cs in dts jj nns pps hvz to vb ap nns jj in at nn . cc in dt jj nn , in ql ap cs vbg cd ap jj in at rb in vbg nn rb vbn , pps md rb vb jj in abn jj , vbn nns , cc rb vb at nn in at jj nn rb in pp$ nn in at nn . do ppss * vb , . . ( nn cd ( rb , in np ' rb vb , cs pps vbd cc cd nns to vb at nn jj . wrb rb vbn , at nn bez vbn jj cc vbd rb in at nn cs at nn bez vbn . cs vbn , cs pps vb in at jj jj pps bez vbn in nn to be rb vbn in . cc , in at jj vbn nn dt bez jj . in at nn jj ' nn nn vbz rb cd od in pp$ jj nn , cc rb to vb abl at nn cs dt , rb in at jj nns in at jj , dt bed ql jj at nn cs to vb vbg at jj nn in nns ' vbz at fw ' in jj beg vbn cc at nn vbd , at nn bedz vbn in at nn ' jj nn in in rb abn nn rp in at nn , cs cs pps md rb in jj nn be vbn rp in pp$ jj nn . cc rb in at vbn nn rb vbg rp in ppo , in nn in at jj jj nn in at jjr nn in nn , cc at nn in nn in dt nn vbg cs at vb in at nns . rb , cs nn in vbg nn vbd in at fw ' jj nn cs at jj np ' rb in at nn in np . wrb dt ap nn bedz vbn pps bedz nn , cc at nns vbd rb in pp$ nn . nn vbd in at rb jj cc rb vbn nn . at jj nn nn , cs at jj jj nn , bedz ql cc ql vbg pp$ jj jj nns in at nn . at jj nn vbn , cc rp in dt nn vbd np rb in pp$ nn . vbg at ap nns in at nn in nn , pps vbd to vb rp at nn , rb rb vbg in at jjs in nns pps vbd np ' rb jj nn in in rb vbg rb in at jj ' nn nn in -- cc vbg ppo in at jjr nn in at nn in vbn nn , vbd pp$ ap nn nn in jj in cd nn , cc rb vbd vbg rp in nns rb vbn in dt nn . pps bedz at jj cc jj nn . cc vbg rb in at nn in ql jj at nn , pps vbd at np ' rb in at nn . vb , ppss jj cc jj nn , vbd np , wdt , cs vbn in at nn , cc rb cc rb jjt jj in nns . vb , jj nn , cc vb ppo at jj nn wps bez in ppo . in abn nns , ppss hv vbn at jjt . . . ( nn cd ( cs nn in wdt at jj nn rb nns , hvz vbn in dt nn ' np nns . wrb vbn nns cc vbz nn , cc jj nns cc nns nn . wrb in pp$ jj vb dt vb nn bez vbn in nns in nns in at vbn . rb , in dt jj nn in nn , ex bedz pp$ ql jj nn . ppss hv ben wrb nn cc nn rb vbd . hv vbn in ap at nn ' jj nn , wrb jj nns md vb pp$ nns to vb ppo rp . ppss vbd ' in at vbn nns wrb vbg in pp$ vbg nn . nn in nn ppss vbd in at jj nn . jj in dt ap , wrb nn vbd jj in ppo . ppss vbd ' in at vbn nn wrb vbn in nns in at nn nn . in nns pps vbd in at jjr nn in at vb nn . cc pp$ nns rb vbd in vbn in in cs jj nns vbd at vbg nn wps md hv vbn at jj nn in jj , vbg nns . nn nn . ppss hv vbn qlp to vb at nns cc vb at jj in np , cc * cd nn bez pp$ . vb vb . vbd at jj nn in at jjs in nn . rb . uh , rb , cs ' pp$ vbg , vbd np , rb vbg ppl , cs jj nn in nns vbd rb in pp$ nn . dt jj nn in dt jj nn md rb vb at jjr nn . -- in wrb rb . cd nns in at jj nn , nn , cc vbg rp pp$ nn in ppo . jjr cc jjr , nn . md rb vb . np md vb in dt nn , cc in pp$ nn vb pp$ nn . nn nn , cc nn nn in nn . wql rb in abn nn ber pp$ vbn nns . * at jjt nn vbz cc vbz in nn , cc hvz pp$ jj nn in nn . . . ( nn cd ( . . ( nn in cd np nn ' np np ( nn in nn , nn cc nn vbd rp . cc at nn vbd rbr cs at nn , cc rb at fw vbd in nn . in cc in , in at nn at nn ' np nns cc vbn nn in nns vbd ppo at jj in nn . cc cs pps bedz ql rb in nn , cc vbg in , rb vbg at nn in dti ap nn , at fw md * vb to vb ppo . cs at nn bedz vbn to vb wdt nn md be vbn . rn be pps vbd , cs cs at nns in jj nns , at nns in at jj nn nn hv dt at jj nn . abn wdt nns beg vbn in at nn in at nns in at jj nns vbn , at nn bez vbn in ppo . rb , at jj nns ber vbn in jj dt ap in at nn , rb in jj nns , cc in at jj nn . at fw ' jj nn bedz in ap vbd to in at nn ' in vbg pp$ jj . wdt vbd at nn to be at np in np . vbg pp$ nns , pps vbd rp , vbd rb in at fw ' ppss vb , cc vbd at nn . pps rb vbd rb . cc , cs at nn in nn bedz beg vbn in np ' nn nn to vb at vbg nn , at nn in nn vbd pp$ nn in pp$ nn ' jj nn in nn in dt vbg beg ql jj . pps vbd rp cs at np hvd at jj nn in nn , cc cs np , pp$ nn , bedz jj in vbg at fw ' jj nn . in , cs ppl cc nn ' jj nn vbd jj , cc cs pp$ nn bedz abn at nn in vbn rp , cc at jj nn cc nn vbg cc vbg in . rb rb vbg in at jj jj in at nn , pps rb vbd to vb in jj nn in at fw . cc dt dod in at nns vb abn nn . vbg at nn in dti ap nns in ppl cc at . . ( nn cd ( nn , at np ' nn nn in at jj nn in pp$ vbz vbn to vb rb in at fw , cs pps rb vbd in at nn ( in in dt nn pps vbd ql jj ) , in pp$ nn in vb rb . rb , rb , in nns in at jj nn in at jj vbg nn , at nn md be vbn dti nn rb . cc md be rb rb vbn in pp$ jj nns rb . nn in dt , cc ap at jj nns rb cc rb , at nn bedz vbn in at cd nns . cc in nns * in rb dt nn in at ql jj nn . vbg at nn in at np ' nn nn , bedz at nn in at jj nn , rb in dt jj vbg nn wrb jj nns vb rp abn nns . pps bedz at jj , jj , jj nn , vbd abn in pp$ nn in nns , cc vbg jj jj nn . at jj in vbd , rb in vbn nn in at vbn nn nn jj ppo . at vbg nns in wdt bed vbn rp in pp$ nns . at jj , vbn , jj nn bedz in pp$ nns . ql rb cs dt nn hvd ben rb vbd , np hvd vbd in in dt ' np pps . cs ' np pps . at jj in jj vb at nn in nn ' jj nn vbd ppo in . np rb vbn in at jj nn vbd in at np , cc at jj nn in pp$ nn , dti nn jj wrb at fw vbd at nn in nn . rb in dt nn cc wdt bedz rb vbn , pps vbd cs at vb in nn hvd vbn at jj nn in rb pn in at np . pp$ nn bedz dt : pps hvd ben rb jj in at jj nn in np nns , wrb pps hvd ben at jj nn . in pp$ vbn , jj nns hvg ap nns vbn in nn in at nn in at nn in nn , vbg at jj nn in at od jj , wdt pps vbd in pp$ nn in nn . cc , wdt , rb in vbg nn , bedz vbn to be vbn in nn . at jj , jj nn hvg vbn ppo , pps hvd vbn np in np , wrb , in dt jj jj in nn , pps vbd at jj , jj nn nn cc vbd ppl cs at nn in nn nn in at np ' rb vbg nn . ppss vbd ppo . . . ( nn cd ( cc rb in at nn ' in vbg rp in nn in nn , pp$ nn vbd rp in at nn . pps vbd ppl cs at nn np , cc vbd at nn to vb rb . pps vbd pp$ uh , wrb pps vbd ppl rb cs at nn in at nn in at nn cc nn in jj in abn nn . at vbg nn in wdt pps vbd dts nns . in in at jj , vbg nn in pp$ jj , vbn nn , cc abn at jj nns in jj nn , vbn to vb dt np in at nns in at nn in at jj nn , in at nn in nn . rb , ppss bed jj in ppo . cs abl at nn , rb , bedz * in ql jj nn in at nn , rb cs pps vbd to vb in wrb pps vbd , at jj nn md vb hv ben jj in ppo . cc vbd cs cs jj ' nn nn bedz to vb ppo in at od jj nn , at nn rb vbd abn pp$ nns cc nns in in vbg at nn cc abn nns in jj vb , in nn dt nn bedz vbn rp . ql rb dod pps vb in pp$ nns in at nn , cs in ap in at nn ppss vbd in at nn cc vbd ppo cs np bedz vbn in at nn , * at nn in ppo md vb . pps bedz rb vbn to vb pp$ nn . cc md ppss vb np to be dti nn vbn , vb cc do wdt pps md . rb cs pps vbd to vb cs np hvd at jj nn in at nn . at nn in abn dt bedz , cs at nn vbd jj cc pn in at nn cc nns . cc cs at nn hvd vbn rp , pps vbd at jjr nn cs rb . vbg cs at nn , cs pps vbd ppo , bedz in pp$ jj nn . cc md ppo be vbn cc rb in pp$ jj nn . at nns , rb jj nns , vbd , cc dti in ppo vbn in ppo . in nn in pp$ nns , rb vbg ppo jj nn , cs in at nn . abl nns md vb jj . cc , rb jj , ppss ber jj . cc bez at nn in nns abn ql jj in nn in at jj nn in nn in at jj ppl , cs pp$ jj nn in vbg cc nn ql ap nns . cc pps bez nn to vb in at fw . nn nn * pp$ nn , nn , vbd np in at nns . . ( nn cd ( in nn np , wps vbd in at nn ' jj nn . vb in nn . cc rb np vbd in pp$ nns . vb , vb in at jj , jj cc jj . vb in at jj nn . np , np . vbd nn np . ppss md rb in -- cc dt nn at jj nn vbd at nn ql rb , cc pp$ nns vbd abn nn . hv ppss vbn at jj nn . vbd np , wrb at nn vbd rb . vb , vb in pp$ jj in nn , jj cc vbn . vb in at jj nn . nn vb ppo rb , np , cs in -- cc rb at nn vbd rb cs cs vbn in nns . pn bedz vbn in dti nns , cs at nn in jj nns vbd in , wdt in cd in dts jj nns in at nns bed vbg , * vbg ppo . nn , at vbn nn jj ' nn nn jj in ql rb , cc np bedz vbn vbg ppo in ql ap nn cs pp$ nn nn vbd to vb . wrb dt nn bedz rp , nn np vbd at jj nn in np np . * , rb , in jj nns in np , wrb pp$ nn bedz vbn , cc at jj nn wps vbd vbn in ppo . pps vbd cs at np hvd * rb vbn nr , wrb in vbg at jj in nn , pp$ nns bed rb vbn in at nn in np np , cc at nn pps hvd vbn . rb vbg in dt nn , np rb vbd at nn in vbg at jj jj , in nn at nn md be vbn . in pp$ nn nn , vbg at jj nn to be at ap at nn in at np np vbd . at nns vbg at np . cc wrb , dti nn cc cd rb , np np bedz ql vbn in at nn in nns , np , at jjs nn , vbn in nn to vb ppo . cc at nn ppl beg * jj to vb ppo hv at nn , in abn at nn ' np nns cc nns , np vbd in vbg cd nns in nn pp$ nn . in ppo pps vbd rp . cc , cs . . ( nn cd ( ql jj vbg , cc ap jj , jj nns , pps in ap vbn in vbg cd nn rb . nn , np , vbg in at jjs in jj nn in nn , bedz vbg cd nn in jj nns , cc vbg rb nns in jj nn in at jj nns in pp$ nn . rb , cs np , at nn , bedz vbg rp in pp$ nn ' jj nn , cc in abn at jj nn in pp$ nn bedz vbg pp$ jj nns in at jj , cc vbg to vb at jj nn in pp$ vbn nn , uh . at jj jj nn vbd in at nn . in pp$ jj , vbg nn , rb vbg at nn rp in at nns in at nns . ap nn , at jj nn , ql jj in jj nn , bedz vbn rb in at nn , cc vbg at jj nn in pp$ nn , vbd in at nn in at nn in rb cd nns . * at nn in at nn bedz vbn , cc at nn in dti nn ' jj nn . cc at nn in rb vbd . pps bez rb to vb rb , cs in at jj nns in at nn in np np , dt nn bez rb ql ql jj cs dti . rb , pn bez vbn cc at nn wps bez rb jj . rbr at nn ' jj nn bez vbn rp , cc at nn in nn , in wdt at nn vbz , bez vbn in pp$ nn cc vbz at nn . cc jjt in abn bez at nn , cs in ap nns in cd , wrb at nn hvz ben vbn , * at ap nn in nn bez jj . at nn beg ql jj . at jj nn , in at vbg nn in np , bedz rb vbd in at nn . vbg at vbg nn in in at jj . at jj . np vbd rp at nn in vbn nn in at jjr nn in at jj . dt jj nn vbn at nn in vbn nn . cs pp$ jj nns vbd cs pps hvd rb nn in vbd ppo , rb in rb vbg at jj nn , wdt dti cd md hv vbn , cc rb hv vbn to vb pn in ap nns in at jj nn vbn . pps vbd at jj nn in at nn . np hvg vbn pp$ nn , np vbd jj nns in ppo , cs at nn nn md * vb vbg cs pps vbd to vb at jj nn , cs nn md vb . to wdt np vbd in in nn . rb , rb , np rb ql vbn in pp$ nns , vbg . . ( nn cd ( in at jj nn , cc rb vbd , in rb vbn nn in in vb , vb in at jj in in jj , cc rp rb . -- in vb in at jj ' nn nn . vb rb vbd rb . rb vbd in np , nn , ppss hv rb vbd ppo in pp$ nn in nn . ex bez at nn in cd in pp$ nns , cs ppss vb * . np , vb rp at nn . at jj in nn vbz rp at jj nn in nns in jj nns , wp$ nn in at nns in wpo ppss md be vbn , vbz in at jj nn in nn ppo in at cd nns . rb , ap nns rb vb pp$ nn . cc ap ber rb vbn in vbg at nn in cd cc cd nns cc ap . rb np vbd in at nn in pp$ nn . pps bedz rb vbn , jj , cc vbn in at jj , vbn , jj vb , in nn in beg vbn in at jj nn in at nn . in abl at nn , nn ppl md rb hv ben at nn in nn . md ' md * vb ppo . vbd jj . vb ppo ppo , nn . rb , rb pps ' vb cc at jj vb . in in wdt ' in dt . cs pps bedz vbg ppo rp , np vbd at jj nn in nn nn , cc in pp$ nn rb vbd at nn , to vb at nn rb , cc in dt nn , vb ppo in at nn , in pp$ vbg dti rbr in at nn . nn , np vbg at nn , vbd , rb . in in in rb , np . vb in -- ( at nn ' in jj nn , in in at nn ' jj nn , ppss ' jj nn ) in in nn in in np . vb np , nn np . in in wrb pps ' vb np , cc pps ' vb jj . jj nn . jj nn . cc in pp$ nn , vbd np . cc vb ppo hv ppo . rb , vb ppo jj , vbd np to vb . ppss ber rb vbg dt nn . nns nn ppo . vbd np . nn np , vb in rb to vb ppo . cc vbg at jj nn in np ' np nns , pps vbd ppo in at nn in at nn , cc vbd ppo rp in at nn . cc cs pps dod rb , at nns rb jj in nn . at nn vbd at ap in at nn ' jj nn . cs dt , cs cs in nn , at nn rb vbd rb in np ' rb jj nn . pps vbd ppo in at nn , vbd at nn in nn , cc vbg at nn in ppo , vbd ppo rb vbn rb in at nn . pps vbd in np ' np nns . rn np . . ( nn cd ( vbd rp in pp$ nns to vb nn in pp$ vbz , cc in dt nn at jj nn rb vbd rb in at fw . cs , cs dt nn , at nns vbd pp$ nn in at nn in at jj , ap jj nns bed vbn in nn in dt jj nn . . . ( nn cd ( . . ( nn np cd nn nn rb np at nn np . nn nn nn ( at jj nn nn pps md be vbn in nn cs abn dt nn ppss hv at jj nn ' in jj nn vbg in at fw ' jj nn . cc ppss md vb ppo vb vbg rb at nn cs ppss md vb at nn to vb in ppo . in at jj ap nns nn , cc at jjt ppss md do rb in at nn , bez to vb nn at nns md vb . rb , in at ap nn cc nn , at fw hvd rb vbn in at nn , wdt , in pp$ jj nns in . . ( nn cd ( jj nn , vbd jj nns in at nn in jj np , at nn in at jj cs cc ap vbn to be in dt jj nn vbg rb in . cc cs abn nns rb jj at nn in dts jj nns . cc cs at fw bedz * vbn in nn in ppo in abn , cc cs pps hvd vbn nns in ppo in at np in vbg at nn . rb rb cs at jj nn hvd ben vbn rb cc jj , in at nn in abn , at nn bedz vbn cs at jj nn md be vbn cs nn , cs nn vbd . cc bedz dt jj vbg . jj nns bed vbn in nn . cc cd nns , np ' rb cc nn ' np , bed vbn in nn . vbg rbr cc rbr rb , ppss in ap vbd ql jj in at nns in at nn in nn . cc rb in at nn , ppss vbd at jj nn in jj jj nn , cc rb in nn vbd in rb cs cd cc abx at nns md be jj . at nn vbd cc at nns bed in jj nn , in at nn in beg vbn rb in at nn in at jj jj . ql rb dod at nn vbn in at nn , cs in od pps vbd cs cs pps vbd ppo nn . cc rb vbg rp in at nn , in cd nns in at nns , pps rb vbd in nn , cs cs vbg in at nn . vbn , vbn . bedz at nn in at nn in at nns , wdt , in cd nn , vbd in at nn in beg vbn in at jj nn in at nn ' jj nn . cc hvg nn in nn rb in at nns , cc at jj * vbg ql rb , ppss vbd rp nn in nn , cc in at ap nn vbd in abn pp$ md rb cs to vb rb in at nn . in at ap nns at nn bedz ql jj . in cs ppss rb vbn rp at vbd nn in cd nn , cc rb vbd pp$ vbz in dt , at vbg nn vbd to vb ppo in . cc pps bedz rb at ap nns vb ppss vbd to vb . cc ppss vbd in ppo cs ppss dod vb ppo . wrb rb , at jj nn bedz vbn vbg cs nn in at nn , cs at vbn nn , vbg in at nn , rb vbd to vb in pp$ nns , vbg cc vbg . cc ql jj in pp$ nns , cs at nns vbd cs nns in vbn nn in at nn , cs at jj in rb vbd in nn , cc rb ql at nns bed jj . . ( nn cd ( to vb . cc at jj jj vbd pp$ nn , cc rb vbg pp$ nn , vbd in at nn in at nn nn at cd nns in ppo , cs cs ppss vbd at jj nn . nn , ppss vbd rbr cc rbr in pp$ nns , cs rb vbg ppo in abx nns , np vbd nn in nn in nn . cc rb jj cc jj at fw at nn vbd , cs at nns in nns wps hvd rb vbn in at jj nn ' jj nn , vbd in at jj nn wps bedz vbn , rb vbg in at jj nn , cs at jj nps dod in at jj vbg nns wps vbd in at vbn nn . in ap pp$ nn vbd jj , cc in at jj nn cc vb , pps vbd in pp$ nn at nn . cs at cd nns bed vbn in vbg jj nns in pp$ nn , cc in ap nns vbg at nn in nn in nn , dti nn vbd in ppo . nn nn wdt at jj nn vbz in dt nn in jj nn , vbd np , * in dti nn in at nn in hvg to do in ql fw fw fw . vbz in ppo . vbd nn , vbg dti jj nn in at nn ' jj nn , dod ppss rb vb cs at nn wdt cc rb hvz at jj nn ' jj nn vbn in pp$ jj nn , cc in at ap nn at ql jj ' nn in at nn . dod ppss rb vb , np , cs dt nn md rb rb jj . wrb * . nn nn ' nn vb , cc ppss vbd cs jj nn in at np vbg rb , cc pps vbz to vb abn in nns ' nns . cc ppss rb vb pps ' jj nn at nn in at jj in ap . nn nn ' nn abn cs dt nn , np . dod ppss rb vb wrb dt nn in pp$ bez at nn in vbn in at nn ' jj nn , np . vb ppo . nn rb vb in ppo in abn . cc cs rb ppss vb at nn in at jj nn , cc pps vbg rb in at nns , cc at cd in . vb rp rb , nn in in vbg in at nn in at jj nn in abx nns in in nn , md ppss . nn , ppss vb cs np to be at nn in nn . do ppss vb dt nn cc nn nn in pp$ hvg ben vbn rb in nn nn . pps ' vb at nn , ppss vb . at nn wrb ppss nn ' nn vb pp$ nn , bez cs pps vbz ppo rp rp in nn . pps vbz ppo . . ( nn cd ( vbd rb in pp$ nn , ppss vb . vb ppo . rb cs ppss vb in ppo , pps ' vb rb vbg ppo to vb in at nns in pp$ nns . pps vbz in pp$ nns , nn ' nn pps . pps vbd ' nn vbd dti nn . cc ppss ' ppss vbn ppo vb in nns in at nn in nn . at nn , cc pps ' vb rb in pp$ vbn nn . pps nns ppo rp , do ppss vb , in at nn in at nn . wdt ' in at jj nn hv ql ap to do in ppo in . vbg rp at vb cc at nn , ppss vb . nn . -- in in wdt . wrb , do ppss vb , at jj nn bez rb vbn in dt jj nn , cc at nn ex bez vbg to vb in ppo , cc vb ppo to vb rb pp$ jj nn , cc pp$ nn , cc pn in dt nn , cc rb pps ' jj nn np np . np . np , ppss ber vbg . wrb md np do dt . nn nn ' nn vb , nn , cc at nn bez at jj nn , cc at jj cd , ppss vb ppo . wrb , ppss vb cs wrb pps vbd at nn in at jj nn in nn rb , vbg pp$ nn in jj jj cc jj , cc vbg cs at jj nn bedz in nr . uh , pps bedz in nn , cc vbd at nn wdt pps vbd . at nn , vbg pp$ nns , rp cc vbz , ( ppss vb np . ( ( wdt in . ( vbz at jj nn , ( wdt nn bez cs in pp$$ , ( vbz at nn , vbg jj , in -- ( ppss vb to vb ppo . ( ( vb ppo , ( vbz at nn in -- cc in at nn , nn , cs at nn dod ' nn vb np at jj nn cs pps vbd rp in ppo , ppss ' ppss vb dt jj in cd nn . cc vb jj in in nn ppss abn jj rb . uh , rb , vb rb , cc vb ' ppss vb at jj rb . nn vb ppss vb dti jj nn cs ppss bed vbg , vbd nn , wrb in ap at cd nns bed rb vbg in pp$ nn in at nn , cc ppss md ' nn vb wrb . cd nns . nns in dts cd jj in vbn nns . dod ppss vb ppo rb , nn . nn vb ppss dod . at . rb vbd abl at nn . vbn in ppo , cs . cc rb , vb ppo , np , do ppss vb cs dt nn ppss bedz vbg in rb rb , bedz at ap ppss vb bez rb in nn at fw . . . ( nn cd ( bem ppss at ap nn wps vbd vb dt jj . nn ' nn at nn vb in rb . wps rb vbd cs at nn bedz jj . dod ppss rb vb dti nn at vbg vbg in at nn . cc cs at nn hvz at nn in nn to vb in at vb ' np nn , nn ' nn ppss vb pps md vb in at nn in nn . vb ppo cs , in . nn . wql jj do ppss vb np bez , np . do ppss vb dt nn rb . vbg in at nn . rb , cs ' np at nn cd . rb vb abn at nns in at fw ' ppss vb , cc nn ' ppo rb in at nn in dt nn , in nns , do ppss vb . rb , wps md ' nn vb to be np ' nn nn . cc abn at nns in nn md ' nn vb nns qlp to vb nns ap . cc vb rb , vb , nn vbd ppo at ap vbd rb rb , cs ppss vbd to vb np at nn in nn , cs ppss vbd at jj nn . rb , cs pps ' vb ql jj cs abn dts nns in pp$$ vb to , cc cs pps bez vbg to vb in rb , wdt nn md pps do in nn ppo rb in in vb ppo cs . vb ppo at jj vbg , rb . cc pps ' vb vb rb . vb ppo rb . cc vb vbg ppo . vb pps md vb ppo in pp$ nn to vb ppo , cs in in rb , cc vb ppo in in wdt rb . nn md vb to vb ppo vb ppo . ppss ' nn vb ppo abl at nn in jj nns cs pps md ' nn vb to vb pp$ nn in at vb ' np nn rb in at jj nn , vb rb rp in at jj rb , wrb pps vbz , cc rb in at jj nns wrb pps vbz ql ap . uh at nn , nn . do ppss vb ppss ' in jj in at nn . wps ' in jj in ppo , in at jj nn wps vbd ' nn vb ppo cc vbd ppo in nn in nns , cs pps vbz , cc vbz ppo vb in vbg nns . rb , cc vbd at nn in ppo , cs abn at nns at nn vbn , pps ' vb nn in ppo . ex ' in at nn . do ppss vb np vbz in nn nn nn . do ppss vb ppo . ppo ' ppss vb ppo in jj , nn . cc ppss bem vbg rb to vb at jj nn in rp in ppo . cc cs ppss vb pn ql jj vbg rp , ppss ' pps rb vb ppo in at jj in pp$ nn , cc vb in in vb rb , np , ppss nn ' nn do . . ( nn cd ( ppo . cc cs pps vbz dti nn , in at nn ppss ' ppss vb at nn in pp$ nn in pp$ nn , vb ppo in at nn , cc vb ppo abl at vbg cc vbg , cs pp$ nn md vb rb rp in at nn in in do ppss vb . cc rb , ppss rb vb wrb pps vbz ppl vbn in dt jj nn , pps ' ppss vb rp in at jj nn in vbg pp$ nn in pp$ nns . cc wdt md ppss do in at nn , np . do in ppo . vb ppo in at nn nn wrb ppss vb nr . in in wdt rb . rb , do ppss vb wdt ppss vb , cc hv ben vbg ql rb , vb . vb cc * vb , rb ppss ber in at nn . at nns bed rb vbn , in nn at jj in at jj nn , wrb nn nns cc ap nns bed rb vbn in vbg ppo . dod ' nn ppss vb ppo rb . vbd nn . rb , ppss ' pps rb vb dt ql jj ' nn nn vbd rp in dt nn ' nn . in jj nn , nn ' in vbg vbn jj . ql rb , at fw rb vbd rp in at nn jj ' nn nn , rb , in at nn in abx nns , pps vbd ppo rb nn . cs rb vbn , ppss md rb vb . ql , wrb in cd nn ppss vb in np ' nn nn , ppss vb in dt nn . cc rb , in at ap nn , vb in np ' rb cc ppss vb rb rb . cc in ql jj nn . rb , dti nns in rb vb vbg nn . uh , ppss jj . vb abn dts nn in nns rb , cc rb ppss md vb nn cc nn . in nn in at nn in at ql jj , wrb vbn in at nn , at ap jj nns rb vb nn cs in at nn in at nn jj . rb , in at ap nn , at nn bez vbn in jj , cc in at ap at nns cc nn ber rb vbn cc vbn in nn , in abn at rb vbn jj nn vbn in wdt bez vbn at nn in nn . cc pn cs dt , in at jj nn , hvd ben vbn . at nns in abx nns hvd vbn jj . cc at nn in jj nn * at ap vbd at nn vbg at nn in nn nns . nn , np bedz rb vbg at ql jj ' nn nn , cc rb cc nn vbg in at jj nns rb in at . . ( nn cd ( nns in pp$ jj nn . cc np vbd rb to vb , cs at np vbd pp$ nn . cs , cs at np ' nn nn bedz rb in abn pps vbd rb to vb in , cc vb nn ' nn . cs at nn vbn rp , np nns bed jj in ppo , in abn dts vbg nns . . . ( nn cd ( . . ( nn nn cd np np np ' nn nn in in nn nn ( rb , rb , ber cd jj nns , vbg pp$ nns rb . vb ppo vb ppo , cc vbd rb pp$ jj . in at jj nn in nn nns , at jj nn cc at jj nn ber in rb at ql jj . ppss ber at ap nns rb vbn in nn . to at np , ppss vb at cd nns in abn at vbn nns in at jj . cs at jj nn in ppo bez rb jj in pp$ nns . cc cs at nn in dt bez dt nn vbg in at fw ' jj nn . cc cs ppss md rb vb in cd in at ap , in rb vbg in at nn : in in wrb , ppss md vb to vb , md ppss vb at jjr nn to vb jj nn cs rb . in at od nn , ppss ber vbn in at jj nn in dts nns . abx ber jj qlp in abn nn . cc ex bez at jj jj nn in at jj nn ' nn wdt at jj nn ' cc rb vbz . ex bez ap nn in at jj nn ' jj nn . cs ppss vb ppo , ppss rb vb at jj nn in ppo , in nn in vbg nn . in at jj nn , rb , dt nn bez vbn in at nn cc nn nn in pp$ nn in at nn , vbg nn in vbn nn cc jj nn . in jj , pps bez wdt at nns rb vb at nn in vbn jj . vb ppo rb vb wdt bez ql jj in dts nns in in rb , at cd ql jj nns , at nn cc at nn . . . ( nn cd ( ql rb in at nn in at nn , cc rb rp , in at nn in dtx jj ' nn nn , cs ppss rb vb , ppss md in ap vb at jj nn , wdt ppss md vb to be at jj nn ' jj nn . rb rp in abn nn bez pps in at nn in at nn . rb , in dt jj nn nn in at jj ' np nns , pps bez jj cs pps md rb vb at nn wdt bez rb rb , at ap cs pps md pn rb jj . in at nn , at nn in at jj ' np nns vbz in dt in at nn ' np nns . cc ppss md vb , in ppl , wrb pps md nn in ppo , dod ppss rb vb nns in pp$ nns . ppss md vb cs ppss md rb vb dti cd nns in nn in nn in at jj nn in nn in nn . cc in cd ap in ppo . cs pp$ jjt nn bed vbg rb in ppo , in vb vbn in jj nn , ppss md * be jj to vb ppo , dti rbr cs cs pps bed vbg in ppo in rb . in at nn , ppss md hv cd nns , rb to vb . cc , in at ap nn , rb , cd nns ( nn nns ) : in wdt bez pps wps vbz at nn in at nn in in wdt , rb , cc pp$ nns . rb , cs in ql ap nns cs ppss md rb vb in , at nns ber ql vbn cs rb to vb pp$ jj nn , cs cs to vb cd nn cc * cd in at nn . at jj nn in at jj ' np nns , rb vbn cs ppss ber in ap jj nns in jj nn , wdt vbz in ppo cs at jj nn vbg cd nns in nns . dt , in nn , md rb vb at nns wdt dt jj nn vbz . at jj , rb , md vb cd jj nn in dt nn , cc dt jj nn in dt nn . cs abn in md be jj nn cc nn in ppo . nn md , in nn , be vbn to vb rp in at nn in at nn in nn in cd vbn nns in pp$ nn . cc in at jj , dts cd nns ber rb vbn , vbg cd jj nns , cc rb vbg at nn . dt nn in at jj ' np nns bez at nn rb to be vbn in nn in at nn . cc to be vbn in at nn in dti jj nns . at jj cc ql jj nn md be vbn in . . ( nn cd ( dt jj nn cs vbg at jj . cc ppss md be jj in at nn . ql jj cs at nn ' np nns ber jj in at nn , at nn in vbg bez jj . dt bez , pps md rb vb rb vbg wdt nns ber in ppo . rb , dti cd ' jj nn md vb ppo , cs cs pps md vb in at jj nn in nns in cd nn , pps bez ql jj in ppo , rb , cc rb , to vb dti cd nns in in wql jj cc rb jj in in in cd cc at ap nn in nn . rb vb cs ppss vb nn in nn cc vb dt ap . cc cs ppss rb vb to vb dts cd nns , cc vb dt in at nn in jj nn . rb , in nn to vb pn in ppo , in abl at nn cs to vb pp$ nn to vb in ppo , at ap md be ql vbn in pp$ jj nn . wql bez ppo , rb , in at jj . jj , abx pp$ nns , in ppls , md rb vb . cc bez pp$ nn ql ql ql jj , vbg , cc jj cs nn ' np , cs pps md in at ap nn in nn rb vb cd jj nns , cd in cd nn in ppo , cc at ap in at ql jj nn . cs pps md , rb bez pps ql jj at nn in ppo , cs cs at nn bed jj rb to vb in at nns in cd jj nns in nn . cc , rb vbn , bez ex dti nn in dt nn . pps md be cc at jj nn , cc pps hvz rb vbn in ppo , cs at jj nns in nn vbn in dti nns wrb vbn in cd cc cd nns . at nn cc nn in jj nns , ql jj in jj nns . ppss vb cs abn dt rb vbz in at jj nn in nn , in wdt pp$ vbn cc ql jj nns in nn md vb ppo . cc at nn in at jj bez jj cs jj cs at nn . cs ppss ber at jj nn in pp$ nn , ppss md vb rp dts cd nns in nns , cc rb vb dt nn . at nn hvz at jj nn wdt . cc in at nn ppl ppss md rb vb at nn , ql ql jj bez pps . pps bez vbd at ap in at nn . in nn in pp$ nns , dt jj nn bez to be vbn in at nn jj cc at . . ( nn cd ( rb . cs at nn in at ap hvz at jj nn , cs in at ap bez rb cc rb vbn rp in at nn , cs cs to be ql jj in in . bez pps * jj , cs ql jj at nn cs at jj md vb at nn in ql jj at nn , cc vb at nn in at nn wdt bez jjr cs at nn ' nn . cc cs pp$ nns bed jj cs at nn in np ' rb jj nn . cc pp$ nns jj cs at nns in nns . md dt vb ppo dti rbr in nn , cc jjr in nn . * in abn . -- in wrb rb do ppss vb to vb pp$ nn . vb ppo . vb ppo rb in wdt nns cc nn in nns ppss hv in nn , nn in at nn jj ' nn nn , cs cs pps md vb nn rp . rb , vbg in at nn in at nn , hv at jj in at nn . cc bed pps * cs at nn bez rb ql vbn in ppo , in at nn ppss md vb in at jj np nn nn in pp$ nn . cc vb ppo vb rp rb in dt nn , cc vb in ppo wrb ppss ber . wdt at ql jj cc nn in vbg nn . in nn in nn , vbn , cc rb vbn in at vbg jj nn , jj cs jj nns . cc vb rp rb , cc vb in dt jj jjr nn , wdt vbz cs at jj jj nn in at jj jj in nn , in at nn in cd nn , rb in cd nn . cs ppss vb ppo rp , cs cs to vb ppo rb , cc vb pp$ nns in nns , pps vbz at jj nn . cc jj , uh . pps vbz in ap at jj nn in at nn , in wpo dts nns vb in vbg nn . cc ql ql jj bez pps to vb , wrb nns rp in at nn , ppss vb dti jj jj , vbg rb vbn , in pp$ jj nn , dti cd nns rb , vbg rb rp in nn in nns in pp$ nn , in abn at nn cs at nn ' in jj in nn . dt jj bez * jj . pps bez rb jj . rp in nns , rb . nn . cc ql jj , cs at nns in pp$ nn hv vbn , vbg ppo rb in dt jj nn in nn , at nn in abn pp$ nn , wps md , at nn , jj nn in nns in ppo . in ap nns dt jjr nn in in beg rb vbn in at vbn nn in in bez jj cc vbn in nn in at nn in vbg at nn nns , cc vbg at nn in . . ( nn cd ( cs jj jj nn in wdt at nns vb abn nns in jj nns , in nn , nn in nns , cc vbz in vbg in nns . in at jj , jj vb at nn bez vbn in nn , cs cs pps bed at nn . cc wrb at jj nn vbz in in dti ap nns in at ap nn in in np , nn , cc np , beg ql vbn nns , ber vbn in vbg nns . in at jj nn in nn , np nns at nns . rb at nn bez vbd rp in nns , cc at nn beg vbn in rb , ppss vb rp dts nns , cs np nns vb nns in jj nns rp in jj nn in nns . ex ber rb cd in cd nns in abn . in jj nns , rb vbn rp , cc vbd . cc vbn in pp$ jj nn . at nn bez rb vbn in nns , cc vbd rb cs nns in vbg nns . . . ( nn cd ( . . ( nn hv cd np nn np ' nn nn in in nn nn ( vbg at nn , vb ppo rb hv at jj jj nn in at jj nn ' jj nn . cs in jj nn at jj nn nn ' jj nn md be vbn in at jj nn in nn ( rb in nn , wrb pps bez ql rb vbn ) . rb , in at jj nn , at ql jj ' nn nn vbz at ql nn nn in at jj nn in vbd nn . cd cd nns rb at jj jj nn vbd pp$ nn in dt in at nn ' vb ap . cc in dt ap ap cc nn , cs jj nn in at nn nn , in at vbg nn , md ql rb be vbd , pps cc abn pp$ nn . cc cs ppss vb rbr in dt jj nn pps vbz to vb jj nns , in in pp$ nn in nn . cs ppss vb in pp$ nn cc vb in dts cd nn in vbn nn in nns , ppss md vb at jj nn in at jj nn in nn , cc dts . . ( nn cd ( nns , at nns in pp$ vbg in nn . rn , rb , cs ppss vb pp$ nn in dt jj , jj , nn in jj nn in at nn in at nn in in dt nn , jj nn , wdt at nns vb at nn , cc at jj nns at nn in at jj nn . vbg pp$ nns rb in dt , ppss md vb at nn in at nn in dti jj nn , in at nn ' jj nn in pp$ nn . in dti nn , wrb ppss vb dts jj nns wps vb rb in dt nn , abl at nn md be ql jj to vb in ppo . cs , rb , pp$ nn hvz ben vbn in at jj nn nn rb vbn in ppo . in wdt nn ppss md vb jj nn in vbg wrb dt jj nn bez rb at jj nn in at nn , wp$ jj nn hvz ben vbn rb in ppo in dt jj nn . cc cs dt jj be at nn , pps bez at ql jj vbg nn in nn at nn . vb in dt vbg jjr nn . wdt at jj nn cc nn bez rb . at vb cc nn , in nn ' jj nn , in cd nns jj cc cd nns jj . at vb cc nn wps md vb ppo dti cd nns in nn cc ap . at jj nn , rb , cs dt jj jj md be nn in jj . at jj bez in at nn in . rb at nn in at jj nn bedz vbg rp at jj nn , wrb nns vbd at nn to vb . rp dt nn , cs in at jj nn , ppss rb vb in at nn . in pp$ nn bed ppss in nn , ppss md vb dt to be at nn in at np vbd . jj nn . bez dt at nn cs np vbd . at nn bez rb cd nns jj , cc nns in at ql jj nn , cs cs ex bed at jj nn in nn rb . cs dts jj , vbn , jj nns , vb ppo in dts jj , ql jj , nn in vbn nns in jj in nn , vb cd cd in at nn , wdt in in at jj nn in at nn cc nn nn , vb dts jj nns wdt hv rb ben rb vbn . at nns in dts nns ber vbn in jj nns , in wdt at ql jj nns at nn , cc in wp$ nns pps vbz at jj nn , wrb jj in vbd pps vbz in at nns in nn in vbg nn . in at jj nns in nn , cs ppss vb in pp$ jj nn , ex ber ap jj nns , nns , nns , cc nns , wrb dti nns vb . . ( nn cd ( at nn ' jj nn , cs at nn in at nn in pp$ jj nns . cs at nn in dt nn bez rb in jj , cc pps hvz at nn in jj nn . in dti nn , cs ppss vb in ppo , ppss md vb at ql jjr nn in at ql jj cs in od nn md vb jj . in jj nns , rb vb to hv vbd at ql jj vbz in dts nns . cd nn in nps vbz ppo at jj nns rb in at jj ' nn nn . dt , nns ' nns . at od jj nn in nn vbz at vbg jj nn : ex ber rb cd cd cc cd nns vbg in dt nn in pp$ jj nn , wdt nn in pp$ nn in dt nn in pp$ nn . cs at pn vbz , dts ap nns ' vbz , nns , nns , nns , cc wdt ppss vb , vb in at nns pp$ nns cc ap nn nns . cc in dt jj , at nn hvz rb ben in at nn . pps bedz in nn np ' nn nn cs at nn bedz in pp$ nn , at nn beg rb abn at nn . cc cs dts jj nns vbd rb rb , cs in at nns in at jj , cs ppss md vb . rb rb , in at nn , in at jj nn , do ppss rb vb in at ap nns in nn . at nn beg at nn vbn in at ap nn . cc rb vb abn in nns cc nns in at nn , cc , vbg in at jj nn ' jj nn , vb in ppo rb . vbg abn dts nns in nn ql rb vbd rb , md ppss * vb ppss bed in at jj nn nn , cc vbg in pp$ cd nns . in at nn in at nn ppss hv at nn in at jjt np in in at nn , wdt bez vbn , cs pps bed , in at nn in at nn . pps bez ql jj cc jj , cc jj to vb in nns in vbg ppo in nn . dt jj nn rb in ppo . in at vbg nn ppss md vb pps bedz at cd in jj . dt bez , pps md vb ppo in dt nn in nn . cs dt , ppss md hv rb vbn at nn in wdt ppss . . ( nn cd ( vbn in in in cs at jj nn cc at jj nn hv ql ql jj nns . to vb rp , rb . in at jj nn ' cc ex bez at jj rb in nn . at nn nns in abn . at jj , jj jj in at jjr nn , cs at jj nn ' nn . cc in at jj nn ber rb dti in dts nns in nn . at jj jjr nn . cc rb pn in at nn . rb , at jj nn hvz cd jj nn in nns , at jj nn rb cd . vb pp$ ap , rb , in dts jj jj nns , cs ppss rb vb rb . in cd md rb vb , vbn , in at nn . at ap md * be ql jj in vbg . md ppss vb at nn in at jj nn ' cc rb . pps bez at ap pps vbd in , rb dti in at jjr nns in at nn vb rb vbn rb . nn vb pp$ jj nn to be jj in at nn in jj nn , vbn in at jj nn cs in nn . cc vb at ap nn ' jj nn . vb cs jj jjr nn , vbn in nn in at nn ' jj nn , ql ql rb to vb at nn . doz * dt jj nn vb to vb in at jj jj nn in vbg nn . dt ql jj ppss vb to hv ben at np . at jj nn , at jj , wps md hv vbn rp np in pp$ ap nns . . . ( nn nn . ( dt vbz ppo cs at jj nn rb hvz at nn in jjr , cc in at nn , vbg in at ap vbn jj nns in at jj nn in at jj nn in at jjr nn . rb dts nns vb at ql jj nn in pp$ rb jj nn . . . ( nn cd ( . . ( nn fw cd np nn in nn ( rb vbg , in at nn , at jj nn ' jj nn , ppss md hv ppo , cs at jj nn , rb in in rb vb pp$ jj nn , in abn pp$ vbn nn . nn md hv ppss vb ppo rb in at jj nn in vbg in ppl dti vbn , jj nn in wdt vbg in nn nn md be vbd rb . rn bez at jj nn . cs ppss md cc rb vb dt nn in ppl , cc in rb vb at jj cs in cd in at ql jj , . . ( nn cd ( cc * at ql jj nns , rb rb to be vbn in abn vbn nn . ppss vb cs in at jj vbg nn in at jj nn , at nn in pp$ nn vbz at ql ql jj nn in at nn . ppss vb cs at jjr nn in dt nn nns ql rb , cs cs to vb ap in at nn in at jj nn wdt vbz at nn in cs jjr nn . ppss vb cs at nn bez rb in at nn , ap in at ap nn , rb , cs cs pp$ jj nn bed rb in pp$ nn . rb ppss vb cs at jj hvz at jj nn . cc dt wdt nn pps hvz -- in pp$ nn nn in in bez in at nn in pp$ nn . ppss vb cs pp$ nns cc nns ber in at nns in pp$ nn , rb cd od in pp$ jj nn in at nn . wrb , ppss md rb hv vbn cs at nn in at jj nn ' jj nn bez at jj , jj nn , in at ap nn cc jj nn in dti nn rb . rb , ppss ber rb to vb cs rb in at jj , jjr , rb vbg nn in at nn in at nn , bez ex at jjt nn in nn . cc * cs ppss vb in cd nns in at nn do ppss vb in at jj jj nn . ql cs dt jj jj jj nn bez cs cd nn . rb , cs , cs md rb be vbn , pp$ nns rb vb at ql jj nn . rb , ppss ber rb to be vbn in at nn in at nn wdt ql rb vbz abn dt jj jj . in dti jj nn ppss hv vbn in ppo wrb at nn nns at nn in at jj , cs at vb nns at nn . ql rb in at nn . cc in dt nn : in at nn dt nn , cs * ql jj , bez in at jj nn , jj in dti nn wps hvz * vbn ppo . at jjt jj nn , at jjt nn vbd in at jjt jj nn , rb vbz in ppo . pps bez cs cs at nn in at jj nn bed vbn in nns ' nns . nn do * vb cs dti nn vbz in ppo . vb ppl rb in dt nn . wrb cd jj , vbn nn nn in nn cc nn in dt ap in at nns , wdt do at nns do . ppss do * vb in ppo , in at nn in vbg nn , dti rb jj nn , . . ( nn cd ( cs nn cc nn . ql , ppss vb rb at jj , jj nn in nn cc nn , jj in at jjt cc jjt in nn in nn . wps rb cc jj vbz at nn wdt md hv vbn abn pp$ jj nns cc nn nns . in ppl dt rb vbz at jj nn ppss vb in . cc jj in dt , pps hvz rb vbn in ppo , cs cs jj nn vb wdt bez vbn at vbg nn in ppo , jj , in nn , in nn cc nn . cc cs at jj nn , cs rb cs ppss vb , hvz at jj nn in ppo . vbg , rb , at rb jj nn in wdt pps rb vbz pp$ nn rb in at nn , cc nn vbz in ppo rb vbn rp in at nn . in at vbn nn in pp$ jj . in at jj nn in pp$ nn . pps hvz rb vbn in ppo , ppss vb , cs dts jj nn in vbn nns ex md rb hv dti rb jj cc vbn nn in at jj nn , cs cs to be jj in jj nn cc nn . cs dt be rb , vb at nn in dt md , in wdt at ql jj cc jj in abn nns vbz . rb , nn . rb vbg dt jj , jj , jj nn , cc dt ql jj nn in . ex vbz in ppo abn at nn in jj nn , rb to be rb vbn cs vbn nn bez in in in at nn . cc abn jj in cd nn , cs at jjt nn . ql cs wrb ppss md rb nn in ppo abn at nns cc nns in nn rb vbg in dt jj nn . wrb ppss md vb ppo dti in pp$ ql jj nn nns . ppss vb ppss md hv vbn ql jj nn , cc be jj to vb in dt . cs cs at jj nn nn at nn in at np in np , cc vbn at jj in at jj , ppss md * vb cd nn in pp$ nn in nn . in cs ppss vb at jj , ppss ber cc at jj cc nn in nn . cc jj nn bez at nn in nn nns rb to vb . wql jj at nns in at nns rb . wdt fw at jj nn vbg at nn nn ' jj nn in np . . . ( nn cd ( . . ( nn np cd np nn np nn ( rb vbz at vbg in at nn . cc to vb ppo rb , ppss md vb pn in at jj jj nn in at nn vbn in . in at jj jj ' nn nn cs at jj jj , ppss md , in at vbn nn , rb vb ppo in cd nns , wrb at jjr bez at jj nn , vbg at nn cc nns , cc at jj at jj nn ql jj in nns . pp$ jj jj nn vbg at vbn jj jj nn in at jj . in at nn in at nn rb in dt jj vb , cc rb ppss hv cd ql jj nns , wdt rb bed rb vbn in at jj nn in at jj jj nn . at jjr jj nn , vbd at nn , bez cd jj nn in nn , vbn in at nn cc nn in nn , in cd cd vbn nns , in jj jj jj nns in pp$ jj nn . at jj nn , vbn cs at nn , md be vbn cs at jj np nn in at jj nn . cc cs dt jj jj jj bez rb vbn in nn , cs at jj ' in jj jj nn nns jj jj nns in at jj nn in pp$ jj jj . rb , cs cs in np bedz rb vbd in at ql jj in at nns in at jj nns , cs at jj in at jj vbz in rb at ql jj in abn pp$ jj nns . rb , at ql -- vbn nns , in pp$ ql jj , jj , cc jj nn . cc bez dt jj nn vbd jj in dti ap nn in at nn . cs in nn pps vbz ql jj , rb , rb . . ( nn cd ( nn in at nn , in nn , pps rb vbz in nn . vbg rb jj jj vbz , cs wrb at od jj jj nn bez rb vbg in nn . at jj jj ' nn nn rb vbz in cd cd nns in nn , cs in jj nns , jj in ppo bez vbn , nns , cc nns rb , cc bez rb rb vbn in at jj nn in vbg wdt ppss md . nn vb * in wdt jj cc jj nn at jj nn bedz vbn in , cc in jj nn cs nn md * rb hv vbn in at jj nn in vbn nn , cs at nn in at jj fw , vbg at jj nn in at jj nn ' jj nn . pps md hv ben vbn cs at np nn in at jj nn vbz at jj nn in at jj nn in at nn . cc cs in in cs hvz ben rb vbn rb in in at nn vbz cd od in at jj nn in at nn , rb vbg dt nn rp in cd nns in at jj jj jj , ppss hv ap cs cd in cd nns in at nn in at jj , wrb pps bez rb vbn rp cc rp in at nn ' jj nn . cs in vbg at jj , at nn ' jj nn bez vbn rb in at nn wrb at nn bez rb vbn in at nns nn . pps hvz , rb , to be ql jj , cs at jj , jj nn md vb at nn cc rb vb rp pp$ jj nns . pps bez dt vbn nn in at nn , rb , wdt bez in ap vbn rp in at nn , cc vbn in dt nn in at jj vbg nns , wp$ vb nns , in cd nn , vb abl at nn in nns in dt nn . ql rb beg vbn , vb rb , ppss vb ppo , in dt jj cc in in in dt jj nn in in ql jj nn wrb at jj nn ' in jj np nn bez vbn . . . ( nn nn . ( nn bez * at jj nn . pps vbz in at jj jj nn . nn vb * cs pps hvz ben vbn rb . at nn bez at jj wdt vbz in at nn in hvg pp$ jj nn vbn in at jj nn in cd nn , rb in at jj vbg in abx nns . . . ( nn cd ( . . ( nn np cd nn nn np ( np cs at nn , np vbz rb . cc in vbg pp$ jj nn , vbz rb rp in at jj nn in nn in nn , in at nn wrb pps rb vbz in at vbn nn . pps hvz vbn in ppo at jj nn vbd at nn , vbg in rb cd nns , vbg in at ap in vbd nn . vbg dt nn , cs cs pps vbz rp in at nn in nn , pps nns cd nn in at nn , cs pps bez vbn cc rb vbn in at nn in nn . rn , nn in rp in nn , in at ap nn , at jj nns in at nn , cs rb pps vbz in at nn in at nn . ex in in rb rb vbn in at nn in at nn , in wpo pps rb vbz in -- pps vbz dti jj nn vbg at jj nns in nns in at nn in at nn . at jj in vbn jj nn beg vbn rp in ppo , pps rb vbz in at jj nn to vb vbg in at nn . in dt nn pps vbz ql rb , cs at nn in nn in dti jj nn , vbg at nns to vb wrb at nn bez vbn in . in at nn dt jj nn bez rp , at jj nn in vbn nn , rb cs at nn in nn , hvz ben vbn in cd nn in at nn . cs at ap nn , beg vbn in at nn , bez rb vbn in cd cc cd jj nns . dts ap rb vb at nn in nn in at jj , in wpo dt nn hvz vbn rp at ql jj nn . vbg dt nn in at nn , np rb vbz at nn in at nn , cs pps rb vbz . rb vbg at nn in at nns in at nn , rp vbz at nn rb , abn vbg cs at nn in nn ' jj nn in jj nn . rb vbn in pp$ nn , at jj in jj nn bez vbn in at vbn nn , cc rb vbn in at jj nn . rn nn in vbg rb , pps rb vbz in at ap nn cs at jj nn md vb at ap . in at nn , np hvz to vb pp$ jj nn rbr cc . . ( nn cd ( rbr , cc jjr cc jjr in at nn , cs dti cd nns in at nn hv vbn rp . rb , at nns in at fw hvd ben jj dti nn in dt nn . ap nns hvd ben vbn in at jj nn . wrb abn in rb at jj nn vbd . cs pps bedz cs np , cs jj np , bedz ql jj cc jj cs to vb vb in at nn pp$ cd in vbn nn in at jj vbd nns vbg at nn . cc cs at nn wrb pps vbd bedz ql jj cc jj . cc cs at jj pn ppl md hv ppo to vb rp rb , in vbg pp$ jj nns . wrb pps bedz rb , ex bez at vbg rb . cc , in at jj , cs at od cc od nn vbd rb rp in in pp$ np . jj np in in cs at nn nn nn in at jj rb , vbd nn in rb rp in dt jj nn in np , cc in at jj jj nn , vbd vb rp in nn . nn rb . vbd nn , wps in at jj nn rb vbd in pp$ nns . vb at nn dt nn . cc vbg cd nn in ppo , cs cs at jjr to vb pp$ jj nn in nn in at nn ppl , at nns vbd ppo rb rp in at nn in at nn , rb cs np md hv vbn pp$ jj nn . nn , ex bedz at jj nn . vbg in at nn , ppss vbd at rb jj nn nn cc vbg rb in at nn in at nn , cs cs dt nn vbn in dti jj nn . cs pps bedz rb at jj jj rb vbg in dts nns at jj nn in wdt pps hvd vbn . in dt nn , cs nn , in at nn in at nn , bedz vbg at nn in in wdt hvd rb vbn jj in at jj vbg nns in in at jj vbg nn bedz vbn . cc in at jj nn in abn , cd in at cd jj nns vbg at nn vbd rp , cc in at jj nn at jj nn rb vbd , cs at jj nn vbd cc vbd cs cs vbn in at nn . at cd vbg nn , in wdt at jj nn rb vbd , vbd at nn to be in at nn in vbg nn . at nn rb ql jj in at jj nns in at nn . vb rp , vb rp . vbd at nns in nn , cc . . ( nn cd ( in cd nn vbg rp in at jj nns , cs cs cs at nn md vb , pps md rb vb vbn . at jj hvg vbn at jj nn , vbd rp at nn in at rb vbn rb , vbg cs at vbn nn md vb ppo , cc rb be vbn rp . in nn ' jj nn , nn , vbd np , ber ppss vbg nr at nn rb . -- in nn . wql md dt vb ppo . nn cs nn in vbn nn in nn in pp$ nn . nn , md ppss . vb jj in at nn . vbd at nn cs at vbg in at nn . rb in at ap nn , in at nn in nn , at jj nn vbd in at nn , cs np ' nn nn in nn in at nn . at rb vbn nn vbd rb in ppo , to rb in pp$ vbg nn . cc abn vbd pp$ nn , cs abn vbg in in rb in at nns ' nns , cc rb in at nn in in nn , in at jj nn in nn , bedz rb vbd vbg in at jj nns , cs jj , vbn in jj np bedz vbg ql rp in at nn in at nn . cc rb hvd at vbg nn vbd rb , wrb at jj nn in at nn in nn in pp$ nn , bedz in cd jj nn vbn vbg in at nns . at ap , at jj nn vbd cs pp$ jj np hvd vbn in at nn . pn vbd nn bedz vbn in at nn , cc at nn vbd at nn , cs nn vbd nn , cc at nn in cc at nn cc at nn md be vbn . dti nns rb vbd in at nn rb , cc vbd at ap rp in at nn . uh . uh . vbd nn , abn in rb , in pp$ rb jj , vbg vb rb . cc vbg rbr rp in at nn , ppss vbd at nn vbd rb in at jj nns . at nn jj to vb , cs at nn vbd rb in at nn in at nn . abx . abx . -- in pps bez abx . -- in vbd vb rb in at jj nn . cc rb cs , np bedz vbn rb vbg rp in cd nn , cc in at ap vbg at jj nn in at jj . vbn in at vbg nn , ppss bed rb vbn in at nn . cc np bedz jj in vbg to , cc np dod * vb ql jj . . . ( nn cd ( rb , wrb hvd dt jj nn ben vbn . wrb , vbg in at rb vbg nn , np in pp$ jj nn hvd vbn nn vbz in pp$ nn , cs cs in nn at jj nn rb . rb vbg pp$ nn , hvd vbn pp$ jj nn ql rb cc rb , cc rb vbd rp pp$ jj nn in at nn . pps vbd , cs in od nn in in ppo , at nn bedz vbn . cc rb vbg cs dt bedz * cs pps md to be , cc md nn jj nn . in in pps hvd vbn rb at nn , cc in at jj nn cc nn , hvd vbn at nn in at jj . rb cs in at ap nn , pps vbd rb in at jj jj nn in in nn rb . cs in at jj nn ppl , wps bedz vbg ql rb cs md be vbn . cc rb , in at nn cc jj nn in nns in np , at nn , cc rb , nn in np , bedz rb vbn , in at nns , rb , in at ql jj cc rb jj nns . wdt bez at nn in at nn to be vbn . np md be vbn in at ap nn in nn cc nn , vbg cc nn . nn vb cs dt jj nn in at np in np ' wps md be jj to vb jj in dti nns , cs ppss ppls md hv rb vbn cc vbn in dti cd ' rb vbg in at nn rb . at nn wdt * rb vbz , cc in ql ap nn rb cs at jj ' nn , vbg at vbg nn in at nn in at jj nn ' cc rb . cc , nn , pps md be rb vbn , wrb bez dt . ppss vbd at vbn , vbn nn in at jj nn , bedz at jjt cc ql jj nn in ppo . cc rb ppss jjt pps vb in at nn in at ql jjr jj nn in ppl . ppss hv ppo rb . * in abn , cc ppss hv ppo . in in at nn jj nn vbd rp , at nn hvd ben rb vbn in pp$ jjr nns , vbg jj cc at jj jj nn in at nn in in at jj vbn , vbd nn , cs ppss hv rb vbn , ql jjr cs at nn nn , cc at nn in wdt vbz in ppo cs vb rb . cc at nn in jj nn in dt nn bedz in at jj nn rb vbn in at ap nns in at nn vbg jj in ppo , cs cs pps vbd ql rb cc rb qlp , vbg np at jj nn in vbg pp$ jj . . ( nn cd ( nns in at nn , cs ppss md vb . rb , pps bedz at vbg nn , cs pps bedz . rb , hvd np vbn in dt nn , pps hvd ben at ql jj vbg . vbn in at ap nn cc jjt in jj nns . jj , jj , cc vbn in at jj jj nn cc nn nn in at jj . rb pn jjr nn md rb be vbn in in at jj nn in at np nn in nn , wps vbg nn in at nn in at jj nn , vbd jj vbg nn in ppo , cs vbg ql rb rp , pps vbd ppo rp , cs cs pps vbd vbn . wql ap , vb ppo , hv rb vbn in np ' nn nn nn , cc rb vbn rb . . . ( nn cd ( . . ( nn cd cd np np ( to vb at nns in pp$ nn , cc vb at nns in at nn in dt jj . dt bez at nn wdt at nn cc nn hvz ql rb vbn . abl at nn md vb ql ql jj cs in np to hv vbn at nns in at nn in nn , cc in nn to hv vbn at nn cc vbd at nn in at np . rb , in dt jj nn in pp$ , np * rb vbz in at jj nns in nns , cc rb rb nns at nns in nns , nns , nns , cc nn . cc vbz in nn in at nns in nn jj rb . cc hv nn cc pp$ nn np vbd to vb rp dti nns vbg at jj nns in ap nns in nn . rb , cs ppss bem cc rb vbn in at nn , in at nn in dts cd fw in nns in at jj , ppss md do pp$ nn . nn vb abn nns . ppss vb wdt ppss md . rb vbn , at jj nn bez at jj nn . pps hvz at jj nn . cc cs at nn bez at jj cc ql jj in at nns . cc cs pps rb . . ( nn cd ( ql vbz cc rb vbz pp$ vbn nn . rb pps md vb cs pp$ jj nn , cs at jj nn , md ql rb vb at nn in at jj . in cs in nn nn , at nn , nn , nn , cc nn in dti nn , bez vbn ql jj in at nn in at nn . cs at nn md be ql in vbg in at vbn jj in nn nn in at nn . vb at nn in np ' nn nn nn , cc wdt at jj nn . rb , jj bez in ql jj at nn , abn pp$ nns ber ql jj , cs at ap nn wdt in at vbn nn bed jj , in ppo bez at nn in abn . rb , pps bez at vbn nn . at nn in at jj md hv ben jj . cs in pp$ jj nn ppss vb in pp$ jj nn in pp$ jj in nn , pp$ jj nns in ppo ber rb vbn in at nn cs pps hvz at nn to be vbn . at jj nn , wdt ql rb md vb in vbg rb wrb jj at jjt jj nn in pp$ nn . in dti nns , rb , at ql vbg jj nn to be hvn in at jj nn , bez cs in at jj nn in pp$ nn . dt nn bez jj . in vbd at jj jj nn bez cs at nr wrb vbn in at nn . in at nn in at nn , at vbn nn in at nn hvz at nn in at jj in ppo . vbg jj nn in nn nns , at nn ' jj nn bez jj . jj cc nn , at jj nn bez cs dt jj jj nn vbn in at jj nns in pp$ nns . pps vbz np : vbn dt nn in pp$ nn . cc in ap nns , rb in nn ppl , ql rb at nn bez cc at jj nn in jj nn vbg in at nn nn . ap ber at nns wdt vb np ' rb cc np ' rb vb ql jj , cc vb ql jj , cs at nns ppls vb jj , jj , jj nn nns . cc abn in ppo in at nn ' np nns , ppss vb to vb at vbd nns vbg rb to vb , cs at np nns vb at nn nns in at nn . cc in at jj nn nn , dt jj cc jj nn in jj nn jj in at nn bez ql ql vbn , cs vbg in ppo , in dt jj nn nn , ppss vb at nn cc at nn nns . . ( nn cd ( ql rb cs in nn dti ap nn in vbg nn . cs ppss vb at cd nn rb . * cd jj nn bez vbn . at nn , nns , nns , cc nn . at nn . pps hvz pn , jj . pn cc dt cd jj nn in at nn , vbn in nns . rb vbg in at nn in nns , cc nns , cc nns . cc , in nn , doz dt jj nn vb . cs dt nn vbn , pp$ nn doz * nn in ppo rb . in nn , ppss rb vb cs jj , fw in jj nn in at nn ' jj nn , wdt , in nn , bez jj ' nn nn in nn . cc wrb . nn in at jj nn . hvz at jj nn rb vbn at nn , vbn at nn . ql , pp$ jj nn bez vbn in pp$ vbg pn jj to vb ppo . pps bez rb vbn in pp$ jj nn . cc dt vbz ppo wps hvd at jj nn nn ben vbn in at jj np nn , pps md hv ben vbn in pp$ nn in nn nns . ppss vbd at nn in at jj , cs at nn bez jj . cc at jj nn hvz at nn , cc cs ap pps bez ql ql jj , cs to be jj in nn . cs rb dti ql vbn , jj nn md vb rb in pp$ nn in nn , at jj np in nn nns in jj . cc rb nn ppo rb in at rb jj nn . in at rb vbn nn . rb be jj , vbn to vb ' in jj nn , at jj nn nn md nn ppo . nns vbn at vbn nn nn . cc ex bez at nn to vb at np in at nn ' np cc at nn ' jj nn . nn , cs at ap jj nn , bez cc at vbg nn . cs rb , np np np , wps vbd in cd nns , md * vb at jjt nn ' jj nn , in pp$ jjr cc ql jj nns , wrb md vbd np vb to vb at jj np in at jj nn ' jj nn . nn cc vb dt nn in ppo . vb cs pps ppss md . . . ( nn cd ( . . ( nn cd cd np nn ( cs at jj nn be ql at np , in at nn pp$ nn vbz cs jj nn wdt pps bez jj to vb . in at jj in vbn nn at nn md vb in ap cd nns in nn . vb at jjr nn , cc at nn nn in dt nn bez cs at nn nn in at ql vbn nn vbg in in at nn nn . cc in nn in in cs ppss hv rb vbn in in dt vbn nn bez rb vbn rp , cc rb vbn in at jj jj nn in at nn cc nn . in at jj nn at nn vbz at nn in nn cs nn in at nn . cs in at jj nn in dt nn in in in dt nn rb vbg cd nns in nn cc ql ap in nn in in vbz at jj nn in dt nn ' jj nn . at nn bez in ap cd nns in pp$ jj nn in nn . pps bez vbn rb in pp$ jj nns , cs at jjs jj in at vbn nns in np . ql cs at nn nn bez pps vbn in ppo , cs ppss hv vbn dti nns wps rb vb cs at jj nn hvz dti ap nn cs dt jj nn in cd vbn in at jj in nns in pp$ nn nn . vbg in jj nns , nns , cc nns , in pp$ nns , pps vbz ap in vbg in at nn in pp$ jj nn to vb cs jj nn in ppo cs at nn in pp$ nn . pps bez jj , rb , cs rb at nn in dt jj , in at nn ' in vbg jj nn , bez at jj nn . cs in pp$ jj nn , ppss md rb vb at nns in ppo , cc vb dti . at jj , cs abn nns wps ber jj , vbz at jj nn in at jj nn . cs ppss vb pp$ nn in pp$ nn nns cc rb vb at jj nn in pp$ jj nn , wdt bez at jj nn , ppss md be . . ( nn cd ( vbn in pp$ nn in at jj nn , vbd in at ap nn , cc in at ap nn in nn . qlp , nn dt vbn nn ( vbn rp in at jj nn ) in at nn in nns ' in nns , cc ppss md rb jj ppo in ppo . cc vbg at nns in cd nn in pp$ nn , in jj nn ppss md vb in in dt nn hvd at nn in nn , cc at nn . cc in dts nns , vbn rb in at jj nn in pp$ jj nn cc nn , ppss md rbt vb in ppl at jjt , cs * at ql jj nn in wdt at ql vbn nn bez . cc cs in at jj nns in at jj ' in jj nn , ppss vb ppo jj in beg rb vbn , rb ppss hv dt nn in ppo . cs ppss rb vb rb dti vbn ' np nn , ppss md be vbn in at nn in pp$ nns in at vbn nn in vbn nns , abn vbg jj nn in at nn jj . pps bez at jj nn , cs at nns ber ql jj nns . cc at jj jj nn , ppss vb ppo at nps bed * at od nns to vb . at jj nn rb vbd ppo rp in ppo , in at nn in at nn pps hvd vbn , cc in at nns in wdt pps bedz jj , in at nn in fw -- fw , at jj nn in pp$ nn . rb , ppss vb cs at nns hv vbn at jj nn in * vbg pp$ nns in at nn in at jj jj . cs ppss vb dt ap in at nn ' jj nn md be vbn jj in pp$ nn . nn md rb vb pp$ nn in pp$ nn , wps ppss ber . at jj vb in at nn rb rb vbd at jj cc jj nn . nn vb in pp$ nn , cs in at jj jj nn in dt nn wdt ppss vb abn rp in at nn . vb dt jj nn in nn in at jj nn . pp$ jj nn bez jj in at od nn in nn . cc in dt nn at nn in at jj jj md vb cd nns in , beg cd in nn , cc in at jj nn in at nn rb . cs pps vbz in at vbg nns at jj nns in nn , cc in at jj nn vbz in jj nn . rb , in nn , dt . . ( nn cd ( jj bez vbn in ap at ap ql jj nn in in at jj nn in in cs at nn . cc rb vbz in at nn . cc wdt bez rb ql , in ap nns in vbg in at nn ' jj nn , at jj nn vbz in at jj nn , ql jj in dt in at nn . in abn dts nns , md ppo be jj to vb cc vb rp at jj ' nn nn rb . in , vbn in dt nn , at jj jj nn in pp$ nn jj bez ap cs vbn in at jj jj nn in pp$ jj nn . cc vbg dt nn to vb cs pps md in at nns , ppss md rb vb at jj nn in at nn , in nn in at nn jj ' ppss vb . dt jj vb , cs ppss vb * , vbz rp cd in at jjr nns , cc bez , rb , in dti nn , at jj jj vb in ppo . in pp$ jj nn rb , ppss md vb dt jj vb at nn in nn cc nn in at jj nn . cc cs at jj nn bez jj , ppss md rb hv nn to vb . . . ( nn cd ( . . ( nn in cd np nn np np nn ( at jj nn vbd , cc ppss rb vbd at nn np , np np nn , nn , in nns . in cd nn at jjt vbg nns in at nn , at jj cc nps ber rb in at ap . cc rb cc rb in ql jj nns in nn cc nn , ppss rb rb vb in pp$ nn in at jj . in dti nn , at np vbd ql jj to vb pp$ nns . cs rb dti nn in at fw , pps vbd to , cc vbg at nn , pp$ nn bedz vbn in ppo , rb vbg in at nns rb in at nn . . . ( nn cd ( wdt hvz pps in pp$ nn rb . vbd np , vbg in pn rb vbn in at jj . jj . -- in at nn in nns . * wps , vbd np , rb , rb , pps ' vb at nn in nn , np . np . pps ' vb vbg rp to vb ppo pp$ nn , bez at jj . nn ' nn ppss vb cs jj nn md rb rb in ppo . -- in dt ' in pp$ vbg nn . uh . pps ' vb abn nn , bez at jj . vb rb in ppo , vbd nn , pps ' vb at nn in nns cc at nn in md . pps ' vb rp in nn , cc hvz vbn at in vbg . wql jj pps md vb in at nn in nn to be vbg nn in at jj in nn , cc rb rb pps md rb vb at jj nn in vbg nns in np , cc rb abl at nn rb vbz . cc in at jj nn nn np np nn dod rb vb at nn in nns cs nn dod vb . cs pps vbd at nn , vb rb vbd ppo , in in abn jj wdt pps hvd in pp$ nn . cc in pp$ vbn nn , at jj rb vbn pp$ jj nn in at jj nn . rb vbg at nn in pp$ nn in nns cc nn md , in dti nns vbg pp$ hvg to vb in pp$ nn in nn in jj nn in in pp$ ap nn in nns nn beg vbn , cc * at ap vbg in nn rb vbn to vb at nn . vbg in vbg cs pp$ nn bedz rb wdt in at np bez rb vbn at jj cd ( dt bez , at jj cd ) , rb jj at nn in np cc at nn . pp$ nns vbn , np vbd . cc pps hvd * vbn pp$ nn ' jj nn , wrb nns bed ql rb vbn in at nn in nns in abx nns . cc ql jj in at nn bedz np , cs in vbg to vb pp$ nn in md cc nn in nns rb , pps vbd in pp$ nn cc vbd in at nn nn in nns . rb , at nn hvg vbn in nn , pps cc at ap cd jj nns wps rb vbd ppo , hvd rb at nn in at fw ' rb vbz . ex bed cd nns , at jj nn . jj in pp$ nn , ppss bed vbg ql rb in jj nn rb in at nn , vbg pp$ nns ql rb cs ql ap nns in nns in nn . ppss vbd at . . ( nn cd ( jj , jj nn , cs cs rb vbg at jj jj nn in at nn . jj in dt jj nn , cc ap nns in at nn , vbd at jj , vbd jj nn , wdt in pp$ ql jj nn , cs rb cs in at jj jj nns jj ppo , vbd vbn in at nn , cc dti ap nn . cs dt jj vbd in at nn in nn , vbd jj . cs pps bez * jj in jj jj nns to be in abn jj . rb , pps vbd in pp$ nn , cs rb pp$ jj nn md hv vbn ppo , cs at jj in nn cc vb in pp$ jj nn bedz at vbn cd , cs at nn vbd wrb cd jj nns vb . pp$ nn bedz jj , jj , cc jj . vbg rb in at vbg nn in nn , cc vbg ppl in vbn nns , vbn in jj jj nns in ppo , wdt vbd to hv nn in pp$ ap vbn nn , vbg at nns in ppo in nn . wps ' np vbd dti jj . vbd np , pps hvz at nn in nn , ppss ' in jj . nn , vb in hvg abn at nn in nn in nn . jj nns ber vbg jj np in ppo , nns . ppo ' in at od jj nn ppss rb vbd to vb in jj . cc vb , dod rb jj nns ql rb . pps md be , pps ' np vbd pp$ nn . cs at jj nn vbg rp at jj nn in at nn nn in vbn nns , nns , nns , nns , cc nn in pp$ nn . rb dod dt jj jj nn pp$ vbn nn , cc rb cc rb rb vbg rp in pp$ jj nn in nns , vb at nn in pp$ jj nn in at jj nn in pp$ jj nn . cs pps hvd vbn dt nn in nn , cc hvd ben vbn in ppo , pps bed jj to vb . rb vb at nn , jj nn , cc ppss ' ppss vb ppo at nn in dt vbn nn , vbd jj nn , vbg in at jj in nn in ppo . nn pps nn ' nn nn ppo in ppo , vbd np . vb nn , cc at np md hv ppo . in cd nn abn at vbn jj nns bed vbn in dt cd nn , cs * rb bedz pps at jjt , cc rb at ql jj jj , cc pps bedz jjt in ppo , cc at ap nns bed vbg in jj jj nn , rb , . . ( nn nns ( ql rb to vb nn in at nn . in dt nn , at fw ' jj nn hvd vbn in at cd jj nns rb vbn . cc in at jj nn pps hvd hvn , np ' nn nn rb vbd at nn , cs at nn vbd in pp$ jj nns . at ap nn ppss vbd , bedz , cs in beg rb ql rb in pp$ nn , pps md be vbn to vb pp$ nn cs ppss md rb vb cc vb ppo . cs in jj , pps vbd ql jj cs dt md be at nn , cc rb in at jj nn vbd pp$ nn in nns in at ap nns . at jj cc jj nn . vbd np . pps nns cc vbz ppo in at ql jj in nn ppss vbd in ppo * cd nns rb . -- in rb in pp$ jj jj nn in in vb nn , nns . nn in ppo . nn vb ppo wdt pps bez , nns in in vbd np in pp$ nn in -- pps ' vb in pp$ nn to vb jj . cc ppss ' nn vb to vb cs jj jj in in vb in in vbn ' nn ppss . ber ppss vbg to vb dt nn vbd ppo . do ppss vb nn . at nn in nn , rb , in at jjt nn . vb , wrb nn ' nn dti in ppss vbd at nn in nn . wps ' nn wps ben vbg at nn rb in in ppss nn ' nn vb at nn in in ppss ' nn vbn . np , rb ' np nn vbg in at nn ' jj nn in -- cc in at nn , at nn rb ' np vbg . dt vbd ' nn do , nns . vb in dt jj . at jj cc jj in ppo bez , nns , md ppss vb nn cc * . uh . vb at nns pps vbz . vbd nn , vbg rp cc rp in in wdt at vb in -- uh , do vb in at nn in in vbz cs at nn . uh . pp$ nns , do nn in in vb in nn cc nns in nn , ppss vb , pp$ nns in in vbn nns cc nns in -- uh , do , do nn in -- pps ' vb at cd jj in in nn ' nn vb ppo rb in in nn ' nn uh , nn ' nn . -- in vb cs jj in -- uh . vbd ' nn ppss vb in pp$ jj , pp$ nns in in abl at nn . abl at nn . nn ' nn ppss vb nn . ex vbz cd cd nns , nns . -- in at nn . -- in at jj nn . at nn in np . -- in uh , do , do , do . -- in wdt ' in dt jj in rb . in dt nn np bedz in at nn in vbg pp$ nn in nns in at vbg nns , cc rb pp$ nn in md . rb in at jj nn in vbg pp$ nns ' nn , cc in at ap nn rb vbg pp$ jj in at jj nn in at jj nn . at jj jj nn . vbd np . vb rb , . . ( nn cd ( nns , cs cd cd nn in in in nn in nn nns in jj in jj nns . wdt nn ' ppss vb , np . ber ppss at nn to vb pp$ nn in cd -- cc in cd nns in at nn in jj np in nn . wdt nn ' ppss vb . nn vb , vb cs nn in nn , in in vbd at jj . rb , cc rb vbn in at nns in at jj , at fw ' np cd nns rb vbd vbg ql rb . cc , ql vbn , rb vbd ppo . in dt jj , jj , jj nn in at nn wrb vbg in in pp$ nn , at cd nns vbd rp rb , rb vbg at in nn in at jj nn in , ex pps nns , rb . uh in at jj in nn nn . rp in at jj . vb in ppo . cc rb vbd at jj nn hvd np hvd , cs nn in abn pp$ nn , pps md hv vbn at nn in dt nn , hvd * at jj nn vbn in ppo in at jj wdt vbd at nn in pp$ nn nn . cs dt jj nn bedz vbg to vb pp$ jj in nn , cc cs , in nn , np ' nn nn bedz rb in vbg , cc pps vbg rb in pp$ nns in at jj nn . in in dt bedz at jj nn in np , np , cc nn . in at nn , ppss vbd at jj nn rb , cc rb vbd rp in at jj ' nn nn . at nn rbr , cc abn cd nns bed rb in at jj ' in jj nn , cs vbg in ppo , in abx nns , bedz at nn vb cs pps vbd . pps bedz at jj , ql jj , cc vbg nn . at jj bedz rb vbg nn rp , cc vbg pp$ nn in ppo in at jj vbn nn . cs pp$ cd jj nn vbd pp$ nn in at nn in nn . rb in dt nn , rb in dt , pps vbd in pp$ jj nn , cc rb in at nn cs pps vbd , pps rb vbd in at nn , cc rb vbd in at nn pp$ cd vbg nn . ql hv ppss vbn at nn in vbn nn , vbg jj vbn nns in at nn , rb vbg to vb at jj vbz . cc at nn hvz at nn , cc in jj nns md vb vbn pp$ nn . cc at nn in dt jj jj nn in at nn , bedz vbn rp cc vbn in ppo . pps hvd at nn , vb cs vbg nn in pp$ nn , cc dt vbd at nn in ppo rb . . ( nn cd ( jj . cs rb , in pp$ jj nn , jj nn , cc jj nn , ex bedz ap in jj at jjt nn wps rb vbd . vbg rb cs cc at ql ap nns rbr md vb at fw ' np nns at nn , cc rb cs be rb vbn in pp$ nn , np vbd to vb wdt in ppo md hv vbn at ql ql jj nn , cs at ap nn md in rb vb . cc ql rbr dod pp$ nn vb rp in at nn , cs abn cd nns in in np , np , nn in in rb vbd in pp$ nns , cc vbg in at jj nn , rb vbd pp$ nns . cc vbd rp at nn in at jj nn , pp$ cd np nns vbd at jj . vbg nn in nn cc jj in nn . at cd nns , in at od nn in at jj ' in jj nn , vbd at jj ' rb rb in jj nn , cs abx np cc pp$ vbn nn bed vbn rp , cc vbd rp in at cd vbg nns . nn ' nn be jj , pp$ nn in nns , vbd np , vbg at vbg nn in ppo cs pps vbd in . ppss ' rb be vbn rp rb in in abn jj in in ppss vbd dti nns jj in in nn . np ' np nns , ppss vb in in vb vbn nns . uh . dt bez at nn to vb rb . at nn at nn in nn . uh . -- in rb ppss vb cs cd nn vbz in at nn in at jj jj . dt vbz ppo in nn in nn in at nn in at vb in at nn in in vbz at nn in nns vb , nns , wrb ppss vb in ppo cs nn . cc ex ' jj nn in beg vbn rp rb , wrb ppss vb at nn . uh . dt bez at nn at nn vbz wrb pps ' vb vbg in np np in in abn at nn in at jj vbn nn . uh . dt jj vbz at jj nn . cc at nn ' jj nn bedz at jj cd . vbg at jj nn , pps rb vbd . in at nn nn , at cd nns vbd in at nns in abl at nn cs in nn jj nns in ppo . cs ql jj bed at nns cs dt jj vbg md rb vb at nns , cs vbg abn pp$ jj nn , ppss vbd vbn vbg nns in at nn to vb rp . cs in ap in in vbg in at jj nn in at nn in vbn nns in at nns , wrb at cd . . ( nn cd ( nns vbd rb rp in at nn in in at nns in at nns bed ql rb in at nn , cs at cd nns vbd jj in at nn . cc at jj rb vbg to vb , in dti nn ppss vbd in dt nn , jj in vbg ap nn , cs at nn bedz at ql jj . cc cs nns hv ben vbn rp cc vbn in dt nn , cc pps bez dt vbg rp , cs pps bez vbn . dt vbg rp in at jj nns in pp$ jj nn in at nn . dt pps bez cs rb nns at jj in rb vbg rb to vb at jj nn in pp$ nns . rb * to vb in at nn in at nn , pps bez to be vbd cs dt nn bez rb at jjt . cs pps bez cc jj to vb , cs at jjr at vbn jj nns in nn , at ap pps bez vbn . cs , vbg in at jj nn in ppo in in in at jj vbn nn jj pn ap cs jj nns in in at nn in at nn bez jj . ppss abn vb wdt at jj jj nn ppss ppls vb rp in . rb rb , rb in nn , in at nn . wql jj , rb , at nn in at jj , vbg in pp$ nn at nn in cd cd nns in nn . pps md in ap jj at nn in cd nns . cd nn hvz vbn ppo in at nn in cd nn in in in nn nns , in abn pp$ nns , cc nns , cc nns in nn . cs at cd nns vbd rb in dt rb vbg nn , vbg rp in pp$ jj jj nn . cc cs * at ap nn cc nn in dti nn , rb , * ql ap cs at nn cc at nn vbd rp in pp$ nns . wdt nn md hv vbn , cs in abn dt nn cc nn , at jjs nn in at nns bedz vbg cc vbg in nn . * cd nns in jj nn bed jj in at nns . vbz ppo jj cs in cd jj jj nns at jj jj bedz vbn cs at jj nn in at cd nn nn . vbn . cc in wdt . to cd nns in nn . bez dt at nn in wpo pps bedz rb ql rb vbd in in in ppss vb pp$ nn in vbn nns . cc pp$ nn in nn in nns . at nn in ppo cs nns in ppo md vb , at nn , at nn , cc at nn : pps vbz nn cs nn . at nn md vb ppo vb . nns ber vbn cs nn . pps vbz in at vbg in at nn . dt at nn . dt pps . uh . wpo nns . . ( nn cd ( md vb at nns . in in at nn in at cd nns in pp$ nn , np hvd vbn pp$ nn in at nns in at nn , to vb ppo in at fw ' jj nn in nns . in dt vbg nn nn , at nns cs at cd nns vbd rp in at nn , md hv ben jj qlp cc jj qlp to vb abn nns ' nn . wps md vb wql jj in at vbn jj md hv ben jj jj nns vbg in pp$ nn . vb in , nns . pps vbz , vbd np , cs at cd nns rb vbd in at nn , rb vbg rb in ppo , cs in jj nns , at nn cc nn vbz in at jj , cs cs at nn vbd ppo in pp$ nn . at ap nn , vbn in at jj nn in at jj nn in at nns , at nns vbd at jj nn rb , cs at jj nn in nn md , wrb at jj nn in jj vbz ber vbn in ppo in at nn . vb in . vb in . vbd np rb . pps ' vb vbg . at nns , in wdt , rb at nn rb , * cd nn ' jj nn md hv ben vbn , bed rb in jj jj nns vbd rb abn vbg in at nns , cc rb at jj jj nn in cd nn ' np nns in at nns . pp$ nns rb vbd pp$ jj nn . in ap nn nns ex ber ap nns cc nn in nns in ap in pp$ nns , wrb wrb vbn , at nn bez in dti nn in ap rb vbn rp in jj nns . * rb in at jj . cd in wp$ nns pps bez , to hv at jj jj nn in at nn in nns , cs cs wrb vbn rb in ql jj at nn cs at nn , at jj nn bez in rb vbn in pp$ jj jj nn . cc wrb dt bez vbn in at jj nn in nn in at jj nn in at nn , pp$ nn md be vbn to vb in ppo in jj nns . rb ql jj bez at nn in nn in ppo , cc ql jj cc jj pp$ jj nns , cs pps md vb rb vbg cc vbg in at jj nn . rb cs in at nn at nn md vb , wp$ nn bez in at nn in nns in rb in rp cc jj nns . ql rb , wrb at nns vbd in dt jj , cc rb vbd rp pp$ vbg . . ( nn cd ( nn , cc at nns bed vbd in ppo , ppss bed vbn in jj nns in at jj vbn nn , wdt vbd rb vbg , cs at jj nn in nn in pp$ nn bedz rb in nns , wql jj , vbg pp$ jj nn in at nn . in dt ap nn at nn rb vbd , cs at jj nn in ppo hvd rb rb ben vbn . pp$ nn , cs ppss rb vb ppo , bedz jj . cs at nns rb ql rb vbn ppo , at jj jj nn in pp$ nn , in ap in ppo wps bez rb vbn , bedz rb vbn . pp$ nns , cc in at nns wrb pp$ nns hvd ben , bed vbd . ql jj jj nns vb in at nn in nns in at jjt nns wrb jj , rb in at nns wdt at jj ' np nns hvd rb vbn , rb vbd jj nns , ql jj to vb . cc nn ex bedz pn . in abn pp$ jj nn , cc pp$ cd nn , cc pp$ jj nns , pps md vb at nn cc be vbn , in nn to vb at jj nns cc ap jj in nns in nns , cc rb to vb at jj nns wps vb jj nn in abn in abn . rb vbg in pp$ nn , in ap pps rb vbd at rb vbn nn cc nn , at nn in at nn , jj rp in at nn . at jj nn , vbd nn . rb vb ppo nn ppo rb rb . nn . vbd np , ex ' in at nn in dt . cc jj np bedz ql jj . in at nn in at nn at jj nn nn in dt jj nn , cc vbn in ppo in ap cs jj nn , at jj rb vbg jj nn , in jj nn rb vbd in at nn , vbg ppo cc pp$ vbg nns abn rp in nns in jj , vbg nn ' jj nn cc vbg at nns . pps bedz pp$ nn nn . in , in dt nn , ql vbn bedz pps in nn in nn , cs pps rb vbd rb in at nn pps hvd vbn . vb vbg in pp$ nn , rb vbd in pp$ vbn nn , rb rp cc rp rb vbd cs at vbg nn . vbd rp at jj nns in pp$ nn . vb cs at nn , cc vbd . pps bedz ql jj , cs ap jj nn . cs wrb in jj nns at nn bez rb vbn rp in dti jj nn , cc in abn in vbn nn vbz at nn in nn nns cc nns in at nn in in cs at ap jj vbg nn in at jj . . . ( nn cd ( rb , cs at nns bed vbg at nn in at nn , at nn vbd nns in vbg in abn pp$ nns jj . rb , in np ' np nns , nns bed vbn in ppo in jj nns , cs cs cs rb at nn bedz at jj . at jj jj beg vbn at ap nns in ppo in at nns . in ql jj nn , wrb at nn vbd rb , at jj bedz vbn in pp$ nn , cc bedz rb vbn rb in at jjt nn in nns , cs pps bedz jj cs cs rb vbd , at nn md in rb vb in at nn . ppo ql vbn cs rb in od nn in ppo in at nn , at jj nn in at vbn nn bedz vbn vbn in pp$ nn , in at jjr nn in at nn in vbn . cc cs at nns in nns ber rb vbn in at jj nns in vbn nns , in at nn ql vbn in ppo , cc at nn in dti nn to vb pp$ nn . rb , ex md nns hv ben dti ap jj nn in at jj nn rb to vb in at nn vbn in . cc rb ql jj bedz at nn in at nn in nn in nn beg vbn in ppo , * rb in at vbn nn , at nn ql jj in ppo . wps hvd vbd dt nn nn . cc wrb . pps md hv ben vbd in dti cc ' jj jj jj cs np bedz vbn . wdt ap nns md hv ben vbd rp in dt jj nn ex bez at nn . cc at jj nn bedz vbn in jjr nns , in at nn ' in beg rb vbn rp rb in at nn , vbg in at nn ' cc rb vbg nn to vb . wql , np , wps hvd at nn in nns , vbd rp in ppo in at ap . vbd rp in ppo ql rb , rb , cs wrb in nn at nn md hv ben jj , cs rb vbg in vbg nns in at nn . rb , wrb at nn bedz vbn to vb jj in ppo , jj bedz at jj nn in at nn in nns in wdt at nn in nns cc nns bed vbn , cs pps bedz jj to vb ppo rp . rb pn in at fw bedz nn . to vb in at ap nn in at nn bedz cs vbg rp at jj jj nn in at nn . at nn vbd cc vbd . ap in at nn nns in pp$ nns cc nns bed vbn in pp$ nns , in at jj nn . rp . . ( nn cd ( jj nns cc nns bed vbn to vb in at jj nn in nns , to vb ppo rb in at nn in nns . cc ql jj hvd at jj rb vbn cs at vbn nns md * be in abn vbd , cs at nn jj nns in nn vbd vbn in at vbg nn , cc at nn vbd in at nn in vbg rp . vb rp , vb rp , vbd ' nn ppss . vbd np in at nn , nn ' nn be in abl at nn in at nn to vb . in nn , nns , ppss md do pn cc vb in ppo . at nn vbg rb . nn , ppss vb in pp$ nns , cc vb pn in ppo in at nn nn cc at nn in nn , cc vb at jj nns . nn . rb , rb , vbd np , cc vbg at nn ' in jj nn , pps vbd rp in at nn , cc nn in nn , vbd vbg in at jjt nn in nns . cc at ap nns , jj in nns , bed vbn , wrb at vbg nn vbn at nn . in at jj nn , at nn vbd rb . at nn jj , at nn vbd . rb , dt jj jj nn in at rb vbn jj nn bez at ql jj nn . cc hvz dti nn cc rb vbd in ppo . rb at jj nn nn vbz in jj nn , in pp$ nn cc nn rb vbn in at nn . cs at ap nns wps rb vbd bed jj , jj , cc vbn in jj nns , pp$ nns in nn vbn cc abn pp$ nns jj cc jj . rb ppss md in dti nn vb cs dt nn bez vbn in at jj jj nn in at nn cs vbg , jj in dt nn in jj nn in ppo . cc pps bez * rb . in jj nns , in at jjt nn , cc vbg in jj nns , rb vbn rp in at jj nn cc np in nn , in abn pp$ vbg nn in ppo . rb dts jj , jj nns do rb vb . be pps vbd , rb , cs at jj nn bez ql ql jj in dt nn cs dti ap nn . wrb cd in dt nn vb rp , cd jj nns do . dt nn in at nn bez at nn jj in at jj nn in at jjr nn in nn in at jj nn . pp$ jj nns rb rb vbg rbr cs at nn . in dt nn at jj nn bez ql jj . cc ex ber nns wrb , . . ( nn cd ( in at nn in ap nns cc ap nns , at jj jj rb vbz , ql jj cs in nn . cc at nn in dt bez jj . nns ber vbn in ppo . pps nns in at jj nn . vbz at nn in nn nn . at nn in in in nn nn md rb vb ppo in rb . in at nn vbg , in nns , in at nn in jj np , wrb at jj nn vbz nn in vbg , ppss vb nns in ppo , in nn in nn . rb cs wrb at nn hvz vbn rp , ppss vb wrb to vb in ppo wrb pps md hv vbd rb . pps bedz * jj in at nn in at nn cs at nn bedz vbn in at fw ' jj nn in nns , vbg cs at np bedz rb vbg pp$ nns . cs at ap nn in nn bedz cs in at nn in rb , vbg in at nn in jj nns , cs in pp$ jj nn in vbg . rb , at nn in jj ' nn nn bez ql jj in at jj nn ' np , cs in jj nns pps bez rb vbn in ppo . cc rb np cc abn pp$ nn bed rb in jj nn in dt jj nn . at nn vbg abn nn , vbn in pp$ cd jj nns , cc rb ppss abn vbd rb in nn , rb in jj , jj nn . uh . ap ber at nn in vbz , cc ap ber at np , pp$ nn . . . ( nn cd ( . . ( nn np cd np nn nn np np np ( ex ber dti nns in wdt at jj nn bez at jj nn . at ap ppss vb in dt nn in vbg , cc vb pp$ nns rp in at ap nn in nn in ppo , ql rb at ap bem ppss vbd in pp$ jj nn cc nn . cc rb wrb ppss vb ql ap jj fw in nns cc nns , nns in abn nns , wps cd nn cc ap hv vbn nn in ppo , ppss bem vbn in at nn cs ppss ppl . . ( nn cd ( vb , cs cc ql , in ql vbn at nn . at jj np , at nn in np , bedz at od nn . cc in at jj nn in pp$ vbg be pps vbd , cs at od jj vbn in pp$ nn bedz * vbn in dti jj nn . dts bed at jj nns in pp$ nn , wrb ppss rb vbd nns in nn at vbn , cc * to vb nns ' in nn in nns . at pn vbz at jj nn in np cc np . wrb at jj np , at nn in at nn , bedz vbn in at nn in at nn in nn , cc ql jj bedz in at ap nn in vbg ppo rp , np , at nn in nns , rb vbg , vbd at nn , cc vbn cc vbn at nn . pps bedz at jj jj nn , rb vbn in at jjt nns in at jj nn . rb cs dt jj bedz vbn in at ql od nn . cc vb at nn nn dt nn nn . in in at jj nn , rb np , in at jj nn , in cd in at nn nns , ex vbd in ap nns at jj nn in at jj , wdt at nn ' np nns cc abn at nns vbd to be at jj nns in at nn cs np np . wrb at nps vbd nn , at ap nn bedz vbn in np in nn . wdt vbz ql jj cc rb jj in dt nn , bez dt : pps bedz in nn cs np vbd nn . jj in at nn in np cc np in in rb , in dti vbn to be rb vbn in ppo in in bez cs jj nn in nn . np cc at nn . wdt nn ppss vb to hv ben at jj . in in ap jj nns vbz cc nns ber rb vbn rb , cc rb vb in dt ap . ppss nn cs at nn in at nns , cc cs at nn in at nn , vbz nn . rb , rb vbg at jj . in nn , dti nns in at np nn cs nn ppl . rb , pps md rb vb in at nn in at nn hvd vbn . np cc vbd at vbg jj in at nn , rb in vbg nn in at jj nn in at jj . dti nn md vb at nn , cc rb at np , at nn . np , at np , hv at nn in ppo to vb rb rp in at jj . vb * at jj nns in dt nn vb ppo . in cs at nn vbn in dt jj nn in jj bez rb vbn in at jj in jj nn , cc cs . . ( nn cd ( at nn bez vbn in nn cc at nn in nn , rb vbg at jj nn in dts nns , wrb at jj nn in at jj bedz jj in nns . cc vbg cs cs in np ' nn , nn . np ' rb jj md hv vbn rp rp in at nn in at nn . cc vbg cs at nn vbn in nn . np md hv ben rb at jj nn , cc nn in nn . vbg abn dt in nn , pps md * vb ql jj in at jj nn cc at jjt nns in at nn , to vb dt ql in vbn nn at ap cs at jj jj ppl . in nn , vbn in at jj cc vbg nn , dt jj nn md nn cs dt nn , nn , cc nn nn in at nps , nn in nn . wps beg vbn in at jj in np , pp$ nn ' jj nn cc abx at nns in pp$ nns vbd rp in ppo , cc rb at nn cc jj nn in ppo vbd . rb , rb , cd in pp$ jj jj nn , rb at nn , bez at jj nn in np . cc in jj nns , ppss nns in np md be vbn in at ql jj nn in nn . np . cc rb , vb * at nns in dt jj nn ( pn in wpo , ppss vb to vb , hv rb hvn to do in at jj cs pp$ jj nn ) , vb ppo rb nn at np in nn , cs rb in pp$ jj nn cc vbn nns ppss ber ql rbr vbn to vb . nn ' jj nn cs ppss . cs to vb np in ppo cc * , in dt ppss rb vbd jj : in cs rb in at jj nns , cs nn np cc nn np in in dt jj nn in vbg jj nns , bedz vbn rp cc vbn rp in at jj . rb , cs cs rb vbz at nn in ppo , wps md be jj . ppo rb vbz cs pps rb rb vbd pp$ nn , cs , rb , in at nn . rb , pps md be vbn at nn in jj nn . in dti nn at jj vbd ppo , cs pps dod * at jj . nn vb ppo in cd in pp$ nn . cc , in at jjt jj nns , dt jj nn in np cc at jj bez vbn to be vbn in at rb ql jj jj nn in np cc at jj . cc rb rb . rb ppss ber ql jj . cs ppss vb at nn rb , wrb * at nn . . . ( nn cd ( cc do nns , nns , jj , cc nns rb vb at jj nn in pp$ nn . pp$ jj nn bez rb to be vbn . in cs jj nns in jj nns , ppss vb at nns in pp$ nn in pn jj in at jj nns ppls . dt jj jj nn bez rb to be vbn in at np , wdt vbz ppo at nn nn , cd in at cd nns in at nn in at np . vbz ppo dt jj nn ppl in pp$ nn . in in nn , wps , in at od in pp$ cd jj nns , hvz in rb vbn rb cc vbn at jj . wrb nn , cc at np in nns , vbz at np , vbn to vb at nn in cd in pp$ nn nns , pps vbd nn in nn , to vb rp at nn . cc at np , cc jj nns , wp$ nn md vb to hv ben jj to nn in vbg at nn , cc wdt rb md hv vbd pn in at nn in jj nns in jj nns , dts np bed vbg in at nn in at nns . cs nn vbd jj in at jj , cc vbg rp in ppo in at nn nns , vbd at jj nns . bedz * dt nn at nn , rb . rb cs at nn wps vbz at nn bez vbn at nn . np , nn . np , np , np , cc nn . ex ' in at nn in nn in ppo . wdt nn cc at nn ' wps md vb rp cs dt . . . ( nn cd ( . . ( nn np cd np np nn ( nn bedz vbn in at jj nn in np cc at jj in at vbg nn . rb dti nps rb vb dt jj nn in np cc at jj . cc rb ex bed dti jj nps cc nps , wps , vbg rp in at jj nns in pp$ nns , rb vbd at nn in np cc at jj , cc np cc at nn . . . ( nn cd ( cc rb pp$ vbg dts nns dod * vb dts nns cd nn at ap nns , in abn dt . pn jj vb in nn nn ' in jjs nn in vbg at jj nn bedz dt : in in pps hvd pn in dts jj jj in vbn nns , vbn in jj , jj nns . cd in wdt vbd np ' rb jj in cd nns in pp$ nn in in at nn rb jj in nn in at nn in at jj ( at jj nn , cc at nns in dt nn ) , in wdt at nns hv dt vbg , at nn nn md vb ppo . pp$ nn bez ql ql jj . cc , in dt , np np ' rb jj nn bez jj . pps bez * jj , vbz at nn , cs ppss vb np cs vbn in at jj ' nn nn , cc ql rb vbd in dti nn in pp$ nn . cc dt vbz jj qlp in at jj nn . in rb , at ql jj ' nn nn md vb at nn in nn nns , cc rb vb abn at nns . rb , rb , np md hv vbn ppl in at jj nn . cc , in od nns , at jj nn bez jj . dt nn wdt vb in nn ( pps vbd in dt nn ) vbn in pp$ vb in nn in dt nn in at nn , bedz pn rb in nn in pp$ vbn nn cc at jj ' in jj nns . cc dt nn rb vbz in at nn , cs at jj nn vbz cs np md hv vbn nn in at vbg nn in at jj jj in in rb cs at jj nns in at jj nn vbd pp$ jj nns in nns , cc vbd in ppo . rb , pps hvz ben jj in ap jj nns , cs wrb np bedz vbn rb in at nn nn , pps rb vbd pp$ nn in dt nn in in , dti nn in at jj in at nn in nn . cc , ppss md vb , rb vbd at nn , cs dti nn ber rb vbn at nn , at nn , at nn . cc hv rb ben vbg vbn nns wps hv vbn cs at jj vbn in at nn in np rb vbd at nn in nn in in at vbn nn in nn in in wdt at vbn nn vbd to , cc rb bedz vbn in at jj nn . jj vb in nn , rb , vbz nn ql rb . cc pps hvd rb dt nn in pp$ vb in nn . pps bedz dt , cs ppss vb nr : np bedz . . ( nn cd ( vbn in at jj in at np nn , cc in cd nns pps bedz vbn rp rb in cd nns ' nn in np , at nn in at np , ql ql ap cs cd nns ' nn in in at jjt nn in at np nn . wql bez dt . cc bedz ex at ap nn in at jj to vb at nn in dt jj nn in np . rb . pps md hv vbn ppo rb in at nn in at nn in jj nn . cc * to vb in at nn in at jj nn in at np , cc dt nn in at jj nn cc jj nn , abl at nn md vb at jj nn in abn np in cd nns , * to vb in at np nns , in at nn in np , beg ql jj in dti jj to vb in . rb , dt nn in np ' rb vbg at nn in jj nn in ql jj at nn md vb at nn in at nn in dt jj nn in nn np , pp$ vbn nn , cc rb vb jj nn at nn . cc abn dts jj nns in jj vb in nn rb vbn pp$ jj nn in nn in in at nn rb ql jj in ppo , vbg cs pps hvd cc jj nn in wdt pps hvd vbn rp in at nn cc at nn . nn vb ppo rb vbz pp$ jj , jj nn , cc jj , jj nn in at nn nn . in in at jj jj nn , dt ap nn in np ' rb vbg in np in at nn in jj nn bedz vbn cs at nn nn in at jj nn . cc cs pps bedz . rb , in dt nn , at ql vbn nps rb vb in at jj nn in np . cc dti cd nns rb , at jj nn in jj np ' np nns , vbz in at jj nn vbn in nn in np , in wdt nn bedz at jj nn cs vbn in dti nn . . . ( nn cd ( . . ( nn nn cd nn ( to vb ppo vb rb cc rb , at nns in nns ber jj . cc in ap at ap nn , dti nns vb at jj nn in pp$ nn . ppss nn at nn . cc bez pps to be vbd cs cs abl at nn md do at nn , pps md rb be in at jj nn . in dt nn cc nn ber jj . dt nn bez at vbg nn , cc cs at nn in nn bez to vb at nn nn rb . np vbd rb in jj pp$ nn , cc cd nn * rb in at jj nn np vbd , vbd rbr cs jj nns in dt nn . vbg in pp$ nn , wrb pps vbd rp at nn , cc vbg in at nn cs cs rb vbg to vb at nn in nn in at nn ' in jj nn . pps vbd to be vbg in nn in dti jj nn . cc dod pps vb jj in at nn . in nn nns bed vbn . cc ql rb cs at nn vbd rp in ppo , ppss vbd cc vbd in jj nn . at vbn nn , cs in np ' np nns in np . rb , at nns vbn , cc np ' rb bedz rb . in jj nn , np in ap vbn in vbg cd nn . cc at vbn jj , in in abn vbg , rb vbd pp$ jj nn , in vbn nn . abl jj nns in at vbn nn md rbr cc rbr rb vb ppo . pps vbd jj in nn at vbg jj , cc be jj to vb ppo . cc to vb at nn rp in pp$ nn bedz jj , pps vbd ql rb cc jj . wdt rb vbd . in abn at jj nns cc nns , at nns in nn cc jj nns , in wdt at jj nn bez ql rb vbn , pn vb cs jj vb in at nn vbd vbg . jj nn , cc jj nn , in abn pp$ . . ( nn cd ( nns vbz pn vb ppo . pps bez rb jj in at jj vbg jj . pp$ jj nn cc nn bez at jj nn in wdt at jj nn bez rb vbd in at rb vbg , vbg nn , in jj rb . nn cc nn vbd , at jj nn bez dti cd cc cd nns in nn . at nn bez ql jjr cs dt in at nn , cc rb in at jjr nn in in nn . pps bez vbn in at jj nn vbd at nn , in jj nn , in wdt pps md be vbn rb in at nn in vbg . cc in vbg rbr , pps bez jj to vb rb , cs cs at nn md be jj in at ap nn in at nn , cc pps bez rb vbn . cc wrb vbn , bez rb ql rb jj , in nn in at jjr nn cc jj nn in at vb cs vbn in at nn , wdt in nn vb jj nns . cs at jj nn , rb , ppss md rb vb rb in at jj , cs dti vbg vbz in nn . vb rb in np . at nn wps in pp$ jj , jj nn cc nn in at jjt nns , bedz rb vbn to vb in vbg . vb in ppo . pps vbz rb in at vbn nn in at vbg nn . jj in nn nn , at jj jj bez cd nns rb . vbg at jj nn rb , vbg rb cc rb in pp$ nn to vb cs pps be rb rb , np rb vbz rp at nn in at nn in cd nn , cs cs to vb pp$ jj nn in pp$ nn , vbg at nn vbd . rn vbg at nn jj in pp$ nn ' jj nn , pps vbz ppo in at jj . wrb , vbg ppo in ppo , pps rb vbz at nn in nn in pp$ nn , rb jj at nn cs at nn vbz ql vbn in pp$ nn , cd nns in at nn . pps nns ppss rb in at nn , vbg at jj nn in pp$ nn . ap nn in at jj , jj nn , in at jj jj nn at jj nn vbz at nn nn , cc nns in at nn nn in at jj . rb in vbg nn , pps rb nns jj nn . wps vbd at nn rp in ppo . vbz np . ' np np ' rb jj od . abn nns md vb nn in in nn . md rb , pps bed jj np nn , cc jj np , cc jj . . ( nn cd ( jj np . rn , np , nn , ppss ' md hv ppss vb at vbg in at nn , cc ppss ' jj nn in ppo . rb , rb , nns jj , ppss ' jj nn nn nn in at nn in pp$ nn in nn rb , cc in dt jj nn in nn nn at vbg nn . rb cc rb in jj jj nn , at jj nn bez vbn , at nn vbg in pp$ nn cs at nn vbn in jj nn . at vbn jj vbz in pp$ nn . at nn in nn bez vbn , cc at jj vbg jj , nns pp$ nns , cc rb vbz at nn nn . . . ( nn cd ( . . ( nn hv cd np nn ( dt in cd cd nns in in cc at pn vbz wql ap nns in nns in in in at jj nns md hv ben vbg abn in at nn , cc nn cc vbg at nns in at jj , cs in ql ap nn cc vbg nns . cc cs in dti nns rb , nns in nns md hv ben rb in at nn in at jj , vbg dts nns cc nns in in cs abn dt md be , cc rb , cs rp in dt vbn nn ( cd cc at nn nns in cd nn ' nn nn . nn . in dt od nn in np , np . np . ) , pps md rb vb at nn , cs dts nns ber , in abn , rb nn , cc pn cc nn in in dt bez rb at jj nn . vb ppo , rb , vb in dt nn , rb in dti jj nns nn . at pn vbz cs in at jj nn in pp$ nns , at jj nns in jj vb at nn wdt in abn nns bez vbn in at nn in wdt ppss vb , rb , at nn cc at nn md vb at nn , cc rb rb vb pp$ nn in at nn . cc vbg in pp$ vbn jj nn wdt vbz ppo jj nns , cs at jj nn ' np , at jj md rb vb in vbg at jj nn in at jj nn . wrb at nn . . ( nn cd ( in pp$ nn nns in at jj nn . cc pps md in dti nn vb in pp$ nn , in , in pp$ jj nn , at jj nn ' jj nn bez vbn in ap cd nns in at nn . cc wdt bez rb ql , pp$ jj hvz at nn in pp$ nn . ql , pps vbz in pp$ nn rb . cc dt bez in at nn in pp$ nn . cs ppss vb , cs in dti nn nn bez rb at nn jj in nn , rb cs pps nns in at nn at jj nn , wdt beg rb vbn in nn in at nn vbz in at nn pp$ jj nn , ppss do * vb ppss md vb . cs ppss md rb vb dti jj jj nns . vb ppo , cc pps vbz cs cs abn at nn in at nn md be vbn in cd nn , pps md rb vb rp pp$ nns cc * vb dt in at jj nn . wps bez to vb , pps md rb vb in nn . jj cs pps md vb , dt bez rb at nn in at jj , wps rb vbz , in nns , pp$ jj nn cc ap ( wrb in at nn ) in vbg at ap nn , cc ql ap cs in dti nn vbg at nn in nn . in , vb , pps hvz at nns . wql bez dt . in pp$ nns cc in dt nn in pp$ nn pps bez vbn in at jj vbn jj nn in nns in jj nns , wdt nns , wrb pps vbz at nn , ber ql jj in jj nn . ql cs in at nn cc ap , at cd nns in at nn , pps vbz at nn nn in nn in ppo , rb cs at nn vbg at jj nn vbz at nn nn in nn in jj nn in pp$ cd jj nns . at jj nn in dt nn bez jj . cc cs at nn vbn in ppo bez jj cc jj , vbz at ap nn in ppo , wrb ppss vb at rb jj jj in dt nn in hvg pp$ nns rp , cs at nns vb ppo . dt bez wdt ppss vb . cs jj , in vbg in at nn , at jj nn md vb rb in at nn in nn rb jj in abn pp$ ap jj nns . uh pps vbz cd nns , cc nns cd nns , wps bez , vbz cd nns . rb wrb pps vbz rb , pps md be jj to hv pp$ cd nns in rb , in at nn . rb , cs cs pps vbz at ap . . ( nn cd ( nns ppss vb ppo , cs cs pps vbz , pps md be rb vbg rp rb to vb jj pp$ jj nn in nn . cc * cs dts cd nns ber vbn , md pps rb vb rp to vb rp pp$ jj nn rb . nn , rb , cs in jj nns dts nns ber jj . cc in dti cd ppss ber rb . rb , wrb md at jj rb vb in hvg pp$ nns rp , cs pps be to vb pp$ nn in nn , cs vbg in jj . wql jj bez pps , rb , cs dt nn in at jj ' in vbg vbz ppo in abn at jj nns in at nn . in * in nn cc in nn md dt jj nn be vbn , wrb vbg at cd nns in at nn . * ql ap pp$ nn , rb , uh nn , cs at jj nns wps vb at nn in ppo . in nn , vbg bez rb vbg rp in in cd nn rb vbg in cd cc cd nns . cs dt wdt ap nn pps hvz to vb to , vbg cc vbg , vb pps md , cc vb pps md . cc at jj nn rb vbz in cd od cc nr in pp$ nn . pps hvz ben vbn cs at jj rb vbz in pp$ nn in nn . cs pps md rb be vbn cs pp$ nns ber vbn in nn , rb ppss jj ppss md be vbn in at nn wrb pp$ nn in nn vbz vbn in ppo . in at ap nn in ppo cs in abn nns in pp$ nn bez cs jj nn in nn . cc beg rb vbn in cd nns , pps md * be vbn to hv at nn in vbg . cc vbg in at nn in at nn in in cs pps be nn cc cs pps be nn in in at jj nn md ql rb be vbn in in dt nn . jj pps bez , rb , cs at jj nn hvz at jj nns . cc wdt doz pps vb in ppo . at nns , at nns , at np in nn in at nn . rb , cs pp$ jj rb vbz in at nn in pp$ vbg jj , cc cs dt jj jj in in cs at jj np nn in in bez vbn in at nn in nns ( cs jj cc vbn ) in at jj nn in nn cc at jj nn in nn , rb at jj hvz at nn . cs ppss vb ppo in vbg , cs wrb pps ql rb vbz , pps vbz in pp$ nn . cc rb rb , wdt hvz at jj to vb . rb hv ppss vbn dti jj nn wps hvd pn to vb in dt . . ( nn cd ( nn , cs vbn to vb rp pn in nn in vbg at nn . uh . jj cs at nn bez abl at jj nn . rb , at vbg jj in at jj nn , rb vbn cs pps bez in at nn in nn , cc in ap nns vbn rb , rb , rb in at jj nn in pp$ nn , cc at ap in cd nn . dt jj jj bez ql ap cs at nn in nn vbd rp in at nn in cd nn in at nn . cc at nn vbz cs dt nn in nn bez rb at nn in nn . in ap nns , cs at nn in at jj nn bez at jj nn in at vbd nn , cc cs dt vbd nn bez vbn in nn vbn in in at nn , cc vbn in at nn . pps bez jj cs at nn rb vbz in at vbg jj . cc pps md be vbn cs dt bez in at nn in vbg nn in at nn . cs at jjt nn in rb vbg md vb to be , wrb in vbg pps rb vbz in nn . cc at jj nn ' jj nn bez rb in at nn , cc rb pps md nn rb cs pps md . rb , cs ppss vb ppo ql rb , cc nn ppo in pp$ nn , ppss md vb cs wrb jj , ex bez at vbg nn in at nns in pp$ nns cc at jj nns in nn . cc wrb vb pn in abn dt nn in at nn . vb rp . ppss hv vbn ppo nn . rb vb wdt at nn bez . md ppss * vb nn in nn . pp$ jj nn , in dt nn pps bez * ql jj to vb dts jj nns . nn hv rb vbn pp$ jj nns at jjt in abn . cc cs in dt jj nn , ppss md rb vb in ppo , cc rb be jj cs in wdt pps bez rb . at jj nn in ppo bez vbn in at jj vbg nn vbg ppo . cc wrb md ppss rb vb cs dti nn vbz in ppo , wrb , rb , wrb ppss ber jj qlp to at jj to vb at jj nn in pp$ nn , pps bez in at jj nn , at nn nn abn in ppo . cc cs in jj nns ppss md vb cs ppss rb vbn nns in nn in at nn , wrb do ppss vb cs ppss ber * rb vbn in pp$ nn . cc wrb do ppss vb cs ppss ber * dts jj nns rb vbd in at nn in nn jj , wdt bez vbn in at nn in at jj ' nn nn . in rb wrb jj vbg in at jj in nn . . ( nn cd ( nn in at jj , in pp$ vbn vb nn in vbn cs at jj ' nn in at nn . rb rb , at jj rb vbz at jj nn in nn in pp$ nn , cs in at vbg nn ppss md rb vb at nn in at nn vbd rp in nn . cc bez pps in abn jj in at nn to be in jj vbg at jj nn in at jj nn . pps md * do in ppo to be vbg in ppo , cc vbg pp$ nn in ppo . ppss md vb in pp$ nn in dt nn cc vb ppo , cc vb ppo rb . in rb wrb vbg in jj nn in at jj , jj nns in at nn , wdt md rb vb , pp$ nn md rb jj , in at nn in at nn cs vbg ppo . cc ppss vb cd , wps vbg in ql jjr nn in at nn , cs in dti jj nn in nn , cc rb , ppss md vb , at nn vbd rp in pp$ nn cc nn . wrb , in nns , at nn bez vbn jj . ppss vb to vb ppo . dt nn . ppss hv vbn pps vbd , cc ppss do * rb vb ppo , cs cs at nn bez ql vbn in pp$ nns , pps md vb ppo . at jjt nn at nn md do rb , pps vbz in ppo , bez to vb dt jj nn rb . rb , ppss md vb , rb cs ppss md vb cc vb . pp$ nn bez dt : cs at nn bez pn cc nn . cc in ap nns , in dt nn ppss bem vbn , in nns vbg at jj jj nn cc nn in at jj nn . ppss vb ppo at jj , jj beg , rb cs pps bez at jj nn cs pps bez rb vbn in nns , cc in nns . abn ap nns rb ber . pps bez abx jj cc jj . cc ppss bem vbn cs in at nns in abn jj jj nns , jj cs np , nn , at nn , np , np , cc rb rp , ex rb vbz rp at fw fw in jj nn , cs in at nn in vbg jj nns . cs vbg at jj nn in nn , ppss hvd at nn to vb at nn in ppo . cc cs rb vbd vbn rb , at jj vbn vbg cc nn in at nn in pp$ nn . at jj nn in pp$ nn , cs vbn in jj nn , in cd nns in jj nn in pp$ jj vbn nn , in at np nn . dt vbz at jj nn in at jj nn . cc wql rb pps vbz pp$ nn in at jj , jj . . ( nn cd ( nn , to vb ppo rb vbg in at jj jj nn . pp$ jj , jj nn nn in at nn in nn , vbn in pp$ jj nns , cc dt nn in in cs ppss md rb vb ppo in in vbn in at nn , cs cs nn ppl hvd vbn pp$ nn in pp$ nns . in , nn ' ppss vb , nns do * vb at jj nn . ppss rb vb nn . cc rb , in abn at jj nns in at jj nns in pp$ nn , jj nns rb cc rb vb , nn pp$ nn in at jj nn . cc in dt ppss vb np . in abn hv nns . ap vb . cc nns cc nns , ap in in ppo , hv nns . nns in abn nns jj , cc nns in dti nns jj . dt nn vbz cc nn cc jj , cc vbz at nn wps vbz ppo abx in jj nn . . . ( nn cd ( . . ( nn fw cd np np ( ap nns hv vbn at vbz in at jj nn in at nn , cc at jj nn in at nn wps rb vbz . ql jj , ppss vb at nn . nn at jjt jj nn nn ' jj nn to vb in dt nn in at nn wrb pps nns in in at nn in at nn , pps vbz in pp$ jj nn rb , at nn in in ap cd jj nns . at jj jj nn in pp$ nn vbz in cd jj , jj , jj nns cc nn , rb jj rb in ap cs at nn in nn . in at nn cc nn , dts nns rb vb , rb rb vb in dt ap cs nns , vbg at jj nn in . in at vbg nn ber at nns in nn ql rb vbn cs in at jj nns in dts nns . in pp$ jjs nn in at jj vbn jj , at nn md rb vb cd nns in . at jj nn vbz at jj nn nn in vbn . . ( nn cd ( nns . cc vbn in ppo , cc ppss vb cs cd jj nns vb ppo : in in jj , jj , cc jjr . at vbz in at jj cc jjr nns , ber jj cc jj . dts in at jj cd , ql jj , cc vbg rb in at jj nns . dt jj nn , cs ap cs pn rb , vbz nn in at nn . to at nn in jj jj nns , at jj nn md vb at jj nn in at jj nn in nns rb vbg in at nn in dts jj nn in at nn , cc wdt rb vb ql ap in at jj nn in at nn . cc cs cs dt jj jj nn in at jj nn bed * ap , at jj nn in at nn bez vbn rp in at nn cc jj in jj nns cc nns , wdt vbg in dtx nn at nns cc vbg rp in at nn , rb vb in ppo , cc rb vb in pp$ nn . rb cs in at nn at jj jj nn in at jj jj vbz vbn in at nn . md nn vb to vb , dt bed at nn to do ppo . cc doz dt in in pp$ jj nn , in abn vb in nn at jj nn in pp$ nns . wrb nn in nn vbz in at nn in nn . in at jj , dts nns vb pp$ ql jj nn in ppo . jj nn rb nns nn cc nn , cc pps rb vbz ppo . cc in pn rb jj , nn hvz ap to do in at nn . vb rb at vbn nns cs abn in vb vbg in at nn in at vbn np , cc pp$ nn md be vbn . ql jj jj vbd at nn nn in at jj nn in np , pps bedz vbn in at jj nn in at nn , wps vbd cs at jj jj nn . wrb np vbz rb np at nn in jj nn , nn wdt nn bez rb . cc wdt ppss md vb in at jj nn in at nn , at jj , vbn , jj jj nns , in wdt pp$ nn hvz ben ql rb vbn . dts nns , ql jj cs ppss ber in abn nn , vb pn in dti nn , cc at jj jj , jj cd in nn cc nn , wdt in abn nns pps bez vbn , vb at jj jj nns in pp$ nns . abl bez at jj nn in at nn ppss vb in , cs . . ( nn cd ( cs vbn in nn , cc in jj , cc in nn , wdt be at nn pps be in , pp$ nns ber rb vbn in vbg nn . rb at nn ' jj nn md vb ppo . cd jj nns ber jj in ppo . od , wrb vbn cs at nn in nn . od , wrb vbn cs at nn in nn . od , in vbg . od , in nn . od , in jj nn . od : beg jj in pp$ nn , at jj ' nn nn nns in at jj nn in at nns in abn ap nn nns . ppo rb nns . in nn cc nn , vbg bez at nn in nn . to at jj , pp$ nn bez at jj nns in nn . vb in jj vbd rb in at nn , cc rb rb vbn rb , pps bez dt wdt vbz cs jj vbg , vbg nn in at nn wrb rb vbg . pp$ nn in nns rb vb to vb in . od : pps bez at ql jj , cs cs cd nn jj rb vbz dt nn jj in pp$ nn cc nn , rb , in pp$ nns in nn , pps rb cc rb vbz pp$ nn . in vbg in at nn , pps rb nns rb pp$ nn in ppo , cc at nn bez rb vbn in at nn . cs pps be vbn in at vbn nn , rb cs pps vb in pp$ nn , at nn bez rb rb jj . at nns in nn cc nn md vb ppo . pp$ ap nn vbz in vbg ppo . cc cs pps vbz rb in at vbg nn , rb rb vbg in at jj nn in at nn , cc at nn in pp$ nns , at vbn nn cc at vbn nn cc cd , at nn in nn in at nn , bez rb at ql jj nn . dts vbn nn nns ber ql rb vbn in at nn , cs ppss ber vbn jj nn ' jj nn . dti cd nns in at nn , cc at nn bez vbn . od : ppss md vb ppo , cc pps vbz in ppo , cs in at jj at nn in nn bez vbn in at nn . in in dt nn ex bez at nn in ppo rb vbn in at nn in at nn ' jj nn . dt nn bez rb vbn in at nn in vbg , wrb in rb nn at jj in at jj jj nn vbz pp$ jj nn in nn in nn in at nn in at nn . cc cs pps vb cc at nn ' in jjr , nn in dt nn , nns cc abn . . . ( nn cd ( wdt nn ex bez in dt jj nn . hvn dt nn dti jj nn , ppss md rb vb ppo in np ' nn cs rb vbd at nn in nn , cc in jj nns vbn rb in nns , cc rb vbd pp$ nns . in ap nns in cd , at nn pps bez cs at jj doz * vb dt jj nn in pp$ nn . cs ppss hv vbn in rb dt nn , cs wrb vbn in at nn , vbn in pp$ nn cc vbd at nn . od : vbg nns in at jj in at vbd nn in at nn in jj nns , ppss vb ppo vbn in at jj nn in pp$ nn , cc nn -- cs , pps vbz in at nn cs cs pps bed at nn . cc rb ppss vb pp$ nn in pp$ nn . at jj nns in pp$ nn ber vbd jj in at nn . rb jj at nn , at jj nn vbz in nns . ppss md rb vb at jj nn hvd ben vbn . cc cs ppss vbd at jj nn in nn in at nn in pp$ ap nn , ppss md vb cs dt bedz at nn in at nn in nn . od : cs in at jj vbg nn in at fw at nn vb rb in at nn in pp$ nn , ppss ber rb ql rp in nn in at nn . cc wrb pps bez rb to vb in at nns , pp$ jj nn in in ap cd nns in pp$ nn ber vbn jj in at nn , cc rb vb vbg at nn , cs ppss rb vb rp in nn . in at jj nn in in rb rb to be vbn in in dt nn in at jj ' nn nn bez rb at jjt nn to be vbn in abn vbn nn . rp in at jj nns at jj nn vbz ql jj in at jjt nn . ql in nns , hv ppss vbn jj np vbg rb pp$ vbn jj nn in at nn np in nn . cc in vbg in jj nns , pps bez abn in abn wdt nn ppss ber in . cs in at nn , at nns md vb in ppo . cs in dt in np , at nns . vbg in at nn in nn in pp$ nn in at nn wps vbd nn cc nn , ppss rb vbd at jj nn in nns in at nr , abn vbg in at nn , cc in at nn vbg in nn in jj nn . cs pps vbd in ppo in at nn , abl at jj . . ( nn cd ( nn in nn in at nns bedz rb vbd , rb in np , at nn in at nn nns . cs np np vbd in at jj nn , ppss rb vbd in at jj , vbg ppo at ql jj in abn nns . in in in np np , at jj nns in nn rb vbd at nn in pp$ nns vbn in at jjt nn . at nn nn in dt nn , in at jj cc at nn , ql rb cs dti nns in at nn in at cd cc at nn in at ap ber vbn , md * vb to vb dts cd jj nns in at nn , ql ap at nns in wdt ppss rb vb . in cs at jjt nn bez cc at nn in jj , rb , vbn in jj ' nn nn , pp$ nn bez cc at nn in at jj . at ql jj nn in at nn ' jj nn bed cs at jj nn in at nn , vbn in at jj nn cc nn in at nn jj ' in jj nn , wdt in vbn nns hv pn in at ap vbn jj nns in abn pp$ vbz cc nns in at nn , ql rb cs at jj nn nns pp$ nns . at ap ppss vb dt jj nn , at ap do ppss vb pp$ nn to vb ppo . in nns ex ber nns in ppo , wdt , cs ppss md rb nn at nn in nn , vb ql jj . in at jj nn , ql jj , rb , ber dts jj nns , cs ppss hv vbn nns wps hv vbn ppo jj to jj in np nns cc nns . cs at jj , rb , in dts nns rb jj in at nn . cc ber rb vbg ap nns in at jj in pp$ jj nn , jj in nn , cc jj in pp$ ql vbn nn . vb ppo wrb ppss md , rb , ppss cc vb nn jj . ppss vb ppo * , cc rb md . cc cs ppss vb * rb at nn in dt jj , wrb vb pp$ nn . ql rbr , wrb vb pp$ nn , wrb nn pps hvz pn . . . ( nn cd ( ppss nn vb pp$ nn nns , pp$ nn , pps vbz to vb , cc pp$ nn md * be vbn . cc ppss md rb vb rp pp$ nn nns . cc nn wdt pps md in pp$ nn , ppss vb rb pps hvz at nn . . . ( nn nn . ( cs abn nn in at nn in jj nn in at jj cc at nn bez jj , rb cs in dt jj at nn vbz in ap at ap nn in at jj cs at nn doz in at nn . rb , ex ber * vbg dti nns in jj nn . in dts bez at nn . pps bez rb vbn cs at nn md rb vb rp nn cc nn in pp$ nn , cc rb jj ppo , nn pps rb in at nn . . . ( nn cd ( . . ( nn np cd np nn nn ( at jj cc jj nn in np , vbg nr in rb in at nns in np , vbz at ql jj nn in abn np . in at jj nn in dt nn vb at jj nns in np , np , np , cc np . wdt , in ap nns , vb at jj nn , cc nn , rb vbg np in np , cc vbg at jj jj jj nn in at rb vbn jj vbz . dt nn bez vbn in ap rb in nns in at nn in nns cc nns . jj in wdt ber at nns in nn cc np . in at nns in nn , rb , nns vbn in np in at nr , vb in at np nns . dts jj nns in nn vb np in np . cc vbg rb in dt jj nn in nns , vbn in dt jj jj jj , vbn in nns cs np nn . ppss * at ap vb in at jj nn vbg in dti jj vbn nn : cc vbg at jj nn in nns , cc vbz , cc nns , cc nn , cc nn , in wdt at cd nns in dt jj nn ber vbn , pps vbz at jj nn in nn , cs jj nns , in at ap nn in at nn , md in ap vb at nn , wql jj , in beg vbn in at abn in vbg jj nn . at nns in at nps in nn ber vbn in dts vbg nns wdt vb at nns in at np , at np , cc at np . in at nps , dts nns do * vb at jj nn in vbn nn in nns in at jj nn in nns . . ( nn cd ( cs at nn , wdt in nns nn , in nn cc in nn , hv vbn in at nns in np cc np , jj in at jjt vbz in at nr . cc cs ppss rb vb at jj cs dt , ppss do in at nns vb pp$ nn in ql jj nn . nn rp in nn at jj nn in at nns , vbg in at jj vbn nns cc nns in np , hv vbd rp in at nns vbg in at nns , rb vbg nn in at nn in pp$ nns . cs in at vbn jj nns ppss hv vbn in at nns in jj nns , at nn in dts nns hvz in rb ben ql vbn . rb , rb in at jj nn , ppss rb vb in np cc jj nns , wdt , in dts nns , hv ben rb vbn cc vbd . in at jj , jj nn , at fw bedz rb vbg rb in dts nns . np vbg to vb in ppo in at np nn , cc rb , vbg rb , in nns vbn to be vbd rb cc rb in at jj jj , vb rb in at jj nns , cc vb at jj nn in np , in nn in at jj vbg nn rb . in dts nns , at vbg fw md vb rb abn at vbn nn nn vbg nns in at nn , jj in vbg in at nn in at jj . wrb np , cs rb rb vbn in pp$ nn , rb vbn in vbg nn in np np , in at nn pps bedz ql vbn to vb . cc in at nn wrb pps md ql rb be vbn to be vbg ppo . cc wql rb . in dt vbn nn , doz np vb at nn . doz pp$ nn nn nn . rb , pps md vb in nn . rb . in at jj nn , rb , at nn in vbg nn hvz vbn in pp$ jj nn , cc vbz at nn cc wdt ' nn in ppl . ql np . vb dt , rb , in at jj . cs ap nns ber vbn rp in jj nn , to be vbn in jj nns . at nn in vbg jj in nn vbz at nn cc ppl cc nn , pp$ nns cc pp$ nns . pps hvz at jj nn ' np nns vbn in pp$ jj nn . pps bez vbn in nns . * rb in jj nn in nn cc nn . pps vbz nns ' nn in ppo . jj jj jj np nn . wdt , wrb cd nns rb , at np , . . ( nn cd ( in at jj , vbz to vb cs at jj nn , cc nr vbd rp in nns , in at jj cc jj nns . rb pps bez , cs , cs ap nns md hv vbn in np in jj np , cc rb rb , vbg in at nn in nns , at jj in nn , in abn dt nn , md * hv vbn cd nn in nn . pp$ nn hvg vbn at nn cc vbg nns vb ppls . ql wps dod ppss vb ppo at nn cs dt nn hvd vbn . ppss md rb vb in -- uh , nns , rb ' np at jj . rb , cs ap nn np hvd ben vbn rp at jj nn in np , in at jj nn in at nns in nn . rb , cs ap in at nn , jj , bedz rb vbd in at nns cs at jj nn in vbg . rb , cs at fw vbd rbr cc rbr in np nn , at nn in nns bed rb vbn , cc vbd to vb ql rb . cc cs at jj jj nns in at nn rb vbd in at jj nn , cc in vbn nns at jj nn bedz vbd in at nn , cc * at ap nn bedz vbd . ql vbg abn vbd in vbg rp in dti nn rb , at nn hvd rb rb vbd at nns , wrb at jj vbg nn bedz vbn in rb , cc cs rb at nn in jj nn vbd ppo . cc rb be pps vbn , cs vbg in at vbd nn in wdt in rb ppss hv ben vbn in abn cd nns , at jj np , rb in ql rb vbg in jj vbn nns , cs in ap nns , ber rb rb vbn in in jj nns , rb vbg ql jj at nn , cs pps md rb vb cs cs jj nns in ppo hvd vbn jj nn cc nn in jj nn cc nn . to dt nn in at jj nn in jj jj nns , md be vbn at nn wps rb in at jjt vbg nns , ppss md rb rb vb in nns cc nns rb , in beg vbn in at ap nn . cc rb be rb vbn in wdt rb vbz nns in nns . jj in abx nns , in at nn in dti cd cc cd nns , cc vbg at jj nn , vbg cd abn in at nn nn , at jj nn in jj in nns bed rp in vbg cc vbg in at nn in nn nn . in at jj jj . . ( nn nns ( nn in nns in at jj nn , wdt , vbg in nn , vbz rp in cd nns , cs at nn vbg nns in at nn , at ap rb in vbg nn in at jj nn vbz at jj vbn nn in jj nn , rb vbg cc vbg rb in nn . vbn in at fw ' jj nn , rb , cs pps md vb in at jj nn in at nn , dt nn in jj nns , rb vbg rp in at nn , cc vbd in at vbg nn in jj nn , vbd cs at cd jj nns in dti jj nn , vbd in at jj jj nn , in dti nn in at nn . cs vbg nns vbg at jj nn in at nns , vb pp$ nn , abn nn to vb cs jj nn in pp$ nn , cc rb rbr vb in jj nn in at jj . rb rb dod dt jj nn in vbz rb vb vbg rb in at nns . rb vbg at nns in pp$ nn , cc vbg rp , in cd jj , cc rb jj nn . vbg abn vb at fw vbn in ppo . at nns vbg pp$ nns , cc rb vbg in at nns in pp$ rb vbn nns . cs at nn rb vbn , jj nn hvd ppss , cs vbn in dts nns in nn , at jj nn md rb nn in at jj nns to vb at nn in * at ap in pp$ nn . cc wps md vb cs , in wpo vbd nn , np np ppl md * rb be vbg , cs at vbn jj in nn in at nn nn in at jj . ql in jj in nn vbn in jj in nn , ppss vbd rb , vbg dts nns in ppo . wrb , in at jj , at nn in np bedz vbn , rb vbg nn in pn in pp$ nn . vbg in at nn in pp$ nn , ppss vbd dt in pp$ nn . pps vbd vbn in vbn jj nn , vbg cc vbg pn cs at nns in at nns . rb ppss dod * ql rb vbn cc vb . cs ppss rb vbd , in rb vbg . vbg pp$ nn in dt nn , vb rb vbn in pp$ nn in nn , vbg , rb rb , cc nn nns cc nns to vb at nns . in in nns , nn , cc in ppo . . . ( nn cd ( cs cs ql jj vbg in at nns , cs at fw md rb hv vbn at nns , dts rb nns bed rb in jj nn , to vb rp in pp$ rp in jj nn . cc wrb at jj fw , in at jj vbg nn , bedz ppl in jj nn . wql ap nn in dts jj nns to vb in vbg ppo rp in pp$ jj vbn nn , in in jj vbg in nns cc nns in ppo , cs ppss bed . cs in nn in nn , nn in in cc in rb vbd at nn . in pp$ jj nn nn at nns pps vbn , cc in at in cd at jj nns vbg ppo . dti jj nn cs at rb vbd pp$ . cc wrb pps vbd in at jj nns in at jj nn in wdt at nn bedz rb vbg , cc vbd ppo cs in dt nn vbd at nn in pp$ nn , cc vbd , wrb cs in dt ap nn pps bedz rb abx nn cc beg vbn in pp$ jj nn . cc * rb cs , cc at nn in jj jj nns cc jj jj nns bed rb vbg ppo rp in pp$ nns . in in wrb abn dts nns hvd vbn in pp$ nn , np ' nn nn bedz vbn jj cc jj , cs at jj nn nn in dti jj nn hvz ben vbg ppo , in beg jj to vb at jj nn in pp$ nn . cc nns cs dts vbn ql ap in at jj nn . cc wrb , cs rb vbg cc vbg at nns jj , at fw in ap nn in at jj jj nn nn in at np nn , vbg in ap in at jj nns in . rb , at nns vbd ap to vb cs at jj nns hvd ben vbg in at nn , cs to vb cs at nn hvd ql rb vbn in at nns . cc rb vbg rp in at nn in at nns , in nn ppss vbd nn pp$ nn . rb at nn vbd ppo . cc at nn rb vbg rb , nn bedz vbn to vb in at nns . cc ql rbr dod at nn , in dti vbn jj nn in at jj nn , vb vbn in at cd nns wps bed in ppo , in in cs cs rb at nn in pp$ nn , in in cs ppss vbd rb , cc vbg in jj nns cc nns , cs cs pp$ nns abn vbd cs vbg nns in vbn nns , vbd rp in vbn nn . vbn in pp$ nns cc nns , ppss vbd in at jj in nn , . . ( nn cd ( cc in ap nns ' vbg bed rb vbn to vb at nn , wrb at jj vbg nn in at nns vbd vbg nn cs ppss bed rb in ap in at nn in dt jj nn in jj nn , wdt , wrb at nns vb ppo in at jj , ppss vb pps bez vbd . at jj jj nns in wdt ppss hvd ben rb rb cc rb vbg , bed rb vbn rp in cd jj nn . cc cs nn nn ' nns in at jj nn in np , ppss vbd vbg jj in nn . in abn nns vbg in jj jj nns , cc rb vbg rb cc rb , in pp$ jj jj nns , ppss rb vbd pp$ nn in nn . dt bedz rb ql rb vbn in dts in pp$ nn , wps , rb vbn cs pps bed , rb vbd cs nn in vbn vbn nns in at nn . hvn dts nns ben in at nn in jj nn , vbn in at nn in cd jj nns , ppss md * rb hv vbn abl jj nn . cc dt jj nn bez jj in rb abn vbg nns . cs vbg rb in nns in nns , at nn in jj nns in at nr hv vbn in at jj nn . nn , rb , abn jj nns , wrb wrb vbn rb in at nn in at nn ' jj nn , ppss md , in at jjt nn in nn , nn vb in vb in at nns , vbg , nn , nn , cc rb vbg dt ap in nn . rbt , rb , vb . . ( nn cd ( dti nn in at rb vbd nns in ppo , cs ex bez at nn in at nns in at nn wdt bez * rb vbn in at nn in nns . cs ap in at nns , cs hvz ben vbn , bed in jj nn , cc pps bez to be vbn cs cs at jj at nn cc vbn cc vbn , cc rb vbd in cd nn . cs bez jj in dts nns , at nns in rb vbn , dt vbg in dti cd jj jj in at nns in at nn . rp in cd nns ' nn , np ' rb vb bedz vbn . at vbn nn vbd vbg nn in pp$ nns , cc rb vbg rb in ppo cs nn , vbd rb in at nn in at nn . cs abl at nn in at nn in at jj vbd in jj nns , bez in at jj jj . cc rb bez ql rb rbr cc rbr vbn . rb doz pps vb cd in at ql jj nns in at nn . in cs at jj nn nns ppss jjr cc jjr in at jj nn , ppss vb fw in jj nn cc rb vb in at jj vb . cs , jj cc jj , at jj vbd rb , cs cs in jj nn in nn to vb ppl in at nn vb cs hvd vbn in ppo . cs ppss rb vbd at jj nn in at nn , in abn nns vbn cs ppss vbd , in at vbn nns in cc rb vbg in ppo . pp$ vbn nn bedz cs at nn vbn in nn in nn in at nn , cc vbg to vb in pp$ vbn nns cc nns , vbg * in wdt nn pps md be vbn in cc vbn . cc * at nn vbn , np vbd ppo rb . rb vbg rp in dt nn rb in pp$ nn in nn . rb vbg rb in dt , wp$ jj nn bed vbn rb , cs abn at nn , np vbd rp in at nns , nn in nn , vbg rp in pp$ nn wdt vbz pps md vb in jj nns , cs ex bedz at nn to vb jj nns . cc bed at nns ql jj , cs pp$ jj nn bedz rb rb vbn in . ppss rb vbd in at vbg nn in at nn . rp in at nn , nn . vbd cd , in at jj jj cs in at jj nn rb in at nn , cc in at nn vbn in nn ppo . rb rp in pp$ nn , rb . vbd at od . . ( nn cd ( in dt , wdt , rb in pp$ jj , vbd rb vbg ppl in pp$ jj nn in jj nn . abn nns vb ap jj nns , rb vbn in at np nps , vbn nns . cd jj nns in nn in jj nn ber rb vbn rb , cs cs ppss vb dt ap ' jj nn in jj nns . at nn in jj nn bez rb vbn in at nn in dt nn , cc at ap nn in at nn beg vbd , pps md in at nn be vbn in at nn . pps bez rb in vbd vbz cs dt nn bez vbn . in rb , ap nns ber rb vb ppo cs ppss md rb vb in cd nn . cc nn nns ber * at nn vbd . cs ppss md , rb , ppss md vb abn ppss md . cc cs ppss md vb ppo abn in rb , ppss md vb ppo , cs cs ppss md be rb vbn in pp$ nn . rb pps bez , cs in nns cs dts at nn vbz in nn . pp$ nn bedz vbn in cd in ppo . at od cc od bed rb vbd , cc ppss vbd at nns rb vbg rp , jj in at jj jj nn in at jj nn . ppss bed vbd cs nns in at nn cc nn . cc in nn at od , in at nn in vbg rb at jj jj nn , pps vbd in cd in at nns in at nn , cc in at nn vbd ppo rp cc vbd ppo rb , vbg at nn in at nn ' jj nn cs at nn vbd in in ppo . in abx nns at nn vbd rp in at vbn nns , cc ppss vbd cd cc cd nns cc nns in , cc rb vbd at nns in at nn . pps hvd ben ap in jj to vb dts vbn in nns , bed pps * cs cs ppss vbd in at nn , pp$ jj ' nn nn rb vbn . rb , cs cs ppss vbd rb rbr cc rbr in at nn in nn , at jj nns vbd vbg . ql cs wrb in ap at vbg nn vbd rp , cc at jj jj rb vbn . rb , in at vbg nn in pp$ vbg nn , ppss vbd in cd nns in at jjs nn in at nn , cs cs in dti nn nn ppss hvd vbd in at jj nn nn . rn at nns in at vbg fw in at nn vbz , bed vbn cc * vbn . in dt jj nn at nn vbn cs jj nn in jj nn , vbd at jj , vbn . . ( nn np ( in at jj nn vbn rp in at jj in pp$ ql jj nns . rb , ppss bed rb in dt vbn nn wdt ppss vb vbz in at nn in at nn . cc rb in at vbn nn ppss vbd at nns in at jj jj nns , cc vbd jj nns in nns , cd cc cd in dt , rb vbg nn cc nn , cs vbn nns in nns in at nn . cc ql rb nn in nn , cs at jj nn in nn md rb hv rp in vbn at jj nns , cc rb hv vbn rb in pp$ nns . vbg in at nn in at nn in jj nns , ql rb vbg at vbn nn in at nn , at jj nn in nn bedz in rb vbn ppo . ppss md vb in at nn in at vbg nn cs vbn ppo rp . at nn wps hvd rb vbn ppo in nn to vb ppo rp . vbg in at nn in at nn , ppss bed rb vbn in jj jj nns cc nns . at nns cc nns in dt vbd nn . rb , jj in at jj jj nns in at vbg jj nns , cc jj in at nns in at jj nns in dti cd in dts nns , at jj nn in dt nn , vbd in at jj nn , md hv vbn in ap cd cc cd jj nns . in dti nn in in cs rb abl at nn in abl at nn md be jj in in nns md be vbn in pp$ jj nn wps vbd vbg rp rb in at nn in at nn . nn vb dt nn , rb , cs cs at nns cc nns hvd ben rb vbn rp in dt jjs nn . cc cs cs at jj nn in at nn hvd rb vbn ppo in vbg at jj nn in pp$ vbg . cc , rb , beg ql jj , jj , cc at nn jj cc jj . wrb pps md hv ben , dts jjr nns in in rb cc rb vbg pp$ vbn nn in at nn in at nn in in vbn at jj nn cc nn , cc rb at rb vbn nn wdt pps bedz jj * to vb in . cs nn nns ppss vbd vbg in ppo , ql rp in pp$ nns , cc vbg ppo . cs pps rb vbd cs dti nn hvd rb jj ppo . np vbd pp$ nns . np vbd pp$ nns in pp$ nn . cc jj in at nns , in at nn vbd in vbg ppo . . . ( nn cd ( cc rb in dt jj nn in at nn , dt cc rb nn nn vbd pp$ nns cs ppss vbd in at nn . in , vbn in dts jj nns , vbd at nns in at vbg nns in at nns , cc dts wps in pp$ jj nn vbd rb to vb nns . at nn , cs ppss hv vbn , bedz in at jj nn ql jj . cc ql jj nns cs vbg md rb cc rb vb rb in at nn , cs cs vbg cd jj nns in at nn . cc cs rb vbg jj nn , be rb rb vbg in dti jj nn . in in rb rb dod at jj in dts nns vb vbg rp in ppo , cc * in ppo , cs cs ppss bed cc at nn in nn in vb in pp$ jj in vbn nn . vbg in pp$ nns , at nns rb vbd rb vbg ppo . pn in dts ap nns , cs in ap jj nns vbd rb at nn jj , md hv vbn dti cd nns in nn , cc dti cd nns in nn . pps bedz at ql jj . cs cs rb pp$ nn vbd jj cc vbn in dt jj nn pps hvd ql rb vbn in at jj jj . wrb , nn in nn , cc abn jj in at jj nn , at jj jj nns vbd cs at np ' nn nn . at jj nn in nns , cc at nns in pp$ nn , rb rb vbn at jj vbn nn in at nn ' np nns rb vbd in jj nns . nn . nn . vbd np , vbg in at jj . ppo rb . ppo rb . -- in wps vb ppo . wps vbd . cd jj . cd jj , cd ap . wdt vbz ppo , nn . vbd np . vb in nn rb , vbd np vbg rp . cs wrb at vbn jj , cs in at nn hvz vbd rp nns in nns in nn . cs , in jj jj , pps vbz rp rb , cc vbz at vbn vbg nn rb vbg cc jj in at nn . ql rb , np vbd jj nns in at jj nn in np np , in wdt at jj jj vbd rb vbn in pp$ nn . * rb in at jj nns in at nn , dt jj nn , in at jj nn jj , vbz vbn in at vb cd , cs cs at jj bez rb vbn . dti in at jjt nns in at nns . . ( nn cd ( vbd vbd in ppo in dt vbn nn . ppss vbd jj jj nns in at jj . cc rb , cs vbn in nn in nn in nns cc nns , dod dts jj nns in at nn rb cc rb vb in abn jj nn . rb , rb vbn in nn cc nn . cc rb rb , in at jj jj in pp$ beg , do ppss ppl rb in rb rb nn in jj nn . cc cs jj nns in vbg nn vb in ppo , rb rp cc rb rb ex nn rb vb ppo in jj nn in nn . rb , cs ppss rb vbd vbn , at jj jj jj nns in at nn vbn at nn in at ap nns , rb vbn in vbg at nns in at nn in at nn . cc rb vbg in at nn in at od nn , wrb nn in nn cc dti jj nns bed vbn ppo . cc at nn in at vbd vbn vbz rb cc rb rb vbg to cc rb in at nns , bedz pn in wdt in ap vbd pp$ nns . pps bez rb at nn wrb rb in at jj rbr cs rb jj cc jj , to vb in nn ppo , cs pps bed , in nn cc vbg pp$ jj nn in nn . pps bez vbn in vbg at jj in vbn nn in nn , in wdt bez vbn at nn in vbg ppo rb rb . at jj vbn ( cs ppss rb vbn ) in dt nn , cc * rb , cs pps vbd , hvd vbn rb in at nn , vbg rb in ppo abn in at vb nn . cc in at jj nn in at nn , pps bedz rb vbg in at vbg nns cs at jj vbn nn . . ( nn cd ( np , in at nn in np , vbg nn wrb pps vbd . cc jj cs bedz at nn in dt jj , cc at jj nn qlp , dti nn . rb at jj nn in wdt pps vbd to vb at nn in at nn , bedz vbg in at nn wdt in rb at vbg nn vbn in ppo . cc in nn ppss vbd cs in cd in at jj nns in at nn , dt jj hvd vbn vbn in at vb in nn cs pps vbd . pps hvd rb vbn rb in at nn in nn in ppo . cc cs at jj nn in at nn vbn in dt nn , hvd rb vbn in at nns in at vb in nn in pp$ nn , at nn in nn ppl hvd vbn rb in pp$ nn . ql cs vbn in nn , pps bedz rb vbg in at nn , rb vbg in pp$ jj nn , cc vbg at jj nn in ppo , vbg cc vbg pp$ jj nns . dt jj nn vbd to vb at jj nn in pp$ jj nn . od , at nns vbg at nn in pp$ nn vbd to vb at jj , cc nn in dt ap , cs cs vbn in abn vbn nns in rn . rb at nn ppl vbd rb in nn cc jj . at jj nn in nns cc nns vbd . in ap cc ap vbg nns at nns in at ql jj nns vbd to vb in vbg nns . rb , at jj nn bedz vbg . at jj vbg nn bedz rb vbn . cc rb cs in at jj nns in nn in nn wrb at jj nn np vbz rp in nn , at jj nn in nns vbd vbg in pp$ jj nn , cs cs to vb ppls rp in cd jj nn . rb np cc np vbd nns . np vbg at nn . np . np . pps rb vbd , vbg at nn in in jj pp$ vbz , cc vb pp$ nns , rb . pp$ np , nns , vb in . vb ppo rp , ppss nn in in at jj rb . -- in nn ppo . -- in vb ppo . vb rp in in vb rp , cc vb rb . nn , nns in in nn , nns . rb vb pp$ nns in in vb ppo . -- in nn rb . at nn bedz rb abn cc vbn in cd jj nn vbz , vbg at jj nns in pp$ jj nns . cc in jj nn ppss in ap nn in at jj . . ( nn cd ( nn . rb vbg nn rb , cc in at ap nn rb vbg in dt nn . cs ap jj nn in nn nns , ppss in ap rb vbd in wdt hvd rb ben cd in at jj nns , cc rb vbn in jj nns , abn rb vbg in cd nn . dt jj nn bedz rb vbn in at nn in np ' nn nn , wps , cs vbg in at nns in nn at nn vbz , hvd pp$ nn vbn jj in pp$ nn in at nn in nn vbn in at jj nn in at nn in jj nn rb in . jj cc vbn cs at jj nn rb bedz , pps rb vbd ppl in wdt vbd at jj nn . in hvg vbn rb in ap in cd jj nn , ppss rb vbd pp$ rb nn in vbn nn . jjr nn bedz jj . cc at nns rb vbd in pp$ nn to vb rp wdt vbn nns md be vbn jj , cc rb to vb pn wdt nn hvd vbn cc jj . at nn bez at jj nn , cd cc cd in wdt ber vbn in at nn . cc wdt , wrb jj nn bez in nn , ber vbn rb in at vbg nn in at jj jj , abx to vb pp$ nn in at nn , cc rb ql jj in jj nn , md at nns in dti ap nn vb rb . at nn in dt nn bedz ql jj in dt jj vbg in at np , in in at ap vbz at ap nn . in abn at vbn nns rb cd bedz vbn . at nn vbn to vb in at nn , cc rb to be vbn , cs md rb be vbn , in dti ap nn cs at fw . . . ( nn nn . ( in rb , cc jj , bez to vb rb in in in jj in nn . pps bez at jj np nn . pps vbz rb in np : in in at jj nns nn at ap nns in at jj cc vb ppo vb pp$ nns . to jj nn , at nn bez rb ql jj . wrb at jj nn rb vbz ppo in at jj np , pps bez jj to vb ppo rp cs cd in at nn ' jj nn in vbn nns . ap at ap bez pps in ap ap jj nns in dt nn , wdt vbn in jj in np nns in at jj jj in at jj jj nns in at nn in at nn . rb , dti in at jjt cc jjt -- vbn jj nns in in at jj in cc nn in in ber rb vbn , rb , vbn in in rb to vb in in in at jj nn . . . ( nn nn . ( at nn jj , cs in abn ap nns in at jj , cc in ql ap nn , nns rb in abn nns . in at nn wdt md rb be vbn rp in cd nns , vbg cc cd in at nn . cs in dti ap vbn nns vbg nn in at np cc np : in in at nn vbn in in vbg in cd nns , rb vbn , cd in dt nn in at nn . cc at nns ppls vb rb in dt . wrb in nn dts jj nns in at vbg jj ber vbn in at nn ' jj nn , at nn ' in vbg nn cc nn ql jj at nn in nns . at nn bez ql jj cc jj . pps hvz ben vbn in nn . pps md do rb in nns . wrb vbg in jj nn , at nns vb ap np . . . ( nn cd ( . . ( nn np cd np nn np ( at jj nn vbd nn in at jj nn cc nn in nn np , cc ex bedz rb rb vbn at jj nn vbg dts jj nns . rb , cs jj jj nns ber in nns vbn , rb , . . ( nn cd ( cs md hv ben vbn , rb in at jj nn , jj vbn nns ber rb vbn , vbg in cd in cd nns dt . abl nns ber vbn cs nns . ppss rb ber in cd nns . dts vbn ql rb in nns , cc dts vbg pn cc jj jj nns , cc nns , cs ppss ber rb vbn . in jjr nn in at nn in nns , ppss rb vb at nn in jj vbn nn , cc * jj . wps , in dti nn , nns pp$ nn in vbg in at nn cc vbg at nn in pp$ nns . in nn , dt nn bez at jj np , vbg rb in at jj nn , rb vbn in abn at nns cc nns in at nn . at nn in dt jj cc pp$ nns bez jj . rb , cs pps bez rb in at jjt nn nns , at nns , rb in jj nn , ber * ap in cd od in at nn in at nn in jj nn . ppss ber ql jj , rb . ppss md vb , * to vb abn at nn nns in at nn . rb , pps md be vbn , cs in at jj ppss ber rb vbn in fw nn nn . pps bez ql jj to vb dt nn cc pp$ nn in pp$ jj nns . cs vbz , ppss ber in rb in at nn in jj nn in nn . ppss vb ppo in at nn in nn in at jj nn in at jj vbg nn , hvg rb vbn , rb , in vbg at nn in at jj nns , cc rb vbg nn in abn jj nn cc nn . in at nn ppss hv vbd rp cc rp at nn in at nn rb , ppss vb in at jj nns in nn in at jj nn rb , cc rb vb at ap jj nn in at nn . wrb rb vbg in cd in dts nns , cs dti jj jj nns ber vbn , pp$ nn jj vbz at jj nn in pp$ jj nn . md dti rb jj jj jj vbg dt nn , vb to vb rb rb in cd in at nns , in wdt jj nn at np nns ppo , cc nns ppo rb . jj nns , rb , cs vbn jj nns vb ppo ber to be vbn to vb at nn in jj nn . cs do wdt at np md , pps md vb at ql jj np rp . . ( nn cd ( in pp$ nn . in , uh . abn nn nn in jj . ql rb , at nns rb vb at ql jj nns in pp$ jj nns . rb rb in at nns , wps rb vb in jj nn , cc abn in nn . ppss nn in pp$ jj jjr nns , rb vbg ppo rb , cc rb vbg in at nn cs vbz cs rb vb pp$ nns . * at ap ber vbn hvg at jj nns in dts nns , in in vbn nns , vbn nns , jj nns . cc in dti nns , vbd cc vbn nns . cc cs at nn in jj nn to vb ppl rb in at od nn in at nn ' jj nn , rb bez pps ql vbg to vb dt nn . rb pps vbz pp$ jj nn in ppo rb cc nns rb rb , rb in vbg nn in jj np , cs jj np rb vbg in pp$ cd nns . vbg ap nns to be in nn , at nns md rb vb nn in cd in dts jj nps . in dts jj nps ber ql jj in pp$ nn , cc rb pp$ nn bez jj . cs in at nns cc at nns ppss vb , wrb , dts nns cc nns md vb nn in ppls . in ap , in rb at jj nn . in cs ap ap jj vbg nns wps md be vbn , pp$ nn nn hvz at nn in at nn , wql ap in at nn . cc rb , beg at jj nn , pps vbz pp$ jj nns abn in at nn . at nn at jj . in jj nn , rb , cs at nn in nn nns . cs nns cc nns vb . cs nn vbz pp$ jj nns . in jj , cs at jj nn vbz at vbn np . rb at nn in nn cc nn nns at nn in nns . pp$ jj vbz in at jj , jj , jj nn in nn , vbz , vbz at nn , cc vbn in at jj , jj jj nn , vbz in abn rb in at nns cc nns vbg pp$ nns , cc vbg dt jj jj in pp$ jj nns . rb , cs at nn in nns bez vbn in at nns at nn , rb bez at nn cc nn in dt nn rb vbn cs at nn . pps bez rb * in jj nn , rb ql jj , cs cs vbg to vb ppl , pps md rb vb rb nn * wdt pps vbd rb , cc at nn in ppo . pp$ nn , nn , md ql rb . . ( nn cd ( vb vbn in at nn vbn in at nn ppl , cc dti hv vbn cs at nn wps rb rb vbn dt nn in jj jj , md hv vbn at nns in nn , cc vbd ppl wdt nn in at nn in nn cs jj np bedz in pp$ jjr nns , cc wdt bedz at nn in dts nn nns pps vbn in dti in pp$ nns . at ap nn cc nn in wdt at nn jj vbz ppl in pp$ vbg nns , bez jj in abn vbn jj nns . ql rb , at jj jj in in cs at jj jj bez vbn in in vbz at jj cd . cs jj nn in jj np np , pps md hv at cd in ppo cc nn ppl . cc pp$ pps vbz in nn in at nn in nns , cc at jjt in nns pps bez , cs pps vbz ql ap jj nns . at nns vbg pn cc jj cc jj nns , rb vbn , vb at jj nn in at nn nns . in cs dts jj nns ber rb jj , at jj nns , cc cd in nn in nns , cs ppss vb ppo , ber in rb at ql jj in abn nps , cc rb at ql jj to vb . in dts jj nn in vbn , jj nns , rb vbn , cc dts md vb ppo cs jj nns vbn in at jj nn . at cd in nn in nn nns ber jjr cs at nn nns . cs at nn in jj nns , ppss ber jj in nn , nn , cc nn , vbg in at nn in abl at jj , vbg nn , cs at jj nn md vb ppo dti rbr cs pps md at jj nn in np cc np . ppss rb vb dt nn cs , cc wrb in cd nns vbn , vb rp , cc rb vb rb in nn in nns , wps bez , vbz . dt nn in nn in at nn cc jj nns bez rb ql jj in at nns . uh ppss vb at cd in nn in nn in in jj nn . abn pp$ nns vb ppo . cc vb at nn in at nn nn , cc pp$ nns vb in ppo in at nn in nn , rb vbg rb in ppo cc ql jj , cs ppls to vb at nn . . . ( nn cd ( . . ( nn cd cd nn in nn nn nn in nn ( at nn in at nns cc nn in nns in at ap nn cc cd , vbz dti nn in at nns cc nns in at jj nn , in wdt at nn md be vbn at jj nn cc nn . ppo rb vbz cs wrb ap nns ber vbg in nn , at jj md be vbn in cd nn , rb vb , cc be rb vbn cc vbn in dt nn . cc rb ber rb vbn ap jj nns , abn vbg in dt cd jj nn . in nn , in in in at jj cc jj nn cc vb in at jj , at nn md vb rb in at nn in nn in at jj nn . cc vbg ql rb in nn , be vbn in at od jj , wps , in at jj , rb vbz ppo rb , in nn in nn cc nn . rb at ql jj cc jj nns md rb vb in at nns , bed rb * rb vbn cc vbn , jj , jj nn jj in abn nns . rb at ap jj vbg nn vbn in jj nn , bedz cs in np . pps bedz vbd in at nns in nn in at . np . . cc cs at ap nn hvz rb hvn dti vbn vbg nn , cc at jj nns hv ben pp$ jj nns cc nns in dt nn . ppss hv vbn at nn wdt in jj nn vbz np ' rb vbz cc at in in nns in at jj nn in at nn in vbg in ap nns ' in nn . rb . dts nns md be jj in at nn np ' nn nn , cc at nn in at nn , cc vbn in at nn , ql jj ber ppss . nn . at nn in np vbz in at nn rb in ppo . np . at nn in np bez jj nn in pn wps md jjt vb ppo . cc wdt vbz at nn in dt jj nn bez at . . ( nn cd ( jj nn in ppo , wdt vbz at jj nn in nns in jj ppo . od : wdt bez at nn in np . jj cc jj at nn bez rb rb , wrb pps bez vbn in at vbn nn cc nn , in dti nn in abn jj in at nn cc nns , in in at nn , at nn , at cd in nn nn , at nn nn , cc at nn in nn , pps bez abn at ap . rb at nn bez rb rb wrb pps vbz at nn , cc dti ap vbd nn in nn . ql rb cs at nn nn pps rb vb pp$ nn in dti nn to vb ppo rb , cs rb cs pp$ nn rb to do . dts ber jj nns . cc at nns in at nns ppls rb vb in jj nns cc jjr nns in in at np in in in np in at nn . jj , in at ql jj cc jj nns nns ber rb vbn in jj nns , wrb pps md be at jj jj nn in cd nn to vb nn in at jj rb vbn cc vbn in dt nn . cc nns ber in at nn ql jj . dti cd nns rb ex bedz at jj nn in jj in jj vbn in np , wrb at nns vbn rb cs in at jj nn in at jj in at jj nns . cc wrb rb ppss ( at nns ) hvd vbn in vbg at nn . ppss bed in ap , in nn in pp$ nns , vbn to vb * rb pp$ nns , cc pp$ nn ppl . rb at nns ( at nn in dt nn ) vbd rp in at jj , vbn , vbn , vbn , cc rb vbn ppo in at ap nns in at nns . cc wrb dts nns bed vbd in , pp$ nn vbd pp$ nns in at nns ' nns , cc vbd ppo cs in nn in nn in at nn pps hvd vbn , pps md rb vb pp$ nn , nns , cc nn , wdt hvd vbn vbn in at jj in at nn in at nn . wrb at nns rb vbn in at nn in at nn in pp$ jj , nn , nns , cc nn . cd . np bedz nn in at nns . np np bedz at nn . in at nn in at nn , at jj np vbd rp to vb pp$ nn , in vbg in at jj nn . fw . nn , wrb at nn , cs in jj vbg in nn pp$ nn ' jj nn , hvd in ap vbn ppo rb . . ( nn cd ( at nns in nn . cc in at nn in nns , nn in dt nn , pps vbd at nn to vb nn in ppo . np bedz in at ap nn . cc pps rb vbd ppo in vbg , cs cs at nn hvd rb vbd at nn , cc hvd rb hvn pp$ jj , cc rb in nn in at jj nn in pp$ vbg nn , hvd ql ap vbn ppo . rb vb ppo pps dod , cs cs pps vbd at jj in nn . cc rb wrb at jj nn nn in vbd ppo , at nn rb vbd cs jj nn ' jj nn , rb in wdt vb md hv ben vbn vbg in ppo . rb in at jj nn np vbd cs at nns in at jj cc at nn bed rb jj in dt ap . dts nns , cc at nn nns , beg rb vbn , at ql vbn nn in vbn nns vbd , in nn , in in dt cs in at nn , pps vbd ppo in at nns , cs ppss hvd rb vbn ppo to vb pp$ nns . cc cs in nn in at vbn jj , nns , cc nn , ppss vbd in at nns . at jj , cs pps bedz at nn in np in at nn in at jj nn . cc at nns cc nn cs wrb at nn vbd rp in ppo , pps ( at nn ) vbd at nn in dts nns . cc rb pn wps rb vbd at nn hvd at nn in ppo . rb at nns rb vbd at nn . vb , at jj nns bed pp$$ . at jj nn vbg in dt nn in at ql vbn nn , md rb vb in ppo . cc vbn rp in at jj nn in at nn , at cd jj nns vbd rp in at nn vbg nns rb vbn , cc vbn cc vbn in np np in at rb vbn nn . dts cd nns vbg nn in np cc nn in np , ppss vb , md , in nn , be vbn at nns in abn jj nn . in in pp$ vbn nn in nn , at nn in at nn , cs at nn in at nps , hvz cc cd nns to vb rp . bez pps * at vbg in at cd ' jj nn , nn bez abn in at nn : dt bez , rb in wrb at nn vbd in nn . cc rb nn bez at nn in at nn . wdt ber at nns cc nns in jj nns cc jj nns . . ( nn cd ( cc nn in np , wrb nn bez at nn in at nn . wdt in at jj nn bez at nn ' vb ap nn cc at nn in np . wdt bez rb jj nn ' jj nn nn in at nn in nn in at nn . wdt bez dt in at nn in np . wdt bez at jj nn wdt np , at nn , vbz in jj np , at jj , in at nn to vb np ' nn nn in nn . wdt bez dt jj nn cc at nn in np . wdt bez at nn in np ' nn nn in cd , cd nns vbn in at jj nn cc nn in nns in nns in vbn in vbn nns ( ql jj in nn in dti in np ' rb vb ) wdt bez dt jj cd , nn cc at nn in np . wdt ber at nn in np ' rb jj nns cc nns cc nn in np . wdt in dt vbd nn , np nn , bez jj np , cc at nn in np . wdt in dt jj nn , nn np , bez np cc at nn in np . cc in abn dts , bez * nn at nn in at nn . cc cs at nn in nn in np be ql rb jj , at nn nn in nn in np bez rb ql rb rb . wps bez rb cc rb jj . wdt bedz np in cc at jj in nn , in wdt np vbd at jj nn in nn in nn ppo in pp$ jj nn cc nn . wdt bedz np in at nn . wdt np in at np . wdt np in np . wdt in ap md np be in at vbn nns . abn nn in np . wdt ber at nns in nn cc at nns in at nn cc nn in np . wdt abn nns ' in nns cc nns cc nn in np . wdt bez at nn in jj nn in ppo cc at nn in np . wdt in at jj vbg nns ber at nns in nns cc nn in np . wdt bez at jj nn ppl cc at nn in np . cc wdt ber ppss , nn , cc at nn in np cc at nn in np , rb . . . ( nn cd ( . . ( nn np cd np np np ( np nn nn jj , fw fw nn nn , fw nn vbn . nn , nn cd . np . cd . jj in at nns in at nns in np , wdt vbn rb in at nn , nns , cs in abn nns vbn in pn in at nn in dt nn , at nn , cs jj jj nn , md hv at nn , cc at nn be rb vbn in at nn . at nn wdt , in at jj , bez ap cs vbg at nn . ex bez at jj nn . rb cs dt nn , in at vbn nn , bez in dt nn in nn in np . cc cs pps vbz in jj nns at jj nn vbg at jj nn in nn cc nn in np , pps bez rb vbn in in at jj nn , in at ap jj nn wps vbz at jj nns to be in at nn in at jj nn , rb vbn in at nn in nn . in at od nn , in jj nn in at nn cs at in in vbn nn bez rb in nn , ppss vb to vb cs ppss at nn wps vbd in at ap cd nns . pps vbz cs dti jj nns in np , cc np , cc dti cd in at jj nns , hvd in at jj nn vbn in nn cc vbg at jj jj wdt ppss hvd rb vbd rn rp in at nn . rb at jj nns ber rb cc rb in at nn in at nn in nn cc nn , vbd at nn np . vbg at nn rb in at nn , ppss vb , abn at jj nns nn in at jj nn nns vbn in nn pp$ . in dti nns dt nn bez vbn at jj . cc * rb . cs at nn np bez rb vbn in nns in nn pp$ nns . wdt ber pp$ rb in nn in dt ap nn in ppo . rb wrb dts jj nn in vbn nns , jj in jj , cc . . ( nn cd ( in pp$ nns vbd jj rp in pp$ jj nns , hvd rb vbn pp$ jj nn jj cc jj , vbg ppls at jj cd nns in at jj nn cc nn . cc in nn vbg jj nn in pp$ nns , cc jj nn in pp$ nns , in at nn in pp$ jj nns . rp nns at ql vbn cc ql jj cc jj nn , in at nn in np in pp$ nn . cc vbg ppo in at jj ' nn nn , pps vbz in in nns rp . dt nn , pp$ nns , bez at nn in np . nn vb ppo cs at nn np ' rb . in dt at jj nns in pp$ jj nn in in ql ql jj in in vbg * wdt to vb , vb to rb vbg pp$ nns abn nn . rb rb vbg in at jj in at nn . cc dt dod in jj vb at nn , cc in abn vb at jj nn in at vbn nn in at nn in np . in nn cd in ppo , cs rb vbg rb in pp$ nns , vbd jj to vb . uh , uh , wps bez at nn np . at nn . cc at nn hvd pn to do in vbg dt nn . pps bez pp$ . ppss hv ben in jj nn , cc nn , cc dti nn , cc bez abn dt to vb in at nn ' jj nn . ppss vbg pn in abn in pp$ nns cc pp$ nns . pps bez pp$ . bez at nn ql ql jj cs to be vbn in dt jj nn in vbg at nn . pps bez pp$ . nn vbd to vb pp$ jj nn in vbn nn in nn in pp$ nn in dt jj . pps bez pp$ . vbd ' nn at nn be jj in at nn cc at abn . pps bez pp$ . in at nn , at jj bedz vbn cc vbn , cc pp$ np at nn in np vbd at nn . vbg wps vbn in dti jj nns , at nn md in at jj nn in dti jj nn be vbn , in at nns , at ql jj cd , at jj nn in at nn rb vbd at nn in pp$ np , vbg ppo to vb at nn in dts jj . . ( nn cd ( nns in jj nn . to wdt pp$ nn nn in nn vbd ( abx nns bed vbn ) cs pps hvd rb vbn rb , cc vbd at nn , cc md be vbn in at nn nn cs in at nn pps ( at nn nn ) md vb vbg in ap nns ' in nn . bez dt at rb jj jj nn , vbg in at nns in at cd nns , in abn nns vbg nns in nns . pps md rb be vbn cs in dt nn at vbn nn in at nn in at jj bedz at vbn cd in at nn . ppss md vbz vb rb in wdt nn at nn bez rb vbn in dt nn . at nn ppl hvz rb ben vbn rb . cc vb vbz ppo at nn in ppo . vbz vb , at jj ql vbn vbz in at nn cc nn , cs in pp$ jj nn . cc in at jjt nns dt hvz rb ben vbn at nn nn in jj nns . cc wrb md at nn hv at nn , cc at nn at nn . at nn in dt , ppss nns . in pp$ nn in nn in jj , cc nn in nn , at jj nn ' jj nn nn , cd np np , rb vbz : at nn bez ppss nn ' np , cs ppss nn ' jj nn md be vbn in ppo nn . rb dt bedz vbn in at nn wrb at jj jj nn in at np cc ql jj bedz rb vbn in nns ' nns . cc dt ap nn bez * in at nn . pps bez in at nn , wdt bez at jj nn in at jj nn cs np . cc bez at nn at nn , to be vbn in at nn . at jj nn md vb rb . ex ber cd jj nn ql vbn in at jj nn nns in in at jj cc at nn . abx jj nn in jj nns , cc rb vbg at od nn in at nn ' in jj nn . nn vb * cs dti ap nn hvz vbn in at nn . cc in nn pps vbz in ppo cs at nn md be vbn in at ap nn cs at jj , at nn vbg at ql jj cc jj nn jj in dt nn , wdt , rb vbn , md rb be rb vbn in dti vbn nn . cc rb ex vbz at nn in abn nns , rb in nn . . . ( nn cd ( . . ( nn nns cd np nn np np nn in nn ( in jj pps bedz to vb in np in at nn in dt jj , jj nn vbg * nn . uh np . np , np . nn . pps bedz at nn cc cd in at ap vbg nn vbd , cc wrb ppss bed rb vbg in at jj , jj , jj in nn nn , cs at ap nns in at fw ' jj nn vbd ql jj nns in at cd nns in nns rb . at jj cc * ql jj nn bedz vbd in at nn . nn md vb pn rb , vbd np , wps rb rb ber dti in dts vbn nns ppss vbd at ap nn . nn vbd ppss md vb rp in jj . rb , at nn in nn vbd rb . cc ex in at nn vbd at nn , wp$ vbd nns jj cs dti nn in jj md be rb . cs ppss vbd rbr , at nn vbd jj nns in pp$ nn . cc in at jj nn in nn nn in nn wps vbd , cc vbd , cc vbd in ppo , pps bedz jj cs at jj rb md be wdt at nns vb at vbn jj , dt bez , at jj wps hvz vbn jj in at nn , cc rb vbd at vbn nn . pps md rb be vbn , wdt at jj nn abl at nn md jj . jjr cs at jj nn in at nn , wrb at nn ber jj to vb at vbn . ql jj rb bez pps vbd in dti , cs at nn md vb ppo in jj rb in ppo . rb ber rb dts wps md rb do ppo . in at nn cs at nn vbn in jj nns bez in at ql jj nn , cc in at nn in at nn in nn in in in nn . vbg rb rbr in at jj nn , ppss vbd cs at np hvd at od jj rb . cc dt od jj vbd ql ap in at jj cs at od . in nn , pps vbd rp to be cd in dts jj nns wps vb . . ( nn np ( to vb rp cc vb in at nn in jj nn , cc nn . vbg pp$ jj nns ql ql jj in pn cs nn . rb , in at jj nn ppss md vb cs at vbg nn md rb vb rp pp$ nn in abl at jj cs dt , rb rb pps md vb vbn nns in jj . at fw hvd rb vbn ql rb in at nn , cs np vbd pps vbd pp$ vbg nn in nn vbn in at nns wps bed vbn in at nn in cd in dts nns . ex ' in at jj nn , rb , pps rb vbd , vbg in at nn ' rb vbz , ex ' in at jj in ppo . nn rb vb cs dts nns in nps ber cc jj nns in at nn . rb vbg pp$ nns in nns , vbg ppo in jj nn nns . rb , cc rb vbg in pp$ nn in pp$ nn jj in nns in nn nns , cc nns in nns , vbg cs abn at nn ppss md vb vbn ' nn be ap to vb at nn ' jj nn in . rb , ppss abn vb dts nns . cc vb ppo , rb ' np at np wps bez jj in pp$ nns , at vbn jj rb , ppss vb . rb , cc bez jj rb in vbg at jj nns in dt ap jj nn pps hvz rb . jj nn . nn vb , vb in at nn , dti cd , cc vb ' ppss vb ppo at nn in at jj nn in jj nn ' jj nn . in wdt nn pps ' ppss vb in dt vbn jj rb , md ' nn be vbn to vb in at nn . rb , * in at vbn nn . cc cs in at ap jj , wrb , ppss ' ppss vb to vb ap nn in vbg rp cc vbg rp dts cd nns in pp$$ , cs pps ' ppss vb in dt nn in nns . rb , rb cs ppss vb in ppo , pps md vb pn jj at jj nn ap cs nn . rb , nn . nn vb rb cs pp$ jj nn hvz vbn in dt . ppo ' nn nn vbg . rb , ppss ' rb in ppo . cc rb vbg pps vbd in at nn in nn . in dt nn at jj nn hvd vbn at jj nn . rb cs cs cc rb , at fw bedz rb ql vbn in at nn , in at nn in vbg in in pp$ jj rp rb . vbg in at nn , np rb vbd pp$ nn ' jj nn , cc vbd rp in at nn . vbg in pp$ nn , pps vbd cs in nn in at jj jj nn , at jj nn in pp$ nn in nn bedz vbn in at nn in at . . ( nn cd ( jj vbg nn , bedz vbn jj , cc in nns hvd jj nns vbg in ppo rb cc rb . at jj vbg in at jj vbn nn in at jj jj nn . in pp$ nn nns , in jj jj nns , pps vbd np np np , in in np in nn , cc np in nn . cc dt bedz at jj nn in dt jj nn . cs np dod * vb at np nn in at nn , cc at nn vbd , cc at jj nn in nn vbd rb , rb vbd at nn in ppo . at jj nn in nn , uh . pps vbd in pp$ nn in pp$ nn , wps md do ql rb . cc wql jj abn nn pps vbz . rb in nn to vb jj nn in at nns in nn , pps hvd to vb in at nns in at jj nn , cc rb vb rb in at vbn jj . cc rb vb in ppo . vbd rb in dt nn , in cd nn rb in pp$ nn , pps vbd in in np in fw in np , nn . ber ex dti in ppo np in fw in np wps vb jj . rb , vbd at np in nn in at nns , wps vbd rp to be at nn in nn . uh , rb , pp$ np in fw in np in nn , hv ppss vbn at jj nn . wdt jj . at jj nn in in at jj nn in in np np , hv ppss vbn ppo . rb vbn in abl at jj . nn np . jj nn in in at . ql jj , rb . jj vb rb , cc ppss ' ppss vb rb in at nn . rn rb vbg rb in at fw , cc vbg nn vbg in at nn in nn nn vbg pp$ nn , pps vbd pp$ cd nns in at nn cc vbd in in at , np . at . in wdt np vbd , cc np vbd in at np . pps rb vbd cs at np in nn , wps hvd rb vbn in at nns , cc bedz vbg at nn in nn , hvd vbn pp$ nn in at nn in nn . wdt ' in at nn in pp$ nn , rb . vbd np . vbd ppo . . . ( nn cd ( ppss vb pps bedz vbn , cc cs ppss dod ' nn hv dti nn in abn . vbd at np in nn , wps dod * vb to vb at nn pps bedz in ql ap . cc wdt ber ppss vbg pp$$ in . uh , pn . ppo ' in at nn nn . ppss hv to vb ppo rp . jj nn , vb ppo . nn in nn , ppss md vb . vb ppo at nn in nns , md ppss , np in fw in np . wdt in at nn ' jj nn do ppss vb rb . vbd at np in nn , vbg in at jj nn . uh . vb jj in in jj . rb , cs ' np at nn . wrb nn ' nn ppss vb dts nns in nn cs ppss ' nn vbg in ' ppo . cc vbg rb , cs . do ppss vb , np in nn , cs pps ' vb abn nn vbg to vb dti nn rp in jj nns . cs in dt vbn rp cd , rb , pps vbd ' nn at jj in pp$ jj nn . nn vb cs rb qlp . cc , rb ' ppss vb , at nn rb vbn ' nn vb ppo . dt bez pp$ od nn . pps bedz at np nn rb . cc vb rb , cc nn pps ' ppss vb ppo , cs pps vbd ' nn ppo . cc cs ppss ' ppss vb rp in dt jj nn . pn in nn ppss , pp$ jj cc jj nn , vbd np , cc in cs pps rb vbd in at nn . ex at jj nn vbd ppl . at nns , in vbn nns in jj nn , bed vbg at jj nns in nn in at nns . cc ppss vbd ql jj cc vbd ql rb , cc vbd in pn cc at jj nn . abn pp$ nns rb vbn in pp$ nns cs ql ap jj in nns . rb cc rb nns in ppo md vb pp$ nn , cc vb rp in at nn in nn to vb dti jj nn . dti nn ppss md vb at nn , vbd ppo in nn in nn , cc in nns vbd ppo in pp$ nns . nns hvg vbn at nns in pp$ nns ql jj rp in at nn , bed rb vbg nn in nn , cs cs pps rb vbd pp$ nns . np bedz vbn in at nn in nns cc nns vbg in at nn ' jj nn in nn nn . cc vbg in dt nn vbd at jj nn vbd in in at nn , wdt bedz vbn rb in in . dt bedz at vbn nn , wps , cs in jj jj in at nns in at nn , hvd vbn ppl in at nn ' jj nn in nn ( nn pps vbd ppo ) to vb at nn . cc rb , md * vb vbg rp pp$ nns cc nns in nns . . . ( nn cd ( vbg abn dt , np vbd rb in pp$ nn , cc vbg in at np in nn hvd at jj nn in ppo , in wdt at nn nn vbd pp$ nn in pp$ nn cs at jj nn , wps hvd vbn ppo abn in ql jj cc jj at nn . vbg ppo rb , np rbr vbd cs at np in nn hvd * at jjt nn in at nn . pps rb vbd pp$ nn in dt nn , cc rb bedz ql jj cc jj in ppo , cs cs at cd rb vbn at jj nn in abx vbg cc vbg at nn , in pp$ in abn vbg in vbg pp$ nn . rb in dt ap nn in pp$$ , at np in nn , in nn in at nn ' jj nn , bedz to vb at nn wdt pps vbd , cc cs vbg in np . cc cs in np , pps bedz to vb dti nn wps md vb rbt in ppo in at nn . in dt nn pp$ vbn nn vbd in pp$ nn . pps bedz at jj cc jj , cc ql jj vbg nn in at nn in nn , in jj nns cc nn , rb . cc vbd at jj nn nn nn in nn in nns in pp$ nn . to dt nn , np bedz rb rb vbn in at np in nn , wps in rb rb vbn in at nn in vbg in ppo . wdt md ppss vb in ppo rb . vbd pps . wrb , vbd np , vbg at nn nn cc at nn cc nns , ppss md ql rb vb in vbg ppo cs pps vbz at nn in jj in ppo , cs ppss nn ' nn vb to be at nn . pps vbz , np , vbd at np in nn , in jj , vbg in pp$ nn , cs rb nr pp$ nn vbd at nn , wp$ nn cc nn in nn , in cd nns , hvd abn vbn in at nn vbd in at vbn jj ppss hvd vbn rb . in dt at nn vbd , cc rb vbn to vb rbr . wdt rb . vbd at np in nn in np . wrb , cs pps vbz ppo ql jj , vb ppo cs rb ppss hv vbd ppo rb , ppss ' rb ql jj cs pps ' vb at ql jj to vb at jj in nn cs at nn . nn nn . in nn , vb ppo in ppo pps ' vb at jj . . . ( nn cd ( pps vbz cc vbz , np , cs at ap jj , at vbn cd , bez ql ql jj cs at vbn cd . in jj , np , pps vbz ppo , cs ppss vb pp$ nns , to vb rb in dts nns . rb at nn vbd rb , cc in at jj nn vbd pp$ nn in nn in vbg at nn in nns , cc in rb vbn rb at nns cc nns vbg at nns in at nn . wdt rb . vbd at np in nn , wrb at nn hvd vbn in ppo . wrb , vb ppo vb . rb , ppss md ql rb vb ppo rb cs in in dt in in in nn , vb ppo ppss ' ppss vbn ppo , cc ( rb in ppl ) rb pn rb . pps vbz , np , cs pps ' vb ql jj to hv ben in dti nn in ppo . vbg dt , at nn vbd cs ppss bed at jj nns ( nn ppl cc nn ) cc vbd in vbg np rp in pp$ nn to vb at nn in np . pps vbz ppo to vb at nn in nn in ppo , vbd at nn . vb ppo rb . cc vb ppo ppo ' nn in pp$ nns to vb in at nn ppss ' jj jj . in nn , vb ppo ppss md vb . pps vbz , np , cs pp$ nns vbd ' nn vb in pp$ nn . cc cs cs np vbz to vb dt nn to vb , rb np hvd rbt vb abn cd nns , cc vb at nn rb in dts nns , in ppo ' nn ql jj ppss vbd ' nn nn . in dt nn np bedz in at nn , cc vbg in pp$ nn , vbd at np in nn in dt nn , in in cs hvg at jj nn in nn in pp$ nn , pps md do wdt pps md to vb ppo , in vbg rp at jjr jj in at cd in at nn ' jj nn . cs at np ' np nns , rb , bed vbn in nn at nn cd nn , np rb vbd rb in pp$ jj at ap nn , rb vbg rp at ql ql jj nn in nn . rb at nn vbd rp . np vbn to vb rp in at jj . vbg pp$ nns , at np rb vbd pp$ nn , cs at fw vbd rp in ppo cc np ' rb jj . cs np rb vbd in at vbg nn , . . ( nn cd ( cc jj at nn to vb nn in pp$ nns , in rb vbd to vb at nn in pp$ jj nn . vbg pp$ jj nn in nn , pps vbd at nn in at nn , at ap in at nn nn . ppss md rb hv vbn pps bedz vbg at nn rb in at nn . cc wrb in nn pp$ nn vbd in at jj nns , pps bedz cs vbg rp jj jj nns cc nn vbn in jj nps vb . pp$ nn ' jj nn bed abn in jj nn , rb vbg pp$ nn , cc vbg ql jj cs nn in nns . cc abn at nn jj nns bed vbg , cc vbg , cc vbg , cc vbg , cc vbg in ppo . np bedz vbg to vb vbn , rb cs at jj nns vbn , wrb rb in in at ap nn in dt nn , ex vbd at jj nn in nn , wdt vbd in at nn in jj nns in beg vbn in ppo , cs cd nn md vb in cc rb rb in dt , in in abn vbg in ppo in at nn . nn hv ppo , ppss hv ppo , vbd np , in nn , vbg pn in at jj nns , at nn . at nn . vbg pp$ nn , pps vbd abx nns in , cc vbd rp nns in pn wps vbd cs jj np nn , cc jj vbn jj nn . ql jj cc jj rb . ppss md rb nn ppo in pp$ nn . pps bez in at nn in jj cc nn nn . cc dt , jj nns , bez nn , jj at jj nn at nn in dti nn . dti cd nns bed vbn . cc ap bedz rb vbn in at nn , cc rb rbr , rb , md hv ben vbn bed pps * in jj nn ' in jj nn in np in nn , cc vb in nn , rb at nn md vb ppo jj vb . . . ( nn cd ( . . ( nn np cd fw ( rb dt nn bez at ql jj nn , cc ql jj cs at nn in nn , cs in at jj np in vbn . . ( nn cd ( nn np bedz vbn in at nn in at jj nn in nns in dt nn . in in dt nn , cc rb cs at ql jj nn , at jj nn in nn vbd , cs jj ppl , at nn in at vbn . cs at nn nn bez cc at jj nn in jj jj , cc at cd nns ber ql jj . in jj , cs in nns vbn in at nn in nn , bez rb vbn rp in dti ql rb nns , cs nn bez rb vbn in in at nn . rb , jj bez at jj , jj , jj , jj nn , vbn in nn in nns in nns , in nns cc nns . cc nn bez jj , jj , cc ql ql jj cc jj , cs pps bez rb vbn in nn , in nns , jj nns , nn in nns , cc nn . at nps vb ppo in vbg , cc rb vb ppo in np , in at ap nn cs nn bez vbn to vb . np ' rb in np . dti nn nns vb at ap nns in nn , in nn ppo . wps md vb , rb , cs jj jj nns cc nns md nn ppls in at nn vbn in at jj nns in at jj jj . rb cs pps bez . in dti , nn bez vbn to be at nn , cc in nns at nn , in at nn in at jj . wql to vb abl at nn pps bed jj to vb , cs in vbg cd cc cd nn nns in nns ' in nns , cc rb vbg rp in nn ' jj nn , cs nns do in vbg nns . nn hv vbn to vb cs ex bed vbn in dt nn , jj jj , jj , jj nns , wdt in od np nn md be nns ' nns nns . cc pps rb vbd rp cs ppss bed pn ap cs nns in jj jj nns vbn in dt nn . rb cs at nn in dt ql jj nn md be vbn in at nn in jj nn . bez dt pn . vb ppo in dt vbg in nn . np in nps , in nn cc nn . wrb cs ppss ber vbn in nn , cc vbd in nn . cc rb vb to vb cs vbg in nn in wdt pps bez wps vbz at jjt nn . rb vb * at jj nn cs in abn nns in jj in nn , np in nn , in pp$ jj vbg nns , bez at jjt . nn md vb to vb at nn in at jj nn , cc md , vbg in pp$ nn to vb at nn rb vbn . . ( nn cd ( in nns , cc wdt , in at nn in dti rb jj nns , md be vbn ql rb jj in wdt hvz ben vbn in at np ' rb cd nns . rb in dt nn at jj nn hvz ben jj , cs at nn in vbg bez in at rb , jj nn . cc ex bez dt nn to vb . ppss vb cs abn vbz rb vb jj . rb wrb dod dt jj nn vb . nn jj , cs pps bez ql jj in at od nn in at np vbg nns in np , ap cs cd nns rb . cs dts nns dod * rb , cc do * rb , vb rp pp$ nn in nn cs at jj nns hv rb vbn . cc vbg rp at jj nn in jj nns , vbd ppo in at jj nns in jj nns , cc vb ppo nr in dt nn . at nn in at nn in dts np nns , cc at jj cc jj nns in wdt ppss ber vbn , vbg dti ap nn . at nn bez , cs in vbg in at nn , cc vbg cd in dts jj nns , in at np nn , at nn bez vbn rb ql jj in dt vbg in jj at jj nn nn in nn , in at nns in at vbg in in nn . nn rb vb rb , cs dt jj nn in nns md be rb vbn in at nn in at nn in np , in ap nns , in at jj nn vbd np cc np , wdt ap nn bez at cd vbn in at vbn np np np , in pp$ jj nn in np , at nn in dt nn . cs pp$ nn nns ( nn , jj . np , to vb rp ) , dt nn bedz vbn in nn to vb at nn in at nn in at vb jj nn to be vbn rp , in beg vbn nr in np in dt nn . pps bedz at nn in nns , jj in vbz , cc nn nns . cc wrb at nns bed in jj nn rb vbd rb at ql jj nn . cc abn dt bez ql jj in at jj nn nn nn . wdt in at nn in cd nns rb , cs rb vbg pp$ nn in nn , doz * , rb , vb cd nns in at nn in vbg rp . cc in at nn cs pps bez jj , at nn bez ql jj . at nn bez , cs vbg cc jj , cs cc rb vbn , vbz cs at nns ber in at . . ( nn cd ( nn nns in jj nn . cc md nns be vbd , cs at nns in at jj nns vbn to vb at np in at nn , in at nn . cc rb md at jj rb be rb cs jj , wrb , cs at jj nn , pps vbz jj jj nn . vbg nn in nn . rb rp in nns . rb , pps bez jj , rb in at jj nn . nn vb , cs at nn in at jj nn ' rb vbz in nn nns at nn , cs wrb at nn in vbn nn vbz pp$ nn in at jj nn . wdt rb md ppss vb at jj nn in in nn , vbg pp$ nn . md pps * be in dt jj nn , in jj nns , cc jj in nn , wdt bedz vbn rp in at jj nn to do vb in np at jj . . . ( nn cd ( . . ( nn np cd np fw ( pps bedz cc dti ap nns in nn at np , cs at ql jj nn vbd at ql jj in at fw ' jj nn . at nn ql jj . cc wdt vbd in vbg at rb rb jj cc jj nn in at nn cc rb vbg nn in wdt vbd nn md vb pp$ jj . rb , in at jj nn , pps bez * at pn wps vbz in at nns . dti ap nns ber vbn vbn nn in nns , wp$ nn pps bez to vb at nn cs at nns ber vbg at jj . cs at jj nn , dts nn in nns ber ql jj nns cs at nns vbg at nns ' nns . cc cs ex vb to be at ql jj , jj , cc jj nn in at nn , cs nn bez jj to be vbn at nn in nn . pps bedz rb in at fw in at ap jj np in nn in nn , np in nn . jj np . ppss hv vbn in ppo rb . ppss md vb pp$ nn in dt jj nn , ql jj in jj . . . ( nn cd ( in jj nn , np cc nn in nn vbd at nn , cs at jj nn cc at jj cd , in jj nns , cs in jj nn , vbn in cd jj nn . cc cs jj nn in nn bedz in nn jj cc jj in pp$ nns , np , cs in jj in jj , bedz in nn ql jj , in dt jj , jj , jj nn jj in pp$ nn . at nn , wdt rb vb abn nns cc nns in jjr , jjr nn cs dti ap nn . in nns , at nn ' jj nn md vb pn cc cd cd cc cd in cd od in np cc jj nn ' np nns . cc nn rb , cs ppss vb cs dt ap nn bedz jj , in jj nn hvz pp$ nn . vb rb jj nn , vbn in nn ' np nns . cc np vbd nn , cc abn nn ' in jj nns . rb cs at nn in jj nn in wdt pps hvd rb rb vbn vbn , hvd ql rb vbn pp$ nn . rb , cs cs jj md be vbn , wdt bedz rb rb vbn in ppo , in at nn bedz vbn to be rb vbn in jj jj nns , cs rb vbd ppo rp in cd nns at jj nn in wdt in pp$ jj np nn in np , pps hvd rb vbn ap at nn ' jj nn in at nn . cc in jj rb in nn , in pp$ jj uh -- uh . hvd vbn at jj nn in cd nn in vbn nn . ql , cs in at jj nn in nn , vbn in at nn in vbn nn , at jj in vbn nn nn md jj nn . rb , wrb at jj nn md vb ppo at nn in pp$ ql jj nn , pps vbz ppo in at jj nn , cc rb vbz ppo rp , * in at nn , cc in dti jj nns . rn vb rp dts jj nns , rb jj . rb at nn in vbg nn , rb at jjt nn in at nn nns , vbz cs dti nn in nn vbn in at nn in nn . cc vb ppo in at nn . pps vbd to vb , cs in at nn nn np ' rb cs in nn vbd rb in nn pp$ nn , cs in at nn to vb ql vbn . cc , rb , np bedz vbn in pp$ nn . at od nn np vbd in ppo , np vbn ap nn . cc rb , in dt nn , vbd jj nn in at jj . cc rb vbd rp * ql rb . cs np vbg ppo , vbd nn , rb , . . ( nn nn ( to vb ppo to vb pp$ nn in at nn , cs pps md rb vb ppo jj . rb in at od nn , at nn vbn in at jj . cc cs at nn vbd at vbd nn , pps vbd pp$ jj nn , wdt vbd , in dt nn , to be jj in jj np ' nn nn . at jj nn in at nn vbd ppo to vb , jj in nn , rp in at nn . cc in abl at nn , cs nn in at jj jj nn vbg in pp$ nn , pps jj pps rb in ppo , cs cs to vb vbn in ppo , wrb in ap nn in at nn . dt nn at vbn jj vbd in at jj nn , at nn rb vbd . cc uh . jj np vbd abn vbg rp in at nns in at nn , rb vbd rb in at nn , wdt hvd vbn ap nns in pp$ nn cc nn . np vbd in at nns . pps bedz jj in at nn in at nn . pps vbd np in at jj . vbg at nn in nn in pp$ nn , pps vbd pp$ jj nn in at nn , cc vbg in np , vbd rb , vbn . nn nn ' in jj , vbn nn rb vbd , do , in np ' fw fw . abn vbd in at nn . in ap cs abn at nn , dt jj nn vbd . uh ppo , vb . vbd np . cc cs at jj bedz vbn cc np bedz vbn . ql rb cs pps vbd ppl , at jj jj jj bedz vbn in nns cc nns in at nn . np vbg dts jj nns to vb , np rb in at jj , nn -- cs , cc rb abn jj nn , vbd np rb . cc cs vbn , rb vbd ppo ql jj nn . at nn bedz , rb vb in at nn , np , in in in cc abn at nn bedz jj , cs at jjt nn rb bez . rb , in jj , vb in at nn , bez pp$ jj nn in vbg . cc nns md rb vb wrb jj in at nn , bez rb jjr . rb , cs cs vbg in ap cs cs pps md vb jj jj nn in np , pps md be vbg ppo ql jj at nn to vb rp in at nn . np rb vbd abn nn , cc vbd in at jj nn , vb in at nn , np , cc in at nn , ppss jj vb ppo rp cs ppss vb . vb dt . ppss md ' nn vb . . ( nn cd ( to vb nns in at vbz in ppo . at jj md vb in cd nns wdt ppss md , np , in np . vb cs in nn , cc nn ' nn vb dti rbr . rb rb np rb vbn , cs cs nn vbd pp$ nn , cc nn bez at nn in vbg nn , wdt nn ql rb vbz in pp$ nn . cc ppss ber abn in at nns in at nns . cc np vbd rb . pps bedz in ql jj nns in at od nn . cc dt nn pps dod * nn in at nn . cc rb , wrb at jj vbd to vb , np bedz vbn in in at nn , cs at vbd nn ' jj nn . uh . np bedz cc ql jj in pp$ nn . pps bedz at jj , jj , jj nn . at jj nn nn cc jj , cc rb vbg rb , ql rb , in at nn , cs nn in nn ' jj nn vbd rp in at jjt . vbg rp cc rp in dt nn , np ' nn nn nn vbd cs at nn in nns . at nn in nn bedz vbn wrb pps vbd ql rb jj . np ' rb jj nn bedz vbn in ppo . cc at jj bedz vbn . in cd nns , at jj nn in jj nn bedz in np cc np . rp in at nn in at nn , jj np vbd pp$ nn , vbg , jj nn in at nn , dt jj rb , cs at jjt cc at rbt . rb , in jj nn , to vb in at jj nn bez ql jj in at vbn vb cs to vb in at nn in nn rb . cc at jj nn bez jj . at jj nn in nn in at nn in abl at jj nn , pp$ np . wps md vb ppo . nn , wrb wrb nns in at jj nn vb in at jj nn in in nn wql rb ppss vb pp$ nn cc ap nn in pp$ nns . cc hvd np rb vbd at jj jj jj in pp$ nn . at . pps dod * vb to , in ap . cs ex bed cd nns in pp$ nn , cc pps vbd , at nn , cs ppss md in nn vb rp in np ql rb , cc vb ppo rp . rb , rb , jj nns in nns vbn in pp$ jj nn , bez * rb vbn in at nns in abn jj nns . cc jj nns * rb vb . ql rb in at nn , at nn , ql vbn , bez vbn in at ap jj nn jj in jj nns cc nns . . . ( nn cd ( cc pps rb vbd , cs dts nns , in vbg np , rb vbg nns rb in ppo in cd nn , vbd , cc vbd nn . cc np ' nn nn bedz rb ql ql rb , cc pps cc abn pp$ nn ql jj in pp$ nn , cs np ' rb vbn nn vbd to vb in ppo rb . in at jjt nn at nn ppl in ap vbn ppo . cc in dt nn at ap jj vbd in at nn at nn . jj , in ap , ppss vbd pps bedz . at nn hvd rb vbn pp$ jj nn rp , cc vbd at nn in pp$ nn . * vbn rb , cs . ql vbn rp jj in jj nns , wrb jj nns in at vbn jj nn vbd to cc rb in pp$ jj nns . cc at nn in nn , nn , vbd pp$ vbn nns . cc in at jj , jj , rb in jj nns , np vbd at jj , np in jj , nn nns , cs rp in at nn in nns vbd at jj vbz . pps vbd np ' nn nn in at nn in at nn , cc vbd ppo . cc rb pp$ nns vbd ppo jj . ql nn ' jj nn bez nn ' jj nn . cc vbg in abn jj nn , nn vbz in ap in dt jj nn , wdt , in nn , bez jj cc jj . cc jj cc nn , vbz rb vbn , jj cs pp$ np . in at nn , vb * np ql rb . at nn bez jj in dt nn . cc in at nn in at nn , pps md rb be vbn wdt vb nn vbd ppl . . . ( nn cd ( . . ( nn nn cd at np np np nn ( dt jj in np ' rb ql rb vbn , bedz rb vbn in at fw ' jj nn , wrb abn dts vbg cc vbg nns rb vbn , bed rb vbn rp , rb in at nn in at np nn , cc np . cs dti bed vbn in dt ap nn , nns bed vbn in vbg rb at jjr nns , ql rb cs vbn in at nn . cc wrb at jj nn vbd , dt ap . . ( nn cd ( nn bedz rb vbn cs vbg in at vb in nns , in wdt nn . pps hvd vbn cc vbn in abl at nn , cs wrb , in ap nns , ppss vbd rp in at jj np ' nn nn in ppo , ppss vbd ppo rb vbn in nns , rb cc rb vbg rb in at jj nn . pps bedz pp$ nn to vb dts nns rb in nn . at jj cc jj nn . at nn cs in jj nns dt nn bedz abl at jj nn . abl at jjr . abl at nn . abl at nn . abl at jj nn . cs hvg pp$ nns in ppo in rb at ap nns , pp$ nns vbd cs nns , cc vbd , cs pps bed , in nn cc vb . cs ppss vbd rb in pp$ nn , vb in jj in at nn . in at jj nn in at nn . in at jj jj nn . at nn in jj nn , cc vbg ql rb rb . cs ppss vbd pp$ nns in dts jj , jj nns in vbn nns , vbn rb in at nn . cs ppss rb vbd in pp$ nns , cc vbn abn pp$ nn , cs ql jj nns pp$ nn . cs ppss vbd rp cs vbn nn , in in rb cc rb , cs at nn in nn nns . ppss vb in ppo , cs in at nn ppss vbd cs in at jj nn . ppss vbd abn in pp$ jj nn . in dt jj nn , ppss vbd pp$ nns cc pp$ nn in ppo . ppss rb vbd to vb at jj nn nn cs nn bez in jj nn in nn at nn in nn : cs vbg in dt nn , ppss vbd rb jj in abn jj in nn , cc nn , cc nn , in dti nn rb . vb . vb . vb . abn at nn rb . ppss vbd dt nn cs ppss ppl ql vbn in ppo . ppss vbd dt nn cs at jj nn in nn vbd in ppo . cc ppss vbd ppl rb vbg pp$ jj in nns ' nns in ppo , vbg pp$ nns in at jj nns . abl at vbg , jj , jj , vbg nn dod dt nn vb . cs in ap ppss bedz rb vbg pp$ nns , cc vbg rp in pp$ nns rb . cs ap cs to vb , in -- uh . pp$ jj nn nns , wrb md ppss rbr vb dti jj nns , cc vb at jjt jj in nn cc nn . vb . vb ppo vb nns ql rb . rb , vb ppo abn vb ppls . . ( nn cd ( in dt ap . vb ppo vb ppls rb in at ap nn cc nn in nn . md cs ppss md vb vbg dt nn in rb . in rb , cs in ap vbn , vbn nns , ppss hv vbn cs in abn nns nn md rb jjr , cc in ap nn , pp$ nn in jj nn . * vbg ppo rb in at nn cc at nn . cc in at nn , at nn , at nn , at nn , at nn , at nn in nn , at nn . rb cs ppss hv vbn abn dt , ppss bem jj to vb nn rb . in nns in at nns in at nn , ppss vbd jj nns in nns in nn , dt in pp$ nns in at nn in nns . rb , cs vbg in nn , pps vbz to vb in ap nns jj in ppo , in at nn in vbg at nn jj in at vb in nns . od vbz jj in nn , ql vbn , wdt bez vbn in at vbg nn in at nn , cc rb in at jjr nns in pp$ nn . pps bez jj in vbn nns in in at nn in nn in -- cc rb vbz dti nn . cs beg vbn in at jj , at jj in nn bez rb vbn in jj nns cs vbg in at jjr . ppss vb rb cs nns in np nn . nn in vbg bez at nn vbn in jj jj nns in at jj ' nn nn , rb cc rb vbg in at nn in nn , cc rb vbg in at jj nn in pp$ nn . pps bez at ql jj , jj , jj nn to vb . cs pp$ nn nns , pps bez in at ql jj , vbn nn , in at vbn jj cc jj nn , vbn in nns in at jjt jj cc jj . pps bez nns in nns , in nns in nn . nn in nn , pps bez jj to vb ppl in vbg ppo . nn vb , cs cs ppss vbd in at nn to vb ppo . pps vbd pn cs ppss md vb at jj nn in at nn in np fw np md hv vbn , cs ppo to hv ben vbn at od nn in at nn nn , cc cs jj nn nn jj in at ql jj nn in at nns in np . . . ( nn cd ( ex bez dt nn , cc at ql jj cd , wdt vbz rp in at nn in dt nn , cc wdt ppss vb ppo to be ql jj rb to vb . pps bez vbn jj . at nn jj in at nns , cc rb rb bez at nn in at nn . pps bez at ql jj , jj nn , ql rb vbn in at nns in nn , cs at vbn vbg , cc jj vbg . nn vb ppo to be at ql jj , vbn nn in at nn , vbg . np , ql vbn , bez at nn rb vbg in jj nns , cc rb rb vbn in at nn nns . pps vbz at jj , jj nn wdt bez vbn in at nn in at np cc ql jj , cc ap in wdt vbz at nns in dts jj nns wps vb cs fw jj . nns . rb dt nn bez * jj in at jj ' nn nn . cc cs vbn in nns , pps vbz rb . at nn ' in jj bez at jj jj nn in jj nn vbn in at vbg nn in jj ' nn nn : pps nns at nn in nn , cc in at nn , bez rb at nn in at nn nn in at nn . rb vbd in at jj nn , pps vbz cs at jj jj . cc in jj nns , cs in nn , nns rb in ppo abn nns . cc to vb abn in dts jj nns , pp$ jjt nn bez in rb to vb in at nn in nn , cc hv at jj nn in pp$ nns . dt nn hvz rb ben vbn cs at nn in at nn in nns , wrb nn cc vbd in at jj . wrb at jj nn vbz in vbg rp pp$ nns , dt nn bez at nn in nn in abn nns , rb in nn . rp cd nn , vbn in at jj nn , at nn hvz ben vbn jj in at nns . ppss rb vb in nns , in in at nn in cc in nn in nn cc at nn in nn . at vbg in nn bez jj in at vb ' in vbg in nn in at ap nn . at nn bez pn cs at nn in nn . in pp$ nn , at jj nns in in at nn in nn , cc vbz to vb ppo in vbg , cs at nn nns cc vbz rb . rb , at nn in nn vbz in at nn ppl , rb vbg ppo in at jj nn in nns . dt nn bez jj cs jj md vb ppo . at nn ' np nns ber jj . at nn . . ( nn cd ( pps vbz in md rb rb vb rb in ppo , cs at nn . cs pps vbz rp cd in pp$ jj nns , cc cd in pp$ nns ' , md ppss be ql ql vbn . nns ber jj in jj nn in nn nns . . . ( nn cd ( . . ( nn hv cd np cd ( hvd ppss vbd in nn at fw in at jj nn in dt nn in vbg in at jj . cc hvd ppss vbd rb rb at nn , ql jj bem ppss cs ppss md hv vbn in at jj nn at ql jj , jj nn , wdt ppss md hv vbn rb , vbg rb rb in at vb nns . * at jj nn in at jj ' in jj nn . * at nn in pp$ vbn jjr nn . * at nn in pp$ jj nn . pn in dts md rb vb ppo , cs abn at nn in dt jj nn , in in jjr cs at jj bez jj , rb at nn in nn in at nn , cc nn in jj cs np , at nn nn in np . cc at nn , rb , pps bez . cc , rb , in jj nns , pp$ nn bedz . abl at nn cs cs vbn in at jj nns in nn nn in np . cc in vbg wdt , nn nn , pp$ nn , dod vb ppo , cc vbd at nn , cc vbn ppo in at jj in at nn nn , cs rb vbn rb in at od nn in at od nn in nns . vb in at nn , vbd at jjr , wps rb vbz rb , cc vbd in cd nns , rb vbz at nn , cs at nns vb ppo , cc in vbn nns , nns rp in ppo cs cs pps bed at jjr vbg at jj nn in at nn . vbg ppo in at nn nn , pps rb vbz rb to vb pp$ jj nn , cs at jj nn at nn in at nn . dt vbn pps vbz at nn in rp , cs at nn nn . vbz ppo at jj nn , ql ql rb to vb pp$ nn . cc in ap vbz ppo , rb vbn , in at . . ( nn cd ( nn , to vb . cs jj , pps bez vbn rp . wrb vbg dti cd nns in ppo , in at vbn nn , cc rb vbg cd nns in nn in nns in at ap nn , pps rb vbz ppl rb in ppo . at jjr rb vbz cs ppss vbn in at jj nns in pp$ vbg . jj in abn pp$ nn , dt nn rb md rb vb ppo , cs vbn in at jj nns in pp$ nn . dt nn vbz in vbg at nn in nns in nn in at nns . at nn wdt bez vbn in at jj jj nn , vbd rb in at nns , cc in at jj nn in ppo , in wdt at vbn nns vb , rb cs at nns in at jj nn ' jj nn . vbn in jj jj . vbg at jj nn . nn in jj nns . wdt at nn in at nn , wdt at nn in at nn bed dt nn . . . ( nn nn . ( np vbz . np nns . dt bez at jj nn in at nns in at jjr . pps vbz ppo to be jj , cc vb pp$ nn in ql jj nns cs jj , rb cs in rb vbg at nn in vbg rp at nn bez rb vbn , cc pp$ nn rb vbn , rb rb vbg ppo in nn . . . ( nn cd ( . . ( nn fw cd np np in np ( in pp$ vbn nns , at jj jj bez rb vbn in ppo vb in nns . pps vbz at jj nn in at ql jj nn vbg in nn cc vb in vbg at vbn nn . pps bez cs cs in at jj nn at nn in nn bed vbn in pp$ nns . at vb in nns ber vbn in at nn cc nn in nn , at ql jj nn in at nn . at nns in ber in at jj nn , vbn to vb at nn in at ql jj nn in nn cc nn , dti cd nns in cd nn , cc cd in nn . at nn doz * vb at nn , cc at nn bez rb vbn in at nn in . . ( nn cd ( jj nns in nn vbg ppo in abn nns , cc vbg ppo rp in at nns . in at nns pps bez vbd in nn , cc in nn rb vbn in at jj , vbg , vbn nn . vbg dt nn ppss vb at jj vb in nns , cd in nn , cc dt in ap nns ' nn . wrb * in nn , ppss ber vbn ql jj . rb ppss ber vbn in nn cc nn , cs ppss vb in cs jj nn in nns . in at nn in nns dti jj jj nns md vb in ppo cc nn ppls rb rb in at nn . cs vbn in vbg ppo in in cd nn in dt nn , nn in nn in in ap jj nns ber vbn rp , in at nn nns . pps bez at nn rb in jj jj nn . pps bedz in at jj nn vb in nn in at fw , in at nn rb vbg in ppo , cs ppss bedz rb rb vbn in at jj nn , cs in nn abn nns vbg in at jj , pp$ nn in nn , md vb in dti nn in rb at ap nn . vbg at nn in nn in at nn in at vb in nns , at jj nn in dt nn bez vbn , vbn in at cd nn nns in at nns , rb in at nns . dts nns ber vbn in jj nns in nn . at jj nn in at nn bez vbn in vbg ppl in at nn , in nns in at jj nn vbg in at jj vbn nn in at nns . in at nn vbn in at nn , dt nn bez vbn vbd in nn ql rb cs pps vbz . ex ber at jj nns . ppss vb jj in at jj nn . cc rb vb ppo vb rb in at nn . pps bedz rb cd nn ' nn in nn cs at fw ' ppss vb in nns bed rb vbn in dt jj nn . pps vbd in np to vb at nn . abn jj rb . rp nn , rb , cc vb ppo . ppss vb , vb at nns . dt bedz at jj nn , in at nn hvd ben vbg pp$ nns in at nn in at nn . rn be pps vbd cs in at vbg nn at od nn in at vb in nns hvz to be vbn in at nn in nn . cs cs at nn bez vbn , in cs at nn in jj nn in at nn nn . in at nn , cs beg vbn rp , at nn , vbn . . ( nn cd ( nn , rb vbn nns cc nns , rb vbz jj in pp$ jj nns . dts nns vb at nns . cs at jj vbg nn , cc at nn in vbg nn , rb vbn , at jj nns pp$ jj nn cc nns in pp$ jj nn . md cs pps vbd pp$ jj nn . in pp$ nn bez jj in jj , cc jj ppo ppss md , cc * rb cs , cc ppss md vb in ppo in at nn . pps hvz at jj , jj , np nn in ppo , jj cs md vb in at nn in jj nns . pps vbz cs at jj nn in at nn in nn . pps bez at nn in at nn . in nn at nns bed in jj nn . ppss bed jj in at nn . nn hvd ben vbn . at nn bedz vbg . at jj nn nn bedz jj . cc dt nn bedz vbn rp in at jj nns , wdt in nns vbn rb in at jj nn , cc vbn at jj nn in at nn , cs in at jj jj nn . at vbg nn vbd rp , cs cs rb vbn in dti jj nn . cs at nn cc nn in jj nns in at jj np , np , vbg in pp$ nn nns , in jj nns in nn in nns , vbd rp in at jj vbz , cc vbd ppo in nns . at nn , vbn in at nn in at nns , rb vbd at jj nn in nn in ppo . vbg in dt bed at jj nns in at nn nns , rb at jj in nn ' np nns . in jj vbn nns ppss vbd vbg nns in nn in at vbg nns , cc vbd rp at nns in , cs at jj nns vbd , vbg , rp in at nns to vb ppo in at nns . at nn vbd rb in jj nns . to at nn in at nn ex bedz at nn in at vbg nn , wdt vbd abn nn to vb in pp$ nns . in at nn in at nns , in at jjr nn in at jj jj nn , bedz at nn . dt vbn in at nn in nn . rn vbd at nn , wrb * rb vbn , vbg in at jj nn in at nn , cs pp$ nns vbd vbn in pp$ nns . pp$ jj nns , rb abn vbn in nn cc nn , pp$ jj nns , cc at vbg jj nn in pp$ nns , abn dts bed rb vbn in at jj nns in at nns . cs ppss . . ( nn np ( vbn in dt ap pp$ jj nns , pp$ nns in nn vbd in nns in nn . cs pp$ vbn nn vbn rb rp in ppo , cs at nns in at nn . cs to cc rb , in pp$ nn , at nns rb vbd in pp$ jj vbn nns cc nns . cs at nn vbd rp , cc at nn vbd , cc at nn vbd cc vbd , cc rb rb vbd pp$ jj nn rbr cc rbr in at nn in at nn cc at nn , cc rb jj at jj nn in pp$ nn , cc rb vbd in ppo in abn nns . rb at vbg fw , jj in nns , cc jj in nn , cc vbg at nn , cc vbg in dt nn in nn , vbd at nn nn in pp$ nn nn ' jj nn . ql vbd ppo in ppo , cs ppss vbd in pp$ nn , cc in jj nns rb vbn at nn in dt nn in nn in at nn . vbn , in dt nn , in nn ppl , ppss cc at jjr vbd at nn , at nn , at nn in nns . at jj nn in at nn nns in ppo , vbg abn in nn cc abn in nn , dts in ap nn nn nns in pp$ nn , ql rb cs ppss vbd to vb in dt jj nn wdt rb md vb in ppo in at nn nn . cc dt nn , in jj , at jj ( cc rb cs jj ) nn vbd in ppo . vbg in at jj vbg nn , ppss bedz ql jj in pn ql jj . at nn in nn nn vb pp$ nn , wdt vbd in ppo . in pp$ nns bedz at jj nn in nns , rb vbg to vb in at nn . ppss vbd pp$ nns bed jj . ppss bedz ql jj in vbg pp$ nns in at nns cc rb vbg ppo rb rbr rb . cc , nn in abn dt , ppss md vb at nn in ppo to vb in . cs pps vbd cc at nn cs ppss hvd ben vbg at nn , in at jj nn nn vbg ppo . pn vbd in ppo cc at nn nn , rb cc rb vbn jj in nns in nn . rbt bedz at nn , cs wdt jj , vbg nn ppss vbd in bedz * ql rb vbn in dti nn rb cs vbg in abn nns jj . at jj , vbn nn , cs in nn , vbd in ppo . rb pp$ nns vbd at nn , cc in at jj nn cs at nn bedz , rb , . . ( nn cd ( in dti vbn nn , vbn . pp$ np . wdt bez at nn in ppo . vbd ppss . uh . in pp$ jj nn ppss hvd vbn ppl rb , cc bedz vbg at nn ' jj nn , in pp$ nn in pp$ nn cc at nn . in at nn ppss vbd rb , rb in nn to vb at nn in vbg rp in at nn , cc ql rb vbg ppo . wql jj cc ql jj at nn in dt jj nn in at nn , cc at jj nn in beg vbn in at nn . vb * ql jj in at nn in at nn , nn nn . rb nn in pp$ nn in at nn . vb * pp$ nn in at nn . vb at od nn in at vbg nn . vb * at jj nn , wrb pp$ nn vbz abn nns vb jj . to in nn , in at jj nn , at nns md be jj . dts wps vbd cs nns in at jj nns , at jj md vb in ql ap , in ap jjr , nn . at jj , jj , jj nn , at ap jj nn in in abn nns cc nns . rb at nn vbz * np ' np np np , cc np ' rb vbn fw , cc jj np , cc abn at nns in nns in nns cc in nns in at nn . at nn vbz * at nn , wdt bez at jj nn in dt nn , cc wdt bez cd nns in dt nn . ql , rb , cs jj nn wps hvz ap in nn in nn in ppo , cs jj nn md be jj in -- * jj , cc jj . in nns at ap . at jjt in abn nns bedz at nn in nps , cc at jjt in abn nns bez np ' rb , cc nns bez at jj vbd nn in nn . abn bez nn . abn . dt jj nn hvz * vbn vb in jj np ' nn nn rb . cc pps wps nns nns cc nns , cc vbz rb vbg nn in nns , cc md rb vb in nns in nn . vbz np , np , np , np , jj nns abn in jj nns . cc in at nn in jj nn vbz in np cs vbg jj , cc rb jj . in -- * cs nn bez vbn to vb rp in nn in nns , cc vb at jj jj vb in ql jj np . cc rb np , pps vbz , at nn wps vbz rp in at nn in nn md vb ( nn . nn . rb cs vbg ) in at nn in at jj . vb * ppl rp , rb , in nn , cs pps vb ppo , vb ppo . cs in at nn pps dod ppo . . . ( nn cd ( ex bez at nn wps bez nn . cc ex bez at nn wps bez nn . cc ex bez at np nn in dti nns wps md rb vb rp in at jjt nns , cc nn rp in ppo rb cc vb jj in at jj nns . cc rb cs pps in rb vbz in at nn , cs nn bez in at nns . rb cs rb in pp$ jjt nn at nn nn bez ql jjr cs ap nns in at jj , rb cs ppss nn . . . ( nn cd ( . . ( nn np cd np np ( hvd ppss vbd in at fw ' ppss vb in nns in at fw ' jj nn , wrb at rp nn nn bed vbg , in cd ap nn ppss md hv rb vbn ppss bed vbg in dti vbn nn in vbn nns cc nns . ex ppss vbd in pp$ jj jj nns , dt nn at vbn nn . at nn in nns vbg in pp$ jj nns . in nns , nn in at nn bez ql jj cs at nn in nns . to vb in at jj , cc vb in at jj , cc vb in nn in pp$ nn , dt bez pp$ jj nn . cc at nn , cs pps vbz at nn in nn , cs pps vbz in nn . pps vbz pp$ nn at fw ' jj nn , cc vbz ppo rp in ppo . rb cs in at jjt nn at nn ' in jj nn rb vbz at nn . vb in wdt jj nn at nn vbz pp$ nn in nns in in rb cc jj nns cc nns , cs in in in at nn nn in at vb in nns , cc vbz ppo rb , cs nns in nn in at nn . pps vbz , rb , at jjt in nn , in pp$ vbn , cc , rb , vbn nn . at nn jj in jj , jj , cc jj nns rb . pps bez jj cs jj nn nn in np . pps vbz cc vbz in pp$ nn , cs cs to be jj in pp$ nn cc nn , rb cs at nn in at nn vbz rp pp$ jj nn in nn . . . ( nn cd ( . . ( nn np cd nn nn nn nn nn ( rb hvz pps ben vbn wrb at jj nn bez rn in vbd in at nn in nn . wrb pps bez vbn in at jj nns , cc vbn in at nns in at jj . wrb pps bez rb vbd rb cc jj . cc wrb ( in at nn wdt vbd at nn in jj in at nns in wdt at jj bedz vbn ) pp$ jj vbn nn vbz at nn in pp$ nn . wrb , in jj nn , pps bez vbn in at nns , cc , cs nn , np , cc np , pp$ nns , nn , cc nn vb jj in at nn . in in cc rb pps vbz to vb at ap nn in dt nn in at nn in vbg in in nn , cs ppss md -- in at jj nn in vbg rp pp$ nn in at nns cc vbg ppo rp in at nn , wrb rb rb nn nns in pp$ jj nns , vbg rb in at nn ql rb . cc , uh . rb ap to vb cc vb . cs rb jj , at nn , cs jj nn , bez vbn in at cd in nn nns . cc cs , rb , at nn bez vbg cc vbg dt nn cc cs in at nn nn , at jj nns ber jj nn cc vbd rp , nn in nn , cc rb rb nn in at jj nn , cs ql ap nn nns , cs in ap nn in vbn cc vbn in pp$ nn . cc abn in at nns , nn , nn , vb ql ap nns cs md vb in ppo , in rb , fw fw , at nn bez at jj . in nn , wrb at ap nn bez jj , cc abn bez jj , rb at jj nns ber vbn , at nns in at nn ber vbn jj , cc rp vb at nns in pp$ jj nn in at nn . dt vbn , at nns ber vbn , cc rb vbn , cs at nn vbn rp . in at nn nn , dt bez rb cd in at ql jj nns in abn at nn in vbg . cd nn at nns nn in nns in nn cc nn . in at jj . . ( nn cd ( nn in nn jj nns in at jj ' nn nn ber rb vbn . jj jj nns vb rb , cs in at nn nn . at nn in at vb in nns hvz jj abn at nns . at nns vb rb vbd in nn . at jj nn vbz jj nn ppl . cs in abn nns at nn bez nn . cc at nn cc cd in , ppss vb in ppo , cc nn pp$ nns in dt nn in ap nn . cc bed pps * in at vb in nn nns cc vb in nns , ppss md abn cc vb ppo nn dti jj nn nn , in at ql ql jj nn . at vbn nn nn vbz at rb vbg nn . dt bez at nn wrb at nns rb vb ql jj cs rb in wdt ppss vb at nn in nn . rb , in at nns in at vbn nns in at jj , at jj jj bez rb vbn . cc wrb dti nn in at nn in at jj nns vbg in at nn , cs jj rb vbz ppo . nns vb rb in at nns , cc in nns in nn cc nns vb ppo in pp$ jj nn . at nn bez vbn in at jjr nn . abn at jj nns wdt hv ben in nn ber rb rb vbd cc vbd rb . at jj nn bez vbd cc vbd in at vb in nns , rb vbg at nns . at nn bez rp in nn . abn nns ber vbd in jj nns . cc wrb in at vbn cc jj nn in rb at jj nn ' jj nn , at nn in dt jj nn bez in ap vbn , rb at nn ppls vb in pp$ jj nns . vb ppls in nn to vb . cc rb nn in at jj nn , jj cc ql jj , cs nns jj in vbd in in at jjt np . rb , in vbn nn , ppss vb at nns in nns cc nns , cc rb nn in nns , nns , nns , cc jj nns . vb in nn at nn . vb in hvg nns in at nn . nn * in vbg nn in nn in at nn in at nn . to vb in jj jj nns in nn , cc nn , cc nn , bed ql jj in nn . ppss vb * at nn ppss rb vb to . rb , cc vb ppo nns . cc nn : rb rb , in at cd nn nns , vb cd . . ( nn cd ( nns nn in vbg rp ap nns , wdt , cs vbn , rb md rb vb at jj jj nn , cc vb in ap cd jj nn in nn rb . rb . cc ap bez at nn , wrb , in at jjt jj nns , wdt vb at nn . vbg rb in in cd in cd nns . wrb in at nn , wrb ppss hv vbd pp$ nns in abn nn nn in at nn , in in ppss rb vb in at nn to vb jj nns , cc nn at jj nn , cc vb cc vb , rb , cc in pp$ ap nns to be vbn cc vbn rb in at vbn nns in at jj nn cc at jj vb in nns . wrb , in at nn in abn dt , ppss hv rb vbn ppls in nn at nn , cc vb at jj nn nn in ppo . ap bez at nn at jj nns , rb jj at nns in pp$ jj nn , ber vbn in at nn in ex pps vbz . cc rb ppss vb to vb dt jj , cc vb in at jj jj nn rb . uh . pp$ nns , cc dt bez nn in nn . rb dt bez nn . in rb hv ppss nns in jj nns vbn in at nn ' in jj nn pp$ jj cc jj nn . cc rb , in jj nn , vbd ppls in pp$ nns , cc vbd to vb rb in jj nns in at nn . rb bez dt vbn , wrb -- in ex pps vbz . -- in at nn bez vbn rp , cc rb ppss vb to vb dti ap nn , cc vb in jj nn ' in jj nn rb . uh . at nn . uh . np , cs in jj np , cd cd nns rb , dod vb , ql jj , ql jj , ql jj . ppss vbd in ppo in at jj nn ap nn in -- cc , jj cs ppss bem , vbd ppo , at jj jj nn , wrb in nn at nn . . . ( nn cd ( . . ( nn cd cd np nn ( vb rb pps hvz ben vbn wrb np bedz jj to vb pp$ nn in nn , vbg jj nns in dtx nn , at nn . . ( nn cd ( cc nn . cc in at nn in ap nns vbg nn pps hvz * ben vbn wrb dt rb in dts nns , wrb ql vbn in pp$ nn , pps bedz jj to vb in nn in dt nn , cc vb rb rb vbg at jj nn in ppo . wrb pps vbd cs at nn , in pp$ nn vbn in at vbn nn in at nn , cs nn nn cs at jj in at vbn nn in pp$ nn . cc wrb vbg pp$ nn pps rb vbd cs at nn , rb , cs at ap vbn nn vbn in at vbn nn nn rb , pps rb vbd at ap nn in vbn nn , rb vbn in at jj jj nn , cs * nn . cc cd nn , vbg to vb at nn , pps vbd to be rb vbn in at jj nns cc nns vbn in ppo , cs cs rb in at od nn vbg to vb in ppl in dti nn nn wdt nn md vb in ppo . cc dti ap nn vbz in abn nns , rb abn nns ber ql jj , cc at jj nn ppl cc at jj vb , in to vb in at nn , cs ppss do nns in np , to vb rp dti nn in at jj nn . rb dt nn bedz in jjt , jj nn , vbd rb rp in at nn in jj nns , wrb , nr cc nr , in jj nns , at nn in nns in ap at np vbz . cc cs rb vbn in abn at nn in nn nns cc at nn in nn nns , rb , jj cc jj in dti nn , pps rb vbd pp$ np nn . cc , cs vbn in at jj nn cc at nn vbd in jj nns , cc in at jj nns vbn in jj nn wdt md vb dti vbg nn , rb at nn vbd at nn wrb at nn vbd ppo rb . cs pps bedz vbn rb cc vbn in cd nn in jj nn . cc wql jj in pp$ nn nns , cd cc abn , at nns vbn ppo cs at jj jj ' nn nn . rb ppss vbd ppo rp in at jj nn in nn , vbg wp$ pps bedz to be in ap , cc cs pps md rb vb to vb ppo . rb dts jj jj nns in jj np ber ql . . ( nn cd ( nns in at nn cc jj nn in nns . rn nns , nn , cc nns . nn ' np nns cc nns . nn , nns in in in nn , cc jj nns vbg , ber in nn nn vbn . rb cs at jj nn vbz rb to vb at vbn nn cc vbg nns , in vbg in dts jj nns , ql rb jj . ppo ql vbn cs at nn in at fw bedz at ql jj nn in dts nns . rp pp$ jj nn pps vbd at nns , nn np np : nn . cs dt jj nn vbd in at nn vbn in at nn in at nn , cc in at jj nn , cc vbn in ppo . cc pps hvd ben vbn rb in at nn , in at vbg jj wps vbz at nn . vbn in dts nns ppss vbd at nn in cd nns ' vbz . in cd at nn . at nn in dt . in at od at vbg nn . cs vbg rp abn bedz at nn in at vbd jj , at nns abn vbn in pp$ jj nns , cc at nn nn vbg at jj nn in np . cs dt jj nn , np , * jj in nns , bedz rb vbg . ex ' rb pn rb jj in nn in nns cc nns , cc abn ap jj cc jj nns . vb rb , in in cd nns cs jj cs np . at jj nn , dt bez nn . at nn , dt bez nn . at jj , at jj , cc jj nn , cs , rb , bez nn . abn ber nn . cc dt jj nn bez cc at nn in at nn nn , wdt , cs at nn ' jj nn , in dt cc at nn in nn cc vbz rb pp$ jj jj nn . jj nns , jj nns in dts wps vb at nn to vb ppo . pps md vb ppl . np rb dt vbn nn vbz at jj nn . cc vb . rb , pps vbz at nn in nns , at nn . cc cc cd nns cs pps vbd rp in at ap nn in nn . in nn in nn . ql be ppo , rb . vbn in nns , ' nn bez vbn cs nn md vb in nns cc vb in nns . ql be ppo , rb . rn ' in jj nn in nn to vb rp . ql be ppo , rb . at nn nns md hv vbn at nn , cc nn ' np nns md hv vbn pp$ nns rb cs nr , vbd np in ppl , vbg in at nns . at jj . . ( nn cd ( nn vbz to vb np ' rb jj nn . nn hv rb vbn at nn rb . pps vbz rb . vb ppo vb . at jj nn in cd jj , nn in vbg nns , cs rb vb at np , in dti jj jj nn . ql in dt jj in nn , np nns ppo rb . cc in abn pp$ nn , at nn in nn rb vbz at nn cc at nn . cs ppss vb rp pp$ nns , at jj jj nns pp$ jj nn . cc cs ppss vb ppo , at jj nn vbz pp$ nn abn nn , to vb . rb , uh , at jj nn bez at nn . cc cs , in nn , ppss md vb vb dti jj nn in ppo , ppss vb in ppo in jj . dt nn vbz rb , rb , rb , cc rb rb in ppo . nn md vb ppo , cs nn vb ppo rb . ex rb ' np at jj nn , jj np in at vb in nns , pps ' rb ben vbg ppo . cc ex vbz np in at ap , cc abx in nns wdt ppss md vb md be rb in cd nns rb . cc abn in vbg in at nn in nn , wdt dod ppss hv ppo rb in np nn cc in np ' np np , ppss ' md * vb in ppo ql rb cs vbg ppo . nn . in pp$ jj , jj nn , ppss vb dt ql jj . nn hv vbn nns in rb in pp$ nns . pp$ nns in jj np , pp$ nns in np , pp$ nns in fw , pp$ nns in np , pp$ nns in np . in nn in nn vbz cc nns , cc nn , cc abn nn , cc nn nn . wdt rb md rb be in dt nn in at nn wps bez rb vbg jj . in nn . vb ppo vb ppo rb . uh . rn ' np nns cc nns rb . wpo , rb , bez wdt jj nn in pp$ nn vbz at jj , cc wdt pp$ nn rb vbz rb . nn ' ppss vb at nn cc cs ppss hv vbn nns md be vbn in nn ' jj nn , ppss ' ppss vb pp$ nn in vbg at nn rp in dts jj nns rb in at np nn . rn ' in at nn . vb ' ppss vb rb . nns cc nns . cc at nn , pps ' vb rb in ' ppo . nn , nn , nn . rb ppss ber in in rb ppss vb in in abn jj : in in nn , cc at nn . np , cc at nn cc nn . rn ' np np ppl , cc at nns . uh . at nn pps nns in ' ppo . rb , rb in at nn pps ' vb rb vbg at nn in cd in cd vbg in nns abn in at nn . nn . ppss vb rb . at nn bez , ppo nns md vb pp$ . . ( nn cd ( nns . ppo ' ppss do to vb ppo at jj nns cc nns , cc ppss vb rp to vb at nns . cs ' in pp$ jj nn , ql rb cs at np nn , cc nn ' jj nn , cc np ' nn nn vb . nns cc nns , uh . nn cs ex bez pn jj in nns , cc jj in nns . ex ' in at nn rb . vb at nn . nn in in jj . in nn , ppss hv ppo . vb ppo , nn , pp$ jj rb bez at nn in nn in cd jj nn . cc rb ppss ' ppss vb ppo rp , rb rp in at nn . vb , np . to vb : ex ' jj nn , cc at nn in in jj nn , pps nns ppo . rb , np , cc at nn in -- pps nns ppo at od nn . rb np , cc at nns in in dt bez , nn cc jj . ppss vb to vb nn , wrb uh . vbz nn at nn , cc nns ppo rb . cc rb , vbg in nn , np , at vbg nn , vbz in at nn in -- pps vbz at ap jj nns cc jj nns in pp$ nn . ppss vb , cc nn nn , at nn . cs ' in pp$ od nn . ppss vb cc vb to be jj in rb , wrb nn vbz np , cc at nns in in nn vbd cc vbd vbg . cc cs ppss ber ql jj in dt , np . wrb ppss rb vb , cs np , cc at nn , nns ppo in nn . ppss ber vbg at nn , wrb nn vb at nns abn nn . np , cc at np , bez jj ppl . cs ppss vb rp at nns , vb rb . rb ' np at vbg in nn , np , cc at nn . jj nn , pps vbz vbg , cc jj ppss ber vbn . wrb np , cc at nn in nn , vbz rp pp$ jj nn cc vbz ppo . cc to vb rp in np , cc at nns , ppss vb . ex ' in at nn rb , vbn in jj nn , cc at nn vbz in ppo at nn , cc rb vbz rp in ppo abn jj cc jj . rb pps , rb rb , nns in nn cc nn . cc rb , nn rb , doz jj np . uh , jj ' in at nn in rb . fw , nn . cc vb . rb vbz ap nn in nn . vb rb at vb in nns , rb , cc vb ' ppss vb wdt pps ' ppss hv to vb . ex . pps ' vb in ppo . pps ' vb rp in pn rb . ql , ql . pps ' vb nn . nn vb pn rb , cc at jj nn vbn in nn , cc wps vbz at jj jj , dt jj nn vbz in ppo . ql , wdt ' in abn dt vbg ben rb . pps bez jj cd nns , cs ' pp$ jj . cc in cd nns at nn , cs ' np cd cd cc . . ( nn cd ( cd nns . nn jj nn jj nns cs np , cc ppss vb nns , cc rb ' np cd cd cc cd in ppo . ql rb vbz nn rb to vb ' ppo rp . md ppss vb cs jj cc jj , rb . cs pps be ql jj pps hvz at jj nn in ppo . rb , cs pps be ql jj , rb hvz pps at nn in jj nn in ppo . cc , nn . rb vbz pp$ jj nn in in at jj nn in nn , pps md hv ben , wps bez , cs pps vbd in at nn . pps nns rp in at nn . nn , cc vbz rb in at ap nn in at nn . wrb , ex ' in at nn in nn vbn in dt nn . cc rb pps ' vb rb rb . wdt doz dt vb . vb . pps ' vb vbg in in nn cs at jj vbn in in nn in nn . nn nns , cc vb . cs at jj nn be vbn , pps md be in at nn cc at nn , wrb at nn vbz in dti cd in dts nns . nn ' ppss vbd nns , cc vb pp$ nns . ppss bed vbn ppo cd nn nns rb , in at jj nn in np . rb , in wdt nn md at nn rb be . at nn in nn nn . in rb pps bez , rb in at nn . cc wdt ' in at nn in nn nn . at nn bez at nn in nn nn in in at nn cc nn nn . nn , jj nn . pp$ jj nn vbz to vb in ppo . ex ' in dt nn rb . cc rb cd nn . abn nns in nns in cd nn in nn , ppss vb . vb rb . rn vbz nn in in abn nn in in vbz cs at nns in at np ppl . wdt vbz at nn . cs ppss vb pps ' vb vbg nns . vbg in pp$ nn nn . vbz at nn bez in at nn , cc in at nn , cc in at nns , ppss vb , cs at jj nns vb nn ' jj nn in at nn nn . cc in nn , pps ' np vbd pn rb in at nn in pp$ nn in in ppss vb ppo ' np np , cc at np . at : pps nn ' nn vb wdt to vb in at nn . pps vbz ppo in at jj nn in dti nn ' np nns . cc , rb rb . rn vbz cs nn in nn , np . nn vbd rp in nn cs jj , jj in at nns in pp$ nns cs jj . wdt doz pps vb , in dt nn in pp$ . uh , rb vbz at nn in at nn cc vbz ppl . ex bez at nn in at nn in in nn nn , vb in ppo . nn . rbr cc rbr . dt nn vbz np in in jj nn . md pps hvd vbn , cc ppss . pps ' vb abn jj in ppo . pps rb hvz ben vbg abn in dts nns in in ppl vbn in -- cc vb rb , pps vbz to vb , . . ( nn cd ( in dt jj nn nn . vb rb rb cc vb ppo . jj . nn nn , ppss vb , pps vbz . ppss vb , ppss vb , ppss vb . in pp$ nn , pps ' rb ben vbg np ' np np . vbg pp$ nn , jj nn . cc wdt ' rb cs pps vbz rb in in nn . nn nn , ppss vb , pps vbz . ppss vb , ppss vb , ppss vb . wrb , pps ' vb vbg ppo in nn in in nn . rb . nn nn , ppss vb , pps vbz . ppss vb , ppss vb , ppss vb . uh , cs ' pp$ jj . cc ppss , ppss , cc pps . cc ppss , ppss , cc ppss , ber abn nns . cc ppss ' in at nn , rb wrb ppss vb at ' nn in dt nn nn rb . vb . nns . nns . nns . nns . nns . fw ' nn ppss at nn . cc wrb ' np at nn in nn . ex pps vbz . cd nns vbn in at nn in jj nns , cc cd ql vbn in at nns in at jj nn . vb cs pps vbz ppo . -- in jj . -- in jj nn . -- in ppss md vb vb ppl . dti nn , in at jj , ppss ' ppss vb np ' nn nn . nn md vb at nn , cs ppss hv jj nns . cc pps ' vb ql jj in jj in pp$ nn . ql , ql , ppss vb ppo vbg . rn ' in at nn ' jj nn , dt nn rb , cc ppss ber abn in nn to vb ppo . cc , vb pp$ nn , cc wdt ' in at nn . rn rb , cs pps vbz rb , dt bez jj , rb , in wrb nn ' rb vbn in at nn pps ' vb at nn cs nns vb jj . uh , uh . jj nn . at jj nn . pps ' jj nn ppss . dt bez at nn nn . pp$ nn , in jj np nn , vb rp at nn nn rb , cc vbd at jj nn vbn rp in ppo . dti jj nn ' jj nn nn . wrb dod ppo vb rb . cc cs ppss ' ppss vb in at nn , wrb ppss vb in nn in dt jj nn , cc vb at nn vbd in ppo , in vbn nns in at jj nn . uh , at nn . at jj , jj nn . -- in at jj nn ' jj nn ppss rb . nn . jj . nn vbz ' jj at nns nn . vb . vb , vb . cc vb ppo . np . uh , uh , uh , uh , uh , np , np . cc vb pp$ nn in nn vbn . . . ( nn cd ( . . ( nn np cd nn nn np np nn , np nn , np np np ( np , np nn nn , nn . hv vbn at jj nn . ql vbd np , rb ql jj at nn vbg jj nns , vbg rp in at nn . nn in nn , at jj nn bedz vbg in pp$ vbn nn in nn , pp$ jj nn rb vbn in at nn nn , wps bedz rb vbg in pp$ jj nn ' jj nn . pps bedz at rb in vbn , jj , jj in jj , jj in vbg nn , in cd cc rb , vbn in at jj jj , wps vbd in ppo in nns in jj nn in nn . cc cd jj nn in dt nn vbd in ppo cs at vbn nn in at nns ' in nn . hv vbn at jj nn . vb ppo dt . cc vbg ppo in at nn wps hvd vbn ppo , pps vbd rp at jj nn in nn jj nn , vbg in at jj nn cs at nn . nn pp$ nn . vbd np , rb , cc vbg in at vbz in ppo in in nn in to vb . in ap cs at nn , in vbg pp$ jj nn , pps cc pp$ nn bed vbn in at nn , cc bed rb rb in at nn . cc rb at jj nn vbd ppl . in at nn in at nn , np hvd vbn cs cs at nn in pp$ nn pps hvd rb rb vbd in nn in dti nn in nn cc pp$ jj , cc rb pps bedz rb in at jj cc ql jj jj nn jj in at fw , cc at nn * to be vbn cc vbn in dti ap nn in at nn ' jj nn . rb , pps bez at ql jj nn in pn in in in dts wps ber ql jj vbn in ppo , cs nns in in in vbn rp at nn ' jj nn in at nn in at jj nn . in at jj nns rb vb at nn jj rp in . . ( nn cd ( at nns , cc rb rb vb ppo abn nn rp in at jj . ql , vbn in cd nn , cc at jj nn in nn beg rb vbn in at jj nn , np rb vbd ppl ql vbn in at jj nn rb . rb vbg at jj jj nn pps md rb vb to vb . pps hvz rb ben vbn , rb , cs at ap jj nn cs fw ppo , cc wdt rb vbd in pp$ jj nn , ql rb vbn cc vbn nn . cc in at jj nn , abn dt bedz vbn in at nn in at cd nns in at jj nn , vbg in at nn , in at jj nn in vbn nns rb , cc vbg in ppo at nn in rb in vbn nn in nns . in in rb ppss dod * vb to vb ppo cs at cd in jj nn md be ql ap in at nn to vb pp$ nn vbz . cc dt nn rb vbd at nn , cs at jj nn , vbg in at nn wrb nns vbd , vbd rp , ppss vb , ppss vb . -- in nn vbg rb . vb , nns , cc vb rp at nn in nn . ql jj nn md hv ppo , ppss hvd hvn at jj in at nn cc cd jj , cc at jj nns bed rb rb , cc at jj vbn nn in nn , rb jj cc jj , bedz rb vbn in at nn . dt bedz rb vbn to vb , wps in rb vbg ppo abn , vbd pp$ jj nn in at nn in at nn ( pps bedz cs vbg in at nn in at nn , cc at nn in at nn nn ) , cc rb vbg at nn , vbd ppl rb , cc in at ap nn rb vbd to vb pp$ jj nn , in vbg nn in rp in nn in cd in at vbg nns in at nn . rb pps bedz rb vbn in at jj nns , cc rb vbd in at nn nn . in pp$ jj nn rb vbd rb in nn , at ap nn vbn , cc np , vbg rp pp$ jj nn , cc vbg at jj nn ( vb cd nn in nn nns ) vbd rp in pp$ nn nn , nn , rb , jj . vb ppo vb nns rb . -- in at nn cc at nn . -- in at nn wps rb md vb , jj ' ppss vb . cc at nn wps rb md vb . wrb dod ' rb ppss vb at jj nn . -- in wql jj rb . at jj nn , vbd at np , vbg pp$ nn . . ( nn cd ( nn in at nr , cc vbg at jj nn in ppo , cs cs pps hvd ben at nn . ex ppss vbd ppo , in at nn , ap nn . cc pps vbd cs nn rp , dod pps . vbd np , rb vbg rp in at nn , cc vbg in at np ' nn nn , cs pps dod rb . rb , pps bedz at nn in ppo , in ap . cc dt nn , rb . vb ppo at nn , vbd np . wrb bedz pps . pps bedz at od nn in pp$ nn cs ppss rb vbn in at nn , vbd at np . nn bedz jj in at jj nn in dt nn . uh , cd nn ppss vbd in at nn in cd cc cd nns , cc pp$ nn vbn in cd in ppo . at jj nn nn pps bedz , rb , wps vbd vbg cc vbg rb rb , cs pp$ nn ' jj nn md rb vb nn , in vbg abn pp$ nns in at jj jj . rb rp vbz in at nn in at nn at vbg jj jj , in at jj in jj nn cc vb , abn nns ' nns cc nns . pps bedz pps , pps bedz pps . vbd np , rb vbg rp pp$ vbn nn . cc nns vbg in in pp$ jj nn . rb , rb in in ppss bed pp$$ in in pp$ nns , vbd np , rb in -- cc in . vb ppo at nn , rb , vbd at np , jj in rb . uh , dt jj jj in nn , in at jj nn cc vb , vbz abn nn in at nn , cc vbz in vbg rb in pp$ jj in nn . rb , ppss vb . -- in vbd to vb ppo . rb at jj in nn in in at jj nn in in ppss vb ppo . wrb pps bedz rb , vbd at cd in vbn nn , ppss do * vb . cc in vbg at nn , pps vbd jj in pp$ nns , vbd ex rb . cc ppss dod ' nn vb ppo rb . rb cs wrb ppss rb vbd in at nn , vb ppss vbd jj in in pp$ vb . rb in at ap jj ' nn wps vbd rp in nn , abn nn . vbg wrb nns vbd , cc wdt at jj jj jj pps bedz in in at jjt cc jjt ppss rb vbd , nn , in pp$ nn in in ppss vbd to vb ppo , nn in at vbg nn pps vbd to be in . cc vbg at nn in nn nn md vb jj , cc at nn pps bedz vbn to md vb ( cs ppss hv . . ( nn cd ( at nn in at nn ' jj nn in at nn in at jj in nn ) . vbg abn dt , ppss vb , ppss vbd in pp$ od nn ' jj nn in in np . np ' rb rb ( in at nn , nn in in np . np -- in at nn ) . in in cs ppss bedz vbg , ppss vbd in np ' nn nn , wdt , rb ' ppss vb , bedz jj cc jj in pp$$ , rb . cc jj at od nn , vb dt jj jj in nn hv ppo . cc , nn , vb ppo , nn in in nns cc nns jj , nn in in at ap nn , in at vb , ppss bedz jj cs at nn in in abx nns rp in in abn vbn cc vbn in jj nn in in at jj ' nn nn vbg rb rp rp in ppo , jj in at nn , cs at nn nn . at nn vbg abn , rb . cc cs ppss bedz vbg in nn , in at vbg nn , abn nn in nns . cs ppss bedz vbg , ppss vb , cs at od nn , to vb ppo rb in in rp vbz at nn cs at np nn , vbg pp$ nn in cd , vbg dt abn in nns . cc , vbz rb , at jj nn vbd in at nn , cs cs pps bedz abn nns . ppss abn vbd rp . to vb pp$ jj nns , ppss vbd vb in pp$ vb in nn vbg in ppo , cc in at nn vbd to cs cs at vbg nn . cc at vbg nn vbd ppo rp , cc in at ap nn , at nn , vbg cd jj nn rb , vbd rp cs at nn . cc at nn in dt vbn od nn nn rb in ppo vbd ppo rb ( vbg pp$ nn rb in pp$ nn ) . rb , vbd ppo ql rb , ppss vb , cc vbd ppo rp in nn ' np nns , ppss bedz vbg . wrb , wrb , abn in at jj , vb at jj np , at nn nn pp$ nn in at nn in in jj in at jj nn in pp$ nn in in vbd rp rb pp$ nn , cc in nn vbd . in in cc dt nn ex md vb ppo at nn ( in at nn , nn in in np . np , nn ' jj nn : np , pp$ nn , in in at nn ) . rb , np nn , vb pp$ nn in at nn . at jj nn rb rb vbd rp , hvd ben abn at nn vbg in ppo , in pn jj jj , to vb pp$ jj nn in nn . pp$ nn bedz at ql jj cc jj cd . pps bedz vbn in at vbn jj jj nn cc nn , cc vbn nns . cc hvd rb rb ben vbg pp$ nn in at vb pps vbd in cd nn , cc at nn in nn vbn in at ap , rb vbg at jj nn in at nn nns in at cd vbn nns . cc , in pp$ jj ' nn nn in ppo to vb , pps . . ( nn cd ( rb vbd , cc rb vbd rp to do pp$ nn ' jj nn . pps bedz at jj jj nn , vbd at jj in nn . cc , vbg pp$ nn , nn np rb , vbd pp$ jj np in in np np bez at nn in pp$ nn , vbd at cd in vbn nn , vbg nn . vb rp , nn . vbd pp$ jj np rp in at rb , to vb rp in at vbg jj nn rb in at nn . cc pps bedz at nn in in ppss dod abn ppss md . vbd rp in ppo nns . bedz ql jj in ppo in at nn in nn in -- uh , ql jj . jj in at nn ppl . rb rb vbg pp$ nn , vbg jj nn nns in ppo at nn , cs pps md ' nn vb to vb in at nns . cc vbg ppo in nn , abn nns rp , in cd nn ' nn in at nn . uh , ppss nns . pps vbd rp in ppo rb , cc bedz ql jj in pp$ nn . uh . at jj nn , cc ql rb jj , bez jj . np . ( np , ppss nn , vb rp . wrb nn ' nn ppss . ppss vb ppo ' nn at jj jj nn . ) cc , nn rb , nn , ppss ' rb rb be vbn in ppo cs vbn jj in dti ap nn . pp$ nn , ppss md hv cs dt vbn , vbn nn in in vbd at jj jj in vbg np , rb vbg to vb in in bez jj to be jj in nns . pps vbz ppo ap jj nns in dt nn . cc ppss md ql rb vb in in fw nn , cs at jj nn in in cs ppss ppl in in dt bez to vb , np np , rb in at nn nn in in bem at jj nn nn nn . ppss rb vb in in nn . vbd at nn . pps rb vbz ppo . pps ' vb at nn in nns in ppo . jj nn vbz ppo in at nn . cc vb rp in in vb rp in at nn nn . rb , ppss md ql rb , vbd at nn , rb . nn bedz rb vbg , nn , cs nn np ' rb jj nn , cs nn in pp$ jjt cc jjt nns , at nn vbd vbg jjr cc jjr . at nn bedz , nn , pps bedz ql jj vbg nn cs nn rb vbd . ap in cd nns cc ap nns rb . nn vbd ppo in at nn nn . in jj , pps vbd jj . ppss vbd wdt bedz vbn , cc rp pps vbd . . . ( nn cd ( cc ppss hvd at nn in vbg dt jj nn rb . dt nn bez in abn nn in in vbg in ppo in at nn in in dt bez at nn ' jj nn , * pp$$ . pps vbd at nn to vb ppo . pps hvd dt nn in nn rb vbn in at nn , to vb dti cd ' np nns rp in , ppss vb , cs pps vbd pp$$ rb . pps vbz in jj nns rb . do ppss vb dt nn , nn in in vbg pp$ nn , cc vbg rb pp$ nn , cc vbg at nn in jj nn in pp$ nn , cc wdt vbd * at jjt nn nn , cc dti nn in rb hvg ben at nn in -- uh , at nn ex md vb ppo wrb dt vbd rb . pps vbz . ql , ppss nn ' nn , vbd at nn , cc pp$ nn dod . pps bedz vbn in ppo . uh , ppss jj nn , ppss in in ppo np . bedz rb rb jj dt np in at jj nn . np , wrb ppss vb , ppss md to vb in nn , ppss nn . ppss md be vbn in jj nns , ppss nn . wdt vbd in at jj nn . rb vbd np , wps rb rb hvd ben rb vbg in dt vb in nn in at cd nps . uh . vbd at cd in vbn nn , uh , rb . uh . cs pps vbd , ppss dod ' nn vb ppo rb in dti nn . in nn , cs ppss rb vbn , ppss dod ' nn rb vb wdt jj pps bedz wps hvd vbn ppo abl at nn , cs dti nn rb , wrb vbg rb in at nn , ppss vbd in np np in in cs dti vb ppo in -- cc rb ppss vbd pps bedz pps . dod ' rb ppss vb pp$ nn rb . rb . cc md * vb . dod ' nn vb to vb in : jj ' nn cd nn qlp . wdt md ppss do in dt ap nn . cc ppss ' rb vbg np np cs ' nn vb ql ap cs pps nns . uh , rb , vbd np , vb ppo pp$ nr nn in nn to vb at nn . do ppss vb , nns in in ql rb cc rb vbg in dt nn in nn in in do ppss vb , nns , cs at jj nns in at jj ber ql ql vbn in jj np , cs pps bez ql jj in ppo to rb nn rb at . . ( nn cd ( nn ' jj nn . cc pps vbz ppo rb . cs dt wdt ppss vb in at jj nn ' jj nn bez rb pp$ nn . cs pps rb vbz to vb at ap nn . pps rb vbz to vb in nns . cc rb pps bez cs at jj vbg nn , rb at nn in pp$$ in np , cs vbg vb nn nn in nns , rb in at nn vbd cd nn in ppo in jj nn , cc rb pps vbd in at jj cc ap . wrb ppss vbd ppo at nn , cc pps vbd ppo rp in jj nns , nn ' ppss vb . ql jj nn in ppo in nn cs nn in nn , cc rb vb ppo in pp$ jj jj nn . rb , nn np , cs ppss ber jj qlp in ppo , cc hv at nn in nn cd nn in at nn in at nn in vbg jj nn in at ap , wrb in dt nn at nn bez pp$$ . rb vb at jj hv dt nn in ppo rb , cs ' vb abn . ql , vb ppo , np , vbd at jj nn , pps ' vb jj in at nn pps hvz , cs ppss md ' nn vb ppo , cc dod ' nn vb ppo rb . cc * in dt cd . ql ql jj nns in ppo . ppss ' ppss vbd in ppo rb , cc wps hvz vbn ppo . ex md be jj nn in vbg ppo , ppss vb dt . cc ex bez at nn in nn in jj nn in ppo , cc , vb ppo , pps ' vb rbt vb rb . nn ' nn ppss vb rb , nn . -- in vbg in at jj nn . pps bez . cc pps md rb be vbn , in abn dt . wdt bez rbt vb rb , cs vbn nn bez * rb wdt ap nns . pps ' vb abn at nn . wql jj cs ppss vbd ' vb ppo rb . wdt nn nn . vb pp$ nn , cc vb at jj nn ' np , vbd np , rb vbg jj nn , cc cs at nn , rb vbg . dt nn ' jj nn in in vb at nn . in in ppo ' nn in at vbg nn . -- in pp$ nn vbz dts nns vb . -- in nn . -- in vbg at nn in pp$ nn , cc vbg rb to vb ' np nn . nn . vbd np , vbg ppo in at nns in in nn at nn . wdt nn nn . jj np . vbd at jj nn , in wpo at nn bedz vbn . wdt ' in at nn . pps bedz vbg nr , ppss vb . -- in bez pp$ nn jj . vbg np . cc np , vbg at nn in pp$ nn , vbd rp at nns . . ( nn cd ( to vb at nn ' in vbg nn , cc np , vbg at nn in nn in ppo , vbd at nn ' np nns to vb in to vb . in at nn pps bedz vbg in at nn ' jj nn , cc at nn nns bed vbg in pp$ vbz . in jj at jj nn vbd ppo . in nn in at nn nn , cc nn vbd cs at nn in pp$ jj , np vbd rb cs rb in at fw . . . ( nn cd ( . . ( nn nns cd np np ( vb at jj nn vbz in nn , be pps vbn rp rb , cs pps vbd in np , cc bedz vbn in at jj np np , nn in dt nn , at jj in at jj vbg nn in nn cc nns . at nn wdt in pp$ jj nn ' jj nn , vbz * rb in at vbn jj nns in at nns cc nps , in nn in jj jj nn . wql jj , rb in at nn in pp$ nn cd , dt jj vbg nn bedz in nn , pp$ jj nn in nns do * vb jj . cc in dt nn ( ) pps vbd rp at od jj nns wps rb rb vbn at jj nn . cs in dti nn in nns jj ( rb cs ) pp$ jj nns cc nns in np cc at nn hvd in jj nns vbn cs jj , cc rb in at jj cc jj np : * rb . be pps rb vbd rb , cs at nps bed at od in nn to vb in vbn nn at jj nn nn . cc cs in abn at nn ppss bed at ap nns in at jj nn wps rb vbd ppo . rp , at jj nn , at np , vbn rp in at jj nn , cc in at jj nn in at jj nps , rb vbn nn nn , cc bedz at od in at nns to vb at jj in nn in dti nn in at jj jj nn . at . . ( nn cd ( nn bedz at jj cc jj cd . cc vbg in pp$ nn in ppo vb jj in at jj nn , at np ' nn nn bedz rb vbn in ap nns , jj cc jj , cc rb at jj nn nn nns in at jj bed vbn jj . cc * nn in dt jj nn , at jj nn rb vbd ppl : np cc abn pp$ nns in in wql ap , pp$ nn rb vbz in -- cc in pp$ jj nns , cc rb , ppss vb , in pp$ nn , at jj nn bedz vbn to vb at nn in in in nn np in at vbg nn in nn in at jj nn . vbd in at jj nn in nn , at np vbd at vbg nn in ppo , cc dod dti nn . wql ap doz * vb . cc dt bez * abn . in cd , at ap nn vbd rp at nn jj nn in pp$ jj , to vb in at vbg nn in at jj nns in np . dt nn in in rb vbn at nn in in vbd at jj jj nn . cc pps bedz rb cs at jj jj vbg nn rb vbd rb vbn . at nn in dt jj nn bedz vbn in at nn np , at np . abn nn in at nn , rb , wp$ nn , ppss vb , vbz in at jj nn . cs rb at jj np md rb rb hv vbn pp$ nn in at jj jj nn in at ap nn . at nn vbn in ppo bedz jj in at nn , beg at ql jj nn cc at jj nn at nn . nn vbd ppo rb in nn rb in at jj nn , cc vbd jj vb rp in at nn . pps bedz at jj rb ppss hvd , cc ppss bed abn nns in in at nn in nn . at jj nn in ppo , cc at jj nn . cc cs jj rb ppss hvd in -- jj , ql rb cs jj nn vbd pp$ nns in pp$ jj nn in in ppo nns ppo in at jj , jj , np nn in dt nn . cc md pp$ nn vb ppo , cc at nn vb ppo , cs ppss rb vb nn in ppo . vb . dod ppss vb ppss hvd vb . rb , cc ppss vbd ppo in at nn in cd nns at nn . cc wrb at nn vbd ( in ppo ' rb rb rp rb in np ) , cc abn nns in in nns cc abn in in bed vbn in jj nns , ppss bed ql nn in jj cs ppss hvd to vb dt ap rb in nns . cc ppss rb vbd at nns in pp$ nns in . . ( nn cd ( at nns , cs cs ppss vbd rb , vbn rb in at vbg nn , at vbg nn in abn jj nns . wql , at nns dod * vb rb . cc in cc vb ppss vbd rp , ql jj , cs ppss hvd to vb at vb rb , cs at jj nn nn vbg rp at nn nn , ql ql rb vbn cc vbn ppo in pp$ nn . at nn bedz jj in in jj , cc in nn in ppo . ppss vbd pps bedz nn in nn . nns , cs pps bedz jj nn . cc nn do * vb , in jj , wrb dt bedz . ppss hvd vbz rb . jj , cc jj , rb jj , cc jj nns . nn vbd cs ppss md vb ppo , cc vb ppo rb in ppo cs ppss bed vbn . cs ppss vbd rp ql ql rb , ppss vbd pp$ vbg rp in ppo cs nn in nns . at nn in -- cc dt md ' nn be vbn . rb , pps bedz at in in jj . in jj , at nn vbd at ap jj nn ppss hvd . cc at nn bedz * ql jj , cc pps bedz ql jj to vb rp in at jj nn wrb ppss vbd ppo . cc abn in abn , vbg ppo in nn in nn , vbg at nns in at nn ' np nns , in pp$ jj jj nn nns . nn cc rb , ppss vb , at np np bedz at jj nn . in jj nn cc nn . jj vb cc jj . nn nns abn , cc nn in nn nns in nn in nn . cc wrb bedz pps , vb ppo , cs at np np , cc dti ap jj nns ppss vb in in -- * abn cs in in bed jj jj , jj nns . cs vbn in at nn , cc at nn , cc at md , cc at nn . cc bed * rb jj in vbg , cc vbg , cc vbg . nn md vb ppo . at vbg jj nn in dts jj nns bez nn in jj nn . cc hv ppss ben in abn vbg in jj jj nn , wrb pps hvz vbn vbn . at nps bed vbn in at jj nn in at np , np , cc nps . in wpo ppss vbn ap nns rb jj in at nn . cc wdt bez rb rbr , pp$ jj jj nns , vbg nn to vb cc vb . in , cs at jj nn , at jj nn in nn vbz pp$ nn . cc * rb at jj jj . rb , in at jj , dt nn in vbg jj nn bez * jj cc jj , cc jj cc jj . cc , rb , md hv dti jj nn , . . ( nn cd ( wdt bez rb vbn rp , cc md be ql rbr vbn . in pp$ nns in at nn nns , ppss vbd in at jj jj nn , wdt , in at jj vbg nn in ppo , ppss vbd md be in nns . at nn bedz , np nn , in ppss vbd cs dt md be at jj nns in dti np jj in at nn , cs at jj nn md vb pp$ jj . nn bedz vbn in dt nn in vbg cs pps bedz at nn in cd nn np . cc pp$ nn in . np , at ql vbn nn , nn in np np cc jj jj in at nn in np np cc nn . fw ' np , in wpo ppss vbd at nn in nn , vbg ppo at nn in nn nns in pp$ nn in in dt ap nns . np , ql rb cs pps vbd at nn , vbd ppo cs np nn dod * vb at np , cc at nn . in jj , dt jj cc vbn jj jj nn vbn in at nn in np . cc , in ap nns , vbd at ql jj nn in pp$ jj nn . cc in dt nn pps bedz , vbn nn , cc jj , cs ppss vbd at jj vbn nn in at vbz in at nns cc nns in cd nn in jj nns . in wdt nn , cs vbn in np . np . nn vb at nn : cd , cd nns . in nn . cd , cd nns . np nn . cd , cd nns . in nn nn . nn , nn nns . in nn . cd , cd nns . in jj nn . cd , cd nns in nn . cd , cd nns . in np cc np nn . cd , cd nns . nn ( rb at jj nn ) . cd nns in np . cd , cd nns in nn . ql jj nns ber rb jj in at nn . * rb in at jj nn , rb , wrb at nn bez vbn in jj nns , nns , nns , cc vbz in jj nn cc jj nn . in at nn , ppss vbd cd nns in at jj vbg in abn dt nn , nn , cc nn , in wdt ap jj . . ( nn cd ( nns bed rb vbn in ppo , jj in at jj cc jj nn . cc , rb , ppss vbd jj nns in pp$ jj , vbg at jj nn in nn in nn , np . , vbn in at jj jj nn in dt jj np cc nn jj nn . in at od nn , at nn in nn , cc np cc np nn vbn , vbz jj . nn vb ppo , cs , in pp$ rb jj nns , beg vbn rb ql jj in at nn in pp$ nn , cc rb in pp$ vbg pp$ nn in dts jj jj nns , in at ap nns in dt fw nn wrb at jj nns nn dt ap in nns in nn nn . at nn in nn , rb , bez ql jj , cd , cd nns . rb , cs dts jj nns md rb be vbn in at jj nn in dt nn , cs cs at jj nn in cd in dts jj nns , in at jj nn in cc in at nn nn , dod * rb vb cd nns , vb , cc nn cd nns in dt in pp$ nn in cd nn , ppss hv cd , cd jj jj nns in abn . rb , ppss vb , ppss hv rb cd nns in nn in nn , in at cd nns ' nn , jj in pp$ jj nn in dt nn nns in nn . rb , cs dts nn cc nn nns , ql vbn cs pn md vb ppo to hv ben , bed at jj nn in nns to vb rp in at nn ' jj nn , cc vb jj nn in vbg nns . dt md vb ql jj . rb ppss dod vb in ppo , cc vbd ppo rb . cc dt bedz ql ql jj , be pps vbd , wrb nn vbz rb in at nn . in at nn , in pp$ jj nn , nn md be jj to vb at nn jj in at nn in nn cc jj in pp$ nn . cc jj nn md vb in np cc jj np . cc at ap . ap hvz ben vbn to vb cs at jj jj nns in cd cc cd nns rb bed jj nns . cc cs at jj nns hv * vbn ql jj at nn . in , uh ppss , wrb vbg in at jj nn , cs ppss md vb pn rbr rp in at nn , vb at jj nn rp in ppo , in ap . cc dt vbz at nn . . . ( nn cd ( . . ( nn np cd at nn nn np nn ( nn , in rb vbg in at jj nn , ppss hv rb vbd in at nns in pp$ jj nn . cc rb cc in nn in dti ap jj jj nns . cc in at jj cc jj vbg nn in ppo , pps vbz ppo rb in nn ppo rb rbr , cc vbg at nns in pp$ nn , vbg pp$ nns , cc vbg rb at nns cc at nns in at nns in pp$ jjs nns , vb ppo cs ppss in pp$ nn . dt bez to vb , in pp$ jj nn . cc wql rb , np . wql bez ppo , cs ppss , at jj nn in at nn , vb to vb nn in at jj nns in at jj . dod jj np , vbn in pp$ nn , vb nns in at nn in at np . cc in nn in at nn , vb rp at nn nn in nn . vb jj , np . md ppss vb at jj in vbn jj in pp$ nn in nn , cs at nn vbz at nn in nn . rb * . at jj nn hv ppss rb ben , np . cc hv at nn wrb ppss vb at nn in np rb . at nn in vbg in at nns cc nns . at nns , nn in nn , nns , cc in in nns , vbg rp at nn in nn in fw . cc jj in at nn in nn , nn in nns , nns , cc nns in pp$ nns . nn vb , cs cs np , ap nns hv vbn ql rb in at nn in at nn jj . rb , ppss hv ben vbn in at nn to vb ppo in nn . in at nn ppss vbd to , at jj jj nn nn bedz rb rb vbn in at nn in pp$ vb cc nn , to vb nns in at nns in at nns , cc in at nns in at nns . vb ppo ppss vb dt nn vb , in vbg pp$ nn in nn cc nn in nn , cc vbg at nn cc vbg abn at nns in dt jj jj . . . ( nn cd ( cc cs in pp$ jj nn in at nns in at nn in pp$ jj , jj vbn nn , in dt jj nn ppss bem jj in pp$ jj jj nn np , nn in nn , cd in at np . in beg in nn , nns rb , wrb vbn in at vbg in nn np in np , ppss bedz vbn to vb nn in at jj nns in at nn in nn , in pp$ vbn nn nn in nn . at nn in nn nn * ql ql jj in wdt pp$ nns vbd nn in nn , pp$ nn . in ap ap jj nns , pp$ jj nn np , beg jj in at jj nn in abn nns in jj jj , hvd vbn rb in nn wdt jj nns at ql jj in pp$ nns md vb . rb vbn nns in jj nns , vbn nns , vbn nns , jj nns , jj nns . cc abn dts vbn in wdt jj nns , at nn in jj , nn in vbg nns hvd vbn in pp$ nns . jjs in dts ap bedz at jj nn nn , wdt , cs at ql jj vbg nn , hvd ben vbn jj cc vbn , in pp$ nn in at nn in nn nn , wp$ nn -- cs , jj nns vbd pp$ jj nn . wrb at jj nn hvd in ap ben vbn in pp$ vb in jj nns , cc at nns vb nn jj in at nn , rb at nn bedz rb vbn rp at nn nn , wrb at jj nn in jj nns rb vbn ppo . at nns bed vbn in nns . at nns bed vbn in jj nns , in jj nn . in at nn , at nns vbd rp at jj jj nn , cs cs at jj nn rb vbd rb pp$ jj nn . cs , vbn in at nn , at jj jjr nn vbd rp abn at nns , cs at nn in vbn nn cs ql jj nns . pps bedz at jj nn . at nn bedz jj cs nns in at jj nn . at nns vbd jj cc jj , vbg pp$ vbg nn . at jj nn in bedz cs at jjr ' jj nn , in at jj nn in ppo , wrb at nn in nn nns vbd at nn cc jj , cc at vbg nns at nns . abn at nns , in abn pp$ jj nns . abn at nns , cc nns , cc nns . at nn in vbg nn . abn . . ( nn cd ( dts rb bed jj . in at nns in at nns , at jj nn vbd at vbg nn vbg at vbd vb . uh , jj nn . jj vb . -- in nn . -- in cd nn . -- in rb vbz at nn . wdt nn md pps vb . in abn dts jj nns . vb , vb . -- in vb pp$ nn . -- in cc cd ap nn in ppo . rb in in at nn vbz in in at nns vb in rb at nn . at nn in vbg nn in rb nns rb . at vb in nn , pps nns . cc in dt vbg bez pps vbn , cs pps vbz at jj nn . cc in dt nn , ppss , rb , wps vb in at nn ber vbn . cc rb wrb ppss vb pps md ppss vb at cd nns wps vb in ppo . in rb cs pps bez in abn nn nns . at vbn nns wps ber jj in at vbg nns . dts ap nns ber rb vbn in at nns , vbg in at vbn nns . rb hv nns ben vbn . uh , jj . rn , be jj . in rb , in abn dt nn in at jj nn ' jj nn , pp$ jjt nns md be vbn rn . rb , in at jj , nn in jj nn in dt jj nn , at jj , jj , vbn nn vbd vbg in in at jj nn . rb , cs at rb in vbn jj nn cc jj jj cc vbd in ppo , at jj nn vbd at jj nn . ppl ql vbn rp in at nns . at nn vbg jj , nn vb . cc ppl at nn . nn vbn nn . nn vbn nn . at jj nn jj in jj nn , cc vb ppo jj in vbn nns . rb , wrb in jj np ppss vbd dt jj jj , cc vbd at nn at nn , cc at jj nn vbg in wrb at jj nn hvd vbn , ppss vbd cs at nn md vb at nn cs at nn in jj . pps vbd . cc rbr ppss vbd cs at nns md vb cs jj nn in pp$ bedz jj . to cc rb ppss vbd cs dt nn in in vbd at nns rb in in vbd in at nns in in cc in at nn in jj nns , vbd , jj jj in pp$ ap vbg , vbn nns cc nns . cc rb pp$ nn bedz rp . cc vbg ppo rb , ppss vbd in at nn wrb ppss vbd . nn vbd at vbg nn in . pn bedz rb cc nns . . . ( nn cd ( vbg ppo at jj vbg in nn , ppss rb ql vbn in at nn . in pp$ nn in nn in at nn , at nns vbd ppo vbg at nn in at jj nn . wql rb . ppss vbd . in ' nn ppss vb dt pp$ nn . cs ' nn in ppo . rb , nns in -- uh , wql rb do ppss vb ppo , rb . cc cs at jj nn vbd in ppo , in nns cc nns . ppss vbd dt ap ' rb vbz in pp$ nn in nns in in at jj nn vbd in -- cc vbg cs jj nn , ppss rb vbd pp$ jj nns . dts nns ppss rb vb to vb in ppo . cc rb , be pps vbn , cs , in dt nn , ppss bem * jj to vb dti vbd nn ppss vb . cs ex ber nn nns ppss md vb to , to vb pp$ nn . ex bez at jj nn , ppss vb ppo , in np , np , cd in at vbg nns in dt nn , wrb ppss hv dti jj nns in nn in nns cc ap nns . rb , ppss hv vbn cs in at nn in np , in jj np , ppss hv wdt at nns vb at ap jj nn in at np cc nn nn in at vbn nns . rb , in at nn in np , np , np jj in nn , at jj nn nn jj hvz in pp$ nn at nn in at jj nn , cc in jj nn , in at nn in at jj in vbn nn in pp$ nn np np ' rb . in abx nns , at vbn nns in wdt dts cd nns vbd , bed rb vbn in pp$ nns in jj nns . nn np vbg pp$ cs pps vbd ppo . cc np np , cs pps bedz nn in at jj in dts nns . uh np ' rb jj hvz ben vbn in . cs dt , cs at jj nn in nns , ppss md vb cc vb ppo , in abn pp$ jj nns in in vb rp pp$ nns cs at jj nn in -- cc vb abn nn in pp$ jjr nn . nns ber to be vbn in dti in pp$ nn in nns cc nns . cc at nn md vb jj jj nns in at nn in nns in pp$ nn . uh np vbz in vbg nn in at jj in at vbg nn in at jj nn . nn to vb at nn in at nn in pp$ nn . cc nn in at vbd nn in pp$ nn . at nn nns ppss md rb vb to vb rp ber . . ( nn cd ( vbn rb in pp$ jj nn , wrb ppss hvd ppo vbn . cs in pp$ jj nns in dt nn , ex bedz at ap jj nn in vbg jj jj nns . cc cs ppss bedz vbn in nn , cc vbd at ap nns in pp$ nn to vb at jj nn in at nn ppss bedz rb vbg in in in ap , wdt vbn nns md vb in in ppss dod * vb ppl in at jj nns . cc , rb , md nns in abn vb in at jj nn in at jj . . . ( nn cd ( . . ( nn np cd nn np np np ' nn nn ( in at od nn , ppss vb to vb cs ppss at jj , jj nn , vbg at vbg nn in dt nn , wp$ nn ppss ber rb to vb . abl at nn md vb jj rb . rb in at jj nn ppss hv vbn , cc wdt ppss rb nn in nn np ' nn nn , in cd nns in at jjt jj np jj in cd nns in nn . in in pp$ jj nn , ppss vb , at jj nn in at jjt nn , in cd in cd cc cd nns in nn , cc pn ap cs cd nns in pp$ jjt nn , abl at jj md vb in ap cd nns . cs dt nn cd nns in at nn , pps md rb vb at vbn nn in at jj nn in cd cd cd cd nns . vb ppo * rb cs nns , cs jj nns , md be vbn in dt nn , to vb ppo in abn vb in dti nn ' jj nn . hvg rb in jj nns vb cs ppss pp$ nn , nn in nn , nn , nns , nn , nn , nns , cc nns ap nns , ppss md rb rb vb rp wdt bez ql jj in at jj nn in pp$ vbn nns . cc cs at jj nn vbz ql ql jj at nn in at jj nn . . ( nn cd ( in at nn . cs pps bez in rb at ql vbn nn . cc cs pn bez to be vbn in ppo in dt nn , ppss md * vb to vb ppo in pp$ nn , cc in pp$ nn , cs ppss vb , rb ppss md * vb at jj nn in at jj nn ppss ber rb to vb . in nn , at jj nn ' jj nn in nn vbn cd in cd nns . rb cs wrb rb vbn cc vbn in nn , pps md hv ben cd nns rb . in in at jj , at nn vbz in cd od in nn vbn in at vbg nn . in dt cd in cd nns , pp$ nn cc nn vbd dti cd nns , vbg dti cd nns in jj nn in nn . vbn in dt nn in nn , in pn ap cs at od in pp$ nn , bedz at ql jj nn in nns wdt rb vbd pp$ nns . to ppo dt jj nn in jj nn , in at jj , jj nn , vbg ql rb in ppo in at jj nn , * at ap vbd at nn in at jj nn jj in vbn in at nns , wrb rb dti cd in pp$ jj nn in nns ber vbn , cc at nn bez rb , in at nn , cc at jj , vbn nn . at nns bed cd in at nn . at od , to vb in at nn , bedz rb cd nns rb . at od , od , cc od bed dt rb rbr , cs ppss vbd in at nn in at od , cc cd in at jj nns , wdt vbd cd nns cc dti nns . in dt nn , at vbg nns vbn , cs at od cc ap rb vbn cd nns cc dti nns . in jj nn , ppss abn vbd at jj nn in pp$ nn . at jj nns bed at ql vbn . in dti in at np ppss ber vbn in nns wrb to vb nn in nn nns in jj nns . in vbg dts nns , ppss md * rb be vbn rb in at nn , ql rb vbn in dt nn , cs at nn in at jj bez in at nn at vb in pp$ vbn nn . at jjt in at jj nns , cd in at jj nns , vbn cs nn in at nn wdt , in nn , bez jjt in nn . rb , at jjt nn in at vbn nn in dt jj jj md hv ben in ap cd nns . cs , at jj nn vbn cc ql ap cs cd nns . ql cs dt nn rb vbn abn in at jj nn in at nn . . ( nn cd ( nn in dt nn . rb , in dti nn , wrb ppss rb vbd cc at jj nn , abn wps hvd ben rb vbn rb in nns in vbn nn in nn , nn , nn , cc nns . ql rbr , in at jj nns , ppss rb vbd cc at ap vbn nns . cc in nn in at jj cc jj , cc jj nn , at jj nn . wql jj cc jj , rb , vbd ppss , in jj vbn nn to vb to vb rb dt jj jj , in rb vbg rp pp$ jj jj nn , vbd in dt jj nn . at . rb in at nn in jjt nns . rb wrb in at nns in pp$ jj nn . rb in at jj jj nn , md at rb vbn jj be ql cc rb vbd rp . cc at nn . in dt , at jjt nn ppss md vb pps bez , in at vb , to vb pp$ nns rb rp in nn . ql jj nn . cc rb pps ' vb vbn , pps vbz ap cs np ' np np . ex ber cd cc jj nns in abn , wdt in at nn ber * vbn rb . ppss rb vb cs at jj vbn nns in at jj nn , vbg jj nns in jj nn . at jjt , at jj cd , bez in nn pn ap cs cd nns , cc in nn ap cs cd . at jjt , wrb at nn nns rb in at nn , bez rb cd nns in nn , cc vbz pn cs at jj nn in nn . nn bedz vbn cs ex bed rb jjr nns , cc ppss hvd ben vbn in dti ap jj nns , at nn ' np nns , wps hvd vbn ppo to vb nns in . rb ppss vb wrb cs at nn in rb at nn in vbg nns nns rp in ap in jj nn ' jj nn . . . ( nn cd ( . . ( nn nn cd np np np ( in pp$ jj nn at jj vbz at ql jj nn wrb to vb , vb , cc rb vb . md ppo , ppss md * vb ppo . in jj nns pps . . ( nn cd ( md rb be vbn in in jj nn . * to vb rp rb pp$ nns in nn in nn , cc at nns pps vbz in at nn . rb vb in at jj nns in pp$ nns , wrb ppss vb in ppo cs jj nns cc nns vbd rb in at jj jj in nn in at nn in in in nn in nn . cs ppss hv vbn to vb dt jj , pps vbz ppo to vb ppl rb jj in at nn . * vbg at jjt jj nns in pp$ nn , cc vbg ppo rp in at nn nn in pp$ nns . hvg rb vbn ppo in ap in pp$ jj jj cc jj nns , pps rb vbz to vb ppo in at jj , jj , cc jj nn in nn . vbn in dti ap nn cs at jj in in in at nn cc at nn in in jj jj nns md rb be vbn rb jj . cc wrb jj bez at nn , at nn bez vbn . np bem ppss to vb in dt nn in at jjt nns in at nn . cc rb be pps vbd , cs wrb pps hvz ben jj to vb pn in at nn in dts nns , ppss hv rb vbn at jj rb nn in np , rb vbn in dt nn . cs dt jj nn ' in jj jj nn rbr vbd ppo to vb at nn to be vbn in at jj nn cs ppo . pn rb vbz in nns wps vb cc vb in pp$ nn , cs pps md vb cc at jj cd . wql , rb , in ppo , vbg in dt jj . rb pp$ nn vbz in nn nns . vb ppo at nn ' jj nn . vb ppo np ' nn in at nn . nns , vb pp$ nns . in in at jj nn in nn pp$ nns in dt jj , ppss jj ppo , cc vb ppo jj in pp$ rp in vbg nn in nn , cs cs to vb at jj nn in at nns , cc abn at nns in nns , cc nns , cc nns , nn , rb , cc to vb , in abn at vbg nns in nn in nn , cc in at jj nn , * in pp$ nns . abl , cc rb vbg , bez at nn in at jj cc jj nn . ppss vb in pp$ nn . to vb at jj nn , ppss md vb at . . ( nn cd ( jj nn . ql jj cc vbg nn md rb be vbn in at nn , cs ap ex be wps hv vbn ppo . cs vbg in at nn in np np , ppss vb pp$ nns cs at nn , in vbg cs in pp$ jj nn nn hv ben at nn in jj , cc rb at jj nn in nns , nns , cc nns , nn in nns , nns , cc nns in abn nns . rb , in nn in jj , ppss vb to vb at nn , cs cs in at jjr jj nns ex ber vbn at nns in nns rb ql ql jj . at jj nn vbn in wdt ber vbn at nn nns vb at vbg , cc in dti nn vbd nns , in at jj nns , cc dts wp$ jj nn ber vbn to hv vbn at nn . abn at np np rb vbd vb in at nn nn , wdt bez at ap vbg at jj nns . cc cs pn in ppo rb vb in dti vbn nn in at jj nn , ppss ber rb ql jj in ppo in jj nns , to vb pp$ vbg nns cs jj nns . vbn vbn nns in jj in nn vbz , nns in pp$ nns cc nns , hv in cd nns nn , in jj nns , ben vbn in at nn in at nps , in np , in np , in np , in np , cc in at nns in np , np , cc np . in at ql jj in jj nns bez nn in at nn , wdt in at nn bedz vbn in at fw np in np , at jj nn vbg ql rb in at nn in at nns . cc nns vbn in jj at jj nns in np , in np ' nn nn . np vbd dts nns to hv vbn in dti ql jj jj nn . cc in rb at ql jj in abn jj nn bedz at ql jj jj nn in at jj nn , vbn in at nn , in at nn in nn np , in np . at nn in vbn jj nns in at nn vbd ppo in at nns in cd in at vbn nns . at np nns vbd ppo at jj jj , cc vbd in ppo at nn in np . cc dti nn nns in ppo beg vbn in at nn to vb , at jj nn , pps vbd rp cs dt vbn jj bedz at jj , cs in at vbn nns . . . ( nn cd ( at jj nn in at nn , rb cc rb vbn in dt nn , cs at nn in at jj vbz cc jj nn in at nn in pp$ rb vbn nn . ql np vbd at nn vb . cc in pp$ nn vbn in at np jj nn , vbd ppo , in nn , cd in at ql jj nns wdt at nns in at nn hv vbn rp in nn . wrb ppss vb in dts ql jj nns , nns , nns , nns , nns , cc nns , abn vbn in jj nns in at vbg nns in nn in nns . cc in at ap nn vbg in at ap nn jj nns in at jj jj nps , pp$ jj nns . ppss bem , in at nn , vbn rb in dt jj nn , cs nn ppl md be vbn to hv vbn . in nn vbd in nn . rn np ' rb jj nn nns in ppo , cc ppss vb jj , vbg nns in dts jj nns . wrb vbn nns in nn vbd rb in wdt ber rb at nps . cc in abn at cd , cd nns in dt nn ' jj nn , * at jj nn ' jj nn in nn bedz jj . rn at jj nn bedz at jj ' nn . cc , nn in nn , pps vbd pp$ nn in at jj nns in at nn cc at np . wps md vb at nn cs jj . np ' rb vb hvd vbn jjr nn cs at np ' rb . np vbz at nn in nn . nn vb rb to vb nns in nn . nn bem nn in vbn in dt nn , vbn nn in at jj nns in at jj , wdt , hvg ben in abn nn , md vbz vb in abn jj nns ber rp . cc * rb hvz dt jj vbd pp$ jj in nn nns in at nn nns in nn , cc in nn cc nn vbn pp$ jj nn . cc in jj nns , wp$ nn vbz to vb in ppo at ql jj nn , ppss vb at jj nn in pp$ nn . in at nn in at jj nn in uh , dti cd nns rb , ex bedz vbn in at nn nn at vbn cc vbn nn , vbg in nns , nns , cc nns , jj in at jj nns in at jj nn in at nns . nn in ppo , jj jj vbd cs in nn . bedz ex vbg in dt nn , nns in np bedz vbn . . . ( nn cd ( cc md ex be vbn dt jj nn in at nn in at jj , in pp$ jj jj nn in jj nn , cs vbn rp in at jj np np , at jj jj nn . * rb in at nn in nn , ppss hv at nn , at nn cc nns in wdt ber vbn in nn in nns . in np in at jj nn ber rb vbn rp jj in dt nn . at jj nns vb , cs in at jj nn vbn in np in at nn , at nn md vb ppo in jj nn . cc at nn in at nn bez , cs in dtx nn in at nn , ex ber nns wps vb cd np in at nn , cc vbd at np wrb ppss vb in ' ppo . ppss vb at nn ' np np in at jj nn in at nn , wdt vbg in at nn in pp$ jj nn rbt , vbz at nn , at nn in wdt md be vbn in at nn in at np ' rb rb . dt np ( vbz np np ) bez vbn to hv pp$ ex at cd nns cs ppss vbd ppo . pp$ nns vb , cs at nn wps nn ' nn in nn , vbd in dt nn , cc dti do * vb to vb , cs at nn np bedz vbn rb in at nn in at nn in at nn . in dt np nn in at nn ppss vb ppo , nn , cc cs ppss be at np , cc at nn , ppss md rb vb rb . . . ( nn cd ( . . ( nn hv cd nn np np ' np np nn . md np nn . ( nn , rb , cs dt jj vbz vbg rp in ppo in at nn in nns in at nns , pps md be rb vbn , cs , in at jj nn in pp$ nns , pps hvz * vbd in at jj nn in pp$ nns . cc in nn ppss vb , cs * rb ber at nns in at jj nn jj in nn in dts wp$ nn nns ber vbn in at nn nn ( vbg at jj jj nn rb in nn ) , cc in at nns vbn in dt . . ( nn cd ( nn nn , dts vbg in pp$ ap nns vb in nn dts in pp$ jjr nns . in abn at jj in nn vbz rb jj , in rb at jjt bez at np cd vbn in at ap nn , cc dt bedz ap in cd nns in nn in at nn . cs , ppss hv rb vbn , cs at nn in nn vbz cd in cd nns in at nn in at jj jj jj jj . cc ppss hv vbn , in nns ' in nn , cs jj nns hv ben vbn in at cd nns jj in at nn in nn . cc md pps * be , cs cs at nns in at jj nn ber at nn in nn in dts in abn jj jj nns . md pps * be , cs cs np ' nn nn ppss hv vbd . rb , ppss md vb rb , cs ppss ber to vb at nns in jj nns cs np , cc at jj nns rb . in np vbz ppo in nns wps vbd nns in vbg nn , cc nps in nns wdt vbd cd cd nns in nn in in np nns cc np nns in np . cc rb in at nns in np cc np , np ' np nns , ppss vb at jj nn in at nn in nns vbg rp jj np np ( nn in jj , cc jj np ) in cd cd cc cd nns . dt bez , cd cd cc cd nns . cc np , at jj nn , in pp$ jj nn in nns , in at ap nn in pp$ nn ( nn cd ) , vbz rp at jj nn in cd cd nns , cd cd cc cd in cd nns . cc dt nn bedz vbn ql rb cs at . np . . cc md dti nn vb dts nns . at . at jj in in in nn bez ql jj cs pp$ nns in np ' nn nn . cc cs rb ppss vb wrb np bez , ppss , at nn ( rbr cs pps bedz ) , md vb jj to vb ppo rb . cs ppss md vb wrb pps bez , cs cs at jj nns wps bed vbn nns in nns in rb np bedz vbn , do * vb ql ap in pp$ nns cs at jj jj in pp$ nns . cc cs at nns cc ap nns vbn in at jjt jj cc np nns , in at jj nns in wdt ppss ber vbn , rb cs rb vb cs at jj in vbn , nn in vbn , nn nns in np , * rb jj , cc rb vb in nn at vb in np ' rb jj nns . in at nn in . . ( nn cd ( abn dt , ppss md * vb cs in abn nns at jj rb md hv vbd . cc rb dt nn vbz . pn rb vbn in at ql jj nps . cs vbg in at ql jj nn in nns in at nn in nns in at jj in nns , rb vbg rb in vbg ' jj nns , cc in at jjt jj nns cc nns in at nn . cc at cd nns cc nns vbd in abn jj nns . at jj nn bez , cs jj md rb vb ql jj at nn , cc ql jj at nn . cs pps md * in ap be vbn in at nns , cc at ap jj , cs at ap nn , vb pp$ ap nn , cc rb ppl vb in at jj vb . vbg at vbd nns in nns in at vbd nns in nn , wdt , * cd nns rb , nn in nns in nns at nns in np cc np , cc vbd pp$ nn nns cc vbd in pp$ nn in vbn nns in at nns in jj nn in nns , wrb rb at jj nn vbz ppo nn in at nn at nn . in abl at nn at jj nn md vb vbn , to vb cs at vbn jj md rb vb jj nn . cc ppss md vb in dt nn in at nn . cs ql jj at nn rb in -- * at jj nn in nn in in at nn in at nn in np vbd at nn in nns rb in np , cc cs in at jj nn * cd nn cc nn in ppo vbz in abn dt nn . cc cs at nn in dt jj nn bedz at nn in nn . rb at ql jj nn in at jj in nn rb vbz ql jj at nn in at jj . cd nns in cd nn vbg at jj nn in cd in cd nns vb ppss hv vbn ql rb , cc vb np , cs in ap ppss vb nr at nn in cd nn . cs , in at nns in at jj jj cc jj nns cc nns in at nr , wrb at jj nr ( in wp$ nn nns rb vb ) bedz at nn cc at nn , at ap nn in jj nns , in at ap nn in nns , vbn in nn rb in vbg in nns , md hv vbn * cd , cc cd cd cc ap nns . at nn cs , cs nn bed , md be rb vbn . cc , vbn nn , doz pps vb dti nn in nn . . ( nn cd ( in at jj nn in at jj nn , in nn , cs in ap nns ( at ap nn in at ap nn , vb ) dts nps , in jj nns , bed vbn ql rbr cs in jj , cc , in nn , at nns bed * ql vbn , cc bed rb ql ql jj . cs , cs hvz ben rb vbn , dts nns , vbn in dti nns in nn , rb vb at nns in jj nns , cs cs in at jj nn at vbn nns , nns , cc nns , cc nns in ap nns ber rb jj in jj cc rb vbn , jj nns . wps bez abn . cc ql jj vbz at nn , cs cs at ql -- vbn jj in nn vbz ql rbr vb ap nns in ap nns vbg in ppo , rb cs nns rb bez vbg . cs ppss ber rb beg vbn in jj in nn . cc cs cd nn bez ql rbr vbn in pp$ nns , rb , be jj , dti ap cc jjr nn hvz ben ql rb vbn in at jj nn . rb : in dts ap vbn nps , ppss hv cd jj nns , wdt , in abn jj nn , md in rb vb jj . cc cs in at nn in pp$ nns , at jj nps hv vbn in pp$ nns . rb , vbn in at nns cc nns in at jj nns , at jj in nn nns md in ap nn in pp$ jj nns , cc vbg in at jj jj nns cc nns rb , vb rp in jj nns cc nns . cc in at vbn nn in jj np , nn nn in abn nn in nn . cc ql rb cd in dts jj in nn nns ber vbd in cd nn , dti nns in at nn hv vbn cs dt jj nn hvz rb ql rb vbn pp$ nns . cc cs in dti nn in at nn in dts nns , * ap in cd , cd hv ben rb vbn in at cc ' nr nn in at nps rb . rb ex ber nns wdt vb rb dt nn in jj cc at nn cs at vbg nn in dt nn . jj cs pps bez to be ql jj in at nn in at ql jj nns in at nn , cc wdt md ppss vb in nn , at nn in np , wrb pps vbz ppo cs in cd vbg at nn in np vbd nns . . . ( nn cd ( cs in dts nns nns ber jj cs nns in nns in at jj nns . cc ex vbz at nn to vb cs cs dts nns , wdt hv rb ben vbn in nns in nns , in np , in nn , in jj , cc in abn at jj nns in at nr in in cs ppss rb vb rb in jj nns , ql ap md at jj jj nn abn vbg , cs pps hvz at nn to vb in , wdt bez rb rb cs jj cs abn np , abx nps , np cc np , jj np , cc abn at nns in at nn vbn . rb : ppss ber to vb , cs in at vbn jj nn in nns , pp$ rb vbg at nn in at nn cc ap , rb in dti cd nn in nn , ap jj nn nns md be jj . cc wdt dt bez , ppss md rb vb dti nn in , in vbg abn at nn in nns , nns , cc nn nns in nn vbg rp at jj nns in abn at nns , nns , cc nns wps bed jj cd in cd nns rb . cc vbg dt jj nn in at jj jj nn in at nn . wrb , in abn dts nns , ppss vb at jj jj in pp$ nn , wql jj in pp$ nn . pps vbd at nns in at nns vbd nn . pps rb vbd in at nn in at nns , cc np nn , cc at np . in np ' nn nn , pps vbd np ' nn nn . cc cs rb at nn bez to be rb vbn , cs at np , to vb rp pp$ nns , rb at jj jj md rb vb , cc vbg in at jjs nn in at jj nn , nn pp$ vbn nn in at nns . . . ( nn cd ( . . ( nn fw cd nn ' np nn ( at vbg nn in wdt nn np hvd vbn at np np in np , hvd * ben jj in dti jj nn in pp$ jj nn . pps hvd vbn in jj nn in at nn in pp$ nn cs pp$ jj nn hvd . . ( nn cd ( vbn at nn in nn nn . cc wrb in vbg pp$ jj nn , cc pp$ jj nn in nn rb , pps ql rb vbd rb in at jj nn in at nn ( pps bedz , cs rb , pn in pp$ * vbg rb qlp ) . rb , at rb vbn nn vbd abl at jj nn cc jj , cs cs pps rb vbd jj , cc in abn nns jj , cc np dod * vb ppo ql jj . cc , rb , pps vbd jj nn in nn , cs in abn pp$ vbg , jj nn , np dod in nns vb jj nn in at nn in dt jj nn in wdt pps rb vbd . cs pps hvd * ben ql jj rb in at fw ' jj nn in np , cs pps hvd ben vbn cd nn vbg rb in at nn , cc jj . in dti jj , cc ql jj , jj nn , pp$ jj nn hvg ben ql rb vbn , cs pps hvd nn in jj vbn , cc abn cc vbn pp$ nn . cc bedz pps in jj nn cs at jj nn bedz rb vbn . cc , in at nn , hvd pps vbd to vb pp$ nn nn , cs abn at nn in dt rb jj nn bedz cc at jj nn in at ap nn . cc pps ql rb vbd to vb , cs cs at ql jj jj in at jj vbz pp$ nn ql rb cs at jjt nn in at nn . rb , rb in at nn , abn jj nns do rb vb pp$ vb . rb , ap cs rb , vbd np . cs abx at nn cc nn in jj vb rbr cs at nn cc nn in np . in , * to vb in dt : cs pps bez at nn in jj nn nns , cs cs dti jj nns rb md hv at nns vbn in ppo in at ap nn , cc , in at jj , md be vbn in at nn in nn in abn nn ' jj nn . cs , dti jj jj nns md rb rb vb in ppls at rb jj nn in nns in at nn . * in abn in nn in dt , rb rb vbz at nn in at jjr nn in at nn . in , vbd np , cs rb at jjt jj nns rb hv at jj vbg nn vbg in ppo , cc , in nn , abn nn in nn , at jj nn , cc , in dti nns , at jj nn . rb do pp$ jj nns in rp * vb at jj nn . to vb at nns . . ( nn nns ( in dts jj jj nns , vbz ppo in ap in at jj nns in at nns . cs dt , in at nn in abn at jj , nn in vbg nns , cc jj in vbg , jj nn in nns , ppss md vbz vb in in dt : cs at nns ppls ber * in rb jj . at jj , jj nn in nn in at nn in nn , bez cc at nn in nn in at nns . rb rb at nn hvz ben vbd , wdt rb md ql rb , in vbn nn , hv ben vbn rb . in ap ap nns in np , rb hvd pps vbd at nn in dti , wrb pps bedz , cs in at jj nn , abx rb cc in at nn in at fw , pps hvd vbn ppl rb in jj jj in np -- cs nn . cc , in dt cd nn , vbd jj nn , cs pps bed , in at nn nn in at jj . nn np ' rb vbn nn in dt nn vbd in at nn jj . rb , rb , cs vbg abn nn ' in jjr nn , at nn vbd ap in jj nn cs in jj nn . cc , in at nn , pps abn vbd rp . dt cd nn dod , in ap . dt jj nn bedz in at nn in pp$ jj nn . cc * rb dt , cc in dt rb in vbg , vbg nn rb , wps , in dti nn , vbd at nn in at ql vbn nn in ppo . in dt jj nn at rb vbn nn in in vbg , cs pps dod , rb vbn in in nn in in vbn ppl in nns , * rb vbn in at nn in nns cc in nns . cs dt , in pp$ nn in ppo , ppss hvd abn vbn , ql rb cs in ppo vbd , to vb rp at nn in dt nn in nns . cc rb pps bedz , cs * cs at jj nn hvd vbn , dod pps vb in at fw ' np nns . cc be abn dt cs pps md . vb at jj , jj nn in at nn , cc at jj nns cc vbz in nn , hv to do cc * in jj nn , rb , in dt jj nn in pp$ nn , pps vbd ql jj nns . in in pps vbd at nn . cc wrb dt nn vbd in ppo , pps vbd ppo in nn vbn in vbg at jj nn , cc vbd at nns to vb ppo vbn in abn at nns cc nns in nn in nn ( nn np ) wdt hvd rb rb ben vbn . . ( nn cd ( in at nn , in nn cs at jj nn in at jjt , jjt in jj nn md be vbn . dt vbn , at nn vbn nns to hv at nn vbn cs nn . cc to vb abn at nns in ppo , jj in dts vbg in at vbn cd in nn . rb , at nn ' jj nn bedz vbn to be vbn rp in pp$ jj nn in at nn . cc , to vb at nn , at nn bedz vbn to vb in rb in at vbg in wdt nn nns md be vbn . . . ( nn cd ( . . ( nn np cd np np ( jj jj rb in at nns in np , cc vb rb vbn nn rb . cc pps vbz at nn , at nn , cc at nn . cc in at ap nn , vb nn in nn , cc in at ap nn , ppss vb at nn in jj nns , abx jj cc jj . cc ql jj cs pps bedz , cc rb in vbg at nn in at jj , jj nn . at fw ' jj nn bedz at nn . rb , pps rb vbz in nn in dt nn . cs abn nn in vbg nn nns , cc ql rb dts vbg in vbg nns , pps bedz , in at jj rp in vbn , jj nn , rb vbn in jj nns cc nns jj in pp$ jj . at nn ' jj nn beg at jj cc vbg nn in abn dts jj nns wdt rbr cc rbr hv to do in nn cs at jj nn . cc , in at nn in ppo in at nn nn rb , dt nn in at fw bedz rb jj in dts cd jj jj nns rb vbg in at jj nn , in at cd cc cd nns ' nn , in vbn cc rb in jj nns . in * to vb in pp$ nn in jj nns : in in vbg nn nns , vbn nns , vbg at nn in jj in jj vbz , vbg nn ' nn . . ( nn cd ( nns in at nn , cc jj nn in nns in at nn nns , cc ap jj nns ql rb vbg in pp$ jj nn . pps bedz rb rb jj in abn nn in vbg nns , abx jj cc jj . at cd jj nn wrb pps vbd abn pp$ jj nns ql jj , bedz pp$ nn in nn . at jj jj jj nn vbn in ap nns , in jj nns , cc abx in nn cc in nn . in abn nns in wrb nns bed rb , dt nn bedz rb vbd nns in at nn in at vb in nns . at jj nn bez vbn ql jj to be rb vbn in pp$ nn : at nn vbz ppo in cd in pp$ rb in jj nns , cc rb vbz ppo jjr . at vbn nn in nn in jj nn nns in nn , cc bez vbn at nn : rp in jj vbn nns in nn in jj nn , cc vb in nns in nn jj nn , at nn vbz at nn in vbg nn in ppo . at nn nns pp$ nn : at nn vbz at vbg nn . np vbd in jj nns to be vbn in at nn in pp$ at nn . vbg dt nn in pp$ jj nn in nn , at nn rb vbz at nn . at nn vbz at nn to vb jj in nn nn in nns : at nn nns pp$ nns . dt hvz at nn : at nn in nns , cc vbg cd nn in pp$ nn nns ppo be vbn rb . cc at jj nn ql nns in at vbn nn . vbg in at nn in pp$ jj nn , at nn vbz ppo in nn pp$ nn in dt , cs pps md hv ppo vb at nn . rb , dt nn bedz vbn in abn nns , cc rb jj cc in nn in abn . nns pps vbd nns in nn . nns pps vbd cc nn in nns . nns ppls pps rb vbd in nns . cc cs rb in ql jj at nn rb rb vbn , cc in jj nn in nn in ppo , rb . abn dt md vb to vb dti jj nn in nn . cc * rb rb . in pn bedz dt nn ql jj , cs in at jj jj nn cs pps bed . jj , ppss vb . in ppo ql vbn rp in at vbg nn in nns , cs pps vbd pn in at jj nn jj in at jj jj nn . wdt nn . . ( nn cd ( rb jj in jj nns , rb rb vbz pp$ nn , cc vbz ppo , cs ppss vb nns in nns . rb bedz dt abn in jj nn in ppo , vbg , rb , cs pps vbd , at abn in jj nn . in in rb bedz pps rb vbd in nns , in at jj , nn -- cs , np , vbg nn , * vbn rb cc rb in at jj jj nn . jj cs md hv vbn to vb at nn in at nn nn in at jj nn in np ' rb jj . bedz pps cs dt jj nn hvd ben at nn in jj nn , wp$ ap vbg , in cc rb , * rb hvd vbn at nn . cc wdt bez ql , hvd vbn rp wdt jj jj nns md hv rb vbd in ppo . pps bedz at nn jj . at jj jj . vbn cs at jj in vbn fw . vbg in jj nn in dt nn cc at ap . ppss md rb vb , cs dt jj nn in ppo vbn at nn in nn . in in pp$ jj nns , pps dod * vb to vb ql ap in nn cc in nn , cc rb cs pps hvd ben jj in ppo , cc in dti nn in abn dts , rb cc jj . cc rb in at nn in jj cc jj , jj jj nn . pps bedz at jj nn . pp$ nn , cs pps hvd rb hvn cd , md hv rb vbd rb in at nns in pp$ nns . pps bedz cs pn in dts jj cc rb ql jj , nn in nn , nn nns , vbg at nn in in cs at ap vbd in in in at jj nn nn . cc vbg , * ap nns in jj nns , cc rb nn in nns , nn in nns , nns , nns , nns , nns , nn in nns , nn in nns . ql , cs pp$ nns vbd to vb at nn in at nn in nn , abn ppss hvd to do bedz to vb dt nn in ppo , cc at nn bedz jj : cc cs in nns , vb ppo rp in at nns , cc rb ppss bed . rb , cs rb vbn , dt jj , jj -- cc in vbn nn , bedz , in abn , at jj nn in at nn . cs pps dod * hv at jj nn in ppo , pps hvd at jj pn wps rb rb dod pp$ nn . wdt dt bedz , cs nn in nn , cc at ap nns in nn , ex bez at nn . cc rb pps bedz . cc ex pps hvd vbn in rb dti cd nns cc ap . cc dt pps bedz , dt ap . . ( nn cd ( jj , jj nn in nn in ppo . dt pps bedz , wps vbd ppo at jj nn in at nn nn . cc rb cs at jj nn , wdt rb rb vbz . cc rb , pp$ nn bedz at nn in nn cc dt nn in nn rb , cc vbg abn at nn to vb ppl rb . . . ( nn cd ( . . ( nn np cd nn nn np np np rb in in nn nn nn ( ( np vbg in pp$ nn in nn , cc in at nn in cd nns rb vbg at nn vb in at nn , wdt vb bez rb vbn in at nn . nps in nn , nn nns , nns , nns , cc jj nns in abn nns vbg in at nn . rb , at jj nn in at nn bez vbn , wrb at nn bez in nn . ) np at nn , cc nn at nn . wps bez rb wdt md be jj , cc cs jj wdt md be jj . cs ppss vb , wps vb jj nns cc nns . vb ' ppss vb dt . rb , rb , dt vbz rbr ( nns ) . uh , dt nn nn bez ( nns ) in in wrb pps ' np ( nns ) in in rb pps ' np ( nns ) in in vb pp$ nn , pps vbd ' nn vb ppo vb . dt bez wdt at jj nn vbz rb in vbg in jj nn . vbd at jj nn , cc ppss nn ' nn vb dt nn . vb at jj nn , cc ppss nn ' nn vb ppo ( nns ) . vb , vb , ppss jj np , rb , vb at nn , cc vb ' ppss hv dt nn cc nn in nn . ppss ' rb be jj in ppo rb . jj rb ( nns ) ex ' in at nn in nn to vb . dt md vb at ap . cc at jj nn in in wrb pps ' vb jj cs vbg nn in nns . rb ppss md vb to vb at jj nn in . nn , nn . cs ppss cc rb hvd at nn , ppss md vb ppo rp ql jj at nn rb cs rb ( nns ) vbd in at nn in at nn . dts nn nns cc nns in nns ppss ' ppss vbn in nn nns md ' nn vb in abn . ppss vb nn , ppss do . cc in . . ( nn cd ( nn vb jj , cc hv to be vbn ( nns ) in nns cc nns , rb cs jj nns . ex . cs ppss vbd ppo rp , rb , ppss md vb pp$ jj nn , cc vb cs at nn md be ql jj . ql jj , cs pn , ppss vb . uh . cs ' np at nn . ppss ber in nn . rb pps vbz , cc pps ' vb pn rb , cs ' pp$ jj . np ( vbg ) . ( in at vbg nn , at nn vbz vbg in nns ) . uh , nn . rb in nn , nn . cs at nn vbz , ppss md rb vb at nn . vb ppo vb , nn . vbn in at nn . jj . uh , pps ' vb * at od nn . in ppo . ex . vb pp$ nn in ppo . dt bez at nn nn ppss hv rb , nn . vb ppo vb pp$ nn rb . ql , ql . pps doz vb dti . uh , uh , pps md vb nns in in vb , vb . at nn . ppss vb at jj nn . ppss vb to vb pn in dt jj nn wps md vb , nn . wdt ' np np in rb . -- in at nn , ppss vb in in wdt ' cc pps rb . pps md be vbg at nn in nn , nn , rb . nr . ppo ' in at nn . pps vbz at nn nn . pps vbz at jj jj nn rb . rb , nn . pps md hv at jj nn in dt nn in jj nn . fw in np . cs pps md . nn do vb ppo rb at ap nn nn , cs cs jj np , np , wps vbd nns , ppss vb , md hv ben at nn , cc vbn ppo in nn . in wdt ' np vbd in nn md rb vb to vb . cc cs nn ' in jj . wql at nn nns . dt md be at nn at np vbd at nps in . nn , wrb pps ' vb rp in dt nn , vb ppo in nn at nn in nn nn in nns . ex ' in at jj rb in at vbg nn . uh . vb . cs np bez in ppo , ppss ' jj nn at jj nn in at jj nn . np , cd nns jj in pp$ nns . rb , nn vbn in at np nn . rb , nns in nns in ' ppo , to vb in cd nn . rb , nns cd . . ( nn cd ( nns in at nn . at nn in abn , nn nn , cc in at nn in at nn in jj nns . cc vb ppo vb in in md ppss vb nns to vb rb . ql , cc vbd at nn in nn in nn in pp$ nn to vb rb . ex , vb at nn , cc rb . rb , wdt ' cc pps vbg rb , cc wps ' cc pps vbg to , ppss md vb to vb . md ppss vb vbg rb . ( rb ) . ' np cc jj nn to vb at jj nn . rb ' np cd . ql , ql , ql . ppss md hv at nn . uh , vb . cs ' vb ppo , uh . rn ber cd , nn . pn md vb pp$ nn . wdt nn ppss vbg dt nn in nn in pp$ nn in , nn . jj nn bez jjr cs vbn nns . nn vbd , nn , cs ppss vbd in nn . nn . wrb dt ' np in in cc at . in in at ql jj , cc , ppss md vb , at ql jj nn in nn ppss nn in rb , nn . in in cc md ' rb ppss rb vb in nn . uh . -- in np . nn , nn . cs ' pp$ nn . ppss vb nn in nns , nn . at nn ' in jj . wdt nn ppss vbg rb . nn bez ql jj , nn . vb at nn , rb . cc wrb ppss ber jj , rb vb ppl in vbg nns ' in nns . uh . -- in uh . uh . -- in ppss vb rb . rb . in in rb , rb in -- uh uh . vb ppo , nn , ppss md vb ppss vb ppl at ql jj jj nn , uh . uh , rb , md pps vb ql rb in pp$ nn , cs , wrb ppss vb to vb dt nn ppss jjt , ppss md rb vb dt nn in at ap jj nn in ppo . dt bez , nn , pp$ jj vbn nn . at nn cc nn cd , ppss vb . in ppss * vb cs jj np rb . rb , nn , ppss vb to vb ql rb . rb , ppss hv vbd pn jj in dt nn , nn . wrb cs at jj nn rb rb vbz at nn in pp$ jj nn , cc pps md be rb vbg ppo in nns . md ppss rb vb cs pps be ql rb , nn . pps bez , nn . vb , vb pp$ jj nn rb in at nn wrb pp$$ rb bedz . rb , rb , rb bez rb cd jj nn in at nn , . . ( nn cd ( rb cd in at nn . wrb ppss vb vbg nn . rb , rb rb , rb in at nn , do ppss . bez ' nn at nn . nn md rb vb ppo at nn , nn . uh , rb . wrb do ppss vb cs dti jj , vbg , vbg nn md * be rb cc rb vbg rb wrb ppss rb jjt . rb , cc vbg rb in pp$ nn . in pp$ ql jj nns , rb , do ppss * vb nns . vb , nn ' nn vb . cc cs ppss rb vb at jj in pp$ vbn nn , cs pps be rb ql rb vbn . rb , wrb nn * ppss , nn , vb at jj nns in nn in rb , cc in at nn . nn . jj nn . rb , nn , cs pps vbz in dt , ppss md vb rp rb . ppss vb ppss dod ' nn vb at jj nn , nn . vb ppo , vbg in nns md rb vb nns . -- in wql jj cs dt nn bez vbn . rb at nn , nn . nn rb in ppo rb , cc vb ppo in ppo ( vbz to vb ) . uh , nn . rn ppss bem , jj cs jj nn , cc rb vbg nn in dt nn in at nn to vb rp . vbd be dt jj fw in nn wdt md * do rb in nns . nn md be jj cs nn . cc ppss ' vbd rp in at jj nn ' np nns . nn bem ql jj , ppss md hv vbn nn in nn in at jjt nns in at nn in at jj nn ( wdt bedz at nn ' np ) . cc rb ppss vb in at nn in at nn ppss vb in . in nns . nn ' ppss vb at jj , cc in ppo , cc vb ppl rp in cd jj , jj nn . ql . nn ( vbg pp$ nn ) . uh , uh , uh . np vbz ppo rbt in abn , cc np rb vbz pps ' vb jj . vbz pn cc dt cd jj jj nn jj . pps ' vb jj , vbz np . pps ' vb jj in in jj , jj . cc vbz jj ppo in np . np abn at nn in in jj , nn in in jj , jj , ql jj . cc rb ' in pp$ nn . rb , rb cs ppss vb in ppo , rb ' in pp$ jj . hvz at nn in jj ' nn nn in nn in at nn . cc dt bez pp$ nn . pps ' jj nn in dt . wdt bedz cs rb in cd nn vbg in cd nns , cc abn cd nns vbg in cd nn in in wrb bedz dt . uh . nn nn ' nn nn pps vbd ql jj in ppo . nn ' in at nn in jj in jj . . ( nn cd ( rb , ppss vb . cc cs ' vb ap jj in vb . rn , at jj , ql jj nn cs ppo , md rb vb to vb rp in jj nns in jj , nn in vbn nns . at nn nns ppss in at nn ql jj , cc ex ' in at jj nn in nn in nns . cc rb ' np at nn ' jj nn . jj cc jj , jj qlp . rb , in ap nns cd nn in nns vbz at nn , cc wps md be cs ppss vb ppo rb , cs at jj in jj jj nn vbz pp$ jj in jj jj nn in nns . cc nn . uh pps ' vb at jj nn . vb , vbn cd nn in nn , cc jj at ap in nn , cc rb vbz rp nn nns in at nn . uh , rb , ppss np . vb at nn rb in dts nns , cc vb ' ppss vb ppo in at nn nn vbz at in vbg in pp$ nn in abn nns , jj cc jj , cs nn in nns vb rb vbg jj nn nns , to vb ' ppo rp rb . wdt at nn dt bez . pps vbz cs at jj jj nn , vbd rp in pn cc at nn . pps ' rb be vbg in dt in in nn . pps ' rb be vbg nns in ppo . uh . nn rb vbd at ql jj nn , vbn nn , wrb pps vbz rp at nn . ql , ql . nn , nn , cc nn in nn , rb . . . ( nn cd ( . . ( nn cd cd nn nn jj nn np nn ( in in nn ppss bed vbg at nn ap nn . cc uh . ql jj nn vbd rp in at nn . at nns rb md hv vbn at jj nn . ap nn bedz vbn . cc np vbd rp in at nn to vb dt jj nn . . . ( nn cd ( rb , in at nr cc nr at fw bedz vbg rb in np cc at np nns , in wdt vbz cd in at jj nns in at np nns in at jj . cc cs np vbd nn in at jj nn in at jj vbz nn in ppo . cc dt jj cd vbg at jj jj nns in at jj nns in in np , np , cc nn . in pp$ nn in jj jj nn nn vbn in at vbn nn in pp$ nn , cc in at jj vbg in nn in at nn in nn in pp$ nn , at jj jj nn , in pp$ nn in at nn nn , bedz vbg pp$ nn , cc vbg pp$ jj nns rb . wps ' rb rb . vbg at nn in at nn , cc * vbg rb in ppo . in nn . np . nn jj nns . pps bez ppss . at nn in at nn bez jj , nn . ppss md rp nns cc vb rp . rp nns cc vb rp . rb cs ppss ber vbg np . nn in in rb in at nn in nn at nn in jj nns . dtx do dt , nn , cc nn in cd nn ap nn cs ppss md vb jj in at nn . wdt ppss vb cd cd nns to vb bez jj nn , nn . cs pps bez , cs pps bez . cs ppss vb ppo . nn bedz vbg in at nn in at nn , nn . cc ppss bedz * vbg cc vbg in dt in abn . np . vb ppo nn . nn ' in abn jj ppl . rb . nns in nns . * rb jj in jj nns , cc dts jj nns ber in at jj nn . cc cs ' np at ql jjr nn cs at fw ' np , nn . rb ppss nn ' nn vb to vb pp$ nn . in wps md vb ppo in at jj in vbn nn . cc wrb nn to vb ppo , rb cs vbn , in dt nn ' in vbg nn . np . nn ' jj * hv at nns vbd . wdt md at nns vb , nn . vb at nns vb in np nn cc vb at nn . wdt vbz nn . nns , nns . ppss ber rb jj in ppo , np , in dts jj nns , cs cs at nns bed pp$ nn . cc vb ppo , at ap jj nn in pn bez pp$ nn . cc vb ppo , pp$ nn bez in dt nn ' jj nn . -- in in nn . nn nn , vbd at nn nn , vbg rbr in at nn , in at vbg ql ql jj cc jj cs . . ( nn cd ( pps rb vbd * rb at nn vbg to vb at jjt jj nn in ppl , cc in rb vbd rbr cs abn jj in ppl . at jjr nn cs ppss md rb vb rp in ppo wdt pps md rb qlp vb in at jjr nn . rb . cc in at jjr , nn nn . nns . do ppss rb ql ap cs vb in rb vb in ppo . -- in in nn . rb , nn , * rb . ppss do vb . cc ppss do vb , nn in in to be jj . md ppss * vb dt ap jjr cs rb , nn vb . vb vbd at vbn nn in at nn ( vbg nn in ql jj in nn in nns ' in nn nn ) , cc vbg ppo in np , vbd : ex bez pn np wps bez nn in at nn , cc cd nn wps bez nn in at fw . -- in in nn . in at nn in at vbg nns in at nn , cc pp$ jj nns , ppss md hv rb vbn cs pps hvd rb vbn at nn in at vbn nn . cc , vbg pp$ nn , pps ql rb vbd , cc cs pps vbn at nn , vbd in at nn cc vbd : ppss hv vbn , * vbd ppo , np . cc in cs ppss vb ppo * to vb in np . ppss in cc nn . cc vb np vb in nn . vb in ppl , jj nn . pps vbz jj , cc rb vbz . ql jj nn cs . vbd np , cs np vbd . wdt ' rb cs pps vbd in in np vb in nn in in rb ' np pn rb . rn rb vbg at nn in at nn , in at nn nn pps vbd to cc rb in at jj nn . cc rb at jj nns in pp$ nn vbd , cc vbg at nn in at nn , pps vbd in at nn . ppss nn cc ql jj at nn , np , pps vbd jj in at nn . rb vbg pp$ nn in at nn : np at nn ' jj in nns cc rb in jj at nn in nns , nn cc rb . rb at jjs in nn . rp nns , cc vb rp in at jjs in nn . ppo bed rb jj to vb rb wrb pps bedz , cs cs vbg np , np rb vbd . pps md hv ben at nn in nn in ppo . cc jj jj nn wdt , in at nn , rb vbd at jjt nn in jj nn , wql jj , in at jj nn . . ( nn cd ( nn in pp$ nn . wrb pps bedz , pp$ nns bed vbn . cc at nns bed vbn . . . ( nn nn . ( in nn in nns in dti jj nn in nn in nn , pps bez at jj fw in jj nn to vb at nn in at nn , cc jj at nns in nn in nn . wdt rb , in vbg nns , bez vbn in at nn ' np nns . rb at nns ber vbn to be vbn rb jj . cs in at vbn nn in at vbn nn , at nns rb vb dti jj nn in at jj nn . . . ( nn cd ( . . ( nn cd cd nn nn fw nn ( in vbg , pps bedz vbn cs at nns rb vbd in at nn bed ql jj , cc cs at nn md be rbr rp . ql , pps beg jj nn , ppss vbd rp rbr cc rbr , vbg at nns in at jj nn in jjr nns . cc in dt jj nn vbg dts jj nns in at nn rb . ql jj dod ppss vb . cc ql jj , cc vbd , cc jj at nn in at nn nns , cs ppss rb vbd ap in dti jj nn in nn nn vbg nns in nn np , in nns in at vbn nns , rb vbg at vbn jj nn in at nn . jj in jj , rb , in nn , cc nn , cc nn , cc nns in nns , cc nn nns in nns , bed vbn rp , cs in ap at vbn nns bed jj to vb rb . cc at jj nn vbd in nn , cs cs ppss bed vbg in jj nns , cc vbd cc vbd in at nn cs at nn in jj nn . jjs in jj bedz at nn cs at jj nn in abn np in pp$ nn . uh bedz pps cs at np dod * vb ppo rb . rb , in dt nn pps bedz cs pp$ jj nn nn , cc jj nn in nn , np , bedz vbn in at nn , wdt vbd ppo rb in pp$ jj nn . be pps vbd , cs in dt nn in vbg , nns ber jj . nn cc nn vb nn in nn . cs ppss vb to be nn , at jjr ppss vb at rbr ppss nn . ql in jj np , wps , cs nn , md * rb vb abn at nn in at vbg jj , cc in in cs ppss hv rb vbn in in vb pp$ jj nn in at vbg nn . cc rb vb in at nn in at nn , cc rb vbg abn nn in dt . . ( nn cd ( jj nn , rb vb at jjt nns cc vb in pp$ nn . to be jj , in nns , at nns ber at nns , ql vbn . jj nn . wrb at nn bedz in abn jj , ppss md hv vbd in at nn , cc vbd rp in ppo rb . wrb , vbn in pp$ jj nns , at vbn nn bedz vbg rb in dt nn cc jj , cs at jj vbn nn in at nn in at rb . cc at rb , cc at nn in nn , pps rb vbd in ppo , jj nn . wrb , jj to vb , in abn at nn in pp$ nns , pps vbd at jj nn wdt vbd in at nn . cc in ap , cs dti nns ' nn , vbd ppo in pp$ nn , rb in at ap nn in at nn in nn . wrb pps vbd cc vbd rb in dts ap jj in vbg nns , cs ex vbd cc ap vbn in ppo cc pp$ nn cc nn . cc cs abn rb in ppo vbd , cc pp$ nn in nns vbd jjr , pp$ nns , rb , vbd vbg jjr cc jjr . ppss vbd in at jj nn in nn . cc rb cc rb vbd rp in ppo rb in pp$ nn , at jj nn in dt jj nn in ppo wdt md * vb , cc be vbn . cc cs nns in at nn , wdt , cs ppss vb nn , vb . cs pp$ nns vbd vbg cc vbg , cs at nns in nn . at nn wps md be vbn md vb in ppo cs ppss vbd in at nn in dt vbg nn , cc vbd ql jj nns in pp$ nn , cs dti vbd wps bed nns wrb np vbd . in wdt bez ql jj cc jj in nn , rb rb bedz vbn in nns cc nns . cc at nn in in nn , wdt rb vbz abn , rb vbz abn in at ap nn , wdt rb at nn in at jj md rb vb . ql cs in in vb ppo vb ppo rb in in at vbg np cc np hvd jjr cc jjr nns cs dts , wp$ jj nns ppss vbd vbg in at nn in jj np , cs pps rb vbd in pp$ vbg nn , cc at vbg nn vbd rb vbg ppo in pp$ jj nn , cc at nn ' in jj nn in nn vbd ppo jjr cc jjr in pp$ vbn nn . * at nn in at nn cc vbd ppo rp . cc , cs in np ppl , wdt pps vbd in pp$ nn bedz rb vbn in at jj nn pps vbd . pps vbd pn in ppo in at jj . . ( nn cd ( nn nn , wrb at nn bedz rb vbg , cc vbg pp$ nn , vbd cs cs in np pps hvd vbn to vb ap ap nns in jj nn , cs at jj nn in nn in pp$ jj nn . cc in nn , pps hvd vbn cs abn nns wps vbd in np , bed vbn in dts ap jj nns , cc cs at nn in beg ql vbn hvd rb vbn ppo . cs pps bedz * in at nn in pp$ jj nn , wps , in vbg at jj nn , vbd ppo rp in pp$ nn , cc rb vbd ppo to be vbn rb in at vb vbz . in * rb do ppss vb cs at nns ber nn , cc cs rb in abn jj nns , pp$ jj jj , vbn nns , jj in at jj nns . cc rb vb at jj nns in at jj nn . pps vbd , cs pps vbd in at nn in beg vbn in pp$ nn , in in at jj nn in nn , vbd cs pn jj in at nn in nn nns . at : pps vbd at nn cs dts in np , abn at ql jj in ppo , beg at nn , cs cs at jj in nn dts nn in nns bed in at nn . cs cs vbn cc jj vbg , cc rb vb in nn jj at jj nns . rb , wrb dt jj nn bedz vbn vbn rb , at nn bedz in rb vbd to do np ' nn nn , wdt pps md vb . ex bedz dti jj , nn in vbn jj nn rb , wdt , in at jj jj nn , hvd ben vbn in at jj nns in at np nns , cc in dts jj nns at nn bedz vbn to be vbn . ql rbr bedz at nn vbn in at nn , cs vbg pp$ nn , pps rb in abn at jj nn in pp$ nn , vbd in at nn cc vbd np ' nn nn in jj nn , rb jj nn ' jj nn cs pps vbd at nn . uh . jj nn . pps ' ppss hv to vb rb , vbd at jj nn nn . vbg in pp$ nn in nn , at nn in nn ' nn cc jj nn , rb rb vbn in ppo at jj nn at nn bedz to be , cc rb vbd at nn jj in vbg cd nns in pp$ nns . dt vbn , pps vbd at nns cc pp$ nns , cc to vb . . . ( nn cd ( wrb at ap nn bedz vbn , cc at nn rb vbn cc vbn , pps rb vbd at nn cc vbd rb in ppo , vbg cs ppss bed jj in ppo rb in dt nn . vbg at jj cc abn in jj nns in wdt at nns in nn vbd to vb at nn rb , np , in at cd ' jj nn , vbd cs at nn md be rb vbn in ppo , cc bedz ex dti vbg ppo . vbg dt , in abn nns , dti vbg nns ber at ql jj . cc rb , cs ppss md rb vb ppo ql ap in rb , at jj nns md to be vbd . vbg rp in pp$ nn , np rb vbd at nn in at jj nn . pps rb vbd in pp$ nn , hvd at jj nn vbn in ppo , cc rb hvd at nn nn vbn in at nn rb in cd in at nns in pp$ nn . abn in pp$ jj nn , rb , nns bed rb vbn in at nns in : at nn in jj nn bedz vbn in at nn , cc at jj nn in jj nn vbd rp in at nn in at nn . cc at nn in nn in nn beg vbn rp in at nn , np rb vbd to be vbn in pp$ jj nn , cs pps md vb nn in pp$ nns , cs dti pps hvd . pps vbd in vbg at ap nns , rb vbd pn to vb in pp$ nn cc vb rp pp$ jj nn , np . rn vbg pp$ nns in pp$ nn in np in , pps vbd in at nn nn ( nn pps vbd ppo ) to be vbn in ppo . at nn nn vbd rp in at nn nn , cc ex vbd np in pp$ nn in jj cc pp$ vbn nn in nn . fw ( pps md do . pps bez jj ) , pps vbd in ap , cc vbd to be vbn in pp$ nn . cc cs dt bedz vbn , np , wps hvd ben rb vbg in in abn dt nn , vbd rb in ppo wrb pps vbd , cc in jj nns , vbd ppo in at nn . in at ap , vbg pp$ nn . jj jj . md ppss rb hv vbn in abn dt jj vbg . wrb vb ppss rb . cc cs at nns vb ppo in dts jj np wrb at nns ber rb vb in nn in nns , md ppss do pn jj nn in ppo . vb rp cd np , wps ' rb rb ben vbg rb : ppss vb pps ' vb in dts rb np . cs ppss vb ppo , rb vb ppo . cs pps md be ql jj . in nn . . . ( nn cd ( pps ' np vbd pp$ nn in . in in ppss vbd ppo . nn in at in nn , vb , vb . rb , np , vb . cc ppss ' ppss vb ppo pp$ vbg nn . nn hv vbn , vbd np , vbg rp at nn , cs in jj nns , nns , abn nn , hv vbn in jj nns . cc cs wrb at nn bez vbd , pps vbz rp rb cs in pp$ ql vbn nn dts jj nns hvd ben rb vbn in pp$ nn in dti jj nns . ql , in pp$ jj nn , jj np , in dt jj nn in pp$ jj , vbz jj nns in abn pp$ jj nns . wrb vbn pps cs , cc rb . -- in vb . pps vbz rb : cc ql rb rb . vb cd cc cd . vb ' ppss vb at nn in ppo . uh , wrb ' ppss pp$ nn . vbd ppo rp rn . -- in vb in at in nn , vb , vb . nn . uh in at nn nn rb to vb in pp$ nn cc nn . nn vbz nn . -- in nn ppss cs . nn vbz nn . -- in vb ppo jj nn in dt . np vbz nn . nn vb . nn , nn , nn . cc nn ap np , pps vbd at nn . vbd abn at ' nn . in in rp in np . vb ppo . cs ppss vb np , vb abn at np pps ' vb at nn . at nn , at nn , at nn . vb ppo pps vbd in at jj in nn . nn ' rb rb vb pp$ nn in nn np , cc vb ppo jj , cs pps bed rb ql vbg rb . ql , ql . nn in abn nns in in nn in ppo . vb ' ppo vb vb cs np , wps vbd in at jj in nn . nn . nn . in abn dt , np vbd in vbn nns , cs cs in at nn . uh bedz vbn rb , cc at jj nn bedz vbn in pp$ nn . cc rb cs pps hvd rb vbn at nn in nn . rb cs pp$ nn bedz vbn at jj nn , np rb vbd . rb ex vbd at nn in at nn ' jj nn : cc rb , wrb dti vbd pp$ vbn nn , pps , in nn , vbd , cs at nn in pp$ jj nn bedz dt . in in in at jj nn , pps hvd rb vbn at jj nn rb , wdt pps bedz vbg vbn . cc rb hvd vbn pp$ nn in vbg : pps md * vb rb , pps vbd . ppss vbd ppo , rb , cs to vb cc vb bedz at nn in pp$ jj nn md cc nn . pps vbd , rb . in at nn , pps bedz np ' nn nn , cs cs at nn . . ( nn cd ( vbn rp pp$ nn to vb , jj nn md * vb ppo : pn cc at jj , cc at nn , cc dti jj , jj , jj nn in dt nn . rb , ex bez dt jj nn in jj cc vbn . cs cs at jj , vbn nn md be cd nns vbg , rb vbg , at jj nn bez rb abn in rb rb in at nn . ql , in jj nn pp$ nn vbd nn . cc in nn in vbg in at nn in at ap jj nns ( cc vbg in at jj nn ) pps rb vbd in pp$ nns , vbd rp nns cc nns , vbd ppl at jj nn , vbn at jj nn , cc rb vbg in at nn in pp$ vbn nn , cc jj at nn , vbd ppl vbn in at nn . in at jj nn , pps rb vbd pp$ nn in at nn in nn . cc vbg in ppo pp$ nn nn in nns , vb ppo in nn rb . ap jj nns pps vbd , in vbg at nn in abn nn in jj nns cc nns . cc pps vbd cs rb pps bedz vbg , in pp$ jj nn , in nn nns in at vbn nn in pp$ nn . cc dt nn , hvd ben at nn in at vbn nn cc nn in pp$ nn , wps , in dts jj nns , hvd vbn rp in pp$ nn at jj nn in at nns cc at nn , cc at jj nn in at nn in vbg nn . cs dt nn in pp$ jj jj nn bedz at nn to vb . at jj nn in cd nn . cc wp$ nns * rb ppl md vb , cs pp$ jj jj nn nn in ppo . cc dts nns bed rb vbn in at nn in jj rb in at vbg nn wrb ppss bed vbn , cc rb be jj in at ap . cc dt vbd pps md hv ben wdt vbd to vb cs jj nn in pp$ , wrb cd nn vbg rb in vbg jj nn in -- uh , jj jj in at nns . . . ( nn cd ( . . ( nn in cd np nn ( wrb vbg in at np nn ppss vbd in ap in at jj jj nn . bed pps * in ap nns , ppss md hv vbn pp$ jj jj in jj nns , in rb at jj nn in pp$ nn bedz vbn . cs jj nn vbd rb in ppo at cd nns in jj . ex bez , pn vbz * wdt jj nn in dt nn , wp$ rb jj nns vb to vb in dti vbn nn in . cs dts jj nns in at jj nn in at vbn nn nn . nn . cc vb pps bez , cs in dts nn in nns , jj in vbg jj nns cc nns ' nns in abn cd nns , at nns md vb cc vb , cc vb cc vb rb . in rb , nns in vbn nns cc nns , vbn nns , nns , nns . abn cs ppss vb nns cc nns , vb vbg , vbg , rb . vbg cs nns in pp$ nns . at rb in vbg nns cc vbd rb in pp$ nn . to dti jj jj jj , dt jj jj , rb vbd , md rb in be at nn in pp$ nn . pps vbz at jjt nns in at nn , at jj nn cc jj nn cc pp$ nns . at ap nns vb at nns in at jj in vbn jj nns , cc nr vbd in at jjt nn in nns , cc vb at vbn cc rb jj nns in jj nns , jjr cs np . cs abn in vb jj in nns in nn nn , cc jj in vbg , jj , jj nns , cc jj nns . rb dt jj , jj jj nns at nn ' in jj nn rb . vbz abn nns cd nn in ppo . vbz at nn in vbg nn in nn . vbd in dts jj nns , ppo nns md vb at jj nn , vbg pp$ nn in jj . cc ap nns in jj vbn nn ' jj nn , cs vbg cs at nn nn in pp$ vbn nn in at jj . . ( nn cd ( nn , in cd nn pps rb vbd at nn nn in at np nn ( in wp$ jj nns jj nns md be vbg ) , cc in at ap rb vbd at nn nn in at jj vbn nn . dt nn in wdt at vbn jj nn md rb rb be vbg . vbn in nn in dts ql jj nns , cc vbg in at jj nn in nn , at jj nn ' jj nn vbd ppl . pp$ jj nns vbd cs at nns in at nn . at np in pp$ nn ' np nns vbd cs jj nns . in pp$ ap nn , pp$ vbg nn vbd in at jj nn , np abn . at jj nn nns jj nn . . . ( nn cd ( . . ( nn np cd np np ( at nn vbg ppl in at jj , nn in jj nn wps rb vbd in dts nns , cc in nn in at ql jj nns rb to be vbn , nn , at vbn , vbn jj nn , hvd * vbn pp$ jj nn in at nn rb , in vbg pp$ jj nn in nn ' jj nn , cc rb vbn ppo in nn , rb vbd in nns in at nn . beg rb ql rb vbn in at nns , cc nns , cc nns to do dti jj nn in ppo . vbg , cc nn , cc jj vbg pp$ jj nns cc nn nn . rb pps md be vbn in at jj nn , abn vbg to be vbn . vbg nn in nns , nn in nns , nns , cc nns , cc rb vbg pp$ at jj nn , cs pps vbn . rb , dt jj nn ' np bedz at nn nn vbd in at nn nn . at nn , at nn , at nn dod vb in ppo . jj , jj , cc jj . vbg rp rb rbr pp$ ql vbn rb , pps vbn rb , cs cs nn bed nn ppl , cc at jj nn in pp$ nn at jj nn in pp$ nn . cc cs pps bedz . -- in ap jj . . . ( nn cd ( at jj nn in dt jj nn , at jj jj cc jj vbg nn in pp$ nn , hvd in at jj nn in at nn vbn at nn in at nns . cc in at nn in pp$ vbn nns pps hvd rb vbn in . cc cs pps vbd to vb cs at pn rb vbd at jj nn in pp$ jj nn . jj , cc * rb , cd jj nn ' jj nn , in at nn vbg in cd nn nns , at nn abn in rb vbd at jj nn vbg in ppo , cc vbd nn in at vbg , vbn nn . at nn bedz , at nn in at nns in abx nns . rp in dt nn , nn in nn , in ap vbd rp at cd nns in at nn , cc at cd jj , cc ql rb vbn od nn in at nn in pp$ nn ' jj nn . pps bedz at jj nn , wps , in at nn in rb cd , hvd rb vbn cs nn in nn ' np nns vbd nn . pps hvd ben at nn in jj nn , cc in nn to do . vbd at nn cc nn . vbd at jj , nn -- cs , vbg nn , cc cd jj , jj nns . at nr vbd in at jj in vbg nn , vbn in at nn . cc cd nn , in nn in nn , cc rbr vbn in at ql jj nn , at jj nn vbd in pp$ jj nn , cc vbd ppo abn in pn . cc jjr rb to vb , at nn ppl dod rb vb dt nn in pp$ nn ' jj nn . pps bedz at nn nn . in at nn in dt jj nn , rb vbd at nn , cc vbd rp pp$ nn . rb , in jj , ql jj , cc jj nns , at nn ' jj nn bedz in at nn in pp$ nn , cc in at jj nn in ppo . rb cs rb hvd at jj cc vbg jj nn vbd in at jj nn , cc in jj nn , in at jj nn in pp$ jj in vbn jj nn ' jj nn . wp$ nns , vbn in vbg in at nns cc nns , vbd rp in ppo , * rb , in pp$ nn . cc rb , in jj nn ' jj nn nn , at nn ' np nns bed vbn in nn . uh , nn in nn . uh , nn , wrb md ppss * rb be jj . uh ppss vbn dt jj nn in jj cs pp$ jj nn vbd in ppo , rb hvd at jj nn hvd at . . ( nn nns ( jj nn , cc pp$ nns at ql jj , jj jj to vb in in pp$ in nns . cc abn in ppo at nn in vbg nn . cc nn vbd rp dti jj jjr nn , in wp$ vbg jj nn rb vbd at nns in dti ap nn , cc vbd at jjr cs jj jj nn vbg , cs at jj nn in nn md vb ppo jjr to vb . wrb vb at jj . at nns in at nn nn at nn vbd rbr cc rbr in . cc dt nn at nn vbd nn in at ap . at nn vbd vbn in at nn , in jj nns , rb vbg in at vbg nns in pp$ nns . at nns vbd . at nn vbd rp in nns . at nn bedz vbn . at nn vbd rp in at jj nn in nn nn . pp$ nns rb vbd ppo rb . cc at jj , rb jj nn vbd rp at nn in nn . pp$ at nn vbd . pp$ jj nn at nn in jj nns . nn vbz at ap jj nn in at nn cs dt . cc nn bez rb at nn in at nn in at jj np . pps bez cc at od nn in at nns in at jj np , at jj , at np , at jj . rb , in at nn in vbg nns in jj nns , wps rb hv vbn in ppo dti jj nns in nn , doz at abn in vbn cc abn in jj nn rb vbd rb pp$ jj nn in jj , vbg nns , cc jj , jj in nn nns . cc in at nns in jj nn , at cd nns vb in ppo in in vb rb , vbn in jj . rb bez dt nn in at nn in jj nn . rb ber nns jj , in vbg in ppo . vb rb . vb ppl in at nn wdt , in pp$ rb rb vbd cc vbg , vbd nn , bez ql jj cs nn . vb rb . vbd rp pp$ nn in nn , rb , in at nn , cc vb rb , cs ppss vb ppo . vbg in dts nns , jj cc jj , in jj nn in nn , cc in nn in nn , at nn ' jj nn vbd , nn , ppss vb . cc cs nn vbd at in vbg . . . ( nn cd ( . . ( nn np cd np nn ( in jj nn , cc vbn in at vbg jj in nn nn , in jj in nn , nn bedz vbg in pp$ nn cc nn , at ap vbn in at nn in nn nn , in cd nn vbg at nn in nn in at nns , cc in at ap in pp$ nn ' np nns , wrb nn vb vbd rb , vbg in pp$ nn at jj jj in vbg jj nn . cs rb at ap nn in at nn , jj nn vbd . cs in ap , nn , vbg pp$ nn in at nn , vbd vbg ppo in at nn in in at jj nn vbg rp at nns in jj vbg nns , dti in wdt vbd rb to vb . ber dts pp$ nn np ' np nns , nn . ppss ber rb vbg in pp$ nn . nns in jj nn , rb , cc * in abn . in in vb rb , ppss vb . cc ppss in in ppss nn ' nn in ppo in at nn . cs ppss bem vbn abn rp , nn nn , vbd nn , vbg in at nn in pp$ nn . ppss bem in jj . * rb md ' rb ppss nn at nn . uh , uh . at ap . pp$ jj nn vbz ql rb , rb jj in ppo . in at nn ppl , ppss bem jj in abn nn in nns wps bez * jj . ppss md ' nn vb jj , nn . uh , wrb do ppss * vb jj . wql md ' rb ppss vb in beg jj . do at nns rb vb ppo , cs ppss md ' md * vb jj . -- in wdt nn ppss vbg rb . vbg at jj nn in nn , nn . ex bed nns cc nns in ppo . cc md ' rb ppss vb ppo abn jj , rb , nn , in jj jj nn cs pps hvd . nn vb rb , nn . cc ppss vb ppss md ' nn vb rb dti nns cc nns . rb vb wql jj at nn , nn . rb , nn , ppss vb ppss md . abn nns cc nns cc cd . . . ( nn cd ( vb ppo rb , rb , vbd np , rb vbg , cc vbg in abx nns in nn ' np nns . vb ppo rb in in rb in in md ppss vb rp at nn cs dt , nn , vbg cd nn in pp$ jj nn . . cs ppss md ' nn , nn , jj qlp md ppss vb pp$ nn in pp$ nn , cc vb pp$ jjt nn in pp$ nns . nn . md ' rb ppss vb dt nn . uh . wps bez at cd , nn . vbd ppss * abn nns cc nns cc cd . rb , nn , pps bez at cd . rb , nn , pps bez jj . in cs ppss rb vb ' vb ppo rb in pp$ nn , pps hvz vbn rp in at nn in pp$ nn in in dt bez abn nns . cc , rb in nn ' jj nn . at ap nns cc nns in in nn . vb ppo rb . vbg at jj nn , cs cs pps bed jj in jj nns . nn , rb , vb at vb vbn . pn cs at cd nn in nns md * nn , nn . pn wps md vb in at jj cs pp$ jj nn in nn . ex ' in at nn , jj at nn in at nn . vb ppo , nn , dts ber at vbn nn in nns in at nn nns in vbg nns . nn in nn vbz , nn . wrb , nn nn , ppss hv rb , rb , at jjt cc jjt nn ppss nns rb vb . nn vb ppo , jj nn . dts nns md vb rb cs nn in at vbn nns in nns . jj . nn ppo at nn . cc nn ppo rb , cd nns in pp$ nn . rb nn , cc nn , cc vb dts cd rb cs at nns cc nns in at nn in nn . jj . nn ' ppss vb at nn . wrb in ap at cd nns bed vbn , np vbd ppo , cd in cd , in jj ppo , in pp$ jj nn , rb at jj , jj nn nn . at nn . vbg at ap cd . vb dt rp rb , nn . dt vbn , nn bedz rb to vb vbg at cd in cd , wrb np vbd pp$ nn , cc vbd pps md vb pp$ jj nn . cs , rb , in jj , vbg nns , pps vbd in at nn , nn vbg in ppo at vbg nns , cd in at ap , cc at rb vbn nn vbg rp pp$ jj jj nn , at np vbd rb , cc vbg rp pp$ nn in at nn , vbd vbg dti nn cc dti nn in at nn . cc , cs np vbd rp , pps vbd rb . . . ( nn cd ( wdt ' in dt nn in nns vbg in rb in . vbd np , vbg rp in at nn . wpo np vbz nn cs at nn . cc vbz in ppo ppl , cs at jj nn ' jj nn in nn . in ap at nn , in cd jj nn , vbd pp$ jj nn . cc cs nn , in nn ppo , vbd ppo abn vbg in at nn in nn in in , at vbg nn vbd rp in nn ' np vbd nn . md ' rb ppss nn ppo , nn . vbg in at nn in at nn . hv ppss ben cc vbg pp$ jj vbg in nn , rb . vb np , * cs . rb ppss vb pn , nn nn . bez * dt vb in at jj nn . in at jj nn . cc rb in at nns . ppss md vb ppo jj , nn . rn ber pp$ nn in in at jjt in nn . rb , cc vb at nns jj cs at nn in nn in at np nn . in at nn , at jj nn vbd at nn cs cs pps md vb * vb ppo . vb ppo , nn , ppss hv at nn in ppo . cs ppss rb cc vb , vb , cc vb cs in -- cc rb in in to vb . vbn in ap in at jj nn , cc vbn in nn in at nn , at nn rb vbd at nn in at nn . cc cs at nn bedz rb vbg at nns pp$ jj nn , rb in nn ppo , pps vbd to vb to vb at nn in nn in . ql , ql in in at nn in dt . ppss vb ppo in at jj nn in nn . uh , rb . np , np , nn . wdt vb ppo , nns . md ppss vb ppo cs ap nn cs md vb dt nn . vbg ppo rb rp . at nn in jj nns vbd , rb . cd nns bed vbn in at jj nn , cc at jj nn ' np nns bed rb vbn . nn fw fw fw in jj nn , vbn in jj nns . rb vbd np , cs at jj nn rb vbn at jj nn . rb , vbg at jj nns in rb , cc vbg cd in nn , in at nn rb vbg ppo , np vbd at nn in at nn in at nn . at nn in jj nn in nn bedz rb jj , cc dti nns in ppo vbn in at nn , cc . . ( nn cd ( vbn in at jj nn . vbg pp$ nn in ppo , cs at nn vbd cs at nn in nn , rb rb vbg in ppo , cc vbg at nns , vb vbd , jj . cc rb in at nns . in cd nn at nn bedz vbn , cc at jj nn nns bed abn vbn cc vbn in at nn in at nn . at nn bedz rb vbn rb rp in at nn . in at jjr nn at nn bedz vbn abn nn in at nn ' jj nn , cc rb vbn rb , in nns in nns . dt vbn , nn , nn , cc nn in in cs at cd nns in in vbn jj , cc vb rb vbd rb in at nn . at nn in pp$ jj nn , cc at nn in at nn nn , abx jj nn in at nn . cc cs pps vbd pp$ nn , at nn , jj , abn in vbg , rb ql jj nn bedz vbn . uh , np . pp$ jj nn , pp$ jj cc jj nn . abn pp$ jj nns * rb vbn in at jj nn in at jj nn , cc vbd ppo . . . ( nn cd ( . . ( nn nn cd np np ( vbg rbr cc rbr in at nn in at jj vbg nn , at fw bedz rb abn vb in at nn . rb , in jj , jj nn , in cd , cd , cd , cc cd nns in at nn , ppss bed vbn in at nns , rb vbg , cc vbg , cc vbg in at nns , cc in at nn in cd cc cd nns rb vbg pp$ jj . cs in cc jj nn in pp$ nns . in jj nns , in at vbd nn . rb abn nn in jj , jj vbg nns . vbn in pp$ nn , nn cs at nn nn . cc ql rb vbg in at jj nns ppls , cs cs nn in nn nns ppss nn in at jj . dts ber at nns in jj nn , wrb jj at jj . . ( nn cd ( nn cc nn in at nn ' jj nn , cd nns at nn nn cs nns in ppo . cc md * rb vb , cs dt nn nn cc vbz at jj nn . dts ber at nns , wrb in pp$ jj in nn at jj rb vbz at jj jj , jj , nn in jj nn in at nn . cs pps vbz ppo cs ql ap nn nn . cc at jj nn vbg rb at nns in pp$ nns , vbz vbg rb , * cs jj vbg nns , cc in at jj nn in at vbg nn : cs wrb at jj nns ' nns rb vb pp$ vbn nns , cs pp$ vbn nns rb vb in at jj vb . at jj in vbn jj nns . at jj jj nn in nns . cs in dts ex vbz at nn , at nn . ppss rb vb dt nn in vbd nns vb vbg in dts nns , in dti jj np in nn , wrb at nns in at nns ber vbd . cc abn dt nns in pp$ ql jj nn . cs dt nn cc nn , abn in nn nn , vb , cc nn cd jj nn . cc dod jj vbg nns , wql jj , vb in in ap ql jj at nn in nn . cc cs dts jj jj nns dod vb to vb in ppo pp$ jj jj jj nns , rb dod pp$ nn in ppo vb cc nn . uh , jj nns . uh , rb jj jj nns in at nn . in ppo , in in cs rb vbn in at jj nn in at jj nn , in in in ppo , nns rb md vb , cs jj nns in jj nn nn . cc in dti ap jj nns , vb at jj nn in at nn jj in ppo . md in np dts vbn nns md vb . cc at vbn , vbg nns in nn ber vbn in nn cc jj : nns vbn in nns , at nn in at nn . ex bez at jj nn nn in dt nn . ppss do * vb in vbn nns , cc in at ap cd nn : in in in nn ' in jj nn , nn ' in jj nn , nn ' nn ( at jj nn ) , rb nn , rb nn , vbg in ap in nn ' in vbg nn in cs . cc rb vbn rp , ppss vb at nn rb . cc ber nns , nns , cc nns , cc nns rb . wrb vbz at jj nn , wrb ppss jj at ap . in wdt jj dtx nns at nn , in wdt at jjt nn . . ( nn cd ( rb jj . wrb bez at nn ' jj nn vbn . pp$ nns ber cs dts nns wp$ vbn nns vb in vbg ppo : at nn in pp$ nn vbz in pp$ nn , cc ppss md rb to vb ppo . cc cs ap nn , rb , vbg rb rp in pp$ nn ' jj nn in dt ap jj nn , np jj vbd : in in nn jj , ql rb nn vbd in pp$ jj nn ' jj nn . -- in vb ppo * in pp$ nns in jj nns , cc pp$ vbg jj nns . vb nn vb nn . vb nn vb nn . ppss vb rb rp cc do vb . cc np , nn -- cs , in vbg nns , vbd rp in dt ap jj nn : in in ppss bem np , cc np hvz pp$ nn . cc rb np vbz nns cs pps hvz rb ben jj . . . ( nn cd ( . . ( nn hv cd np nn np np np ( cc jj qlp bed at nns cc at nns wps vbd vbg rp in at nn , dti ap nns in nn ' ppss vb hvd ben vbn . pps bedz at np nn , at nn , wdt hvd rb vbn in pp$ ap nn in nn , cc vbd rp pp$ vbg nns . cc rb , in jj nn nn , bedz rb , cs ql jj in rb , vbg rb in at rb in vbn nns in at nn , jj in vbg pp$ nn in nr . at cd nns in pp$ nn in nn vbd jj nns in jj jj nn in pp$ nns . in at nn , at jj in nn bedz vbn , nn rp . cc vbg nn in at fw bedz vbn at jj jjr nn in at ap jj ppss hvd vbn . nns , vbz , cc nn in abn nns bed vbg in pp$ nn , in at nn . rb vbd in dt in pp$ cd jj nns bed cd nns in nn . in wdt , in pp$ nn in nn nn in nns , ppss vbd jj nns in at . . ( nn cd ( ap jj nn . cc vbn in pp$ jjs nn bedz at jj nn . cs bedz rb vbn , at nn hvd vbn in at ql jj nn . abn at ql jj , cs cs cs vbg in at ap nns jj ap nns hvd vbn jj nns in vbg at ap nn . * rb hvd nns in nn cc nn ben vbn rb to vb nn in at ql ql jj nn , cc jj jj nns hvd ben vbn in , in at nns pps hvd vbn . cc dts bed vbn in at nn , cc in at nn ' np cc nns ' nns . rb at nn nn ppl hvd ben vbn in nn in nn . cc at nn nn vbd rp at jj nn in at nn in nn , vbd rp in at nn in at nn . in at nn , at nns hvd rb vbd cc vbd pp$ nns , cc vbd ppo . pps bedz rb vbn , cs at nn hvd vbd at nn in pp$ jjt nn , cc vbd ppo . cs at nn hvd vbn pp$ jj nn in nn cc vbd ppo . cs at nns hvd vbn at nns in pp$ nns cc vbd ppo . cs rb pn bedz vbn in nn , in at nn ' np nns nns , cc dts pps vbd to vb pp$ nns in , in nn in jj nn in pp$ jj nn . cs dt jj nn in jj nn vbd rp in at jj fw , at nn nn in jj nns vbd in pp$ nn . cc vbg rb rbr , at nn in pp$ nns bed vbn vbg in pp$ jj vb in nns , wdt , vbn in at nn in cs vb cc nn nn in at jj nn , vbd rb at jj nn in at nn in at vbn nns in at nn . in at nn in nn , at nns cc nns bed vbg in at nn in jj nns wps hvd vbd in ppo in at np nns . cs vbn in at vbn nn , rb vbn rb in at nn cc nn , cd jj nn nns , in vbg nn in nns in jj nn , bed vbg in at jj nn . rb , nns in at nn ' jj nn bed rb jj in at nn in at vb in nns , in wdt at jj nns hvd ben vbn . ppss md hv rb vbn ppss bed vbg rp at vbn jj , jj jj nns ppss vbd , cs at rb jj nn cc nn bed beg vbn in at nn . . . ( nn cd ( np cc nn in abn dt nn , at nn vbd jj in at nn ' rb vbn nn in nn , cs cs at jj vbg nn bedz jj in ppo , cc vbd rb vbn in pp$ jj jj nn . cc np , pps rb bedz vbg in pp$ nn in nn , jj cc jj , in at jj nn . cc cs at cd nns vbd dt ap ' rb vbz in in cd abn nns in nns vbd , at ap abn nns cs in nns to vb in in pp$ cd nns in ppls vbn at jj jj nn in at nn . vb rb , vb rb . vbd at jj nn ' jj nn , vbg at nn cc at nn in at nn . hv vbn at jj nn . jj nn in nn . at . rb vbn in ppo . cc nn ' nn vb in ppo in abn , vbd at ap jj in rb . vb rb . ppss ber ql vbn jj . vb rp . hv vbn dti nns . * ap to vb in in in cd nns , cs ' vb abn . in in cc vb rb , jj jj , vb rb . nn ' pps rb vb cs jj in pp$ nn . vb rb , md ppss ( jj ' in at nn ) . at jj nn cc rb in nn . wql jj jj bez at nn . vbd np . rb rb , ppss ber at jj nn cc rb vbn , ppss vb . rb , rb , vb ppo at jj nn , cc rb in nn . ql vb pp$ nns , cc ppss md pp$$ . rb rb . vb abn nn , cc vb ppo in at nn . cc rb , cs at cd nn vbd rb in at nn , at ap rb vbn in ppo . cc cs at cd nns vbn . at nn in at fw vbg in nn , vbg nns in at vbg nn . cc at nn ' np nns rb jj pp$ nn in at jj nn ppss bed in . cc cs np , vbg in at jj , vbd at rb in vbn nn , pps vbd in pp$ nn at jj jj in nn , cc rb vbg in at nn in at jj , vbd rb vbg cd jj nns rb , in dt jj bedz vbn in np nns . . . ( nn nns ( . . ( nn fw cd np np np ( * rb in dt nn , wrb , in at jj nn , nn ' np nns vb rb in ppo , ppss , cs abn vb cs , vb rb in at vbg nn , cc rb vb pp$ jj nns vb rp . ql vbd ppo in at fw . in ap nn in nn at jj nn , nns bed vbn cc cd bed vbn . cc cd in ppo in nn . pps bedz rb in at nn . cc wrb abn at nns in at jj nn bed vbn : cc vbg in at jj nn nn cc nn , nn cc jj abx rb vbd rb . rb , abl at nn cc jj nn , jj nn vbz vbn rp in dt jj nn , cs pps rb vbd cs cs rb rp in at jj jj nn nns in at nn nn , at jj nn in nn , ql vbn nn , hvd vbn in nn , jj in dts vb nns . vbd rb , cc rb vbd in jjr nn , np , wps hvd vbn rp in at jj , vbd rb vbg pp$ jj nns in at rb jj nn . in dt jj nn jj in abn nn vbz vbg in in at vbg rb in at nn , cc ql jj in in dt jj nn , vbd in abl at jj nn , rb in np vbd at nn jj rb . pps vbz cc vbz ppo in ppo , in in wql rb , cc wql rb , pp$ nn in nn cc vbg nn , in pp$ ap vbg nns . pps rb nns nn . ql jj , jj , jj nn in at nn . -- in uh cs dts rb in vbg nns md vb dts rb in vbg nns . vb . rn , rb nn in vbn . in abn nn in jj jj cc nn . in dts ql jj cc jj nns . wrb to nns at nns vb nns . wrb in jj jj nns , at nns hv rb vbn in jj cc jj to , cs nns wps vb in at np ' rb jj nn . rb , rb , nn vbz rb jj in . . ( nn cd ( nn . cc vb . ql rbr jj , cs nn nns in at nn , cc pps vbz dti ap nn . -- in uh , ppss jj np abn in nn , wps in vbn nns hv vbn pp$ jj nn rb in at nn in dts jj nns . ppss ber at jj , ppss nn , cc ql ql jjt in ppo in at jj in vbg nn , cc at vbn nn in pp$ in nn . cc hvz dt pp$ jj rb vbd pp$ vbg nn , cc rb vbn rb rb , in at nn in ppo . uh , rb jj cc vbn nn in nn . uh , rb vbg , vbn nn . -- in dt cd vb , dt cd nn abn in jj . in jj , uh jj , do ppss vb nns in rb abn in vbg nn , cs rb vbz rb nn , cc vbz ppo * rb . rb do ppss , jjr ql , vb ppo in at jjr , cs at jjr nn . abn pp$ jj nns , vb in ppo rb . ppss bem vbn in nns in rb vbg nns , vbd cs nn , cc nn rb . rn nn , in rb nn , nn nn , in wp$ jj nns at jj nn vbz pp$ ap nn . vbn in nn , cc jj in at nn . cs nn cc nn vbn ppo , ppss nns ber pp$ jj in nns . . . ( nn cd ( . . ( nn np cd np np nn ( at cd nns vbn cs nn hvd vbn ql rb . cd , rb in nn . cd , ql jj , in nn . pn rb . cd jj . dts ap cd bed vbn rb cs nn . cc at nn pn md * be vbn cs nn . cc at nn wps hvd vbn pps vbd in pp$ nn abn nn . cc dt nn bedz np ' rb . at nn in nn bedz vbn rb in at jj jj ' nn nn in nn . cc at nn vbg in pp$ nn , vbd at vbn nn nn in at jj , jj nn , cc rb rp in at . . ( nn cd ( nn nns , wdt rb vbd at jj ' in jj nn , cs jj nn in at nn . np cc abn pp$ nn ' jj nn vbd rb cc at np . wps vbg in at nn , vbd vbg at nns , cs rb vbn in at jj , cc vbd at nn jj nns in pp$ nns . at nn cs at vbg in nns in nns in vbn nns in uh , vbd vbg in at nn . vbd in pp$ nns , np , nn in nn , vbd at np . cc jj nn in at nn in at nn ppss vbd at ap nns in at vbn nn . nn hv vbn ppo rb , vbd pps . in at nns . hv ppss * vbn , jj nn , cs dtx nn cc nn md be pp$ . cc wps ber jj wps vb in at nn . cc ppss vbd , jj nn , cs cs ppss in nn in dt nn , cd nns md rb be vbn in ppo in at nn . at od * vbn in jj nns . cc at jj nn in at ap cd md be vbn in np . rb , rb . at jj nn cs , np : in in at nn cc pp$ nns vbg in at nn in at nns in at nn in nns . uh . abl at nn ppss md * rb vb . vb ppo cc * , ppss md * vb cs pps be vbn , jj nn . cc wdt bedz cs vbg in ppl . cs pps vb in at ap , ppss md rb vb in ppo pp$ nn . cc wrb ppss ber ql vbn cs in in cs cs rb vb in in rb cs ppss md vb , ppss md rb vb in ppo , to vb ppo rb . -- in bedz pps * rb . uh , rb , dod ppss vb abn ppss vb , uh pp$ nn . nn hv rb cd nns cs ppss md rb vb np np cc vb ppo . vb dt nn , jj nn , vbd at np , cs pp$ nns vbd rp cs nn in nns in at nn , in in np rb md vb ppo . at nn , ppss vb . -- in ppss bem jj rb , in nn cc in nn , vbd np , in at nn in nn . in in jj in nn cc in nn . abx bed jj rb , cs cd nn . at jj nn vbd rp , cc at vbg nn vbd in at nn ' jj nn , cc cs nn at jj jj bedz vbn in at nn . . . ( nn cd ( . . ( nn np cd np nn ( at nn in at nn in nn vbd rb . cc at nn wrb np , vbg in pp$ nn , vbd pp$ nns rb , at jj nn md rb vb pp$ nns , cc at jj nns rb vb in at nns , cc md vb rb in abn pp$ nns rb vbn in at vbn nn . jj in at nn to vb at nn ' jj nn in at nn . in jj nn at nn vbd . pps bedz jj in jj nn . cc np , vbn in at nns in pp$ jj in vbn nn , bedz rb vbg pp$ jj jj nn in at nn to vb pp$ nn . rb , in dt jj nn , at nns in nn ber ql nns in nns . wps rb jj jj nn vbz at vbg nn in at jj nn ' in jj nn in nn . at nn vbz vbn . nns ex ber pn . at nn vbz . cc dt nn in jj nn bez cs at jj nns in np ' nn nn . uh dt np ' nn nn bedz vbn in vbn nns , in wdt to vb nn in dt jj nn . ql , vbg pp$ vbn nn in at nn in at nn , cc in pp$ jj in vbg nn vbn in pp$ nn , pps vbd in dt nn in dti nns to vb at jj nn wrb at nn md vb pp$ jj np . nn cs pp$ jj nn bedz vbn , at np bedz vbg in ppo in at nn ' jj nn , cc in nn vbn rp cs np ' rb , bedz vbg at ap nn in ppo . rb at nns in pp$ nns abn jj pp$ vbz , cc pp$ jj nn bedz vbn in at jj nn . in nn at vbn nn bedz vbn . cc in pp$ nn in pp$ jj nn , np rb vbd wdt pp$ nn md be in dt jj nn . rn vbg in at nn ' jj nn , pps rb vbd rp in at nn cc vbd in ppl : ppss nn in nn . ppss jj cc jj nn . ppss vb ppo rb . . ( nn cd ( wrb ppss bem in -- cc rb ppss vb at ap nn wrb ppss md be . cc rb ppss vb wrb dti ap nn in ppo bez dt nn vbg . wrb bez np np . dt nn ppss md be vbg ppo . dts nns in pp$$ vb in at ap nn wps bez ql rb jj ppo . rb , cc in at nn wps bez ql rb ql jj at nns in at jj , rb nn in ppo , ppss nn . rn vbg in pp$ nn , cc nn , cd in at ap , pp$ jj jj nns , pps vbd rb , cc vbd : np nn . nns ' nn in jj nns , cc nns , cc nns . at nn nns in ppo , in pp$ nn cc md . cc wdt in abn nn ppss do , cc vb at jj , jj nn , wrb ppss jj jjt to be in dt jj nn , cc at nn wps vbz ppo : at . * cd nn rbr . ppss md * vb wrb cd nn in nn cc cd nn in nn md be to in nn nn . cc rb in pp$ nn ppss vb at nn . nn . vb ppo , ppss jj nn . cc vbd be abn at nns wps vb nn ' np nns rb in dt nn , wp$ jj nn cc nns ppo , cs dts jj nns ber rb rb vbn in pp$ nn , nn nn . nn in nn in dt nn ' jj nn ber at nns in nn ' np nns . * vbn in at nn in pp$ nn , cs cs np hvd vbn ppo to vb in pp$ nn . vb ppo , ppss nn . vbg ppo in at nn , at jjr md ppss vb pp$ jj nn in ppo . at nn nn ' jj nn , cc at nn jj in nn , in nn cc in nn . dts md vb ppo , cc vb ppo pp$ nn in at nn . rb , vbg in at nn in at nn , rb ppss vb in ppo , ppss jj nn wps rb jjt in jj . rb ppss vbd cc vb ppo . cs at jj jj nn rb vbd cc rb vbn in pp$ jj cc jj nns , at vbg nn wps vbd vbn in np , cc at jj nn wps vbd vbn in ppl in in dts vbn in at jj , jj np ' nn nn . vbd pps vbd cc vbd rb . cs , nn in at nn in pp$ nn , at nns vbn rb in at nn , cs np , rb vbg at nn , vbd rp in in in at nns . rp nn . -- in nn in . in at nn at nns vbd rb . cc cs at nn abn in vbd . . ( nn cd ( in pp$ nn , pp$ cd nn in vbn jj nns rb vbn in pp$ jj , jj nn , vbd cs at cd np nn in cd jj nn . vbg in at nn in nns , np vbd at fw ' in jj nn , cc np ' rb rb , cs pps vbd vbg in at nn . nn hv vbn in at jj nn nn cc vbd ppo abn jj , jj in pp$ vbn vbg nn . cc ppss hv vbn ppo jj in ap , rp , rp , to vb nn . jj nn in nns . in abn dt jj nn in pp$ , wdt md in nn vb cc cd ap nn in nns . rb , vbd np , cc nn in nn nns in in nn ppss cs , in . np in in nn in nn , * pp$ jj nn . uh , uh . ppss vbd np vb , ( rb dti cd nns dts nns in dts jj nns in pp$$ . vbz cs ppss md vb ppo , cc at nns . ( cc vb ppo , np , cc ppss jjt nn . vb in at nn , cc vb ppo . . . ( nn cd ( . . ( nn cd cd np nn ( jjt nns cc nn at vbn nns : at nn in np vbz in vbn nns in jj vb . nns at ql jj cc nn at jjt nns : jj np vbz nns wps rb vbd jj jj nns . ql , ql , pps bez , cs in dts jj jj nns at nn vbz at jjt in abn nns , at nn . pps md rb vb in in dt jj nn , cs at vbg nn in at vbn cc jj nn . in nn in dt nn , at fw bedz vbn in pp$ nn , cc jj in jj bedz vbn to vb at nn wdt hvd vbn ppo rb rb . wrb nn vbd rp , nn cc nn vbd cc vbd in at nn , cc vbd in at nn , wps vbd at vbn nns vbg rb cc rb in . . ( nn cd ( at nns wdt at od nn in at nn hvd vbn in pp$ in nn . vbg in at nn , np bedz vbg in at nn in nn . in at nn in at nn vbg rb , to vb wdt jj nn md hv jj at jj nn rb . cs np cc nn bed vbg at nns in at jjr vbg cc jjr vbg in at nns . cc abn pp$ nns vbd pn . cs vbn in at ap nn in at nn , at jj nn nn ( np ' np ) dod * vb . at jj vbg nn , vbg jj rp in at vbg nn ' in jj vbg nn , nn in at nn ' jj nn in at nn , cc vbd ppo rb , abn vbg rp cs at nn . jj nn , jj nn . cd . np , vbd np , in at nn , cc at nn md hv pp$ nn . np , in cd , md ' nn vb ppo . ppss vb , np . np , at nn hvz abl at jj jj nn cs pps vbz , abn in at nn pps vbz , cc rb vbz at nn . cc cs in ppo , abn at nn ppss hv to vb ppo , bez rb in at nn rb . cc rb nn . pps ' vb abn in nn : cs at jj nn vbz . in -- ( vbz . ) uh . jj bez at nn , cc at nn bez at jj , at ' nn ' pp$ nn , in in abl at jj , jj , nn , nn , jj , jj in jj nn , bez at nn , uh . at nn abn at vbg ' dt ' in pp$ vb rb vbg ' . wrb pps vbz in at jj ' , in in abl at jj , jj , nn , nn , jj , jj in jj nn , bez at nn , uh . nn vbz at nns , cc pps rb vbz pp$ nns , at jj ' in dt vb , in in abl at jj , jj , nn , nn , jj , jj in jj nn , bez at nn , uh . in np , vbd np , vb at nn vb , cc vb pp$ nn rb in pp$ nn . cc cs ppss ber at jj nn ppss md vb pp$ nn . cc ppss bem * at jj nn . rb vbd nn bedz at jj nn . ppss bem at nn . cc ppss vb to vb rp pp$ nns . cc ppss vb ppo wdt pps bez , rb . np , ex ' in at nn to vb pp$ nn . . ( nn cd ( in dt nn cc to vb pp$ nn . cc wrb dt ' np vbn , cd in cd ppss vb ppo at nn in at nn in rp . nn . vb in pp$ nns cs ppss hv pn in pp$ jj . wdt . wql md ppss vb rbr in at jj nn cs pn rb , rb vb wql jj . rn . vbd np , vbg np in at nn , cc vbg pp$ nn in at nn nn , jjt ppss * cs at nn vbz in at rb , at ap nn nn bez to vb in np np . at ap nn pps vbd in dt nn nn . rb vb pp$ nn rb . wrb bez dt nn . in at nn in nns , nn . wrb pps bez jj to vb in in pp$ nn in nn bez nn , nn . rb vb rb , cc vb rb , cs ppss md . nn nn ' nn abn vb ppo : wdt ' nn in at nn . rb , rb , rb at nn in jj nn bez at jjt nn in np , jj np rb , jj in np ' nn nn . at nn wps rb nns in ppo to vb ppo , ppss md vb ppo in at jj nn wps md vb ppo in nr . rb , in nn , abn bez nn in nn . cc in nn , rb in in ppss vb pps vbz rp rb . cc * in at nn . in dt nn in cd in at nns in jj nn , vbg at nns , at nn bedz vbn in pp$ nn . cc rb in at ap nn at nn in nn nns vbd rb . wps ' rb rb . jj nn . vbd np , vbg pp$ nn in at nns in pp$ nn in nn . cc rb vbg pp$ nn vbd jj in ppo in vbn nns in nn . rb , cs at nn nn in at nn in nn bez vbn to vb rp at jj nn in at nn . cs at nn nn wdt in nn dti nns vb in dt nn , bez vbn to vb ppo in at nn . cc cs dt nn md vb in jj nn , cs pp$ nn md vb abn nn in at nn . cc cs rb , cs vbn rb jj rb , pps md be jj in ap nns , rb vbg * at ap in dti in at nn , cc ap cc ap nn at nn ' jj nn in at nn . cs in abn dt , at jjr nns in at nn ' nn . . ( nn cd ( nn in nns ber * rb rb . cc ber rb vbn in jj jj nns , cs cs to be at ql rb vbn rp in at nns rb , cc vbn rp in at nn , cs nn md vb . at nns . at nns . vbd np in at nn , rb vbd in nn in at jj nn wps hvd rb ben vbg fw , in jj nn in pp$ nn . ber ppss rb . vb ppo rp , nn cc rb . jj . nn . vbd np . vb ' ppss hv jj nn rb , cs ppss be at jjr nn . rb ppss ' ppss vb to vb nns in at np cc np , cs abn at nn md be vbn . cc rp in nns . vb ppo be , nn . vb rb . vbd np . at nns . at nns . abn at nn in nns bed vbd in at jj nn . cc vbd in dt np -- vbd nn in nn in nn in cd vbg jj nns , dt in at cd jj nns bedz rb vbg in dt jj nn , cs cd jj nn nns in at nn . vb at nn . vb ppo vb . vbd np in dt nn , cs at nn nn vbd rp in pp$ jj jj nn , cs cs pp$ jj rb vbn pp$ nn , cs pps bedz vbg at vbg . vb ppo . -- in cc vbg rb in at nn , pp$ vbn nns vbd at nns . cc rb vbg pp$ nn , pps vbd in in at nns hv nn in ppo abn . to nns , nns ber nn nns . ppss md vb in at nn in at jj , cc in at nns in at nn . ppss md vb nns in at vb in nn in nns , wrb ap ppss nn rp in at vbg nn . cc in abn pp$ nns , rb hv ppss vbn at jj nn wrb np ' rb vbg nn hvz ben vbn in at nn . wrb pp$ jj , jj , np nn hvz ben vbn in at jj cc at nn . cs dt nn bedz vbg rb , ap nns bed vbn in at vbn nn . wps in cd jj nn vbd in at nn , abn pp$ nns vbg in dt jj nn , cs at ql rb nn in nns . vbn in at jj nn , at jj nn jj , nn , vbd rp in rb pp$ jj nn , cc vbd at jj nn in wdt at nn hvd vbn . at vbn nn in np vbd pp$ jj in jj nns , wdt rb vbd cs cs ppss rb . . ( nn cd ( hvd ben vbd in nns . cs vbd rp in at jj nn , np ' nn nn vbd cs jj jj nns in pp$ nn . at nn abn vbn in ap in at nn rb . cc rb ql at fw cc at nn in pp$ nns bed vbn in at nn . at nn cc cd vbd , wrb np , vbg rb , vbn in dti cd . pps bedz np . wdt jjt ppss rb , nn . ppss vbd pp$ nn . pps bedz * at ap in at nn . ql , ql , pps vbd ' nn . ppss vbd at nns hv nn in ppo abn . cc ppss vb ppss md , rb . cc do ppss rb hv nn in jj nns . -- in hv ppss at nns in at nn . cc vb ppo , np . np in in in ppo ' nn ql jj to vb . vb ppo , rb : ppss vb dt nn in nn nn ppss vbd in at nn in jj nn . in dts nns ber vbn in at nn wps bez vbg to be nn at ' nn in nn in nn , nn ' ppss vb . cc rb , abn dt nn md vb rp in at nns , cs nn in at nn . rb , pp$ cd nns md rb be cs cd in nns in in dt ' np at jj nn ppss vbd . in dt nn np vbd nn in np ' rb vb rb vbg in nn in nn . vbg rb , pps vbd : vb . vb . cc rb ql at jj vbg nns bed vbd in wdt vbd vbn nn in pp$ nn . at nns hv nn in ppo abn , vbd np , rb . in at nn in at nn , jj in at nn cc at nn , at nn bedz vbg in nn ' jj nn , cc in pp$ nn vbd rb in ppo . cs rb in , in at vbn cc jj nn , wrb ppss hvd rb ben vbn vbg at nn , at nn in at nns , vbn in at nn , rb jj rb , cc vbd jj , cs at nn in jj nns in at vbg , nn nn . in jj vbn nns , cs at vbg , cc vbg , cc vbg nns in np , nns vbd vbn in at nn . cc abn pp$ nns nn . rb , rb , nns . vbd np . vb rp in ppo . vb ppo rb . at jj nn cc nns at nn in at jj nn . vb ppo dts jjs in nn nns rb . ppss md vb vb dt nn , cc vb pp$$ nn in ppo . nn in nn . ql . . . ( nn cd ( rb vbg in in at ap nn vbd rb in pp$ jj nn , pps vbd pp$ nn in at np . cc in vbn jj nn , cc jj in vbn jj nn , pps vbd jj cs at jj np in vbn nn in nns . uh . ppss jj nn in jj nn , wpo in dts nns ppss ql jj rb dod vb , cs in at jj nn ql vbn in ppo , cs in dt nn ppss vb at nn . ppss rb vb ppo , ppss jj nn , cc ppss rb vb cs pp$ jj nn bez nn . to cc vb cc nn md ppss be nn . cc nn ' fw in nn ppss vb cc vb . cc abn ber vbn . ql jj nn rb nns ppo . nn jj pp$ jj , jj nn . cc in at ap nn in pp$ nn nn md vb pp$ jj , jj nn in ppo . in at nn in at vbn jj , at nn vbz rb . cs cc at nn in jjt . rb ' rb ppss vbd . rb ' rb ppss vb . rb cs ppss jj vb , at jj nn vbz in ppo , cc vbz pp$ jj nns . cc nn bez nn , cc nn bez nn . vbn in pp$ jjt nn in nn , cc ppss md vb cc vb ppo . cc in pp$ jjt , vb ql jj jj nn . cc cs ppss jjt nns in jj in jj nns , ex ' rb cs in rb cs rb vbz jj . uh , ppss jj nn , in pp$ nn ppss jjt ppo , cc cs at jj nn in nn , ppss vb ppo rb in ppo . ( nn , vbn nns in nn . at cd nns vb rb in rb pp$ jj nn . np , in at nn , vbz pp$ nns , pp$ jj nn vbd rb in ppo . ) ppss vb pp$ jj , jj nn . vbd ppss * rb . cc bedz pps vbd in ppo . cc do ppss rb vb dts nns . ppss vb jj . cc ppss md rb vb . ppss md vb . cc ppss md rb be nns . vb at nn in dts jj nns , cc nn in nns . nn md * vb ppo . at nn nns in pp$ nn . nn nn in nns nn cc nn . pp$ jj vbn nn vbz ql jj , cc vbg in dti jj nn . uh , uh . rb nn , rb md ppss vb in ppo . nn cs ppss be , ppss nn rp in nn . cc ppss bem nn vbg rp in nn , vbg rp in ppo . at nns vb . jj nns . vb , cc * . ex vb at nns . uh , ppss jj . rb do ppss nn in pp$ nn . cc ppss nn cc pp$ jj nn . pp$ jj nn , ppss vb * . uh , jj . wdt hv . . ( nn np ( ppss vbn in ppo . ex vbz pp$ nn . cc pp$ bez jjr . ppss jjt * wrb vbd ppo , rb vb ppl vbn . rb jjt * pp$ nn , rb vb jj nn . nn vb cs in ppo , wdt ppss jjt * in ppl , uh , ppss jj . ex bez dti vbg nn in ppo , ppss jj nn , in wpo abn pp$ nn bez cc nn , abn pp$ nn jj . in ppo , pp$ vbg nn , pp$ vbn nns do rb vb ppo . uh , ppss nn nn , ppss vb jj , ppss rb hv pp$ jj nn , pp$ vbn nn . rn rb in jj nn , nn vbd pp$ jj . vb . vb rp , cc vb at nn . nn nn in ppo . ppss vb in ppo . md vb be vbn in ppo . rb ppss vb ppo . at nn . at nn . vbd np , vb in pp$ nn , jj nn . np ' rb vb , at cd vbn in nn ' jj nn , vbd rb vbd in pp$ jj nn , cs cs pps vbd in pp$ jj in nn ' jj nn . cc at nn wps hvd nn pp$ nn hvd vbn at jj nn nn to vb rp . cc in at jj nn nn rb rb vbd at vbn nn in jj , vbn nn . cs at jj nn vbd rb cs at nn ' jj nn , np vbd nn in at nn in in np , np bez in ppo , jj nn . jj . nn ' bez at jj nn . ql vbn , rb vbn . vb ppo vb at nns , cs ppss md , jj nn , cc vb at jj nn in ppo rb , to vb in at jjr nn cs dt . vbg np , at nn in vbn nn rb vbd in at nns in in cs * at nn bedz vbn rb . in at nn abn at jj nn ' np nns vbd pp$$ . ppss vbd at ql jj nn . cc vbg at vbg nn nns in at nn , cc jj at vbg nn , np vbd ppo cs at nn in ppo . vbg to vb in ppo at od nn cs cc vbd rb at nn ' jj nn . vbn in pp$ nn , cc rb rbr vbg in at jj nn cs pps vbd , at nns vbd rb in nn , cc vb rb vbd : in in abn pp$ nns to vb at jj nn ber ql jj cs pp$$ . cc nn , nn , cc nn , nns cc nn , jj nn bez vbn . cc cs ppss md vb in wdt nn dt nn vbz . . . ( nn cd ( vb ppo rb . rb ppss vb rp at ap nn . cc in cd nn in pp$ nn pps vbn at nn . cs in at nn wps vbz at jj , nns vb at nn in dti jj , jj nn , wp$ ap nn cc nn cc vb ppo ql rb at ql jj , cs ql ap at ap at nn in nns . rb in dts ap nns in jj ' vb ap in at nns dod vb in ppo in at nn in nn . . . ( nn cd ( . . ( nn cd cd np cd np np nn np np nn nn nn ( np vbg in at nn . np vbg ppo . ppss md vb rp at jjs in nn in nn nn , nn . at nn bez vbg rb , cc at nn nn bez abn in vbn . md ppss vb ppo , nn . vb pn . vb ppo . cs ppss hvd nn in nn nns , ppss ' nn vb ppo rp rb . uh . -- in in np ' nn nn . -- in nn . uh . at nns ber vbg , nn . md ppss vb ppo rb . vb pn , cc vb pn , cc vb pn . at nn vbz , cc pps hvz * vbn rp in pp$ nn in nns rb . jj , cc vb in ppo . -- in in nns cc nns . pps vbz ppo in at nn in vbn nn in dti vbg vb . vb rp pp$ jjs in nn in nn nn . uh , nns . jj nns bed vbn in jjt nns , cc dt nn in nn in pp$$ rb nns in at nn in nn . md ppss vb dt . uh , pn cc rb vb rp pp$ nn in nns in nn nn . wdt at nn rb rb . nn md nn ' fw vb ppo in nn , dod ppss * vb cs at jj bez at jj nn . uh , vb nn , vb nn . . . ( nn cd ( . . ( nn in cd nn in in np np np ( np cc nn vbn in ppo , cc vbg jj nns in at nns rb vbg . ql , np . ppss md vb dt nn ex ql ap cs ppss vb , cc ppss md rb vb in ppo wdt ppss bed rb rb vbg . cc wql jj rb bez pps cs ppss vbd at ql jj . dod ' nn ppss rb vb cs wdt nn nn nns in , dt nn md vb pn jj in pp$ nn nn , rb cs cs pps bed vbn in nn nns rb cc nns in vbz rb . vb , rb . dod ' nn ppss vb rb . uh , vb ppss dod . wdt rb . nn ' jj nn vbd pp$ nn cs dt nn , wrb * pp$ nn . rb , cs ppss ber vbn in nn nns rb cc vbz rb . wrb at nn md at nns vb jj in dt vbg nn rb . wrb , pp$ jj nn , ppss hv ql jj nn , cc ppss md ' nn vb jj rb . vb ppl . ppss ' nn np , cc at nn in nn , nn . md vb nns in pp$ nn nn . nn ' nn ppss vb , rb , cs in dts jj nns at nn nn nns hv jj nns . rn ber nns , nn . cc jj , rb , cc ppss ' ppss vb ppo at ap nn . od vb pp$ nn rp in at nn in at nn rb , cs , cs ppss md vb at nn . rb vb . wdt ' in at jj nn in vbg at nn ' jj nn in nn in at nn , cc vbg rb in at nn cs jj ' nn vbd dti nn in nn in abn in at nn . nn ' nn ppss vb , ppss nn in nn , cs at nn md vb in at nn in at nn , cs at nn bez rb vbn . wdt ber ppss vbg rb , rb . * cd nn in at cd vbz nns , cc np , in in rb , nn , cc abn in ppo , in in bed in at ap nn rb , in pp$ jj nn , cs abn at nns in cd cd nns rb vbg at nns . wrb , ppss nn in nn , ppss , ppss vb ppss md hv at nn in at nn vb rb . . ( nn cd ( in at jj nn in nn vbg rp at nn in pp$ nn , cs at nn nn ' in jj nn , cc vbg rb cs pp$ nn . wrb nn ' nn ppss be jj , nn . ppo ' in jj to be jj . wrb nn ' nn ppss , rb . dti nn in abn at nn md be jj . nn nn ' nn vb cs , np . ppss rb vb ppo ql jj . rb , wrb at nn ' np vbd rp , pps ' vb jj to be jj , cs ' np at nn . cc ppss bem rb jj in dt nn . rb nn . vb at nn rb , cc vb ppo . vbz in ppo ppss ber vbg rp dts nns rb cs cs ppss bed rb vbg to be vbn rb . vbg dts cd nns rb , nn , vbz cs vbg at nn ' np nns in ppo . cc wdt jj jj nns ppss ber , to be jj . dts ber pp$ nn nns , uh . wdt at nn ppss hv , rb . nn nn , nn , cs at nn bez vbn rb . cs pps bez , pps nns in at jj jj nn , cs . ex , nn wps vb rp , cc ppss ' ppss vbn . ql . ap in vbg nn , vbg in nn bez at ql jj . nn vb , rb vb rp pp$ nn nns , md ppss . vb ppo . ppss vb in jj in nns rb , nn . cc vbz in ppo , at jj jj nn md rb to be vbn in abn nns rb . at nns vbg rp dt nn , vb to vb rp at nn , nn ' ppss vb . ap in vbn nns . at nn nn nn in nn nn in nns , nn . ql ap nn in nns cc nns in ppo . ppss md vb at nn in nn , cc vb rp at nn . rb . uh . vb . ex vbz pp$ nn rb . np , np , cs at nns wps vb in nn md be ql jj . dt bez at jj nn , nn . . . ( nn cd ( . . ( nn np cd np nn ( in at ql jj nns in at nn , at nn in at fw ' jj nn in nn nn hvd ap nns ben rb vbn in at nn in pp$ jj nns , rb cs nn nns hvd ben vbn in ppo in in cs ppss bed jj in in cs dti nn in at nn bedz jj . in at jj nn cs dt , cs at nn bez cc at vbn nn in nn in at nn , pps bez in at nn jj to vb at nns in at vbz , in nns , vb jj cc jj . pps bedz rb in at fw ' nn . in rb at nn at nn hvd * vbn to vb at vbg nn in wdt ppss vbd in at nns . pps bez at nn wps rb dti cd md vb in dti nn in jj nn . dti nns in nn , at nn vbd ql rb , cs in at jj nns in np cc np in in cd vbn rb cc at ap rb in in at vbn nns in at jj cc jj cc nn in nn in nns bed vbn rb in at nns , cc vbd jj rb in nn , cs at nns in . . ( nn cd ( at nn , wdt rb ber vbn in at nns wrb dt nn in vbn nn bez in at nn . at cd jj jj nns bed rb vbn cc vbn , cc at nn in vb bedz vbn rbr rb . rb cs at nn rb vbd in at nn in dti nn rb . cc at nn in in in at jj , jj in nr in nr in in wdt pps bedz to vb , cs jj , bedz rb ql vbn in at nn . in in at nn in at nn , pps hvd rb vbd in in pp$ nns . cc cs pps bedz rb vbg at nn cs in pp$ nn cs jj , vbg at nn rb , uh . at jj nn . at nn vbd vbg jj jj . rb . at jj nn vbd jj . rb at nns bed vbn , in at jj nn in nn . at jj nn . uh -- pps in vb , rb , nns . at nn vbg in nn , cs ql jj at nn md ql rb hv vbn at jj nns vbg ppo . in nn in at vbg nn in pp$ nn in in to vb rb , cc in dti cd in at cd in cd nns , dti vbn nn in at nns in at nn , in in np hvd at rbr vbn at nns in at nn in in wql rb cc rb , in in cs pps rb vbd rb in nn nn nn in at nn . cs vbg in pp$ nn in nn , pps rb vbd cs pps at nn . at nn nn in in vbg jj nns dt nn cc cs in in bedz vbg rb , cc vbg jj nns in at jj nn ' np vbd nn , in in at jj cd , in vbn nns vbn , in nn in jj nns . at vbn nn in at nn vbd at jj nn nn to vb rb , cs pps bedz jj nn in abn at nn in at nns . at vbn nns in at nn bed rb vbn , cs ppss vbd rb in at jj nn . np bedz at jj , jj nn . cc rp in np ' nn nn , in dt nn wrb pps vbd at nns , ex rb vbd at jj nn . cc cs nn in pp$ jj cc jj nns cs in at nn pps rb vbd ppo in ppl . pps md hv vbn ppo rb , pps vbd , rb , ex ' in at ap nn cs pps vbd in ppo . in in dt cd in at vbn nn . vb ppo vb ppo in in vb ppo . jj , cs ppss , wps hv . . ( nn cd ( vbn ql ap jj nns , jj , cs ppss md vb ql rb . vbn . nn md vb . rb , rb . cc nn in at nn . in in dt ' np * jj . rbt vb ppo . -- in nn . nn ' ppss vb ppl in dt . nn ' ppss vb at nn rb cs ppss vb . -- in ppss vb to vb at jj nn in ppo . cc wql jj . jj in nn cc nn , in in dt ' np jj in np np . ppo ' in at jj nn cs ' vb ap jj in dt vbn nn . -- in at ap nn pps vbd in ppo . -- in at ap cd . dt cd in in ppss vb ppo rb . pps md hv vbn ppo in at ap nn ppss vb rb . -- in nn cc pps md vb vb abn pp$ nn . doz pps * vb pps md * vb pp$ nns in dti nn . hvz pps * vbn pp$ jj nn . cc in dts ap jj nns , nns pps * pp$ nn in jj jj nn in at nn in vbg nn . cc in dt ap nn , dod pps * vb cs pps md hv at nn in nns . cc md dt vbn jj nn be rb vbn to vb at jj nn ' jj nn rp in nn in ppo . -- in rb , pps md vb ppo at jj nn in cd nns cc ap , cs dt nn vbn in dti jj nn . cc vb in jj nn , pp$ nn vbz dt nn md , cs np hv pp$ nn . cs , rb , pps bed dt nn in in vb rb , cs nn md * be pp$ . uh . bez pps vbg in pp$ nn . rb , rb rb , in in in rb , pps ' vb vbg . vbg . rb , cc rb jj , cc rb rb rb . nn md ' nn vb ppo , rb , jj nn . * nn . * nn . * nn md ppss vb to . abn dt ppss jj . jj nn in pp$ jj jj nns , dt bez abn ppss rbt . rb , cc vb ' in at nns hv nn ' pps pp$ nn . vb ' nn abn in ppo ber nps . jj np vb . -- in cc bez ex at ap nn . ql jj nn . -- in vb ppo at nn to be vbn nr . wdt . vb to vb dt jj nn ' in vbg nn in pp$ jj vbg nns . rb at nn md vb ppo . uh pps bed vbn rb . vbn abn rp in nns cc nns . vbn rp to vb in nns in dt nn nn . pps md be ql jj cs at vbn nn , rb . nn md * vb at nn . md * rb vb pp$ nns . abn nn , vb ppl , jj nn md vb ppo in at jj jj nn . wdt , rb , vbz . at nn bez nns in nns rb , cc vbd np at rbt . nn vb rb rb in at jj nn , in cd nns cc at jj nn in ppo cc nn . -- in nn , rb , ' rb rb . -- in bez nn at nn . . ( nn cd ( wrb pp$ nn vbz at md in be nn in pp$ nn , vbg nns cc nn rb . -- in cc md ppss be at nn , rb , cs in -- cc rb , rb , cc abn rb vbg , pps vbd at vbn nn ' jj nn in at nn . in dt nn , np ' nn nn nns in . pp$ nn dt nn . at nn , cc np md vb to vb pp$ nn cc nn rb . -- in uh np . np . -- in nn . uh . uh . -- in cc cs ppss vb ppo * to nn , jj nn , wps md vb in wdt jj nns np ' nn nn dt nn nn md vb , in abn at nn . jj np , wrb ber ppss . md ppss . md ppss . -- in at nn hvz vbn rp cc vbd , nn . at nn cc jjs nns ber vbn cc vbn . pps vbz pp$ nn . jj abn . uh np np , ppss vb pp$ nn in ap . abl bed at nns wps rb vbd vbg in in at jj nn ' rb vbn nn , cs cs np ' nn nn hvd vbn at jj jj nn to vb . at rb vbn nn vbd cs at nn ' jj nn in at nn . np vbd vbg in at nn . cc vbg in at nn , pps vbd at nn in nn in pp$ nn , cc vbd at nn . pps ' vb ql jj rb , in np . vb ppss rp , cc vb ppo , cc vb ppo . nn md vb in at nn rb . ppss vb ' nn wdt to vb . . . ( nn cd ( . . ( nn nn cd np np ( rb nn at * in rb in vbn nn vbd in jj jj nns in jj nn , cc vbg in at fw ' jj nn nn , vbd ppo rp cs nns ' nns vbn . at jj , jj nn vbd rb , cs nn cc nn vbd jj jj nns . at jj nn vbd in at nn . vbn in at jj nn nn , at jj nn bedz rb vbn in at nn nn in pp$ nn . wrb pp$ nn . . ( nn cd ( nns vbd rp in nns . np , cs in vbn jj nns cc nns , vbd rp pn . at nn bedz cs at jj in jj nn , cs rb vbz in nn cc nn . rb vbg at vbn nn , np vbd rb . cc at nn at vbg nn rb vbd rp pp$ fw , pps vbd in nn at jj nn ' np nns vbd rb . cc wrb pps rb vbd in at nn , pps vbd rb , cc vbd at nn ' in jj nn , cc wrb at ap jj nns bed vbg in pp$ vbg nn . uh , uh , pp$ nn . ppss rbt rb be vbn rb in at nn in nn in at nn . uh , vb . abn ppss nns in pp$ nn , ppss vb at nn in ppo . nn in at jjr nns . vb . at nn , ppss vb at nn . cc rb vbd rb in dti nn vbd , pps vbd in at nn , rb vbg wrb at nn bedz vbg . nr in fw in nr , nn , vbd at vbn nn . ppss jjt . jj ppo in pp$ vbn nn . vbg nr in dt nn in at nn , cc at nn jj . in dt at nn bedz vbn . in at nn ql rb vbn in np hvd rb vbn at cd rb . cc pp$ ql vbg nn md hv ben at nn . vbg pp$ nn abn nn in at nn , np vbd cd nn in at vbz . pp$ vbn nn rb vbd . in at nn pps rb vbd to vb . vbg in ppo np vbd , cc uh . at cd vbz vbd nr , cc at fw bedz ql rb vbg nr . cc cs at od jj nn md vb rp rb in at nn , at jj nn in at jj nn vbd , ppss hv ppo . pps hvz vbn rb . cd . np , ap nn ' jj nn vbd pp$ vbz in in dt ' np abn . ppss hv rb rb vbn in abl at nn , ppss vb ppo . rb . cc rb cs hvz pps vbd in ppo , uh , vbd at jj nn , rb . rn , pps md nns be vbn , cs nns cs dt hv in ap cs cd nn vbd in nns in jj nns . at . . ( nn cd ( jj nn , cs vbn in at nn ' jj nn , bez , cs abn vb , rb cd in at nn vbd in nn . rb pps bez * to be rb vbd in , cs jj nns md be . in nns wrb at nn hvz rb vbn at nn , cs cs in nn in dti in at nns cc vbg , at nn in at nn hvz in nns ben rb ql jj . abn pp$ nn nn beg jj , cs cs at rb jj nn bedz in at ap nn cs at jj nn ' in vbg nn . cc in dtx nn , at nn rb rb , in ppl , vbz at jj nn rb vbn cc vbn . cc cs at nn vbz be vbn , at ap nn vbz abn at nns wps md be in at nn . rb bed at nn cd vbn in at jj . rb vbg in at nn , cc vbg at jj vbz , at jj nn , in at jj in pp$ vbn nn , rb vbd at jj nn in at nn , cc vbn cs at nns bed rb vbn , vbd rp pp$ nns in at nn ' jj nn to be vbn rb . at nns bed rb rp . cc rb ql at fw vbd pp$ jj nns in at vbg nn , in at vbn jj pn hvd rb ben vbg ppo . rb , wdt bed pp$ jj jj nns , np vbd pn , cc rb pps vbd abn nn nns . cs np cc nn in in wps in dti jj nn vbd rb to be vbg pp$ nns in in rb rb vbn . cs in at nns , cs dti in ppo jj vbd , pp$ nn in np bedz jjr cs pp$ nn in nn . cc ql rb cs , at nn nns vbd ql ql jj . cc cs vbn , pps bedz rb in at jj nn nn in pp$ jj nns in jj nn ' nn . in at nn at jj nn vbd at nn in vbg nns . cc jj to vb in pp$ jj nn , pps vbd at vbn nn nn in nns in at nn pps hvd at nn in vbn in at nn . ppss jj , jj nn in nn cc nn ' jj nn . nr ppss vbd ppo , cc in in nn at vbz md vb hv vbn ppo . ql , ql . cc nn bez nn in at nn nn in nn . . ( nn cd ( rb . cd . np in in at nn in at nn . at nn in vb , cc at jjt in at nn in nn ' np nns . jj . nn , rb , in at nn vbg at nn pps bedz rb rb to do , bed jj jj nns , wp$ nn md hv ben to vb at nns in pp$ nn in at nn in pp$ jj nn , in at nn ql jj cs dt in at vbn vbz . rb , at jj nn rb vbd cs to vb in jj nns , cs rb jj , bedz * at nn to be vbn rp in jj nns , in dti nns cc jj nns . nns , vbd pps , rb vbg in at nn , cs at nn vbd ppo at nns pps hvd vbn , pp$ nns , at nn vbd jj nn ' np nns . cc rp in dt nn in nn nn md vb pn in pp$ jj , wps md vb ql jj cs dti . vbn nns in jj nn bed vbn in at nns , cs dt bedz vbn . cc in vbn nns ppss vbd wdt nn md vb . cc np vbd rb . in at nn in at nn in vb np vbd rp at nn nn in at nn , cc rb vbg in at nn at jj nn nn vbg , vbd ppo vb ppo rb , in pp$ vbg at nn . rn , in at nn , cs rb jj at jj nn in dt nn nn , pps vbd at vbn nn jj in at nn in ppo , cc ql rb vbd cs , ap nns , at nn rb vbg at nn ql rb . rn vbg in dti jj jj nns in ppo in in cs jj in at jj in at nn , cc rb vbn to vb at nn in at nn , bez jj in in pps vbd in nn nn . cc vbg in at nn , vbd rp at cd vbn nns rb , cc rb vbn at nn in nn in pp$ nn , in cd in at nn in nns . in od , at nn vbd rb cc rb , vbg cc vbg in dtx nn . cc in ap pps vbd in pp$ nn , wrb np , wps hvd ben rb vbg in dt nn , vbd rb rb in at nn , cc vbg pp$ vbn nn in ppo , vbd , in in vb ppo , in ppls , cs np be * at nn in at nn nn . at nn bez jj , cc dt nn vbz ppo . pn cs dt ppss vbd rp , in pn cc pp$ jj . . ( nn cd ( nns md vb jj nn cs pp$$ , cc pn cs dt ppss vbd rb . in pp$ jj nns in nn cc nn , ppss rb vbd nn in abn pp$ jj nn . . . ( nn cd ( . . ( nn hv cd np nn nn nn ( cs rb at jj fw hvd ben ql jj rb dt nn , at nn cc nn hvd cc ql rb ben in nn . vbg in at jj nn in ap nns in vbg at nn ' jj nn , dti nns , cc ap nns , rb wrb vbg , rb vb in nn at nn . cs in at ap nn , cc rb ap in nn ' jj nn cs pn rb , rb vbg rp in at jj nn at nn vbd in at nn , cs rb cs at vbn jj nn in nn at nn . pps hvd ben rb in at fw . at jj nn cc jj nn vbn vbd , rb jj , rb in at nn in at in nns . nns cc nn hvd vbn ppo . at nn cc nn hvd vbn ppo . abn at nns hvd vbn to vb at nn wps vbd ql rb . cc jj in abn dt , pp$ nn vbd np , cs pps vbd to vb in at nn , * ap nns in at nn nn , cc pps vbd wrb pp$ nn bedz ql rbr , cc vbd pp$ jj nn in at nn nn cc nn . at nn bedz vbg rb . jj at nns vbd in nns . rb , rb . nn at nn . cd nns vbd . at jj in jj jj cc at nn nn . vb at nn , cd in ppo , ppss ' jj nn . ppss vbd in at jj nn , in at nn ' ppss vb nn , wrb at nn , in at jj nn in at nn , bedz rb rb vbg in at jj , jj in vbg nn . at nn vbd at nn , cc vbg ppo rb rp , in at vbg nn in nns in at nn , rb wdt at nn . . ( nn cd ( in nn vbd , rb vbd in at jj nn vbg rb , cs np vbd in ppo . np vbd in ppo , cc bedz rb vbg dti cd cc cd vbz to vb at jj nn in nn to vb rb , wrb at jj nn , wps bedz rb vbg abx ppo cc at nn , vbd jj to vb . uh , ppss nn ppo . dt nn vbz rb vbn , jj nn cc jj hv vbn ppo . ' np nn , jj nn . jj nn cc jj , hv ppss vbn ppo . ppss vb ' nn to vb . cc , jjr rb , nn vbz ppo . * ppss ppo . nn vb at nn , nn . cc rb cs pp$ nn vbz . in dts jj nns in nn ' rb * jj cs vbg , ' rb in at jj , wps ' jj fw ' nns vb . wdt ' in dt . ex rb ' np at vbn nn in nn nn ' jj nn in vbn nn . cc vbz pps ' vb ql jj . wrb nn ppss vbn . in at ap jj nn in nn , nn . jj . ppss ' nn vb at nn in dt . nn vb * , nn , cc ppss bedz vbn rb . in at nn in nn , uh . uh , at ap nn , pps ' vb jj . rn ' in at nn in nn . at nn vbn in rb jj nn , cc rb jj in nn . wdt bez vbn in in in in wdt . rp in at nn . at jj , jj nn vbz abn vbg nns in ap . rp in ppo . ql . at nn bedz vbd . at jj nns rb vbd rp in at jj vbg nn jj , cc rb , rb , at nn vbd to vb . in nn , rb vbn cc vbn in at vbg nns , at jj nn in at nn vbd at jj nn to vb rb . vb rb . vb . at vbn nn vbd rp in cd jj nn . at vbg nn bedz vbn . nn vb at nn , at nn vbz at nns , cc rb at jj nn nns at nn in nn . cc np md vb abn . vb in rb , jj . nn rp , nn . cc vb ppo , vb at nn vb dt nn , cc vb ppss at nn . vb in ppo . . . ( nn cd ( ex pps vbz rb . in ppo pn ' np vbd . cc in ppo , at nn vbz vbg rp in at nn in at nn . vb in , vb rp , jj . dts nns vb jj , cc vbg rp : vb in vbn , cc vbg jj . uh , np . vb to vb . uh , np . uh . wpo vb ppo np . uh vbd in at jj in nn . uh ' rb vbg . vb ' ppss vb rb cs ppss nn ' nn vbd ppo rp rb , nn . ppo nns rb . ppss vb pps ' vb vbg rp . vb ppo , np . vb ppo rp . ppss vb in at rb rb . nn . ex ' in pp$ nn rb vbg nn . at nn . at nn . vb ppo rp in in ppss vb in at rb rb . nn nn . uh , uh . rn ' np np , vbg to vb in nn rb . nn , ppss jj nn , vbd at nn , vbg ppo in at nn . rb in at nn in nn . at jjr nn rb nns at jjr , vbd np , vbg . nns rp in dt nn . wrb nn ppss np bedz , nn . jj rb , nn , jj . uh , uh . cc wps ber ppss , nn . nn vb * pp$ nn in at jj nns in pp$ nns . uh np . dt nn md be at nn in jj nns in nn in . wps ber ppss , nn . nn in nn , nn . nn ' nn in nn . rb , nn , nn . uh . uh . uh . cd cd nns in nn nn in np . cd nns jj in in vbz rb in in jjt vbn in dt . uh , nn , nn . wps ' rb vbn np at nn . ex md be at nns in at nn in nn . uh , ppss vbn nns . vb rp rb . ppss dod vb dt jj nn , cc hv vbn ppo , ppss jj nns . rn , nn . np ' nn nn md be np ' rb nr rb , cs nn nns . ppss jjt pp$ jjs nn , nn . ppss ber vbn in ppo in nns vbn in pp$ nn in nns . vb , vb ' np rp . wdt ' in dt . rn ' jj nn jj in nn , rb vbg in nn ' jj nn , cc vbg ppo . uh , rb , hvd jj np cc vbd ql jj at nn cs dt , rb pps hvd fw ' nns ben vbn . dt vbz in ppo , uh , cs at nn in nn . pn cs jj nns md vb in . uh , uh , vb jj nn rb vbn cc nn dts cd nns rb . at jj cd in at jj , cs ppss md * vb dt vb . . . ( nn cd ( uh , uh , cc md ppss ppo , cs ppss md rb vb ppo in jjr nns cs ber rb . vb , rb , in pp$ nn . uh . ppss nns in nns abn nn , cc in nn ql jj , uh ppss . vb at jj nns jj in vbg nn . cc nn , cs jj , cc vbg * wdt pps doz , rb jj in at jj nns in nn cc nn . vb . nn vb jjr vbg ppo in pp$ jj nn , cs cs ppss vbd at nn ' nn . ex vb cd nn nns rb , vbd at jj nn . cd nn in nn , at ap nn in nn . cc rb ' np at nn in at jj nn in in abn vbg , rb . vb ppo , uh . nn vb ppss hvd rbt hv at jj nn rb . nn ' ppss vb in . np in ppo . . . ( nn cd ( . . ( nn fw cd np np in np ( vbg rb nr in rb in nn ' rb vbn nn , cc pp$ nn rb vbn in nn ' jj nn nn cc nn . at fw vbd in pp$ nn in at nn . vbg ql jj at nn in jj vbd nns , vbg at nns , cc cs jj , rb vbn in jj nn nns , in nns rb jj . abn dts vbd at jj jj nns vbg dti jj cc jj nn . in ap , wrb at nn vbd rb in at nns , cs pps bed , in at jj vbg in nn , cc in at jj nn wps vbz in at nn , bedz vbg in at nn in jj nns . at nn in in rb vbn in nn in in bedz vbn in at nn ql rb jj cc jj in in cs abn in vbn nns in at nns in abn np ' rb vbn nns in in dt cd cc abn , ppss vbd in pp$ nns , cc in at nn in dti nns vbd , cc vbd , cc vbd ql rb vbg , cs at vbn jj nn , cs cs jj nn vbd in nn . at jj cc vbn nn in at nn vbd pps bedz nns , cc vbd . cc at nn nns vbd . . ( nn cd ( vbn . rb at jj nn in in at jjt nn in abn in in vbd cs at jj jj nns wps bed vbn , bed at nns in rb vbn nns in at nn . rb in pp$ nn , vb dod * vb in dt cs jj nn , wrb pps vbd in at nn . pps bedz rb vbd in ppo in nn , * jj in vbn jj nns . pps rb vbd , cc rb vbd at nn . dts jj nns at nn hvd vbn bed at nn in jj nns in nns , cc dti jj nns wps hvd vbn pp$ nns , cc dti nns wps hvd vbn pp$ nns , md hv vbn rb at nn cc vbd nn in ppo , vbg cc vbg in pp$ jj nn in nn . cc dt rb at ql vbn dti in ppo , cs ap nns vb at ql jj nn in nns , vbg * rb in pp$ jj nns wrb in nn , cc rb in at jj nn in pp$ jj nns cc fw in jj nns , vbn rb jj in at nn rb . in at nn , in jj nns , nns hv ap cs rb ben vbn in nns . cc at nns in at nn bed vbn to vb at ql jj nn in at nn in cd in pp$ nn cs nn . in nn in nn dt nn vbd in pp$ nn in pp$ nn in nn in at nn . cc cs pps bedz cs pps bedz * rb abn vbd in pp$ nn ( in nns rb vb rb in at nn nn ) , cs pps bedz rb in at nn , ex bez rb at nn . cc , be cs cs pps md , pps hvd * ben jj in pp$ vb , wrb at nn bedz vbn in in at nn cc at vbg in in cc vbg rp , ppss vbd at vbg nn in at nn . cc vbg rp , at ap vbn nn in jj nns in at nn in at nn . at nn in jj in in at jj jj nn in in bedz vbn in at nn , wrb pps rb vbd jj in at jj nn . cc at nn vbd to vb ppo , cc at nn hvg jj nn in dt nn pps hvd vbn , cs cs pps rb vbd , cc at vbn nn rb vbn in pp$ at nn . cc at vbn nn in vbn nn vbd at nn in at nn , cs cs to vb ppo pp$ nn , cs in nn cc at jj cd . cc rb at od nn in at nn wps vbd at nn to vb rp in at jj nn , in at jj nn ' in jj . . ( nn cd ( jj nn . dt nn bedz vbn rp in at jj . cc ap , rb , vbd in dt in at nn . qlp , in dti nn , ppss bed * vbn in dt nn , in ap cs at jj . cs ppss vbd ppo , * cs at nn in nn in at nn , cc cs at nn in at nn rb vbd . ppss vbd cs rb ppss vbd at nn in dts jj nns ppss hvd vbn at nn rb . cc rb at jj nn vbd rb . at vbn nn in jj bedz rb to be vbn . np bedz vbn to vb in ppo . cc cs at nn in jj nn md be vbn , cc cs in at jj nn in wdt vbd at vbg nn in at nn , abn nns bed jj in dti nn cc wdt bedz rb vbn in pp$ jj nn , wdt dt md vb to be . rb , ppss bed vbg to vb at nn ' in jj jj in at jj , wrb in ap jj nns cc nns np vbd at nn in pp$ nn . at nn in jj in at nn . vbd np , vbg . ql jj , cs , ppss md vb , vbd np . pps md vb at jj qlp cd , vbd nn , at nn rb md vb ppo rb . vb ppo rp . ex ' rb pn rb in ppo , vbd np , in at jj nn . vb ppo , nn . do * vb in ppo rb in in at nn , ppss vb . do ppss vb ppo . vb ppo . cc md ppss nn rp at nn , nn . vbg pp$ nn cs in at nn . rb . cc md ppss vb at nns , nn . vbg pp$ nn cs in at vbg in nn . rb . cc md ppss rb vb rp at ap in nn , nn . vbg pp$ nn cs in at nn in nn . rb . wdt vbz ppo in dt . vb at nn in jj in at nn , cc at ap . -- in np . np , np . nn , vb rb in ppo . pps vbz rp in at jj . at jj pps md vb . in at nns pps vbz . rb ppss nn ' nn cs dt . nn vb at nn in nn vb , cc pps vbz ppo cs at nn . cc ppss vb at nn in np , cc pps jj vb pp$ nn in ppo . ber . . ( nn cd ( abn pp$ nns to vb in pn in dt nn . cc rb ppss ' rb vbn to vb at nn in jj in ppo . ppo ' nn cs vbg at jj nn . vbg to vb at nn in at ap nn rb . nn nn ' nn cs dt vbg nn in nn in in ppss nn ' nn vb ppo in abn . pps ' vb vbn . pps ' vb * pp$ nn . vb nns ' nns do nns . ppss ber pp$ nns . nn cs to vb in nn pn cc jj , jj , jj -- cc in jj jj nns , pn wps rb vbz in at nn , cc bez in at nn wrb rb , cc vbz in at nn in at nn . * at jjr ' jj nn , cs ' nn in at nn in at nn , cc in at nn in at nn . ppo ' in at jj nn ' np nns to be vbg vbg nns . nn . wdt at nn ql jj nns hv in nns . nn vb at jj nn in cd in cd wps vbd rb in at jj in vbn jj nn rb . cc cs ' np at nn ppss rb md vb in jj nn jj nns rb , wrb ppss vbd pp$ nn in nn in at nn . ppss md hv vbn ppo in pp$ jj jj nns to vb rp in ppo . cc vb in vb . ex ber at nns in nn cc nn in nns . vb ppo vb . nn in at nn . vb at nns . vb rp at ap in nn . nn ppo rp rb , cc vb ppo in at nn in nn in at nn ' jj nn . bed rb jj nns vbn rb in at nn . dti jj jj nns , rb , md be vbn rp in at nn , cs ppss md do at nn . cc ppss ' rb vbn in jj nn jj . ppss nn ' nn vb . nn in at nn . vbg rb in at nn in nn nn . cc rb nn . ppss nns in nns vb nn in nns cc nn in nns , ql rb cs nns cc nns . ppss vb in at nn , cc in at nn , cc in at nn . * in ppo to vb at wrb cc in in pp$ nn , cs pps be ql vbn vbg , cc rb ppss vb ppo cs ppss md . nn . nn ' ppss do at nn , rb , rb . nn ' ppss hv ppo in in vb ' ppss vb in in wql ap in at nn ' jj nn , abn vbd . cc ppss ' ppss vbn . dti nn , ppss ' ppss hv ppo cd jj , np ' rb in vbn nn in nns , dt cd nns rb vbg abn nn in at nn . rn , cs at nn vb rp , ex ' rb be cd jj nns abn vbg in cd nn , at nn * vbn ql rb in at nn . vb nn , jj in nn , nn in nn , cc vbg in nn . vb ' nn in ppo . . . ( nn cd ( . . ( nn np cd np cd ( at nn vbn in cd nn in nns , in at nn in nn cc at jj nn . at np jj pp$ nns . at nn in vbd ppo rb vbg in at jj nn in ppo vbn in at nn in pp$ nn . -- in np vbz rb in at nn in nn , cc vbz np vbg ppo . rb , nn . ppss md be in ppo rb rb . pps vbz . * dt nn vbz in pp$ nn ql rb cs dt nn . -- in jj nn in at nn . wdt ' rb rb . nn jj , nn . cd . np ' np nns . uh , vb , nn . vb at nn . vb ppo , nn . pp$ nn vbz jj in at nn . uh . at nn . uh . cs pps doz , nn , cs pps doz . ber * ppss at nn in nn . vb , dod * dt nn vbn in pp$ nn . nn vb pps dod , nn . doz at nn nn , nn . rb qlp . cc nn ppss * rb at nn . rb , nn . ppss vbn rp dt nn rb cs at nn in np . cc ppss ' ppss vb ppo rb in vbg ppo in pn rb . rn vb ppo . ber ppss * at nn , abn in vbg , in in vbg , vbg , jj jj vb , to be cd nn vbg nns , cc at ap nn nns in nn ppo rp , cc rb rb nn in nns rp in dts ap nns . ppss ber ql vbn cs at nns , cc cs ap in at nn in in in abn in nns . cc ppss do * vb pn , uh . nn do cs ppss do . at nns rb . vb ppo , do ppss * rb vb vbg in at nn . at nps , ppss vb , vbd nns wrb vbg rp at nns in nns . cc at nn in nn in at nn vbz , nn in nn . do ppss rb . vb , nn . do ppss vb . uh , ppss ' in jj qlp , nn , in dt . cc at nn wrb at nn in nn vbn nn md . . ( nn cd ( hv ben cs ex bedz pn in pp$ nn , nn . cc at jj nn bez jj in ppo . vb in ppo . rb , cc cs ' nn cs at nn rb ' np at vbg in nn . cc wdt in abn nns vbz at vbg in nn bez dt in in rb ' np pn in . cc rb , at nn in at nn in pps vbz ql ap at ap , np . hv ppss rb vbd vb at jj , cc vbd at nn nn in at nn nn , vbg in . nn , nn , ppss ' jj in in np . wdt ' in dt . wrb , nn , nn , pps ' vb rb at nn in nn -- cs in in dt ' np abn , nn . fw , fw . vb rp . nn bedz rb to vb , nn , cs in in nn ppss at nn in nn . do ppss vb pp$ jj nn rp in ppl . vb in pp$ nn . np . cc vb dts nns rp in nn . pps vbz rb . wps bedz jj , rb . cc nns vb jj in jj nns . nn ' ppss vbd cs at nn in np , cd in at np , bez vbn in at nn nn in at nn . vbz in ppo dti nn in nn vbz rb jj nn , rb , rb in pp$ nn . pps ' vb rb in at nn in in jj jj , ppss vb ppo . pps ' vb vbg dt nn in in vb , vb . jj . rn ppss vb rb . dt jj nn bez at nn , cc ppss ' in at nn in jj nns in in nn , nn . ( nn in ppl . ) ex ' in at nn . ex ' jj nn . at jj nn vbg at jj nn . jj cc jj md rb be vbd rb . vb . dt nn vbz in cd nn in nns , jj in nn in nns . at ql jj nn , cs nn . nn in vb . ql nn ' np nns vb . uh . wql jj ber abn nns . wdt nns jj ber rb , cc jj nns . rn rb ' np at ql vbn nn in jj nn , in at jj nn , vbd at jj nn in at nn cc nn in ql vbn nn . at nn in jj in at nn . doz pps vb rbr . md ppo be cs in dti jj nn at nn bez , in abn , cc at nn in nn . nn ' ppss vb in dt . cc at . ql rb vbn . . ( nn np ( bem ppss in at jj nn in nn , cs pp$ ap nn , at nn jj cd , vbz cc jj nn in ppo . md ppss rb hv vbn , np , in dt vbn nn . nn vb rb . vb ppo * vb dt nn rb wrb ppss vb rb . rb , rb , np , ppss ' ppss vb dt rp . ppss do vb ql jj nns in ppo . dti jj nns in at jj nns md jj in ppo . . . ( nn np ( . . ( nn np cd np nn np np np ( rb nn , at jj nn , at np , bedz vbd , vbg rb rp in at fw , abn pp$ nns rb vbg in nns . in at nn at fw bedz vbg jj nn in at nn . cc cs at jj in vbn nn nn vbd rb in ppo , at jj nns abn vbd rb cs jj nns wps ber vbn , cc abn nn vbd in at vbn nn . jj nn . pps vbz jj nn , vbd at jj nn . cc cs pp$ nn , wps , in nn in nn , vbd rp in pp$ nn . cs pps md rb vb , np ' nn nn bedz vbn . hv vbn at jj nn . rb , nr . hv ppss vbn at jj in nn rb . vbg pp$ nn , np rb vbd dt jj nn . cc md rb hv vbn vbd at nn , wrb at nn nn ppl , hvg vbn pp$ nn ' jj nn , bedz vbn vbg pp$ nn . at ap jj nns , cc pp$ nn in nn rb vbd at fw ' jj nn in nns , cc pps vbd in at nn . rb pps bedz vbn in jj in at jjr pps vbd . cc at jj nn bedz vbn . wrb bedz pps . -- in * vbn . -- in * vbn . vbd np , rb vbg . wql bedz pps . pps vbd cs ql jj in at nn in at nn jj , cs cd in at nn ' np nns bed vbn in . . ( nn cd ( at nn in nns , wdt hvd vbn ppo dti cd cc cd nns in at nn . cc cs ppss bed rb in jj nn in nn , at jj nn cc nn in np np hvd rb vbd rp rp in at jj nn , * ql rb in nn . cs , at od vbn nn in in at vbn cd in in hvd ben rb vbn in nn . cs at jj nn in at nn , dt od nn in in at jjt jj in abn in in vbd to hv vbn in nn in in in ap , cs rb cs at nn in at nn in nn md vb pn in ppo . in at nn pps vbd at vbn vbn nn . cc rb at jj nn in vbg jj nn . cc cs cs pn ap . wrb pps bedz vbn cs at vbn jj md hv rb vbn rb in pp$ nns , ql rb vbz . ex bedz dti nn , cc at jj nn , cs rb . at vb nns bed vbn in at nn . nn vbd rp . cc vbn to vb rp pp$ cd rb in jj nns in in cs vbg in nn in at od cd in at rb jj nn in in at nn hvd * rb ben vbn to vb dt nn in pp$ nn cs in nn , cc , in at nn , to vb pp$ nn in ppo . cc at nn in pp$ nn beg in ap jj rb , pps vbd abn nn in in vb in vb in in in at vbg nn . nn at nn in ppo vb in nns in at nn . cc at ap nn rb in at nn in rp . cc cs wrb pps hvd rb vbn at jj nn to vb at vbn nn in at jj nns wrb ap vbn . cs pps rb vbd to vb pp$ jj nns to vb abn in ppo . cc * vbg pn , hvd rb vbn rp . rb vbd , cc vbd pp$ nns . cc cs pps hvd rb vbn vbg cs nn nn . rb * at ap nn in at vbg nn hvd ben vbn . at nn vbd , at nn nn rb vbd rp to vb pp$ nn in vbg at fw . pps vbd cs nn to vb in pp$ jj in at nn . in vbg in at nn dti cd cc cd nns rb , in jj nns , cc rb vbg at jj nn , cs pps bed . nn md vb pn rb , vbd np in nn , cs dti cd in dt vbg nn vbd rp dt nn ' pp$ jjt nn . nn , pp$ nn in -- pps ' vb rb vbd jj to vb ppo rb . wps rb vbd in cd jj jj in nns vbg in . . ( nn cd ( cd vbg jj in nn in at nn in at vbg nn . vb , nn , rb vb wql jj pps vbz in in jj in at ap nns in pp$ nns in in nn in in ppo vb ' nn at nn in in ppo md hv ben at in in pp$ nn , pp$ jj nn bez in ppo . in np ' nn nn in in ppss vb , ppss vb in in rb vbd at nn nn to vb , wps rb rb hvd cc rb vbd pp$ nn . in cd -- cc in cd nns vb ppo nn pp$ nn in in ppss md rb vb in ppo , cc rb vb in ppo in in cs ex be at ap nn in in in cd -- cc in cd nns rb in in ap cs in in ppo md , uh , ppss md , cc ppss md do dt nn . pp$ nn . vbd np , uh , pps ' vb pp$ nn pps ' np vbd . nn vb rb at nn cc nn in in wdt vbz nn . ppss md vb dt nn . pps ' np vbd in at nn in ' ppo , ap nn , vbd at jj np nn vbg in ppo . ppss vbd . abn in ppss vbd pp$ nns . rb , cs pps rb vbd rp , wdt vbd dt nn in at np ' bez at ql jj , bedz at nn , cs * rb bedz cd in at nn ' np nns in at nn in at vbg nn ' jj nn . cc in at nn in at ap nn ' np nns , in at ap nn , cc in at ap nn , vbn in at nn in at jj nns in at nn , ex hvd ben rb dt nn . cs dt in at nn , at jj nn bedz vbn in at nn in at vbn nn . wdt bedz rb vbn in ppo in pp$ jjs nn ' cc rb vbg at jj nn in at jj in nn in jj nns , wps bez , wrb vbn in vbn cc vbn nns , rb to vb rp at nn rb . cc at nn , in dti jj jj nn , hvd vbd in vbg abn dt , cc * cs vbn in ppo in nn ' jj nn dod pps vb in pp$ cd rb vbg nn . at ap nn , cc cd nns jj , wp$ nn in at jj cc nn nn in at np ' rb jj nn , hvd rb rb vbd to vb ppo in at nns cc nns in at nn ql rb at nn in abn pp$ nn . cc doz pps rb vb , cs np nns md vb at nn in jj jj nn rb in ppo , in at vbn cd cc cd nns ' nn in dti ap nn cs pp$ jj . rb cs pp$ od nn in at nn ' jj nn md be jj in dti nn nn . . ( nn cd ( in at nn ' in jj cc jj nn , cc jj nn cc nn . nn , rb at nn bedz rb vbg pp$ jj nn in nn . cc vb rb vbd cs at nn , vbg at nn , cc in at ap vbg in pp$ jj . nn md * vb , vbd at nn , cs ppss vb rb in ppo . do in ppo cs ppss md hv ppo do in ppo in at jj nn . in ppo rb hv at nn , nn nn in in cs cc at nn , cc vbg rb in nr rb in in at nn in pp$ jj nn rb in in rb , rb , ppss vbd . ppss vb ppo in in nn , nn , nns , rb , cc vb in to vb in at nns . nn , vbd np in in vb * at nn in nn . rb in at nn wps rb vbd at nn in in nn np , ppss md * do ppo . ql rb ppss vb nn . jj vb , jj vb . nn vb ppo , nn , cc md ppss vb ppl , cc ppss md vb . cd . np , vb in at nn nn , cc in cd nns in dt jj nn vb rp abn nns : rb vb rb rb , cc vb at nn vb ql rb . rb vbg , in vbn nn , pps vbd in pp$ nn , vbg at jj nn jj in dt jj cc jj nn in pp$ ql jj nn . cc vbg in pp$ nn , np rb vbd in at nn . ap vbd cs vbn in pp$ nn , cc vbd in pp$ nn . rb at cd nns vbd pp$ vbz . cc rb cs at jj nn bedz in nn , pps bedz vbn to vb rb cc rb in at jj nn , wql jj , in at nn . dt nn cc cs pp$ nns bed vbn rb . jj cc jj , pps vbd in nn . rb pps vbd in at nn nn . cc rb pps vbd ppo in ppo . cs abn at nn , pp$ nns cc nns bed rb vbn in nns , cs cd jj jj nns , wrb at nns ber jj in at nns . cc in ppo rb vbg nn cc vbg , jj nn , ppss rb vbd cs dt nn cs rb vbn in nn , rb vbd in nn . pps bedz np , vbg in pp$ nns , cs ppss bed * . . . ( nn cd ( . . ( nn cd cd np nn ( ( nn vbg to vb in nn . np vbz ppo in at nn to vb . ) np , nn , ppss vb ppo ppss md * vb np rb . at nn bez vbg wrb np md * vb ppo in ppo , rb md * hv ppo in ppo . ex bez dt in ppo , jj nn , wdt ppss vb rb vbg in pp$ nn . cs nns vb . cc in dt nn , pp$ nn vbz pp$ ql vbn nn . do ppss vb rb rb , wrb ppss md vb ppo , cs cs ppss vb at nn . rb , nn , ppss nn vb rb in pp$ jj vbn nn . dt nn in ppo , ppss md be . ql , ql , ql . ppss hv * at jj nn , nn . do ppss cc vb jj ppo in pp$ cd vbn nn . rb vb in ppo , nn . ppss vb at ap , cs ppss vb at nn in ppo . uh . nn in cd nns , dt vbz ppo at nn in at jj nn in nn . -- in cc at jj . cc jj . -- in cc vbz cs in nns -- cs vbz in ppo rb . pps vbz ql jj rb . ppss vb ppo , uh , cs np dod rb vb jj jj np , wp$ vbn nns rb vb jj , in abn at nn in pp$ vbg nn . cc ppss md rb vb ppo , uh , cs np dod ppo . uh , ppss md vb in ppo . cs ppss jjt rb in ppo ql rbr , np ' nn nn vbz rp in ppo . nn vb ppo rb . pps md be . uh jj nn , nn , nn . vb rb , cc ppss md vb ppo . hv at nn , in nn rb bez jj . vb , cc ppss md rb vb pp$ jj nn in at nn , cc rb vb cs ppss bem rb . cc rb ppss vb ppo . pp$ nn . -- in np . jj nn ppss , nn , cs at nn in pp$ nn . ql : np in rb vb ppo . cc cs pps vb in dt , in in np in rb vb ppo , vb wdt md vb . . . ( nn cd ( np vbz . np nns cd nn rb . ) rb pps dt nn vbd . ppss vb in pp$ nn , in in cc ppss ' rb rb . rb bed rb jj np rb ppss md vb ppo , cc pps ' vb vbg . uh . uh . uh , nn , nn . wps ' rb vbn np . pps md be rp rb . vb ' ppss vb at nn . wdt . dtx nn , cc nn , cc nn . cc rb rb ' np at vbg ppo . pps md be at nn . pps vbd ppo to vb rb : nn , cc vbd ppo dt vbn nn bedz pp$$ . rn , rb , ppss ' jj nn ppo , in at nn , in at nn ' in jj nn , abn pp$ nn cc pp$ cd nns in ppo . rn , pp$ jj nns vb , in pp$ jj cd in nns jj nns rb vb in nn , cc nn ppo in nns in nns cc nns . uh . wdt ' in dt . nns . nns . at nns abn vb vbg . vb in at nns . jj to vb ppo . vb rp , fw . wdt at jj nn , rb , wrb at jj nn ' jj nn in jj nns in jj nn in pp$ nns . -- in np , hv ppss vbn cd np . -- in at ap jj nn , cd nns jj , vb in nn nn , cc jj . vbd in at jj in nn rb . in in vbn ppo . at . ql rb , vb rp rb , nns , cc vb ' np nn nn in abn nns . nn nn at nns . nn in ppo . vbd cd nn in at nn . nn in abn nns . -- in nn . rb rb , ppss vb nn in -- uh , nn , nn . nn bem rb rp in jj wrb ppss vb in ppo . cc rb ppss ' ppss vb , cs dt nn vbz nns . cc ppss nn rp . cc nns vb to vb ppo . . . ( nn cd ( . . ( nn cd cd np nn ( cc rb cs in at jj nn cc nn , cs ql jj cc jj at jj nn , np , in in abn ap vbg nns vbn in in vbd to hv vbn pp$ nn in at nn in nn , to vb ppo at ql rb rb . rb , cs pps vbd ppl rb in at ap nn cc nn wrb pp$ vbg nn . . ( nn cd ( hvd ben vbn . rb cs at nn hvd ben vbn wdt in at ap nn vbg hvd rb vbn np np . in in cc rb cs abn pp$ jj nns in jj nns rb vbd to vb at jj nn in wdt at jj jj vbd pp$ nns , cs vbg cc vbn in . rb pps bedz cs ex vbd at pn in at jj nn ' np nns , wdt pps bedz ql jj in jj nns to vb . cs at jj jj nn , wdt in at jj , nn , cd nns ' nn vbz pp$ vbg , jj , jj nn . cs np ' nn nn rb rb vbd rp in at jj nn in at jj nn . pps vbd in ppo rb , cs abn pp$ nns , nns , nns , nns , bed vbn to vb in pp$ nns , cc * vb rb at ap nn cc nn . in dt nn nn rb , abn nn , vbn cc jj , vbn . np at ap vbd to vb at nn . np at ap vbd to vb cd . rb , nn cc nn , nn cc nn , vbd nn in jjt nn , cc vbn , in at nn , in at vbn nn in jj ' nn nn nn . cs nns , ppss rb vbd in at nn , rb jj cs at jj nn ' jj nn nn bedz in ppo . cc dod ppss rb vb ppo in pp$ ql jj jj nns . wrb pps vbd at nn cc pn bedz in ppo . rb ppss md hv vbn cs rb cs np ' np nns rb vbn at nn ' np , at jj np ' nn nn vbn pp$ . cc rb , in ap , in dti jj nn , in nns vbn ppo . abl at vbn , vbg nn vbd to vb at jj np rb . jj jj nns vbd ppo . cs at nns vbd jj in ppo . abn jj , cs pps vbd , cs rb pps bed at jj nn , cc rb at jj nn nn in at nn in dti jj nn ' jj nn . cc dt nn bedz rb vbg rb . in * in nn , rb , hvd np rb rb ben vbn in nn , cc vb rb . pps md vb rb in nns : cc rb vbd cc vbd . pp$ jj cc jj nns dod rb vb in in ppss cd nns rb vb . cc , in dti nn , in nn cc nn md at nns rb vb rp at nn , cs np bedz in ppo . cc vbg in pp$ nn in nn , cc rb vbg at nns in cd . . ( nn cd ( vbg nns , in in at jjs in nn cc at jj . cc rb ppss vbd ppo vbg in at nn in nn , in in pp$ vbg nn vbn in at nn , cs cs to vb . pp$ nn jj rb in pp$ nns . rb cs rb jj pps vbd , wrb at nns cc nns bed vbn rp , cs pps hvd * vbn in pp$ nn . rb vbn in dt jj nn , ppss md rb vb rb cs , in abn dt , pp$ nns bed rb vbn in nns . cc cs pps bedz rb rb vbg ppo . at nn , cs pps vbd rb in at nn in at jj nn in at nn , cc at jj nn in jj vbd in nns in nn in dt nn in vbn nn cc nn . at nns cs at nn hvd jj , at ap nn ' jj nn vbn in ppo . cc rb , nn in nn , cc nn in nn . pps vbd at ap in at nns . wdt pps vbd in at nn cs nn pps vbd in . pps vbd in at ap jj nn . dt bez , pp$ cd ap nns , in in nn cc nn : nn pps rb vbd . cc vbn pp$ nn . wdt rb vbd abn jj , cs vbn nns in nns vbn rp , wdt rb vb rb in in jj nn , cs vbn in at jj vb . cc cs pp$ jj nn bedz rb vbn cd nn in nn . cc cs at np ' rb jj nn bedz in nn cs pp$ jj . rb dts cd rb vbd to vb in in cd nn in at ap in in cs in jj nns dti vbg jj nn vbd ppo jj . cs abl at jj nn vbd rb to vb at nn . rb , cc in at nn in vbn nn , ppss vbd nn in cs rb . cs in nn ppss vbd to vb cd nn . in nn , jj nns bed abx , ql rb cs vbn at jjt jj nn . in nns , in jjt nns , in at ap nn , ppss vbd rb vbn in at nn . nn in pp$ nn , at np in at nn . cc rb rb vbg in dt ap . cs cs in at np np vbd pp$ vbn nn , in nn at np pp$ vbn nn . cc rb , rb , dod vb in in in pp$ jj jj nn , cs rb , jj , cc at nn , rb vbn in pp$ nns , in in np vbd at jj nn . at np cc pp$ nn . rb rb abx vbd jj rb , cc at jj . . ( nn cd ( nn vbg ppo . at jj nn vbg at jj nn . in be dt np wdt pps md , abn nn cc nn bedz jj nn . in at od jjt vbg in at nn , pp$ nn nn bedz vbn in rb in in nn at nn in nns . -- in cc abn in at nn , cs in nn cc in nn , at ap nn at nn , in at jj in at nn ' jj nn , bedz vbn in in wdt nn ' ppss vb . -- in jj . jj . cc wrb cd cc cd nns hvd vbd in , in vbg at nns in vbg np . cc at nn hvd rb ben vbn . at nn jj nn vbd jj in pp$ nn ' jj nn . in ap , in rb abn in at nn nns . pps vbd to vb , rb , cs np cc nn md * rb vb at nn pps vbd . cc cs dts nns bed rb pp$ , pps rb vbd in rb vbg ppo , wrb pp$ nns md vb to vb ppo . nn md hv at od nn in at jj ppl , in in pps vbd . rb . np md hv at nn . cc in pp$ jj nns pps vbn at nn in jj nns . cc vbg at nn rb , in at ap vbd nn , to vb in at jjs in nn nn , pps vbd at cd nns in at jj in jj nn . cc vbg cd in pp$ nn vbd at nn in at ap nn , in nn to vb ppo in at nn . dt vbn , in dt nn rb in pp$ nn cc vbg in at nn , pps vbd rb in pp$ nn , vbg in cd in at ap . vbg pp$ nn rb in nn , np , np . cc vbg np . cc rb vbg pp$ nn vbg nn in at jjs nn , vbd , in in vb at nn , nn in in ppss vb ppo in pp$ nns , np . rn vbg pp$ nn in at nn , pps vbd at nn in ppo to vb ppo in pp$ vb , np beg at pn wps vbd at nn in ap . cc rb vbd in ppo . cc rb , in cd nn vbg in at jj nn , np vbd rb in at nn in nns cc nns , in in rb , jj , dt nn , cc cs , in in in at jj vbn nn vbd in ql jj at nn . wrb in vbg in pp$ nns in dti jj rb vbn nn in at nn , wdt nns to vb at nn , at nn in nn bez vbn rp in dt nn , cc vbn rb in . . ( nn cd ( at nn . in dts nns , pp$ vbn nn in nn bez rb vbn in jj nn in dti cd nn wps hvz at jj nn in ppo . cs in abl at nn in vbg nn , wp$ jj jj nns rb md rb be rb vbn in wdt bez vbn in ppo in at nn . cc wrb at nn in nns in dts nns ber beg at ap nns vbn rp in at nns , pps md be cc at jj nn , cs , jj in at jj nn , at vbn nn md in dti nn in at nn be vbn rb cc vb abn vbg in at nn . ql nn ' np nns in dt nn bed * jj . at ap jj nn in ppo vbd to be , cs np , rb at cd ap nn wps hvd rb vbn to vb ppo in pn in at jjt nn vbg in nn in in cd in dts rb , wp$ nn in at nn in rp pps hvd vbn to vb rb . in in pps bedz jj , cs dt bedz at ap nn pps md vb in pp$ nn . rb vbg pp$ jj nn in abl at rb vbn nn ' np nns . rb , at od nn nn bedz vbn rb . cs pps hvd ben rb cd nns . cd in dts jj in vbn jj nn in vbz wdt ql rb vb rb rb in at vbn nn in nns in nns in dts nns . cd in dts nns vbd vbg cc vbg in pp$ nn in at nn in rb jj vbz . rn pps vbd at cd nns rb rp in at nn . rb vbn rb , cc vbd jj rb in pp$ nn . cc in pp$ nn vbn in at jj cc jj nn , np vbd * to vb dt jj nn . cc , rb , md dti pn rb hv vbn ppo rb , pps beg at jj nn . rb rb rb at ap jj nn vbd to vb dti nn in jj nn in rb at nn . pp$ nn , pp$ nn , nn . rb vbd at jj nn , wps beg vbn in at jj in nn in nn , vbd rb in np , cs ql jjr cs pp$ nn , cc in at jj nn in nn vbg ppo . cc rb at nn nn bedz cs at jj nn ' np nns . at jj vbn nn in pp$ nn : in at nn , at jj nn vbd rb in pp$ nn . . . ( nn cd ( at nn vbd rb in np ' nn nn , vbg pp$ nn to vb ppo , cc rb np , pp$ nn , vbd cs np md be nn in np . cc rb in at vbg in at nn bedz dt nn vbd jj . np ' nn nn bedz rb vbn . at jj nn vbd rp cc rp in ppo . rb in nn in at nn : cc in ap vbn . cs in at nn in dt nn , at jj jj nn bedz rb vbn , vbg in dt jj nn in at nn . . . ( nn cd ( . . ( nn in cd np nn np np nn ( at jj fw vbd rp . at vbg nns cc nns vbd in . at nn in jj in nn rb rb vbd . cc dt nn , ql rb vbn at nn , bedz vbd . cs pps vbd rb , abn nns bed vbn in pp$ jj nns , vbn vbz , wdt , in dti vbg in nns , vb at nn in nn in at nn in cd cc cd nns . vbg to vb at jj , vbn , cc vbn nns . in at nn ' rb vbz bed vbd at vbn , jj nns , cc dti ap vbn nns , in wdt hvd rb ben at jj in nn . cc ppss rb vbd in dt nn , cs rb cs ppss vb in at vbn , abn in vbn , cc vbg nn in at nn . hv vbn at jj nn . vb . vbd at nn in vbn nn in pp$ jj . cc in pp$ nn pps vbd in at nn . hv vbn ppo . at nn bez * rb vbn wps md rb do dt , vbd at ap , rb vbg in at vbn nn in at nn , wp$ vbn nns dti jj nns bed jj in vbg rb . * vbn . cc jj nn ' rb vbn nn in at nn , np vbd ppo rp , vbg in in vb ppo , np . . . ( nn cd ( rb in dt nn ppss vb pp$ nn . vbn in nn , cc vbn in nn ber dts nns . cc ppss vb in nn ppo vb in dt jj nn in at nn , wrb at jj jj ql vbz pp$ vbn nn . rn np vb ppo , jj nn in in vb ' rb ppss cs in in vbg in at nn in in ppss vb cc cd in cd jj nns , wps bed jj rb nr . cc bed jj cs nn . rb cs pn ppss vb . at nn bed vbn cs ppss vbd . ppss vb in pp$ nn . rn vbg in pp$ nn in in ber ppss jj rb . vb at nn rb in at nn , cc vb at nn . rb , rb in -- uh . nn in in vbg in at nn in vbn nns in in md at nn cc at nn in in np rb . rp nn . vbd np cs nn in pp$ nns . cc at rb vbn fw bedz * jj qlp to vb at nn in at nn cs at nn rb vbn cs pps vbd at nn . * ql jj , rb , cc cs dti in at vbg nns md hv vbn pp$ nn in pp$ jj nn . cs np rb vbd in at vbn nn , at jj nn in jj vbg in at fw ' jj nn vbd in jj nn . uh . rb . vb rb , nns . vbd at nn nn in pp$ nn . in jj , uh , ppss nns , ppss vb pp$ jj nn . ppss cc vb ppo pp$ jj to vb ppo pp$ nn . . . ( nn cd ( . . ( nn np cd np fw ( pps bedz at jj nn in jj nn . at nns in nn cc nn bed ql jj in dt abn in vbg nn . rb , at jj nn bedz rb jj cc jj , in at nn ' ppss vb , cc at nn cc nn in jj nn vbd in jj , jj , vbg nns , cs np ' nn nn in pp$ nn . . . ( nn cd ( np , cc rb , in jj , vbd at nn in jj nns in jj , vbn nns . dts bed at jj nns in at jj nn . cc in cc rb in at nns , ql rp in at jj nn , vbd jj nns , nn in nn , cc nns . cc dts bed at jj , vbn , jj nns in at jj nn . cc cs rb vbg in , at nn bedz rb in nns cc nns in . dts cd vbd cd . pps bedz rb at nn , cs pps bed , cs vbn ppo . rb , cs at jj nns cc nn , at nn vbd vbg dt jj nn in dt jj cc vbg nn . rb cs nn in nn . cc in at jj nn in at nn , at jj cc jj nn in in ql vbn rb in at nn in in vbn at jj , vbg nn , at vbg nns , in wdt at jj nn vbd pp$ nn rb . vbd rp cc vbd . jj cc vbn in nns . rb jj cc jj . pp$ nns vbg cs nns , cs rb nn in at nns in nn . vbg nn vbd rb in at nn in at jj . vbg pp$ vbn nn in at nn in at jj nn ' jj nn in nn . uh , jj nn , cc nn in at nn . jj vbn nns cs nn abn in ppo . jj nn in nn cc nn . wql jj bed ppss in jj nn ' cc rb in vbd nn . cc rb hv ppss vbn ap np cc np , vbg in vbd vbz , rb nn in pp$ jj jj . vbg in at nn in vbd nns wdt vbd in at jj in dt vbn in in nn in pp$ nn . rb vbg at nn in at nn , np vbd rp at nn , cc vbd wrb pp$ nn in at nn vbd cc vbd in pp$ nn , at ap cc at ap cs pps vbd in jj at nn . cc at jj nns in dt vbn nn dod in ap vb to vb , in at nn , at jj nn in pp$ nn . dt jj , jj nn , cs jj nn , dod in ap nn cc vb ppo . at nn in nn nn , ql jj jj in in vbg in in rb vbd jj nns in pp$ jj nn , cc dod vb to rb vb in ppo , cs cs rp cd , cs rb jj cc jj , pps md rb vb ppo in ppo . . ( nn cd ( nn to vb cc to vb . in in pp$ jj nn np vbd at nn in at nn . cc dod abn at jj vb jj nn cs cs pn ppss vb . np vbd at jj nn . vbd ppo , wrb pps rb vbd in at nn . cc pps vbd to vb in pp$ jj jj nn at jj vbg wps vbd rp in at nn in at nn rb . jj * to vb ppo , cc be vbn in ppo , pps rb vbd rb in ppo , cc vbd rb . np vbd . np . uh . uh , np . pps bez at jj , jj nn , cc at jj vbg nn . rp abl at nn in in ql ap abl at nn cs dt in in ppss vbd pp$ od jj in in at nn in nn in cd . cd in in cd in in cd nns rb . -- in rb . cd nns in jj vbg . cd nns in nn , cc nn , cc nn in nn . cd nns in at jj nn . in cd nns hvz vb vbn at jj nn , in cd nns to vb nn in at nns in at jj . rb cc rb , np , rp in dts cd nns ppss hv * vbn cd rb . wrb ppss vb in dt nn ppss hv vbn . at nn in nn pps hvz ben . at vbn , vbn in nn in at nn ' jj nn , wdt vbz cc jj nn in dti nn in at jj nn in in -- uh , nn . nn . nn in nn nn in jj nn . -- in wrb ppss vb in abn dt . rb abn in vbn , * ql rb vbn in ppo rb in -- cc wrb in cd nns ppss hv vbn in jj vbn nn in in jj nn in at jj nn in pp$ nn in in wrb at jjt nn hvz hvn jj nn in pp$ jj nn , cc vbn at nn ' in jj nn in pp$ jj nns in in rb , jj nns rb , in dt jj nn in nn ppss vbn in cd , cc vbd in nn nn at ap nn , vbg cc cd nn in pp$ nn nn in in nn . nn . -- in in at nn in pp$ nn jj . rb , ppss vbn cs jj nn wrb ppss vbd ppo , np . cc rb , at nn , at nn , at vbg nn cc at vbg nn , in wdt , in at cd nns jj nn hvz rb , rb vbn pp$ nn in in ap at nn in at nn . -- in rb , rb . wdt at cd nns ' nn in in nn in in jj nn , hvz jj nn ben . wrb dt nn in at nn . wrb jj , . . ( nn cd ( cc nn at nn in at nn , cc at nn , cc at nn . wql at jjr cc jjr bez vb rb . vb . uh , np . bez pps * jj , cs in dt jj nn ppss vb , cd jj nn md hv ben vbn in in ppo . rn , vb dt jj nn rb . pps nns ppo , cs ppss vb to vb . nns ql jj dod rb vb cc in in dti nns . cc do ppss vb ql jj , ql ql , ql jj , np . nn vb jj jj , vbd , cc vbd , cs cs ppss bed np , vbg in at vbn nns in nn . nn . nn . nn . -- in vb pp$ nn . in in vb pp$ nn . -- in nn . nn . jj , vbg nn in jj nns , hv ppss vbn ap nn to vb ppo . cc vb cc vb rb rb jj . rb . vb rb in ppo , np . vb ppo vb in at jj nn . pps bez jjr cs to vb in nn cc nn . rbr cs to vb in np . in at jj nn . in at jj nn in nn . dt bez at jj nn , nn . ppss vb pp$ nn cc pp$ nn in pp$ nn . ql , ql . vb in nn , in nn . -- in jjr * wrb ppss do . wrb vbn nn vbz nn in np np . dt nn md * be pp$ . ql , ql . * in at ql rb nr ppss vb in dt nn . uh , pp$ nn . pp$ nn . jj nn . jj jj nn , in abn . wrb md dti cd vb nn in dt vbn nn . rb in ppo . vb ppo vb dts jj nns . vb ppo nr . nn cc nn , rb , ber np ' rb in in nn cc nn in pp$ jj , jj , vb in nn nn . rb cs pp$ , nn , ber at nn cc nn in pp$ vbg , vbg , jj jj nn . rb . vb ppo rb . -- in dt nn vb ppo vb at nn . wql rb , wql rb , uh pp$ nn , md ppss nn in pp$ nn to vb jj np rb . nn vb , nn , ppss hv dti jj jj jj nns , rb cs dt , in nn . ppss hv , ppss hv . nn hv vbn ppo in in dti nn nns in at nn . in dt nn in in rb , pps bez pp$ nn nn rb in in at nn rb vbz . vbz rp in nn . cc pp$ nn vbz ppo in ppo , in jj jj ppo . wrb ppss bem rb in at jj , cc md rb vb rb to vb ppo rb . np pp$ np , pp$ np ppl . pps vbd cs pp$ nn , at nn , md be vbn in at nn to vb at od nn in pp$ nn ' jj nn . rb , rb . ql rbr . pps bez vbn . ppss nn in np . vb , pp$ nn , vb rp at nn , . . ( nn cd ( cc vb ppo rb . vb , vb . at nn ' jj nn in at nn . at nn ' jj nn in at nn . cc np ' nn nn bedz vbn . cs at vbn nn nn pps vbd , cc vbd pp$ ap , vbn nn in at nn . wdt bez ppo , wdt jj , jj , jj nn bez pps . wdt nn , vbn nn cc nn , cc jj , jj nn vbz ppo . cs in abn jj nns cc nns , ppss rb vb vbg , cc vbg , cc nn ppl in abn at nn . rb vbg ppo jj to do wdt in pp$ jj jj , jj nn , ppss nn * ql ap cs vb . bez np , np . bez pps ppss , np , cc wps , wps vbz dt nn . cc cs at jj nn vb * in ppl . cc bez cs at nn in nn in nn . cc cd ap nn md vb , cc in dti jj nn . wql rb md dt cd jj nn nn . dt cd jj nn vb nns . cs np doz dt nn , doz dt nn , doz dt nn , cc * ppss . in nn , nn , ppss ber vbn rb cc rb in dt nn , cs rb jj , cc nn bez at nn . cc abn at nn , uh . cs vbg nn , cc dt jj nn . vb . vb rb vb . wps vbd ppo in ppo to vb cc vb cs vbg in nn . wrb do nns vb , nn . wps ' nn in nn , wrb at nn ppl bez vbn in at nn . cc pps bez at jj , jj nn , cc at jj vbg nn . cc at nn vbz rb , cs cs pps vbd in at ql in rb nn . ppss hv ben vbg nn rb in at nns in at nn , np , cc at nns ber vbg in at jj in jj nn . vbg . rb , nn ppss wrb ppss md , ppss abn vb in ap in at nn . vb . rb , cc nn in nn . cs ap nn ' rb vbz vbn rp , cc vbd in at nn in vbn nns in in np . cc vbn in at nn ' jj nn in nn , at nn hvd vbn rb . np vbd at nn to vb rp in at ap nn . cc vbd in cd vbd , vbn nns in at nn rb . np bedz rb vbg in at ap nn . . . ( nn cd ( . . ( nn np cd np nn in in nn np ( dt nn , in at jj in nn , wrb at jj nn in in cs pp$ jj in nns in in vbd rb in at nn in wdt pps vbd , cc vbd in pp$ nn in nn , pps rb vbd rp pp$ nn rb , vbg rp at nn nn cs at jj nn ' jj nn md , in vbg rb in dti jj nn . pps vbd cs at jj md be jj . rb cs jj nn , rb in at jj nn vbn rb in at vbg nn jj , bedz jj in abn at nn . cc bedz dti nn vbn wrb , in vbg at nn , cc rb at nn in jj , cc rb vbg at jj nn in at nn ql rb cs jj , vb rb vbd at nn ' jj nn to be rb vbn , cc at nn to be vbn . at jj nn vbg dts nns bedz ql vbn in nn , in at nn in at jj jj in at nn rb cc rb rb , jj cs nn , cc vbg in at vbn jj nns vbg ppo , at vbn jj in jj nns in dti jj nn in vb , in at nn in at jj , jj nn . nn at nn in nns . vb abn nns . vbg in at nns in cd vbn nns in at nn nn , nn vbd at nns in jj nn vbz cs ppss vbd in jj in at nn , ql rb dod ppss vb in pp$ nns in pp$ nns . wdt nn ' ppss vb . vbd np , vbg pp$ nn in at nn . pn , pn , uh . bedz at jj nn rp in nn . nn ' jj nns . -- in nns . nn cc rb , cc in abx nns . abn vb beg vbn , pps rb vbd rb at nn in nn , vbn in vbg ppo in at jjs jj in nn nn . cc in at ap nns ppss bed vbg ppo rb , wrb , cs cc cd nns in at nn rb , cc cs vbg rb in at jj nn in at jjs in nn in nn cc nn in jj in nn , . . ( nn nns ( pps vbd at nn in jj nn in at nn , ex pps vbz . -- in rb pps vbz . at vb cs at nn in nn . pps bez np np . vbn in at nn wdt vbd rb vbn rp in at cd nn in nns , at nns in nn vbd in at nn to vb at jj jj ppss hvd ql rb ben vbg . np hvd rb vbn pp$ jj vb , dti nns in at ap nn in nns , np vbg rb in ppo in at nn in at nn in jj nn , cs cs at jj ' nn nn bedz rb in at nn in nn ' jj nn . in dt nn at jj bedz rb vbn dti nn cc ql rb , in at nn in at nn vbg pp$ jj vbg nn , cc rb vbg pp$ jj nn in at nn . to at jj nns pps vbd at ap jj nn ppss hvd ql rb rb vbd in at jj jj cc jj nns . cc dod pn in ppss vb ppo rb . vbd np , jj at vbn nns abn in ppo . nn vbd ppo rb cs ap nn , nn , cs nn np dod , cc ppss vbd rp , vbd np . * at ap nn . * at ap in in at , at nn bez pp$$ , nn vbn at nn in ppo . nn rb . pn in ppss md hv vbn at jj nn rb . ex pps vbz . ex pps vbz . -- in rb pps vbz . ex rb . -- in ex rb . pps vbd , in jj in vbn , vbg , jj nns , vbn in at jj nns in at jj ' in jj nns . pps ' vb vbg to vb . in nns . rp nn in jj in nns . vb in cd nns . cd . np , vb , vb in nn , cc vb at nn . nn rb . qlp , jj at nn . ql . rb , nn , jj . ex vb nn . ql , ql . rb jj nn . abn jj at nns rb . vb in , vb in . jjr ppo , np . np . jjr , jjr , in in jj , jjr . cc pps vbd in at nn in at nn . pps bez vbg rb in nn , nn , vbd np , ql rb in ppo . md hv vbn at nn rb . be jj , nn . vb in at nns . rb in at nn . -- in nn rp . vb ppo . -- in vb ppo . ql . rb cs . nns , nns . rb abn at nns cc np ' rb bed vbn . abn at nn in nns vbn in in abn at nns vbg . in vbg nn , vbg in nn . cc np vbg at nn . at jj , nn in nn . . ( nn cd ( vbn rp np ' rb jj nns . at jj nn vbd pp$ nn . cs jj nn nns , pp$ nn vbz vbd in at nn . cc rb rb ppss vbd at nn . cs ppss vbd ppo , at nn vbd rb ql jj . vbd vbg at nn in pp$ nns . vbd at nn in nn , ql rb pps vbd . in nn at jj nn vbd ql rb pp$ ql jj nn , cs pp$ jj vbg nn bedz rb jj , vbg in at nn cs cs at vbn nn , cc rb vbn in at vbg nn in jjt , nn , jj nn . pps vbd at jj , vbn nns in at rb vbg nn in . cs pps , rb rp in at jj jj in jj nns , vbd at vbg jj nn in pp$ jj , jj nn , at jj vbg rb vbg at nn . cc rb , at jj nns ql vbd rp in at vbg nn in pp$ jj nn . cc in dtx nn jj nns vbd cc vbd in pp$ nn . cc dts bed vbn rb in at nn nns in nns in jj nn rb vbg at nn , jj in pp$ jj nn . cc cs in dti nn in nn vbg in at vbn nn in at jj , at jj cc vbn nn in at jj nn vbn in at jj jj ' rb rb . cc in nns cd in at nn in jj in vbd vbz vbg , cc in cc rb vbg cs at nn in at nn , rb vbn cc vbn in dt nn , at jj nn nns vbg cs nn . at jj nn in in at jj nn in nn in nn , vbn at vbg jj . * at jj nn np vbg rb in vbd nn vbg in pp$ jj nns . pp$ jj , vbg nns jj nn in at nn . in jj vbg nn , vbg rb in at jj nn in nn . * vb , * cs jj nn jj . dod vb at vbn jj nn cs pps ql rb vbd . in dt jj nn in in nn in at vbn nn , cs cc rb vbg ppo , rb vbd ql jj rb in in in dt jj nn , at jj nn in nns . at nn ex hvd ben dti in at nns wps rb vbn cc vbd in abn dt nn , hvd vbn to vb ppo . cc hvd rb . . ( nn cd ( vbn cs nn cc at nn in nns . rb jj , vbg nn , uh , jj . ppss jjt in , in abn wps in at od nn nn ppo , at nn wrb ap in dt ap nn ppss md ' nn hv vbn cc vbn rb . cc rb , in at jj nns in at jj nn , in nns wp$ nn in nns bed vbn in vbg nn , np np vbd rp , rb vbg in nn at jj nns in pp$ vbn nn , rb vbg at vbd nn in pp$ nn . cc rb at jj nn in ppo rb vbd in at nn . in at nn pp$ jj vbn nn vbd at jj nn , cs np ' rb jj nn , cc rb vbg pp$ jj nn in at nn , at jj nn vbd ppl , vbd , cc vbd rp in nn . ql vbg , cc vbg in at nn , at jj nn in vbz rb vbd in at vbn nn cs pps vbd . in vbz vb , cc nns rp , at nns in pp$ nns rb , at cd nns rb rb vbd , vbg np np ' nn nn . at nn , vbd np , vbg vbn in pp$ nn ' jj nn . cc pps vbd in at jj ' nn nn , in at jj jj nns cc jj jj nns in nn . pps bedz rb at nn . in rb pp$ nns vbd vbg rb in pp$ nn cs pps vbd at jj nn . at nn rb vbn . at nn vbd to vb . at nns . -- in at nns . vbd np . in jj jj nn , cs wrb nns vb nn , at jj nns bed rb abn vbg in nn ' jj nn . cc wrb in at ap nns vbd vbg in at nn rb , vbg rb cc rb , in jj , jj nns . pp$ nn bedz jj cs nn ' nn . np md vb at nn in at nn . cc rb cs pps vbd rp cc rp in pp$ nns , pps rb vbd at jj vbg nn at jjr cs at jj nn , in jj nn jj , cc vbg cs pps vbd , cs pps vbd , cc rb ex bed rb vbn cd jj jj nns in jj , vbg nns , vbg rp in at jj nn . pps bedz np np ' rb jj nn cc jj nn . pp$ jj , vbn nn rb abn vbg in at nn in at nn . at vbg nn vbn in . . ( nn cd ( at nn cs at jj in jj nn nn . cc vbg cd nn in jj nn in pp$ vbg nn , np vbd at nn rb in dt jj nn . rn , vbg in np to vb nns in ppo , vbd rb in at nns , cc vbg nn ' ppss vb , vbd pp$ nn to vb pp$ vbz cc vb in in nn . rb , in nn in dt jj vbg in at nn in pp$ nn , pp$ nn , in nn , bedz vbn to vb at jj ' nn nn cs rb in nn . cc cs cs vbg dt nn , jj jj , in dt jj nn vbn in ppo , rb vbn ppl , cs pps bed , in at nn , vbg pp$ vbn nn rb in at nn . rp cc rp . in at nn cc dt nn , pps vbd in at nn , at jj rb vbg in pp$ nn , in at nn in at vbg jj , rb cc rb vbg pp$ nns jj in pp$ nn , cs cs at jj , jj , jj jjr nn vbd jj rp in at jj nn , cc cd in at nns vbn in at nn in nn . at jj nn in jj in at nn in at nn bedz in cd nns in nn ' jj nn , cc vbd jjr cs dt . in dt nn at jj nn rb vbd at jj nns cs at ql jj nn pp$ nn . in vbn nns np vbd , cc vbd pp$ nns . cc at nn in jj nn bed vbg in dt ap ' jj nns to vb at nn nn . cc rb , cs abx jj nns bed vbg in cc rp , cs at jj vbd in at vbn nn in dt jj nn . cc in pp$ nn beg vbn in at nn , pps md * be vbd in in at nns , in at nns bed ql rb in ppo , cs pps bed . cc cs at ap nns rb vbd , cs cs at jj nn jj to vb , rb pps bedz dt nn nn , jj in dt vbg nn in pp$ nn , wdt vbd ppo abn jj cc jj in at ap nns pps vbd . jj in abn dt , pps vbd at jj nn in pp$ jj nns , cc rb vbd in jj ppo in pp$ jj . ql rb pps rb rb vbd , at nn vbd in ppo . at jj nns vbn in , vbd , cc vbd , cs abx nns , cs at jj vbz , vbg jjr rb , vbd at nn rb in nn , cc vbd ppls rb rb in . . ( nn cd ( at nn , rb in at cd vbg nns . dts vbd rb , at vbn nns vbg , at nn in at nn in nn vbg in at nns , cc vbg to vb rb in at vbz to vb ppo rp . in cs vbg nn , cs at nn bedz rb vbn , np , at od to vb at jj ' nn nn , in at jj vbg in pp$ nn , at nn wps vbd pp$ nn in at nn . in dt nn pp$ nn hvd vbn cd jj nn to vb at nn rp in at nn . cc rb vbg rbr in at jj ' nn nn , cc vbg rp rb cs pps vbd , at nn hvd vbn rp pp$ nn in at nn . vbd ppo rp in ppo , cs pps vbd in at nn . cc cs pps vbd jj in vbn in at nn . rb vbg in pp$ nn , np np rb vbd in at jj nn , rb vbg pp$ jj jj nn rp cc rp in at nns . cc in at ap nn rb vbg pp$ jj vbn nn . rb cs wrb pp$ jj vbn nn vbd in in dti cd cc ap nns rp in at nn in in at rb vbg nns , in abn pp$ jj nns , rb vbd in ppo . rb vbg pp$ vbd nn rb jjr in at nn . ql , in at nn , at cc abn in vbn nn nns rb vb in at nn in at nn , rb to vb pp$ nn in pp$ nn . cc rb vbg pp$ jj nn , np np vbd rb jj cc jj at vbn nn . rb vbg at nn in pp$ jj nn , cs cs vbg ppl rp in rb dt cc ap jj nn . at nn in at vbn nn vbd to vb ppo , cs at nn in nns cc nns vbn in np ' np nns in at nn in nns . rb vb abn vbn in at nn in at jj ' in jj nn , cc ql ap in at nn to vb , in in cs pps md rb vb rb , rb in at nn in abl at nn cs dt . jj nn ' jj nn bedz vbn , cs at vbn nn wdt at ap nn nn md vb . in at nn ' in jj . . ( nn cd ( jj , np rb cc rb vbd ppo . at vbg nn , in at ap vbg nn , md * nn ppo . ap cs ap bedz ppo in ppo to vb in ppls . in ql rb jj bedz at jj nn ' jj nn , cc ql rb jj at rb in vbg nns pps vbd , cs pps vbd rb vbg in ppo . cc cs at ap nns , vbn , rb vbd rb in . rb ppss vbd * vb in at nn to vb , cs dt md be at nn in at nn nn in at vbn rb , np cc abn . cc in dt nn md ppss ppls vb to vb . in vbg nns , rb , ppss vbd in at jj nn in at jj nn , wp$ nn hvd rb vbn at jj nn ' jj nn . nn , in at nn abn dt hvd ben vbd in at nn ' jj nn nns . cc jj pp$ nns , pps hvd vbn rp in at nn . cc bedz rb ql rb , cs nn in at nn vbd ppo . in in nn in at in in cc dt nn at vbg nn vbn in ppo in np np , cc vbn ppo in at nn . cc vbg rp in ppo rb , cc jj to vb in at vbg nn , pps vbd , in in nn in at jj . -- in nn ppo rp . at fw ' np nns bed vbn . cc vbg rp at vbn nn , pps rb vbd at jj jj in pp$ nn . cs pps rb vbd rp , at nns vbd in at nn . vbn in np ' nn nn in nn in nn , vbn nns , at jj jj nn in pp$ nns . at jj nn in nn ' in jj nn dod vb , cc rb pps vbd in pp$ nn ' jj nn : in at nn , vbg abn vbn in at nn in np ' nn nn , cs pn jj in nn in nns in nns . ql rb , jj nns vbd in ppo , cs jj nns in rp nns . cc dt nn in pp$ jj nn dod cc ql ap at ap vb ppo . in at nn ' jj nn , jj nns rb vb in cd jj nn , at nn nn in dts jj nns rb vbn in jjr nns ' in jj nns . cc rb , jj nns , cs nn in dt cd nn . rb , cs at nns nn ppo , in pp$ nn in nn nn at jj nn in nn , rb vbd rp in jj nns . in rb in pp$ jj nns , dts jj nns vb at jj nns in jj nns . . . ( nn cd ( at nn , vbd np , abn nn vbg , cc rb vbg in cd jj nn in in bez pps jj . rb , nn , cs pps bedz * vbd . dt bez ppo , vbd np , vbg ppo . vbd ppo in ppo . in in dti vbg nns . cd , cd , cd , cd , cd . in in ex bed cd vbz , nn , cc rb ber cd nns . cs ' pp$ nn . -- in vb ppo , nn . ppss vb to vb . ql , ql , ppss vb ppo . ex . ex . vbg in nn rb . wdt at vbg nn . nns rp in ppo . at jj nn vbz rp in nn ' np nns rb . vb at nn . rp vbz . at nn . pps bez rb at nn cs wrb at nn bez nn , pp$ nn , beg vbn rp in dt nn , vb to vb dt od nn . cc at nn bez rb vbn in wdt bez vbn jj in vbd vbz . pps bedz rb rb . cc at vbn nn in at nn dod * vb at vbn nn in at jj , cs pps vbd to hv nn in vbn pp$ at nn . vbg in at nn wdt rb vbd , cs cs rb , in dts nns , vbd rp , at nn md vb at rb vbn , cs * at jj cd . cc md dti nn vb in ql jj at nn , abl at jj , jj vbg in at nn . at nn ql jj rb in dti cd jj nn . at nn ppl , rb , cs pps rb vbz , vbd at ql jj jj nns in nn at nn . rb , at nns rb vbn in ppo , cc bed rb vbn rp in pp$ nn in in at cd nns in at vbn nn hvg ben rb vbn in ppo in -- cc rb vbg pn in pp$ nn , cc vbg pp$ nn rb rp , cc jj nn ppo in jj in nns , cs at nn in jj nns in at nn . at fw vbd rp in at jj nn in np np . in at rb vbn , jj nns , at jj ' in vbg nn bedz rb vbn in at vbn nn in nns . cc wrb pps md be vbn ql rb vbn rp , np md vb at nn , cc rb vbg at nn , nn in nn in nn , ql rb cs at ap od in at vbn nn vbd , pp$ nn bedz vbn . -- in wp$ bez at nn rb . np ' ppss vb ppo . cc cs at nn bedz , rb , nn . rb pps vbd ppo to vb ppo in pp$ vb . in dt nn at nn vbd rp . np , . . ( nn cd ( rb rb cc jj . nn , rb vbg at nns . cs pps bedz rb vbg , vbg at nn , in to vb at nns rb , cc to vb ppo vb at nn rb jjr , cc to vb pn in at rb jjr nn in in rb in cc rb vbg , in pp$ jj nn , in at nn pps vbd pp$ jj vbn nn , wdt hvd ben vbn in at nn in nn , cc vbd rb vbn . vbn nn in vbn nn . in ap pps vbd in ppo . cc cs in at rb rp in vbn nn jj nns in nns md rb vb rp , rb in at jj nn ' jj nn rb rb vbd dti jj vbn nn cs dt . np vbd ppo nn . cc rb vbg , * rb , cs , to vb pp$ jj jj nn , cc rb vb rp at jj nn in pp$ nn ' jj nn , pps vbd , cc vbg at nn vbd in in at vb at nn vbd . pps vbn pp$ nn ql rb , nn . uh . uh . wdt jj nn bez dt cs vbz in at nn . nn , nn . dod ppss * vb ppo jj cs jj nn ( cc ql jj ) ppss md vb ppss vb at jj . nn cc nn md be vbn in at nn . rb , nn , vbd np vbg rb , ' rb at jj nn . at nn , cc at jj cd . nn . nn . -- in at nn . cs at nns vb to vb rb in nn , ppss md rb vb rb . * vb pp$ nns , cc vb at jj nns ' jj nn . -- in np . ppss cd ber at jj nns in cd nn . np bez np vbn , cc np bez np . cc ppss cd ber abn nn . cc np vbz rb in at nns in at vbn nn , cc nns cc nns pp$ nns . jj , jj in in ppss vb . -- in wql rb . rb rb . np ' ppss vb ppo . vb rp in at nn , cs pps nn cd nns at od . at nn bedz rb vbn . rb at nn in pp$ jj nn bedz vbg . rb , pps bedz ql jj , cc at nn in rp nns rb vbd nn . md ' nn vb at nn rb , nn . in in ql jj in in vbd at nn in at nn . wql vbg wrb ap vbn . ql rb , nn , in in rb in nn . jj . pps md vb jjr rb ' nn nn . rp nns cc . . ( nn cd ( nn in jj vb in nns , np . np . ppss md * vb in ppo in nn . pps ' vb vbg at nn rb , cc md nn in in at nn . nn rb . vb pp$ jj cs at nn . -- in np . vb rp . -- in np . np , vb at jj nn in at nn in nn nn , cc vb ppo vbn cs nn . -- in rb vbg in at nn in at jjs in nn in in nns , dt nn bez pp$$ , cs ppss vbd ppo . cc ppss md vb ppo vb rb cs at jj nn bez jj . cc rb , wps in ppo rb vbz ppo , in at nn pps md be vbn , dt nn bez dt nn ' nn . cc cs in dt nn ppss md rb vb ppo , rb , cd nns pp$ nn md be vbn in abn in ppo . rb rb . -- in at nn bez pp$ , nn . cc rb vbg , pps vbd ppl abn nn in at nn , cc jj pp$ nn , vbd rb cs nn , in wrb in nns vbg ppl to vb wrb at nn vbd rp . . . ( nn nn . ( dt nn bez jj in at nn jj . pps vbz pp$ nn ( vbg ) in pp$ beg vbn in dt jj rp in cc in in nn in at jj in nn , in at nn vbd vbg , rb vbn . in dt nn at jj md rbt cc ql rb vb wdt nns md be vbg ppo . . . ( nn cd ( . . ( nn nn cd np nn in in nn np ( in nn in nn , at cd nn in nns bed rb vbn rb . np ' ppss vb ppo . vbd np , in vbg at jj nn in at nn to vb . vb pn , uh . vb rp abn nns cc vb nn . pps vbz rbr cs ppss vbd in . in in at nn in jj nns . -- in rb , ppss md hv ben vbn in ppo abn nn . cc at nn in in ' nn cc vbg in at nn . rn be pps vbd , cs dt jj nn in cd jj jj , vbn in nn in nn , cc in nn in nn , bez at nn in at nn jj in at jj nn nn . in abl bez at jj nn , nn in nn , cc jj nn vbn in dti jj jj nns in at np nns . cs in at jj nn in at jj wrb ap vbd , ppss md , . . ( nn cd ( in ap vbn nns , ql rb vb abx at nn in wdt pps md vb to vb in at nn , cs rp in nn , cs rb cs pp$ jj nn in nn in dt nn . cc , in dts nns , rb cs at nn , wrb in vbg nn in at nn , wp$ jj nn pps rb vbz , cc wdt pps vbz rb to vb in rb , cc in dti jjr nn . cs cs dt nn vbz in pp$ nn , cc vbz at jj nn in at nn in jj jj , in nn at ql rb to vb rb at jj , jj nn , rb to be vbn : rb doz at nn , in pp$ nn , in at jj . in in beg vbn , cc rb vbn , in ap nns in nn , rb , wrb nn vbz at nn , at nn ' in jj nn in at nn bez ql ql vbn in at jj nn in at nn , cs at nn ' jj nn bez in ppo . ql cs in dt nn ' in jj nn , at jj nn in at nn nn in nn , at nn , bez in abn vbn nns ql rb cs jj cs at jj nn . cc cs at jj nn jj in at jj nn bez ql rb vbn in pp$ at nn , cs , in nns in pp$ nns , nns nn pp$ nn cs nns cs in at nn ' jj nn . cc rb vb in ppo , at rp nn cc at rp nn md vb jj cc abl at nn , in jj cc abl at nn . rb rb , rb , ex ber nns wrb dts nps nn cs ap jj in at jj , in in at vbn nn in pp$ nn . cc vb in ppls , ql ap nns rb dt jj md hv vbn cd cd nns , md hv rb vbn dt cc dt nn in nn cc nn . cc to vb dt nn in abn jj in at nn , at nn cc at nn md be at nn ' np nns . in in wdt jj nn in at vbn cc jj nn bez at nn wps vbz ppo pps bez rb cd in cd nns cc at nn in pp$ nn . jj in dts nns , ber ap jj jj nns vbg at nn in nns . at nn vbd rp . vbg abl at nn in at nn cs wrb at nn in nn , nn , vbz at jj in nn cc vbz rp at nn nn . in nn cc jj . vbd np , cc dt jj nn in at nn vbz rp cd ' np nns cc nns in at nn . dt . . ( nn cd ( nn cc ppss ber cd jj nns . -- in nn . uh . dti cd vb ppo rp , cc vb ppo , nn in jj , in at nn , in in in in vb in nns . pp$ nn ' in at nn . uh , uh . ppss vb at nn wps vbz at nn in . ex pps vbz in -- pps vbz . -- in pps vbz . -- in ql rb . bedz rb at nn in nn nn . rb , rb . vbd np . nn vbd ppo in in ppss md ' nn vb in in nn in cc vbd pp$ nn , uh jj . at jj nn ppl bez in ppo . vb pp$ vb in in vb pp$ nns . -- in np md vbn rp pp$ nn , cs at nn vbz pp$ nn in nn in at nn . cc np dod cc vb rp in rb rb abn dt nn . at jj in at nn hvd in dt nn vbd ppo rb rp , cs jj nn vbd rb . wdt jj nns cc nns dti in ppo md hv vbn rb . dts bed * rb rb vbd rp in nn in at vbg nn in np , cc ppss bed vbn rp , cc in abn nns vbd , cs jj nn nns cs nn in at vbg nn . at nn in nn hvd vbn abn pp$ nns . cc in at vbg nns in at jj nn . at nn in at ap nn ' jj nn . at vbn , vbg , jj , jj nn in wdt pp$ jj nn vbd vbg in pp$ vbg nn . in abn dts nns , pp$ nns bed jj rb . at nn wps vbd jj nns in pp$ nns , cc vbd at nn in in nns jj cs jj . dt vbd at nn in dt jj nn wdt rb vbn ppo in at nn . ppss bed cd nn , * cd . in cs at cd nn wps vbd ppo abn . cs pps bedz vbn rb in abn vbg nns in in nn , cc nn , cc nn nn . nn , cc nn , cc vb in in rb abn dts vbd in dt ap in at cd jj nn , wdt vbd in pp$ nn , abx vbn cc vbn in at jj jj nn . rb rb , abn at nns in at nn , dt nn ' jj nn , cs nn ' jj nn . nn cc nn , abn nns bed vbn in nn , cc bed abn vbn in dt jj nn wdt vb pp$ cd nn cc nn dod vb to . at nn vbd . at nn in nns , cs at nns in jj nns , bed rb jj in nns cc nns . vbg in at nn in cd nn , dti vbd rb at ap in jj nns . nns , vbg pp$ nns in at jj nn , vbd . . ( nn cd ( rb rp in at nn nns . abn at nns in jj nn in nns , jj cc jj in pp$ nn . uh . wrb ppss rb vbd in dt jj nn to vb rp at nn wps md vb ppo . wrb vb ppss * rp in ppo , cs ppss vb ppo . vbd np , wrb , in at nn in dti nns in at od nn , at ap hvd ben vbn . vb ppo rp , nns . ppss hv ben vbn . * jj jj nns cd jj nn cs nn , cc rb vbz . pps bedz rb rb . in pp$ jj nn , at nns hvd vbn dti ap nn in at jj in nn , cs at nn ppl rb vbn . in rb hvd np vbd pp$ vb . rb bedz at nn vbn in pp$ nn in nn , wrb pps vbd at nn in nn in at nn , wps vbd at nn vb cs in at vbn nns in nns . at jj vb in cd nn nns bedz vbn , cs in in ap rbr in at nn in at nn in at jj nn , ap cs at nn rb in in np np rb vbd in nn . in * in dti jj cc jj nns . * in at jj nn in dt jj nn in pp$ nn , dod at jj nn rb vb pp$ nn . cc in at ql ql jj nn in vbg . vbg in pp$ jjs nn in at jjt nns , at jj nn rb vbz pp$ jj nn in at jj nn in nn , cc vbg rp at nn in vbg nn , vbz pp$ nn in at nn in cd nns cc ap . in dts nns , at vbn , vbd nns pps vbz rp , vb pp$ jj . in dti nns , dt vbg bez pp$ nn in nn . ex pps vbz . ex pps vbz . bedz at nn , cs in pp$ jj nns at jj nn vbd ppl nn in cs in nn . ql rb vbn in at jj nn in at nn , cc vbn in at rb jjr nn in at nn , at nn cs pps vbd , in at nn , rb vbd cc vbd cs at nn . cc vbd rb rb vbg cc vbg rb in pp$ od jj nn , in at jj nn in at vbg nn in at jj . rb , nn pp$ ap in at nn , np np . vbd np , pp$ nn cc pp$ nn ber in nn . -- in np . rp abn in ppo , cc cd nn in at nn . at nns . -- in nn in . . . ( nn cd ( np in at jj nn in nns in at jj , at nns , cs vbg nns , vbd in at nn , in at vbn rb in nns cc nns . cs np , ql ql , cc rb rb bedz vbn in pp$ vb . jjr rb , pps vbd , ql rb cs pps hvd vbn pp$ nn in in at jj cd , vbn at nn jj . cd . np , at nn bez pp$ in in vb rb in at nns , cc vb in ppo . jjr , abn . cs cs to vb at jj nn in ppo , in dt nn beg at od nn ppl , np np hvd vbn , cc bedz rb vbg in at cd nns . np ' nn nn bedz jj . cc vbg pp$ nns , pps vbd ppo pps md vb at jj nn -- cc in nn , in in dt bez , vb rb rp in pp$ nn , in in at * jj nn . in wrb in at jj nn , abl at nn vbz at vbg nn in at jj ' in jj nn . cc cs dt jj nn bedz vbn , cc cs rb abn cd nns bed jj cs at nn ' in cd nns in pp$ nn . at jj nn vbg ppl in jj nn , rb in at nn cs pps bed , vbg in at nns in jj nns , cc at vbg nn , vbd jj nn in at nn . cc jj in at nns vbd in ppo in at nn , vbd ap nn in jj dt jj nn in wdt dts nns bed vbn . cc rb nn , rb vbg cs vbn nns in at nn . at nns in at nn vbd ppo . rb , in nns , cc in at nn ' jj nn . cs abn at nn , np ' rb jj nn vbd at ap nn cc pp$ in nns . cc in ap in pp$ jj nns , at jj nn ql vbn cc jj , cc in at cd nns vbd at nn in at cd nns rb rb in ppo , cs ppss vbn , cc , in ppls , vbn at vbn nns in at vbn nns in ppo . cs rb in at nn at jj vbd rb at ap , cs cs to vb in at ql jj nn . vbg dt nn , np rb vbd rp ap nn : cc rb bedz rb vbg cc vbg rp in ppo rb in in vbg dt nn in nn ppo in dti nns in in wrb uh . -- in at nn ql jj cs at vbn nns in nns . vbn cc vbn in in vbd in at nns in at nn , jj nns cc nns , in abn pp$ vbg nns cc . . ( nn nns ( nns , vbd vbg cc vbg rp in at nns in at nns in nn ' jj nn . ap cd nn md be vbn . vbg at nn in nn , pps rb vbd in in in in in in cc rb , in in in at nns in nn . vbn in at nn in , vbd ppo , rb , in at nn , cc rb , rb vbg at nn in at nns in in vbd at vbd nn in nn in at nn . cc bedz ql rb rb . dt nn , at jj nn vbd at jj nn in at vbg nns in at ap nns . in rb vbg , rb vbd at ql vbn nns in np cc nn in pp$ nn . vbd ppo rb cs cd vbg nns in at nn in vbn nn , cc rb , vbg rp in at nn , vbd in at vbg nn , in wdt , in at nn , at jj jj nns in at nns vbd rb cc rb , cs at vbn nn in at rb vbn nn in nn . cs at cd nns bed rb vbg in at nns , vbg rp in at vbg nn in nns , vbz , cc ap vbg nn , cs nn ap nn vbd rp cc rp cs at jj jj , vbg pp$ nns rb to vb at vbn nns in nns . cc np bedz rb vbg rp in dti cd in nn ppo rp . cc cs at jj nn ' jj nn in in rb vbg in in vbn in pp$ vbg in at jj nn in nn wpo pps md . in in in dt jj nn in at cd vbn nns , in in nn ' cc rb jj nn vbd vbn rp in nn in jj nns , in in cs , nn -- cs , vbg rb in at nn , at jj nn vbd pp$ jj nn in pp$ nn , cc vbd ppo , vbg rp cc rp , in at nn . cs pps vbd rb in in jj rb in -- cc np cc pp$ nns vbd rp in in ppo , cs nns in at nn nn . at od jj nn in at jj in in vbg pp$ nn cs pps vbd at nn in in rb vbn ppo in ppo , in at jj nn in at nn in at nn pps hvd vbn . cc in pp$ nn in ppo , pps rb vbd in at nn rb vbg in pp$ nn in nn in nn . cc wrb at jj nn , nn in nn , at ap nn cc vb in at nns vbd pp$ nn , pp$ nn rb vbd rb , cc vbd rb jj at nn . cc rb , cs cs vbn cs pp$ nn in dt nn bedz vbn , pps vbd pp$ vbn nn in at . . ( nn cd ( nn , cc vbg in ppo at vbn nns , vbd pp$ jj nn in at nn ' in jj nn . ql rb , at jj nn hvg vbd at jj nn , rb vbd vbg rp in at nn , cc vbg at nn , vbd rp at vbg nns , nns , vbz cc wdt rb md be vbn in , cc rb vbd ppo in pp$ nns . dti vbn nns , nns , cc nns . jj nns . vbd nns cc nns . jj nns in nn . vbn vbz cc nns . abn dts bed rb . cc at jj cc ql jj jj vbd to hv jj dti cd . cs in np at nn rb , cs np bedz rb vbn rb vbg in pp$ nn ' rb vbn abn , wdt vbd at ql jj vb . cc dod pps rb vb ppo cs at jj nn ' jj nn . cc wrb pps bedz vbn in at nn , abn nns bed vbn in ppo . cs rb in vbg in ppl pps rb abn in vbd in at nn in np , wps hvd rb rb ben at jjs to vb ppo . pp$ jj nn hvd ben vbn rp , vbg cc cd jj jj nn . rb , rb , np , ' rb jj to vb rb , be at nn wps pps md . cc md jj np hvd vbn rbr cs pps hvz . at nn hvz * vbn , nn , vbd at nn , rb vbg rp . ppss vb jj nn in dt nn . cc at nns vbn , nn , ppss vb , vbd np in jj nn . rb . cc abn vbd in nns , np . -- in nn ' ppss vb ppo . -- in cc rb in at vbn nn , jj nn bez jj . cc ppss vb at vbg nn in pp$$ cd nn ap ppo , cs dt jj cd cs ' np vbd . cc jj jj , cc nn , cc nn , md ql rb cs vb jj nn in pp$ jj jj cc jj nn . md dti nn nn rb nn , dti nn vb rb nn . -- in np rb . wdt nn . jj in nn , nn . rp nn , rb . nn in at nn rb , nn nns . rp at nn in at jj nns cc vb ppo in in np . np rb , cc vb at nn ' np nns . vb ppo rb vb ppo in at nns , nn . uh , uh , uh . wql dt nn vbz ppo rb . vbn nn . . . ( nn cd ( cs at jj nn in at nn md hv abl at jj nn . uh . pp$ nn , nn , * ppo . vb ppo pn in at nn in in rb , wps vbd nn md do . vb at nns . rb ppss hv * vbn ppo rb . in nn pps md be . -- in vbg . -- in jj . vb ppo abn . at jj nn ' rb vbn nn bedz jj . in vbg at nn , at np bedz * rb . at np . vbd np in in pps md hv ben vbn in in in at jj vb jj ppo . -- in nn abn in ppo rb , nn , nn , nn in in vb ppo in -- * vbn in -- * vbn . cc rb ppss vbd in ppo in at nns cs at np bedz rb to be vbn . rb , nn , vbd np in in vbn in at nns in pp$ nn in in ppss vbd ppss vbd ppo vbg in . pp$ nn . pp$ nn . vbn . -- in vbn . wdt vbz cs ap nn . -- in wdt nn in jj nns in ppo , cs jj nn vbz cs cs pps bed at nn . at vb , rb . -- in nn in at nn rb , in in nn ' ppss vb ppo . -- in at vbn nn , nns , at jj jj ' nn in in at , rb , rb , in in vbn nn . dt nn dod vb ppo . -- in ' nn in at nn . -- in np rb . vb ppo vbn in in jj . -- in abn nns in at nn in at nns in in vb at vbz in in nns . at nns , at nns . -- in vb at nns jjr in in at nn in abn at nns . -- in nn rb . jj , jj in pp$ nn . nn ' jj cd nns nn at vbn nn . rb cc vb rb in ppo , cc ppss ' ppss vb ppo rb . jj np . cc in cd ap nn vb ppl , vbd np . rb , rb md ppss vb ppo , jj nn in in in np ' nn at ap in dt , cs ' pp$ jjr cs nn ' jj nn . cd nns vbn . rb nn in nns . pp$ ap nn rb ql vbn in in ppo . pp$ jj nn vbn in in abn jj nns vbg ppo in nns : in in wdt ap in ppss hv . -- in md ppss vb vbg dt jj nn cs pps nns at ap nn . md ppss be vbn in ppo in at nn in at nn . md ppss be vbd in ppo in at jj nn . uh , uh , in in nn cc nn to vb ppo rbr . np , in jj ppss ' ppss vbd rb vbn in ppo . rb cs dt nn ppss abx vbd in in ppss vb ' nn wdt , in cd dt ' np . . ( nn cd ( nns . cc in dt nn in at jj , be at nn in pp$ nn in ppo cs at nn in dt nn in in at jj , jj nn . np bez in rb np , nn . dt jj nn ' vbz ql vbd . ' nn vbn in ppo cc ppo at cd nns in dt nn vbd . nn . nn bem at np ' nn . ppss vb in nns . vb ppss , nn . wpo ppss vb pp$$ . -- in nn in ppo , nns . ppss vb at jj nn vbd rp in at nn . vbg in at vbn nn . vbn rp in at jj nn . ' np np in in pp$ nn ' jj nn . cc np ' nn nn ' in at nn , wps vbz in at cd nns . nn vb vbd , abn vbn , cs nns dt nn jj vbz in at nn . cc ppss md vb rb . cc cs ppss vb , ppss ' ppss vb ppo vb . cc cs ppss vb cs , vb dt nn ' jj nn vbz pp$ nn rb . vb ppo , nns , in at nns vbn nns . rn nn rb , cc nn vb . in cs ppss vb , vbg nns md rb vb in at nn . rb vb rb , to vb in rb . ql in np np in in cd nns pps ' np vbd in in in in nn md be at od . rb , nns , pps ' ppss vb rb rbr , in in cc rb in nn pp$ ap . np ' ppss vb jj nns , jj . ql jj nn , vbd np . cc ql jj , vbd np . rn cs at nns vbd rb , pps vbd rp : in in at nns vbn nns . cc nr ppss vbd at ap in np rb , in pp$ vbn nn . uh . wql rb ppss vb to vb rp in nns ' nns wdt ' np vbd ql rb in pp$$ . -- in at np in in at np . -- in vbn , vbn . cc pps bedz to vb rb : in in cc rb bedz to be vbn rb cs ppss md vb in in wrb ' in dt . -- in ex ' in at nn rb md vb abn at nns vbd in at nns in at jj nn in nns : in in cs at nn ' ppss vb ppo nns pp$ nn . nn ' jj , ppss ' ppss vb ppo , cs . wrb nn vbd , at jj bedz rb in nn in nn . ql rb ql at nn bedz vbn , cc pn vbd rb cs in at jj nn . rb , at nn in nns , cc at nn in at nn bedz vbn cs rb nn , cs at nns vbn in nns in at jj cc jj nn in at jj nns cc vbg pp$ jj nns in at nn . nn , in at vbn nn in nn ' np vbd nn at nn vbd ppo dt nn . cs rb cs in at . . ( nn nns ( nn rb , jj nn vbd vbn in pp$ nn . pp$ vbd , nn nn rb vbn rb in pp$ nn . vbd rb rb in at jjt nn . . . ( nn nns ( np nn in in nn nn at nn in at od nn vbn jj cc jj , cc rb ql at jj nn in nn in at nn in nn in nn bedz vbn in nns in at nn nn in nns , wps vbn at nn cc rb at nn . np ' ppss vb ppo . vbd np . cc at jj bedz * rb in nn . in pp$ jj nn , cs . cc vb dt nn , cs ' vb abn . nn rb . rb , cs ppss vb , cc hv ben vbg . wdt at jj nn rb . bed ppo at jj in vbn nn , cc vbd in at nn in nn in at nns , cc dt nn at od in pp$ vbg jj in ppo , at nn nn md * vb in dt nn . rn ' jj nn in nn , hvd nn nn to vb . cc vb rb vbz . pps rb vbz , vbz , vbz . cs ' pp$ vbg ap in jj nn . to vb ' np nn . nn rb hvz dt nn cc nn . vbg bez , cc md to be , at nn cc at nn . cc pp$ jj nns vb , cc pp$ jj nns vb ql ap in dt . cc rb , ppss ' ppss rb vbd pp$ nn bedz ql jj in in vbn nn , dt jj nn nns rb , cs at nn in wdt at nns vbd in nn , cc vb ppo . cc rb dt nn bez vbg rb . dt nn vbg , cc nn md vb ppo . cc rb , pps ' vb cs dt nn in jj nn wps md vb rb , in at jj nns in np nn cc in np nn . wql at jj nns vb ppo . ppss vb ppo in ppo cs at vbn nns in vbn nns vb at vbn nn ppss vb to . at jj nn wps hvz at nn vbn cs dt in nn nns cc nns , cc nns in nns , cc vbn ppo , cc rb vbz vbg rb ql jj cs . . ( nn cd ( nns . rp in ppo . -- in ppo ' nn vbn . bed ppss at nn , ppss ' nn vb at ap in abl at jj , jj nn . nn ' nn vb rb in at nn , cc vb rb . cc rb , ' rb at jj cc jj nn , at nn . wps rb vbd ppo . in at nn pps hvz at ap cc jjt nn . vb vbg in ppo , cc ppss cc vb in ppo . uh . at nn nn wps vbz ql jj nns , cc md * vb to vb at ap nn . rb nn bez at jjr nn in in at jjr nn cs dt . md rb at nn cc hvd at nn . cc abn at nns cs ap vb cc vb jj nn , abn dts nns ber jj , cc rb jj cs nns , * cs nns . ex ' in at ql jj , at ql jj , uh , at ql jj nn . cc rb , ppss vb rb , cc vb ppo rb , cs ex ' rb pn ql jj cc jj in at nn . dts jj nn nns , in ap , cs in at jj nns vb rb in , in jj cc jj , jj nn . cc vb * in pp$ nn , wrb at jjr nns in at nn md vb cc nn , cc jjt nns in at nn jj cc vb rb , jj wrb to vb in ap . cc in at jj nps . dts ap nn cs ql rb vb pp$ jj nn in . dts nn , cc pn vb ppo in in pn ql jj , cc jj cs jj , vb pp$ jj nn rb . to ppo . rb rb . wdt nn ' ppss vb . pn , uh . pn . cc nn in nn . at nn vbz at in vbg . vb at nn . rb , rb , pps md be rb . nn ' ppss vbn ppo . wql , vbd at nn . rb , pps ' vb vbg ppo rb . * ppss , ppo in in dt ' np jj . ppss md hv vbn ppo , rb . nn . at nns in in at nns pps ' vb jj . rb , rb , ppss hv vbn ppo in ap nn . rb . rb . vb rp , abn in ppo , cc at jj nn nns . nn at nns . vbg cs pps hvd vbn , at nn hvd ben ql in at fw ' jj nn , cs cs rb beg vbn in at jj nn , at vbn nn vbd rb in at nn cs pps vbd at nn in pp$ jj jj nn . in at nn pps rb nns in at jj nn , vbd np in ppl , cs pps vbd at jj in vbn nn in nn in at nn . nn vb ppo , cc rb pp$ nns vb . . ( nn cd ( jj in ppo , cc in at rb jj pp$ nn . nn in ppo cs ppss vb pp$ np in vbg ppo . vb in to vb ppo rp . vbd np , vbg in at vb nn . ppss md vb ppo rb . rb , rb , nn , cc rb np dod vb ' np nn , cc rb ap nn vbd in jj . at jj nn rb vbn . nn in vbn rp in nns . nn ppl rb vbn jj nns in jj nn . cc in ap , dti cd nns in at nn nn , np vbd at nn rb , cc rb in at cd nn in nns cd nns vbd rp cs cs at nns in nn hvd vbn ppo . nn in nn ppss vb ppo , dt od nn , np np . in nn rb . -- in nn jjr rp . vb ppo in at nn ' jj nn . pps ' vb ql rb rp to vb rb , np . np . at nns vb . vb in dt nn in at nn in vb . ql , ql . pps vbz rb , cc ppss md rp . cc vb ppo hv pn ql jj nn vb rb rb in at nn . ex ' jj nn in dt . at jj , jj nn , cc rb rb ql jj . rb , cc * vbn at nn cs ppss od vbd ppo , at nn , in at nn in nns in np . at ap . -- in at ap . -- in at ap in np cs in ppo . ex ' in at jj nn in nn . abl jj nns . ppss md vb rb in in in pn rb cs jj nn , ql jj cs at nns . np . at jj jj vbz cs nn . vb in nn , rb . at jjr cs at nn nn . cc jj vb , jj vb , jj nn in nn . wdt ' in dt . -- in nn . rb , jj nns in dts vbn nns . ql jj jj nn nns in nn ' jj nn . ex ' in at nn rb in nn ' in jj nn cc nn ' nn . cc rb , jj nn , ppss abx vb jj rb . nn in pp$ nns , rb , ber ppss * , pp$ nn . rb , in at nn , cs ' vb abn . in nn dt jj nn hvz at jjr in pp$ jj nn at nn . nn md ' nn vb in ppo . cc ppss ' ppss vbn dti nns vbn in jj nns nn at nns in nns vbn in at ql jj nn in jj nns . wdt ' rb cs pps vbd . pps md rb vb in ppo , pp$ nn . cc rb to be vbn rb . cc wrb . md ppss hv nns in at nn in at nn , cs ppss vb dts jj nns . cc abn nn ppss ' ppss ben vbg in ppo , wrb pps dod vb to . rb , . . ( nn cd ( rb , cs ap ap ppss vbd ' nn jj nn cs vbg ppl , uh np . cc , np , ex pp$ nn vbd jj . jj in , nn in nn in in vb at jj nn in at jj , at cs ppss ' rb vbn . ppss ' ppss vb to in nn , rb , in in nn , wrb at jj jj vbz rp rb , vbn in nn cc nn . pps vbd at nn . cc rb vbg in ppo , bedz rb vbn in at jj jj nn in at nn . in jj nn at nns bed vbn , cc cs vbg in pp$ vb ' np nn , np rb vbd in at nn in at nn , pps vbd in at nn , in in wps vbd cd in at nn in nns in nn in -- cc vbd ppo nn . np . uh . in at od nn pp$ nn ' jj nn vbz in dt nn , np . rb , nn , ppss md hv ppo rb . dti nns vb in pp$ nns , cc rb rb ber vbg , np . nn , nn : jj nn . dti nns vb in vb nn . dti in jj nn . dti in at jj in at nn . in in cc ppss vb rb cs at nn cs ' vb abn cd jj nn , np . nn bem jj . in in nn nns in ppo , nn . pp$ nns vbd . pp$ nns vbn . np ' np nns at nn . uh , pp$ nn , pp$ nn . -- in jj nn in in vb * in in vb * . -- in vb , pps ' vb at jj nn wps vbz . wql jj at nn in at nn rb . jjr rb . -- in vbn nn , vbg at nn ' jj nn in ppo . vb in at nn . in at nn at nn bedz vbg rb rb in at nn . at nns . at nns . vbd at nn in at jj nn in nn rb . uh nn , pp$ nn , vb rb . cc np vbd pn . in pp$ jj nn bedz jj in vbd rb . cc at nn vbd rp . rb at nn jj jj . in jj hvd pps vbd in at nn , wrb nns in nns , rb vbg in in at jj nns in at nn , rb vbd in at nns in at vbz , at nn ppss vbd in at nn . cc in dt . . ( nn cd ( nn vbn at nn in pp$ nns . pps bez at nn * ql vbg in at jj in nns in dts vbg nns . at nns in nns rb vbg ppo in at ap jj nn wps vbz vb in at nns in vbg nns in at nr . cc dts bed at od nns wps hvd ben vbn in at fw in at jj nn hvd ben rb vbd . cc cs pps bedz dt nn ' jj nn bed abn jj nn in jj nns , cc rb pp$ nn ql jj in at nns in at nns in in at nn rb rb vbn to vb ppo , in in wrb pps bedz , ppss vbd to vb cs cd nn in vbg at nns . nn in vbn nn . vbd np vbg in at nn , cc vbg in pp$ nns at vbg nn in in nn ppss rb vb rb in dt nn . -- in vbg pp$ nn in nn nns , cc vbd in ppo , jj in vbd in at nn . cc dt at jj od nn . -- in in wrb cd nns vb rb in cd jj jj nn . be jj at od bez at nn , at od at nn , cc at od at nn cc at nn in dt nn in in be dt nn wdt pps md . uh . pp$ np . wdt bez dt cs vbz in ppo , cc vbz ppo ql jj nn , cc jj , in in vbn in at nn in at vb . jj nns vb in ppo , cs in jj nns cc nns . abn at nn bez rb vbn jj . np , nn . ppss jjt in jj nns in ppo . nn . nn vb to vb cc pp$ nns vbn jj nn . jjt nns in nn vb vbg . cc nns vb in in in bez pp$ nn ' jj nn vbg . pp$ nns vb jj . cs pp$ wps hvz jj pps abn nn . vb pp$ nn , in in vbz ppo rb . -- in np ppl , np . -- in vb ppo rp in in nn , vb . vb rb . -- in nn in nn rb . vb ppo pp$ nn ' jj nn in at nn . -- in jj . in in rb rb . -- in vb pp$ jjt nn in at nns : in in nn rb at jj . -- in nn . rb . -- in nn in dt nn . vb . pps nns in in pps nns at jj in in vbg in at jj nn vbg in at jjs in nn in in nn . pps vbz rb in ppo . -- in wrb ' np at jj nn rb . vbz ' nn ppss dt nn , uh np . -- in vb , vb . at nns hvd * vbn ql rb , wrb in at nn in at nn in nns in in at rb vbn nn , np vbd cs at jj hvd vbn . cc vbg to be in ppo in at ap vbg , pps . . ( nn cd ( vbn in pp$ nn at ql rb in at nn . at vbn nn vbg at jjt nn , cs at nn in nn nns vbd cc vbd in at vbg nn . vb , vb in pp$ nns , uh ppss nns . to pp$ nn nns , vb ppo rp . ppss cc vb at nn in at nn . cc at nn cc at nn md be pp$$ : in in cc vb rb md vb ppo . uh . uh . rb at nns in ppo rb vbd in jj nns . rb rb vbd , cs cs rb vbg in at vbn nn in nn , rb vbg in at nn . at jj vbg nn bedz vbn . at jj nn . cc rb abn vbd pp$ nns . cs jj in vbg nns , cc nns , cc nns , at jj nn vbd rb , cc rb in at nn . vbn in at jj vbg nn in nn , pps vbd in at nn in at vbn nn . cc rb vbd vbg rb in at jj . vbn cd nns rb , at nns vbd in at nn cs nns in nns , rb rb vbd in at nn in nns , vbg at vbg nn vbn cs jj nn in at nn nn in at jj . vb nn . vbd nn in at nns , cc at nns vbd rb in at nn . cc vbn in nr ' in jj nns wps vbd in ppo , np np vbd rb vbd in abn at nns wps vbd in nn . at jj nns in vbn nns jj pp$ jj jj nn , in at jj nn , vbd vbn rb . cs nn in , pps vbd vbg pp$ nn in at nns . cc rb rbr vbd ppo rb . vbg rp at nns cc nns in at cd nns ' nns , cc vbg in cd nn in at jj nn in pp$ nns , cc vbg nn ' cc rb in at nn . cs nn cc np bed vbg at vbn nns . cc cs at jj vbg rp in ppo , vbd , cc vbd cd jj nn cs pps vbd in ppo rb . in dt nn at jj nn vbd rp . vbd jj cc jj in at nn ' cc rb . vbn in at nns in nns in wdt , in at ap nn , at jj hvd vbd at nns in at nns in ppo , at ql vbn nn in at np bedz vbn . pp$ nn nn vbn in nns . pp$ jj nns vbd jj in jj nn . . . ( nn nns ( at vb vbn in pp$ nn . vbn , vbn . -- in vbg in at jj jj nn in in nn , np . nn vb ppo rb . -- in nn , cc ppss vb rb . cc dt , dt rb bez at nn cs ppss in nn . cc ppss vb ppo in at ap nn in pp$ nn . wrb bez at od nn . rb , nns , in at nn . dts nns ber jj rb . vb ppo cs ppss md in nn , cc nn in ppo . cs * , np bez qlp to vb in in np , nns . at od nn cs cc vbz to vb in dt nn ppss vb in , dt nn ppss vb . ppss ber * ap nns , cc pp$ nns cc pp$ nns . cc rb vb ppo . -- in wrb ' np at jj . vbn rp rb . cc pps vbd ql rb at nn . in cs cs vbn in vbg in at nn pps vbd , cc cs cs at jj nn in at ap nn hvd ben cc at nn in pp$ jj nn , np np bedz rb rb rb vbg rb . cc hvd rb vbn at nn , in in wdt ql rb hvd ben vbg in at jj nn in ppo , cs in at jj ppo rb hvd ben vbn . pps vbd vbg in pp$ jjs nn , cc rb ap nn in vbg pp$ jj jj nn in at nn . uh . np , vbd np , * ql jj bez pps , rb rb , at od nn , in nn . vb . np np vbz ppo * . pps bez ppss , ppss , cs rb jjt ppo . vbg nn in at vbg nn , at jj nn bedz rb vbn in nn , in abx vbz cc nn . cc in ap wrb np bedz vbg in at nn , ql rb cs rb to vb np ' rb vb cs pps vbd rp at nn , pps vbd ppo to vb at nn rb , cc vb ppo , * ql rb , in at jj nn . vbg rb , pps vbd np , np , cc nn , rb vbg in at cd nn in nns . cs at nns bed vbg in at cd vbn nns wdt hvd cc rb ben vbn in at nn , cc bed rb in nn in vbg ppo . pn in at ap , in at nns , cs pps vbd , pps rb vbd vbg nns in np cc nn , vbg ppls in nn in nns in jj nns cc nns . cs pps vbd abn dt . cs pps vbd at nns in at vbn nns . ql ap nns vbd vbg at nn in pp$ nn . cc pps vbd . cc rb vbg cs at jj cc . . ( nn cd ( nn bedz vbn in at jjs in nn in nn , pps vbd in np , wps hvd rb vbn cs vb , to vb rb in dt nn , cc at nn cc nns , cc cs nn ppo in at nn . cs jj in at cd nns ' vbg nn , cc at nn in pp$ vbg in at vbn nn pps vbd . cc cs pps bedz dti jj nn cc nn in ppo : wdt bedz jj , at jj nn ' jj nn rb vbd in nn , cs pps vbd , in at nn ql rb vbg ppo rb rbr . cs rb at jj ' vb ap nn hvd * ben ql jj at cd ql rb . cc rb cs np vbd rp at nns at jj nns vbd ppo . cc ql rb vbn in at nn . cc ql rb nn in at vbg vbz , cs at nns vbd jj cc vbd , cc vbd jj nns in at nn , in rb at nn . vb ppo * . dts nns cc vb jj nns in pp$ vbz . vb rp . ' rb at jjr nn , at jj ' nn nn in at vbg nn . cc in at nn , nn , at jj nns vb jjr cc jjr . ppss md vb jj qlp . vb rp . -- in cc wps md vb in -- pps vbd in in cs dts nns vb in nn in at jj cc in jj . -- in cc vb rp . rb , abn jj , rb in in ppss vb ppo . at nn . vb at nn . vb ppo vb , in in cc rb vbg , cd in at nns vbd ppo rb in at nns in at rb vbg nn . in nn cs at nn bedz vbn in cd nn , cc vbd vbg rb in at jj nn ' jj nn , pps vbd ql jj in pp$ nn in in cs at jj rb md -- in cc np bedz ql in at jj nn nn , wdt , vbn rp in at jj ' nn nn , vbn in pp$ jj , np vb . pps bedz rb ql rb in ppo . wrb , in nn vbn rb , cc abx nns rb jj in vbn in at nn , pps vbd pp$ jj nn , cc pp$ jj nn nn in at vbn jj . cs abx nn cc nn vbd in at nn , cs cs vbn in at nn , np np rb vbd . rb vbd pp$ rb nn in at nn , cc , in nn at nn in ppo , ql rb vbn at nn rp , wps hvd pps * ben in at vbn nn in at jj in wdt pps rb vbd , np md rb ql hv ben vbn in at nn . . . ( nn cd ( cs pps bedz , cd in at nns in in wps vb * at jj nn in at nn , cc bed rb jj in pp$ nns in in dts bed vbn rp . cc rb vbd , cs , in at nn cd in ppo vbd at jj rb , cc vbg in pp$ nn in at vbg nn , vbd ppls rb rb rb . at od nn rb vbg jj , cc rb rb cc vbg . ql rb , in at jj nn in jj , jj nn , at jj nn vbd in at vbg nn . cc wrb np vbd rp in at nn to vb jj nns in at nn , cc vb ppo rb . cc vbd at nn to vb rb in pp$ nns , cc nn at nn rp in at nn . at nn at jj nn vbd cs jj nn cc nn , pps vbd in at jj nn . wdt vbz in ppo . dti vb nns . -- in ' nn nn rb . vbz . vbz . vbd rp in ppo . vbg at jj nn in at nn in vbg nn , at jj vbd rb to vb pp$ jj nn in nn . cc in dt nn , vbg nn in at vbg jj nn in at nn . rb vbg in ppo at nn in abn pp$ nns . jj ppo in in ppo md be in in at jjr cc jjr nn . in at jj , pps vbd rp in pp$ vbg nn , jj pp$ nns in jj nns in nn . np vbd . pp$ nn vb pp$ nn . nn vb jj . nns . vb rp in ppo cs ppss md rb vb pp$ nn . bez ' nn nn . at jj . at nn . vbd at vbg nns . np . vbz rb rb in pp$ nns , nn nn , cs cs pps be in rb ql jj , np md vb dt ap , ap nn in pp$ nn . ppss vb : at nn . at nn . vb rp , pp$ nns . md ppss * vb pp$ nn . cc cs at nns rb vbd pp$ nn in at nn in vbg nns , at rb jj in vbn nn in nns in cd nns vbd rp , cc in at nn rb , at rb vbn nn vbd rb nn in at nns . pp$ abn in nn , vbg nn , vbg rb to vb at nn cc nn in at vbg nn . nn , in dt cd jj nn , np ' nn nn in nn nn vbd vbn in pp$ nn . cc at jj . . ( nn cd ( nn , abn in vbg ppo cs in at nn , rb vbd ppl rb rp in ppo , cs pp$ jj rb in vbg nn . cs np cc np , vbg in at fw in , vbn nn in at rp in vbg nn rb cs rb cs pps . at jj , at jj . rp nn , rp nn . uh , abn ppss jj nns in nn , rb vb ppo rb . vb * np nn , cs vb pps md , in at nn ' jj nn nn . rp nn , ppss vb in in ppo nns , at nn . at nn . bez dt at nn in abn pp$ vbg nns . abn pp$ nn in jj nns . uh , np , np , uh , pp$ nn . jj . nn , jj . rb , rb . rp nn rb . pps vbz to vb ppo . uh , pp$ jj nn vbz rp in cd , wp$ nn vbz ppo pps md vb . pp$ np , vb in ppo rb . vb * in ppo , cc vb in ppo , wps ppss ber wps md rb vb np . in np , rb , nns rb . nn nn in ppo , ppss vbg jj . wps rb vbd np , cc vbd np rb , cc np ' rb jj vbg nn . cc rb jj np vbz in nn in at nn wps bez ql ql jj . md pps bed vbn in nn . nn nn in ppo , ppss vbg jj . vb ppo , nn , nn , cc nns . nn vb ppo nns in ql jj at nn ql rb vbd rp pp$ nn . in abn dt , ppss md rb vb nns in ppo , md ppss cc nn at nn . uh , uh . uh , uh . ppss vbg jj , cc ex ' rb be nn in vbg rb . wrb vb ppss * , np np . in ppo , in nns cc nn in ppo . vb np vb in pp$ nns . at ql jj cc in vbn nn , cs . in in nns . nns . nns . uh , nn , in cd jj nn cs ppss vb . nns . nn rb vb cs ppss bed wrb ppss vb . uh , np , ppss vb pp$ jj nn ' rb vbn pp$ nn in nn cs dt . cs * , ap nns md rb vb in ppo , in at nn bez rp . in at nn ' rb vbz , rb abn at nns rb vbd jj . nns , nns in nn , nns , cc nns , rb vbn in pp$ nns , rb cs ppss hvd vbd in pp$ jj nns . abn pp$ vbn nns nn in at jj , wdt in nn in nn rb vbg pp$ vbg nn , vbd at jj nn in jj jj nn in ppo cs pps vbd . nn , jj nn , jj nn bed in pp$ jj nn , cc nn in abn dt jj nn md do , at jj jj nn in pp$ nn . . ( nn cd ( vb at nn ' in jj nn , cs nns cc nns vbd . dti vbd rb in pp$ nns . cs vbd nns , at nns in at nns rb vbd in pp$ nn in jj nns . in at nn , ppss vbd at nns vb , cs nn nns in at jj . at nn . at nn . -- in at od nn . vbd vb in at nn . pp$ nn md rb be jj . vbg in at vbg nn , at jj vbd vbg in pp$ nn . cc vbg in nn , rb vbn in at nn rb , rb in at ap nn , cc in at ap nns in nn ' jj nn , wrb , in at nn , pps vbd jj . nn vb pp$ nn in at nn . wdt vb , np . vb ppo vb pp$ nn . uh . ppss cd vbd nns in pp$$ . ppss vbd nn . cc rb nn in jj nn . ppss jj nn , cc jj nn , cc nn in vbn nn , in in nn in jj nn . md ppss rb vb , cc in ppo . bem ppss vb rp in at ap jj nn in jjt vbn nns . uh , jj nn in jj nn . uh , rb ppss vb pp$ jjs nn vbz in pp$ jjs nn . uh , vb . in abn pp$ jjt nns , vb ppo rb in , ppss jj nns in pp$ jj vbn nn , cc nn dt cd vbd jj in pp$ nn . in ppo ppss vb , ppss abn -- vbg cc vbg jj . in at ap ppss vb in ppo . in nn ' jj nn ppss nn in ppo . in nn ' jj nn ppss vb pp$ ap nn in ppo . vb abn nns cc abn nns in cd jj nn . cc cs dtx md be pp$$ , vb ppo rb nn in nns , cs rb vbg ppo , cs vbn in ppo , ppss vbn jj . rb , ppss vb rp at nn . at nn bedz vbd . at vbn jj vbd rb . in nn nn at nn vbd in at nn . in in vbd jj . np vbd to vb ppo . pps dod vb ppo . cc at vbg nn vbd ppo in at nn , cc rb ql jj vbz nn pp$ nn , pps bedz vbn rp in at nn , cs at nn vbd pps bedz vbn . ap nn , at jj nn in nn in at nn ' in jj nn vbd rp in at jj in jj nn , vbd rp at nn , cc jj at nn , vbd in pp$ nns . in at nn , at vbn nn ' jj nn vbd rb . rb vbd . at nn . jj np , wrb bez at nn . rb ppss in jj , vbg nns vbd pp$ jj vbg nn , . . ( nn cd ( cs in at jj nn fw . rb at jjs nns rp in nn . cs vbn in nn , cc nn , cc nn , in pp$ rb jj nns , at nn nns rb vbd pp$ vbg nns in at nn . cc rb , jj nns vbd at jj nn ppl , cc abn pp$ nn , cc dt vbg nn , cc at nn in nn , cc vbg , jj cc jj , ql jj cc jj in cd nn , vbd at jjt nn in at fw rp in nn . cc cs at ap nns rb vbd ppls in at jj nn in at jj in at nn , vbg at ap nns in at jj nn cc jj , rb in jj vbg nns in at nn , wdt rb vbd , in jj nns , in at vbg nns ppss rb vbd . in in in dt nn , at jj nn cc at nn vbd rb vbn in at jj nn , in at nn in vbg at nn rbr cc rb rbr in at nn nn . at nn in nn cs rb hvd vbn at jjs in nn rb in pp$ jj nn in at nns , nn in at nn , cc vbg np rb . dt nn rb vbd to vb pp$ jj vbg nn in at nn cc at nn . cc rb vbg cs jj nn , at vbn jj in , in pp$ nn in nn , vbd pp$ nn vbn rb . cc cs at nn in nn , in jj nns , cc pp$ jj jj nn rb , cc pp$ jj jj nn vbn in at nn in np , vbd rp in pp$ nn , wdt , cs np , md * vb in nn cs pps hvd vbn at vbg nn in nn rb in ppo , cc vbd ppl in ppo . rb jj nns vbd vbg in at rb vbg nn . at jj jj nn nn in pp$ jj nns . rb abn vbd , cc at jj nn in at nn vbd rp cs pps vbd cd cd nns rb . . . ( nn ( dt nn in np ' np np in np bez vbn in at np nn ( nn . pps bedz vbn in nn np np . np nn np nn nn nn ( np nn np , nn nn , nn np cd , nn np . nn np . nn np . ( nn np nn nn nn nns fw nn nn np fw np ( nn np nn np np nn nn nns fw nn nn np ( np nn nn nn nn nn ' np nns . cd nn nn nn ppss np np nn np nn np nn . nn nn . nn np np ' np np . nn nn nn np nn np np nn np . -- in nn nn np nn nn np rb . nn nn nn nn , nn np np nn nn ' np np , nn ppss nn np nn np nn nn nn nn nn np np np np nn nn ' np nn , nn nn nn nn np np nn nn . np np , np , nn nn np nn np np nn nn np nn np nn nn np np nn , nn nn nn . nn nn , nn nn np nn np np np np , nn nn np nn nns nn , nn np np in nn nn np np np jj nn nn np , nn ppss nn nn , nn np , nn np np np np ( . nn nn nn ppss nn nn , nn nn nn nn at np np . nn nn nn nn , nn , nn np np np np nn in np rb np nn np fw np nn np np np , np np nn nn nn ppss nn nn . nn np , np np nn np np , np rb np nn nn . nn nn , nn np nn np np np np , nn nn nn np nn nn , np np nn np , np nn np in np nn nn nn np nn , np np , nn nn fw fw np . nn nn nn nn nn nn , nn nn np np np nn nn , nn ppss nn nn at nn nn nn in np nn . nn np np np , np nn nn nn np np np nn nn fw . np nn nn in np np np np nn np . nn nn np nn nn , at np nn nn , nn , nn nn nn np np nn nn . nn nn nn np nn in nn nn np , nn nn nn nn uima-addons-2.3.1/Tagger/src/test/java/0000755000175000017500000000000011625126544017520 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/test/java/org/0000755000175000017500000000000011625126544020307 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/test/java/org/apache/0000755000175000017500000000000011625126544021530 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/test/java/org/apache/uima/0000755000175000017500000000000011625126546022465 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/test/java/org/apache/uima/examples/0000755000175000017500000000000011625126546024303 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/test/java/org/apache/uima/examples/tagger/0000755000175000017500000000000011625126546025554 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/test/java/org/apache/uima/examples/tagger/test/0000755000175000017500000000000011625126546026533 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/test/java/org/apache/uima/examples/tagger/test/TaggerTest.java0000644000175000017500000002472111625126546031455 0ustar drazzibdrazzib/* *Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.uima.examples.tagger.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import junit.framework.TestCase; import org.apache.uima.TokenAnnotation; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.text.AnnotationIndex; import org.apache.uima.examples.tagger.HMMTagger; import org.apache.uima.examples.tagger.Viterbi; import org.apache.uima.jcas.JCas; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.util.FileUtils; import org.apache.uima.util.XMLInputSource; import org.apache.uima.util.XMLParser; //This test was run with JUnit3 public class TaggerTest extends TestCase { private HMMTagger hmm; private List sent; // sentence private List gold_standard; private List tagger_output; /** * Set up the test fixture */ protected void setUp() { hmm = new HMMTagger(); gold_standard = new ArrayList(); sent = new ArrayList(); tagger_output = new ArrayList(); } /** * Tests tagging for German. * */ @SuppressWarnings("unchecked") public void testGermanTagger() { System.out.println("Testing German Model... "); List POS = new ArrayList(); try { hmm.my_model = HMMTagger.get_model("resources/german/TuebaModel.dat"); } catch (Exception e) { System.out.println("Model which is supposed to be used for testing does not exist"); } System.out.println(hmm.my_model.word_probs.size() + " distinct words in the model"); Iterator>> keyValuePairs = hmm.my_model.word_probs.entrySet() .iterator(); // iterate over words for (int i = 0; i < hmm.my_model.word_probs.size(); i++) { Map.Entry> entry = (Map.Entry>) keyValuePairs .next(); Object key = entry.getKey(); Map pos = (Map) hmm.my_model.word_probs.get(key); // map of possible pos-s of // the word Object[] pos_s = pos.entrySet().toArray(); // for iteration over possible pos_s for (int u = 0; u < pos_s.length; u++) { Map.Entry> entry2 = (Map.Entry>) pos_s[u]; Object key2 = entry2.getKey(); // pos of a word if (POS.contains(key2)) { continue; } else { POS.add(key2); } } } Collections.sort(POS); System.out.println("Number of part-of-speech tags used: " + POS.size()); System.out.println("These are: " + POS); System.out.println("Testing German trigram tagger.."); sent.add("Jerry"); sent.add("liebt"); sent.add("Wansley"); sent.add("."); System.out.println(sent); hmm.N = 3; // hmm.END_OF_SENT_TAG = "$."; String[] out = new String[] { "NE", "VVFIN", "NE", "$." }; gold_standard.addAll(Arrays.asList(out)); tagger_output = Viterbi.process(hmm.N, sent, hmm.my_model.suffix_tree, hmm.my_model.suffix_tree_capitalized, hmm.my_model.transition_probs, hmm.my_model.word_probs, hmm.my_model.lambdas2, hmm.my_model.lambdas3, hmm.my_model.theta); System.out.println("expected: " + gold_standard); System.out.println("tagger output: " + tagger_output); } /** * Tests English trigram tagger * */ @SuppressWarnings("unchecked") public void testEnglishTagger() { System.out.println("Tesing English Model... "); List POS = new ArrayList(); try { hmm.my_model = HMMTagger.get_model("resources/english/BrownModel.dat"); } catch (Exception e) { System.out.println("Model which is supposed to be used for testing does not exist"); } System.out.println(hmm.my_model.word_probs.size() + " distinct words in the model"); Iterator>> keyValuePairs = hmm.my_model.word_probs.entrySet() .iterator(); // iterate over words for (int i = 0; i < hmm.my_model.word_probs.size(); i++) { Map.Entry> entry = (Map.Entry>) keyValuePairs .next(); Object key = entry.getKey(); Map pos = (Map) hmm.my_model.word_probs.get(key); // map of possible pos-s of // the word Object[] pos_s = pos.entrySet().toArray(); // for iteration over possible pos_s for (int u = 0; u < pos_s.length; u++) { Map.Entry> entry2 = (Map.Entry>) pos_s[u]; Object key2 = entry2.getKey(); // pos of a word if (POS.contains(key2)) { continue; } else { POS.add(key2); } } } Collections.sort(POS); System.out.println("Number of part-of-speech tags used: " + POS.size()); System.out.println("These are: " + POS); System.out.println("Testing English trigram tagger..."); sent.add("Jerry"); sent.add("loves"); sent.add("Wansley"); sent.add("."); System.out.println(sent); hmm.N = 3; // hmm.END_OF_SENT_TAG = "$."; String[] out = new String[] { "np", "vbz", "np", "." }; gold_standard.addAll(Arrays.asList(out)); tagger_output = Viterbi.process(hmm.N, sent, hmm.my_model.suffix_tree, hmm.my_model.suffix_tree_capitalized, hmm.my_model.transition_probs, hmm.my_model.word_probs, hmm.my_model.lambdas2, hmm.my_model.lambdas3, hmm.my_model.theta); System.out.println("expected: " + gold_standard); System.out.println("tagger output: " + tagger_output); } /** * Run tagger on Moby Dick and compare result to pre-computed XCAS. This test case is a bit * brittle. First of all, it requires the uimaj-core project as a neighbor, otherwise it won't * find moby.txt, the test input. Secondly, the reference output is only a list of POS tags. * This is so the file doesn't get so big. Finally, if anything changes, even improvements, this * test will most likely fail and will need to be updated. There's an unused method below that * can be used to write a new set of POS tags when the old ones become obsolete. */ public void testMobyDick() { try { XMLParser xmlParser = UIMAFramework.getXMLParser(); XMLInputSource xmlInputSource = new XMLInputSource("desc/HmmTaggerAggregate.xml"); AnalysisEngine taggerEngine = UIMAFramework.produceAnalysisEngine(xmlParser .parseResourceSpecifier(xmlInputSource)); String text = null; try { text = FileUtils.file2String(new File("../uimaj-core/src/test/resources/data/moby.txt"), "utf-8"); } catch (FileNotFoundException e) { System.err .println("Warning: this test case runs only if uimaj-core is a sister project to the tagger project; otherwise, the test input data is not available."); System.err.println("Skipping test"); return; } JCas cas = taggerEngine.newJCas(); cas.setDocumentText(text); taggerEngine.process(cas); List savedTags = readSavedTagList(); List currentTags = getCurrentTagList(cas); assertTrue("List of tags is not the same length", savedTags.size() == currentTags.size()); for (int i = 0; i < savedTags.size(); i++) { assertEquals("Different tags at position " + i, savedTags.get(i), currentTags.get(i)); } } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } private List readSavedTagList() throws IOException { List tags = new ArrayList(); BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream( "src/test/resources/moby-tag-list.txt"), "utf-8")); String tag = null; while ((tag = reader.readLine()) != null) { tags.add(tag); } return tags; } private List getCurrentTagList(JCas cas) { List tagList = new ArrayList(); AnnotationIndex tokenIndex = cas.getAnnotationIndex(TokenAnnotation.type); FSIterator tokIt = tokenIndex.iterator(); TokenAnnotation token = null; for (tokIt.moveToFirst(); tokIt.isValid(); tokIt.moveToNext()) { token = (TokenAnnotation) tokIt.get(); tagList.add(token.getPosTag()); } return tagList; } /** * @param cas * @throws IOException * @throws UnsupportedEncodingException */ private void printPosTags(JCas cas) throws UnsupportedEncodingException, IOException { Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream( "moby-tag-list.txt"), "utf-8")); AnnotationIndex tokenIndex = cas.getAnnotationIndex(TokenAnnotation.type); FSIterator tokIt = tokenIndex.iterator(); TokenAnnotation token = null; for (tokIt.moveToFirst(); tokIt.isValid(); tokIt.moveToNext()) { token = (TokenAnnotation) tokIt.get(); writer.write(token.getPosTag()); writer.write('\n'); } writer.close(); } } uima-addons-2.3.1/Tagger/src/docbook/0000755000175000017500000000000011625126546017242 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/src/docbook/hmmTaggerUsersGuide.xml0000644000175000017500000006270311625126546023707 0ustar drazzibdrazzib Tagger Annotator Documentation Introduction Tagger Annotator is an Apache UIMA statistical analysis engine that annotates tokens with corresponding grammatical types (parts of speech, or just POS). The tagger is a standard hidden Markov model (HMM) tagger. Prerequisites The UIMA HMM Tagger annotator assumes that sentences and tokens have already been annotated in the CAS with Sentence and Token annotations respectively (see e.g. Whitespace Tokenizer Annotator ). Further, the tagger requires a parameter file which specifies a number of necessary parameters for tagging procedure (see ). Two trained models for English and German are included in the package (in the resources folder). Other models can be trained outside of the UIMA framework (see ). Processing Overview The algorithm iterates over sentences and tokens in turn to accumulate a list of words. These are then sent to a processing engine of HMM tagger. For each Token , the posTag field is updated with the corresponding part of speech (e.g. posTag = "NN" where NN stands for common noun ). Annotator Descriptor Two descriptors are employed to configure tagger's functionality: HmmTagger.xml - is a primitive analysis engine descriptor, which defines the tagger basic functionality and can be combined in an aggregate analysis engine with an arbitrary tokenizer. This descriptor cannot be used on itself as the tagger alone does not perfom tokenization. HmmTaggerTAE.xml - is an aggregate analysis engine whose only function is to combine UIMA Whitespace Tokenizer Annotator with HMM Tagger Annotator and is thereby a "ready to use" tagging descriptor.
Configuration Parameters The HMM tagger annotator ( HmmTagger.xml ) requires the following configuration parameters: NGRAM_SIZE - this parameter is an Integer, defining whether a bi- or trigram model should be used for tagging (default is N=3). NGRAM_SIZE Integer false true NGRAM_SIZE 3 ]]> ModelFile - binary file containing the statistical model which should be used for tagging is defined as an external resource ModelFile HMM Tagger model file file:german/TuebaModel.dat org.apache.uima.examples.tagger.ModelResource ]]> Thus, one can easily use a different model by changing the fileUrl line: file:german/TuebaModel.dat. (NB. New models must be located in the resources folder.) After these two parameters have been set, the tagger is ready to use.
Capabilities As the tagger inherits tokenization indexes from the CAS, uima.SentenceAnnotation and uima.TokenAnnotation with their begin and end features respectively have to be defined as input capabilities in the HMM Tagger annotator descriptor. Token receives also an additional posTag feature as an output capability. org.apache.uima.TokenAnnotation org.apache.uima.SentenceAnnotation org.apache.uima.TokenAnnotation:end org.apache.uima.TokenAnnotation:begin org.apache.uima.TokenAnnotation org.apache.uima.TokenAnnotation:posTag org.apache.uima.TokenAnnotation:end org.apache.uima.TokenAnnotation:begin ]]>
Functionality Test The TaggerTest is a JUnit test file (available in the test folder), which provides an opportunity to test provided models for English and German, as well as the basic functionality of the tagger. In order to check whether the tagger's configuration is correct, just run this file as JUnit Test and you should get the following output: Overview of the Tagger package The package org.apache.uima.examples.tagger contains: two interfaces: IModelResource - model resource interface Tagger - general tagger interface, in case one would want to integrate further tagger types. three classes: HMMTagger - hidden Markov model tagger for UIMA, that is using Viterbi algorithm to compute the most probable part-of-speech sequence for a given list of tokens. Viterbi - implementation of the Viterbi Algorithm. This class makes up the core of the tagger. ModelResource.java - implementation of the IModelResource Training Own Models Though we decide not to include training directly into UIMA framework, one can easily train other models for different pre-annotated corpora outside of the UIMA using ModelGeneration class, available in the subpackage org.apache.uima.examples.tagger.trainAndTest. This subpackage includes some further files needed for training of own models: MappingInterface - defines mapping for a tagset. For example, one may wish to map a more detailed tagset to a less distinctive one (i.e. tell a program to tag all verbs as just VERB instead of differentiating between verb infinitive, verb imperative, etc. Two sample implementations for MappingInterface are included, namely TagMappingBrown (mapping reducing Brown corpus tagset from more than 400 tags to 93) and GrobMappingTueba(mapping German STTS tagset from 54 tags to basic 11 categories plus special symbols and punctuation) ModelGeneration - trains an N-gram model for the tagger, iterating over a List of Tokens. Writes the resulting model to a binary file. At the moment, only bi-and trigram models are supported. Further N-grams can be easily integrated. ModelGeneration is not concerned with the fact, whether the training corpus is given as a single file or as a directory containing a number of files, as this is a CORPUS_READER implementation issue. Two supplied readers include both a reader for a corpus as a single file (TT_FormatReadercode>) or as a directory (BrownReadercode>) Interface CorpusReader - should be used to implement corpus readers for own corpora; the objective of the reader is to take charge of the preprocessing and transform tokenized units (usually words) into a List of Token objects. Two sample implementations of CorpusReader are included: BrownReader - for the Brown corpus from the nltk distribution (nltk.sourceforge.net) TT_FormatReader - for the corpora in TreeTagger format, i.e. one word per line with tags separated from the words by tabs. To train a new model, one should adjust a number of parameters in the "tagger.properties" file, which is in Java properties file format (see ). After the parameters are set, you just need to run ModelGeneration.java Evaluation To evaluate performance if a "gold standard" corpus is available, one can use the following provided file: TaggerEvaluation.java - can be used to evaluate the tagger and/or new models on a manually annotated corpus. HMMTagger was evaluated for English and German. For English, it was trained on 80% of the Brown corpus (180,000 tokens) and tested on the rest unseen 20%. The achieved accuracy was about 96%, test corpus contained 4.5% of unknown tokens. For German, it achieves between 95% and 96% accuracy when trained and tested on the same type of corpus, i.e. with 80% of corpus used for training and 20% for testing. The accuracy goes a bit down when tagging is performed for different types of corpora than the training one, mostly due to the growing number of unknown words. Theory Behind This chapter is just a sketch of the statistical model undelying the tagger. Hidden Markov Models (HMMs) are the mainstay of the applications employing statistical modeling in any form, like speech recognition and production systems, signal processing, part of speech tagging. A Hidden Markov Model is a probabilistic function of a Markov process. A Markov process is a process that fulfills Markov assumptions. Markov assumptions are: limited horizon - Markov processes are states without memory, except for condition of the current state. Though we usually consider sequences of variables that are not independent of each other, it often suffices to know the value of the current situation without going deep into the past happenings. As [ ] put it, we do not really need to know, how many books were in the library last week or last year in order to predict how many books there will be tomorrow. It is often enough to know the current situation. Thereby, future states in the Markov process are independent of the past, they only depend on the present. Let X = (X 1 , ..., X T ) be a sequence of random variables taking the values from the finite state space S = (s 1 , ..., s N ) , then a limited horizon property could be formalized by: P(X t+1 = s k |X 1 , ..., X t ) = P(X t+1 = s k |X t ) time invariance The probabilities do not change over time, i.e. if we know that the probability of observing a rainbow after the rain is equal to 90\%, we know that it should be true for today as well as for tomorrow. If X conforms to these two properties, then it is said to be a Markov chain. One can describe a Markov chain by a transition matrix: A = a i,j = P(X t+1 = s j |X t =s i ) - with a i,j >= 0 (for all i,j ) and the sum of all transition probabilities from state i (a i,j ) should be equal to 1 (for all i ) Markov models can be used whenever one needs to model the probability of a linear sequence of variables. One distinguishes Visible Markov Models (VMM) vs. Hidden Markov Models. The difference is that when we work with "visible" events, we can directly estimate the corresponding probabilities (which is the case if training corpus is available to train own models for HMM taggers). Finding a sequence of part of speech tags (i.e. Viterbi part of the tagger) in contrast is a hidden Markov model as the states (tags) are not directly observable. The goal of HMM - based tagger is to find part of speech tags ( = hidden states) that generate a sequence of words ( = observable states). Most of the known implementations of POS taggers are viewing text as being produced by a hidden Markov model, so that tagging can be regarded as a Markov process deciding which states the system went through to generate a given text. General Form of HMM A HMM is a five-tuple: (S, O, &pgr;, A, B) where: S - the set of states (here: parts of speech) K - the set of observations (here: words) &pgr; - initial state probabilities A - state transitions probabilities B - symbol emissions probabilities Further, X t (state sequence) and O t (output sequence) are given. Tagging procedure is then the following: t := 1 Start in state s i with probability &pgr; i (i.e., X 1 = i) forever do: Move from s i to s j with probability a i,j (i.e. X t+1 = j) Emit observation symbol o t = k with probability b i,j,k t := T+1 end Despite their limitations, HMM-s are one of the most successful techniques in natural language processing and are widely used, especially in sequence tagging applications. The best statistical taggers all perform at about the same level of accuracy. Glossary HMM Hidden Markov Model HMM POS Part of Speech POS Christopher Manning Hinrich Schuetze Foundations of Statistical Natural Language Processing 1999 MIT Press
uima-addons-2.3.1/Tagger/src/docbook/images/0000755000175000017500000000000011625126546020507 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/desc/0000755000175000017500000000000011625126552015746 5ustar drazzibdrazzibuima-addons-2.3.1/Tagger/desc/HmmTaggerAggregate.xml0000644000175000017500000000403111625126552022150 0ustar drazzibdrazzib org.apache.uima.java false HmmTaggerTAE SimpleTokenAndSentenceAnnotator HmmTagger true true false uima-addons-2.3.1/Tagger/desc/HmmModelTrainer.xml0000644000175000017500000001014511625126552021520 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.examples.tagger.HMMModelTrainer HMMModelTrainer This analysis engine trains an N-gram model for the HMM tagger. It uses a training corpus as reference. This corpus must contain annotations on words with an attribute corresponding of the POS value to be learned. The configuration of this analysis engine is done through several parameters: <ul> <li>View: - the view from which the tokens will be extracted</li> <li>ModelExportFile: - the path where the model will be written</li> <li>FeaturePathPOS: - feature path to the value of the POS to be learned. The annotation should exactly cover a "word".</li> </ul> <b>BEWARE: this analysis engine does not allow multiple deployment !</b> <i>NB. At the moment: both bi and trigram statistics are saved in one model file.</i> 1.0 View The view from which the tokens will be extracted. String false true ModelExportFile The path where the model will be written. String false true FeaturePathPOS Feature path to the value of the POS to be learnt. The annotation should exactly cover a "word". String false true View _InitialView ModelExportFile hmmtagger_model.dat FeaturePathPOS org.apache.uima.TokenAnnotation:posTag false false false uima-addons-2.3.1/Tagger/desc/HmmTagger.xml0000644000175000017500000001435711625126552020355 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.examples.tagger.HMMTagger Hidden Markov Model - Part of Speech Tagger A configuration of the HmmTaggerAnnotator that looks for parts of speech of identified tokens within existing Sentence and Token annotations. See also WhitespaceTokenizer.xml. 1.0 The Apache Software Foundation NGRAM_SIZE Integer false true InputView Name of the parameter for the input view (by default it is set to _InitialView) String false false SentenceType Sentence annotation type which covers token annotations (by default it is set to org.apache.uima.SentenceAnnotation) String false false TokenFeaturePath Token feature path to set. It should be like "type.name:attribute" (set by default to "org.apache.uima.TokenAnnotation:posTag") String false false ModelFile If the resource model file is not set, this parameter can be used. If both are empty, the system will throw an exception. String false false NGRAM_SIZE 3 org.apache.uima.TokenAnnotation Single token annotation uima.tcas.Annotation posTag contains part-of-speech of a corresponding token uima.cas.String org.apache.uima.SentenceAnnotation sentence annotation uima.tcas.Annotation org.apache.uima.TokenAnnotation org.apache.uima.SentenceAnnotation org.apache.uima.TokenAnnotation:end org.apache.uima.TokenAnnotation:begin org.apache.uima.TokenAnnotation org.apache.uima.TokenAnnotation:posTag org.apache.uima.TokenAnnotation:end org.apache.uima.TokenAnnotation:begin true true false Model HMM Tagger model file org.apache.uima.examples.tagger.IModelResource false ModelFile HMM Tagger model file file:english/BrownModel.dat org.apache.uima.examples.tagger.ModelResource Model ModelFile uima-addons-2.3.1/RegularExpressionAnnotator/0000755000175000017500000000000011625127362021166 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/pom.xml0000644000175000017500000001453311625126522022506 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent RegularExpressionAnnotator 2.3.1 UIMA Annotator: ${project.artifactId} Finds annotations using regular expressions ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/RegExAnnotator.xml RegexAnnotatorUserGuide org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.uima uimaj-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test org.apache.xmlbeans xmlbeans 2.4.0 stax stax-api org.apache.geronimo.specs geronimo-stax-api_1.0_spec 1.0.1 commons-io commons-io 2.0.1 test uima-an-regex org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/test/resources/**/*Ref.txt src/test/resources/**/*Ref2.txt src/test/resources/**/*Ref3.txt src/test/resources/**/*RefOutput.txt org.codehaus.mojo xmlbeans-maven-plugin 2.3.3 xmlbeans resources maven-surefire-plugin -Duser.language=en -Duser.region=region=US uima-addons-2.3.1/RegularExpressionAnnotator/resources/0000755000175000017500000000000011625126522023175 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/resources/concept.xsd0000644000175000017500000001600511625126522025352 0ustar drazzibdrazzib uima-addons-2.3.1/RegularExpressionAnnotator/resources/concepts.xml0000644000175000017500000001161511625126522025541 0ustar drazzibdrazzib $1 $2 $0 ${currency} ${amount} ${amountText} uima-addons-2.3.1/RegularExpressionAnnotator/LICENSE.txt0000644000175000017500000002644611625126522023022 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/RegularExpressionAnnotator/marker-file-identifying-single-project0000644000175000017500000000000011625126522030524 0ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/marker-file-identifying-standard-pear0000644000175000017500000000000011625126522030324 0ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/marker-file-identifying-osgi-project0000644000175000017500000000000011625126522030204 0ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/NOTICE.txt0000644000175000017500000000131411625126522022704 0ustar drazzibdrazzibApache UIMA RegularExpression annotator software component Copyright 2007-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). This software contains parts of Apache XMLBeans (http://xmlbeans.apache.org/), which contains the following software: - W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web Consortium (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) - Piccolo XML Parser for Java from http://piccolo.sourceforge.net/, Copyright 2002 Yuval Oren under the terms of the Apache Software License 2.0 uima-addons-2.3.1/RegularExpressionAnnotator/src/0000755000175000017500000000000011625126520021750 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/0000755000175000017500000000000011625126522022676 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/resources/0000755000175000017500000000000011625126522024710 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/resources/org/0000755000175000017500000000000011625126522025477 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/resources/org/apache/0000755000175000017500000000000011625126522026720 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/resources/org/apache/uima/0000755000175000017500000000000011625126522027653 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/resources/org/apache/uima/annotator/0000755000175000017500000000000011625126522031660 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/resources/org/apache/uima/annotator/regex/0000755000175000017500000000000011625126522032772 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/resources/org/apache/uima/annotator/regex/regexMessages.propertiesuima-addons-2.3.1/RegularExpressionAnnotator/src/main/resources/org/apache/uima/annotator/regex/rege0000644000175000017500000000745511625126522033652 0ustar drazzibdrazzib# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # regex_annotator_resource_not_found = "The resource file {0} could not be found." regex_annotator_rule_set_file = "The concept file {0} is used to configure the annotator." regex_annotator_error_closing_input_stream = "Unexpected error closing concept file input stream on {0}: {1}." regex_annotator_error_parsing_rule_set_file = "Error while parsing the concept file {0}." regex_annotator_error_xml_validation = "XML validation errors while parsing the concept file {0}: {1}." regex_annotator_error_resolving_types = "Error resolving type {0} from UIMA type system." regex_annotator_error_resolving_feature = "Error resolving feature {0} of type {1} from UIMA type system." regex_annotator_warning_duplicate_concept_name = "Duplicate concept name \"{0}\" found." regex_annotator_warning_duplicate_rule_id = "Duplicate rule id \"{0}\" found for concept \"{1}\"." regex_annotator_error_duplicate_annotation_id = "Duplicate annotation id \"{0}\" for concept \"{1}\" found." regex_annotator_error_referred_annotation_id_not_available = "The referred annotation id \"{0}\" is not available for concept \"{1}\"." regex_annotator_error_annotation_id_not_available = "The annotation id for annotations that set a 'Reference' type feature is missing in concept \"{0}\"." regex_annotator_error_creating_custom_normalizer = "Error while creating custom normalizer for class {0}." regex_annotator_error_custom_normalizer_wrong_interface = "Error while creation custom normalizer for class {0}. The class does not implement the required interface \"org.apache.uima.annotator.regex.extension.Normalization\"." regex_annotator_error_custom_normalizer_not_specified = "The custom normalizer class is not specified for feature {0}. regex_annotator_error_normalizing_feature_value = "Error while normalizing feature value {0} for feature {1}. regex_annotator_error_creating_custom_validator = "Error while creating custom validator for class {0}." regex_annotator_error_custom_validator_wrong_interface = "Error while creation custom validator for class {0}. The class does not implement the required interface \"org.apache.uima.annotator.regex.extension.Validation\"." regex_annotator_error_validating_annotation = "Error while validating annotation with id={0} - {1}({2},{3})." regex_annotator_error_validating_feature_path = "Error while validating feature path \"{0}\". This path can never be valid for type {1}." regex_annotator_error_feature_path_element_not_supported = "The feature path element type {0} of the feature name {1} in the featurePath {2} is currently not supported." regex_annotator_error_invalid_feature_path_syntax = "The featurePath syntax for featurePath {0} is wrong. \"{1}\" is not allowed. regex_annotator_error_variable_not_found = "The variable \"{0}\" of rule \"{1}\" is not defined. regex_annotator_error_match_group_name_not_found = "The match group name \"{0}\" of rule \"{1}\" was not found. regex_annotator_warning_number_format_conversion = "The feature value {0} of feature {1} could not be parsed as {2} number. Feature value not set!uima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/0000755000175000017500000000000011625126520023615 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/0000755000175000017500000000000011625126520024404 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/0000755000175000017500000000000011625126520025625 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/0000755000175000017500000000000011625126520026560 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/0000755000175000017500000000000011625126520030565 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/0000755000175000017500000000000011625126522031701 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/Concept.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/Concept.j0000644000175000017500000000402011625126522033443 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; /** * */ public interface Concept { /** * Get the concept name. * * @return returns the concept name. */ public String getName(); /** * Gets an array of annotations for this rule. * * @return returns an array of annotations for this concept. */ public Annotation[] getAnnotations(); /** * Adds the given annotation to this concept. * * @param aAnnot * The annotation to be added. */ public void addAnnotation(Annotation aAnnot); /** * Gets an array of rules for this concept * * @return returns an array of rules for this concept. */ public Rule[] getRules(); /** * Adds the given rule to this concept * * @param aRule * The rule to be added. */ public void addRule(Rule aRule); /** * Checks the rule processing for this concept. * * @return Returns true if all rules for this concept should be process. * Returns false if the rule processing should be stopped after the * first match was found. */ public boolean processAllConceptRules(); }././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/Feature.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/Feature.j0000644000175000017500000000454111625126522033453 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; /** * The Feature interface provides access to a Regex Feature definition */ public interface Feature { public static final int STRING_FEATURE = 1; public static final int INTEGER_FEATURE = 2; public static final int FLOAT_FEATURE = 3; public static final int REFERENCE_FEATURE = 4; public static final int CONFIDENCE_FEATURE = 5; public static final int RULEID_FEATURE = 6; public static final int CUSTOM_NORMALIZATION = 1; public static final int TO_LOWER_NORMALIZATION = 2; public static final int TO_UPPER_NORMALIZATION = 3; public static final int TRIM_NORMALIZATION = 4; /** * Get the feature name of this feature * * @return returns the feature name */ public String getName(); /** * Get the feature type. * * @return returns the feature type. */ public int getType(); /** * Get the feature value of this feature. * * @return returns the feature value of this feature. */ public String getValue(); /** * Get the UIMA feature value of this feature object * * @return returns the UIMA feature object. */ public org.apache.uima.cas.Feature getFeature(); /** * Get the normalization of the input string based on the specified * normalization for this feature. If no normalization was specified, * the input string is returned. * * @return returns the normalization type for this feature. */ public String normalize(String input, String ruleId) throws Exception; }uima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/Rule.java0000644000175000017500000001020011625126522033444 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.util.regex.Pattern; import org.apache.uima.cas.Type; /** * Rule interface defines the access to the Rule settings and allows to add new * Rule settings. */ public interface Rule { public static final int MATCH_FIRST = 1; public static final int MATCH_ALL = 2; public static final int MATCH_COMPLETE = 3; public static final String MATCH_GROUP_START = "\\m"; public static final String MATCH_GROUP_REGEX_BEGIN = "\\\\m\\{"; public static final String MATCH_GROUP_REGEX_END = "\\}"; public static final Pattern MATCH_GROUP_REGEX_PATTERN = Pattern .compile(MATCH_GROUP_REGEX_BEGIN + "(\\w+)" + MATCH_GROUP_REGEX_END); /** * Get the regular expression of this rule. * * @return returns the regular expression of this rule. */ public Pattern getRegexPattern(); /** * Get the rule id * * @return returns the rule id */ public String getId(); /** * Get the rule confidence * * @return returns the rule confidence */ public float getConfidence(); /** * Get the match strategy of this rule; * * @return returns the match strategy of this rule. */ public int getMatchStrategy(); /** * Get the match type of this rule. * * @return returns the match type of this rule. */ public Type getMatchType(); /** * Adds the given feature to the match type filter features * * @param aFeature * The feature to be added. */ public void addFilterFeature(FilterFeature aFeature); /** * Returns the match type filter features * * @return returns the match type feature filters */ public FilterFeature[] getMatchTypeFilterFeatures(); /** * Adds the given feature to the match type annotation update features * * @param aFeature * The feature to be added. */ public void addUpdateFeature(Feature aFeature); /** * Returns the match type annotation update features * * @return returns the match type annotation update features */ public Feature[] getMatchTypeUpdateFeatures(); /** * Adds the given exception to this rule * * @param aException * The exception to be added. */ public void addException(RuleException aException); /** * Returns the exceptions for this rule * * @return returns the exceptions for this rule */ public RuleException[] getExceptions(); /** * Returns the match type featurePath object. * * @return returns the match type featurePath object */ public FeaturePath getMatchTypeFeaturePath(); /** * Returns true if a featurePath for this rule was specified. * * @return true if a featurePath was specified for this rule */ public boolean isFeaturePathMatch(); /** * Returns the match group number for the given match group name or -1 if * the match group name is not available. * * @param matchGroupName match group name * * @return returns the match group number for the given name or -1 if the match group does not exist. */ public int getMatchGroupNumber(String matchGroupName); }././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/FilterFeature.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/FilterFea0000644000175000017500000000237311625126522033472 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.util.regex.Pattern; /** * */ public interface FilterFeature { /** * Get the pattern for this filter feature * * @return returns the pattern for this filter feature */ public Pattern getPattern(); /** * Get the featurePath of this fileFeature object * * @return returns the featurePath object. */ public FeaturePath getFeaturePath(); }././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/ConceptFileParser.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/ConceptFi0000644000175000017500000000324011625126522033475 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.InputStream; import org.apache.uima.resource.ResourceInitializationException; /** * */ public interface ConceptFileParser { /** * parse the XML concepts file and create the object representation for the concepts and rules. To parse the XML * concept file, XMLBeans are used. * * @param conceptFilePathName * XML concepts file path name * * @param conceptFileStream * XML concept file stream * * @return returns a Concept[] that contains the object representation of all concepts * * @throws ResourceInitializationException * in case of parsing errors. */ public Concept[] parseConceptFile(String conceptFilePathName, InputStream conceptFileStream) throws ResourceInitializationException; } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/Annotation.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/Annotatio0000644000175000017500000000521211625126522033560 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import org.apache.uima.cas.Type; /** * */ public interface Annotation { /** * Get the annotation identifier. * * @return returns the annotation identifier */ public String getId(); /** * Get the annotation type of this annotation. * * @return returns the annotation type of this annotation */ public Type getAnnotationType(); /** * Get the annotation begin position of this annotation. * * @return returns the annotation begin position. */ public Position getBegin(); /** * Get the annotation end position of this annotation. * * @return returns the annotation end position. */ public Position getEnd(); /** * Adds the given feature to this annotation. * * @param aFeat * The feature to be added. */ public void addFeature(Feature aFeat); /** * Returns the feature array for this annotation * * @return returns the feature array for this annotation */ public Feature[] getFeatures(); /** * Validate the covered Text of the annotation and checks if the annotation * is valid or not. * * @param coveredText covered text of the annotation that should be created * * @param ruleID ruleID (if specified) of the rule that created the match * * @return true if the annotation is valid or if not validation was * specified. If the annotation is invalid, false is returned. */ public boolean validate(String coveredText, String ruleID) throws Exception; /** * Returns true if for the current annotation an validator is available. * * @return Returns true if an validator is available. */ public boolean hasValidator(); }././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/FileResource.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/FileResou0000644000175000017500000000207211625126522033522 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; /** * * */ public interface FileResource { /** * Returns the file of the FileResource * * @return File - Resource file */ public File getFile(); } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/RuleException.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/RuleExcep0000644000175000017500000000260511625126522033523 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import org.apache.uima.cas.text.AnnotationFS; /** * */ public interface RuleException { /** * match the rule exception pattern against the covered text of the given annotation * * @param annot - current annotation that should be used to match * * @return returns true if a match was found */ public boolean matchPattern(AnnotationFS annot); /** * Get the Type of this exception * * @return returns the UIMA type object. */ public org.apache.uima.cas.Type getType(); }././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/FeaturePath.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/FeaturePa0000644000175000017500000000312511625126522033501 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import org.apache.uima.annotator.regex.impl.RegexAnnotatorProcessException; import org.apache.uima.cas.text.AnnotationFS; /** * FeaturePath interface defines the access to the value for a regex * featurePath. */ public interface FeaturePath { /** * Returns the value of the given annotation FS for the stored featurePath. * * @param annotFs * annotation where the featurePath should be resolved on. * * @return featurePath value as String */ public String getValue(AnnotationFS annotFs) throws RegexAnnotatorProcessException; /** * Returns the featurePath as String * * @return featurePath string value */ public String getFeaturePath(); }././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/Position.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/Position.0000644000175000017500000000323711625126522033513 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.util.regex.Matcher; /** * */ public interface Position { public static final int START_LOCATION = 1; public static final int END_LOCATION = 2; /** * Get the match group number of this position. * * @return returns the match group number. */ int getMatchGroup(); /** * Returns the index of the first or last character of the subsequence this position's * match group covers, dependent on whether this position denotes the begin or end of * the match group. * * @param aMatcher The matcher that matched the subsequence. * @return The index of the first or last character of this position's match group. * * @see java.util.regex.Matcher#start(int) * @see java.util.regex.Matcher#end(int) */ int getMatchPosition(Matcher aMatcher); }././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension/uima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension0000755000175000017500000000000011625126522033636 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension/Validation.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension0000644000175000017500000000334011625126522033640 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.extension; /** * The Validation interface is provided to implement a custom validator * that can be used to validate an annotation before it is created. */ public interface Validation { /** * The validate method validates the covered text of an annotator and returns true or * false whether the annotation is correct or not. The validate method is called between * a rule match and the annotation creation. The annotation is only created if the method * returns true. * * @param coveredText covered text of the annotation that should be validated * @param ruleID ruleID of the rule which created the match * * @return true if the annotation is valid or false if the annotation is invalid * * @throws Exception throws an exception if an validation error occurred */ public boolean validate(String coveredText, String ruleID) throws Exception; }././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension/Normalization.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension0000644000175000017500000000266711625126522033653 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.extension; /** * The Normalization interface was add to implement a custom normalization * for feature values before they are assigned to an annotation. */ public interface Normalization { /** * Custom feature value normalization. This interface must be implemented to * perform a custom normalization on the given input string. * * @param input input string which should be normalized * * @param ruleID rule ID of the matching rule * * @return String - normalized input string */ public String normalize(String input, String ruleID) throws Exception; }././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension/impl/uima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension0000755000175000017500000000000011625126522033636 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension/impl/CreditCardNumberValidator.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension0000644000175000017500000000765111625126522033651 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.extension.impl; import org.apache.uima.annotator.regex.extension.Validation; /** * credit card number validator * */ public class CreditCardNumberValidator implements Validation { /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.extension.Validation#validate(java.lang.String, * java.lang.String) */ public boolean validate(String coveredText, String ruleID) throws Exception { // cleanup '-' and ' ' signs from the covered text to check the credit // card number coveredText = coveredText.replaceAll("-", ""); coveredText = coveredText.replaceAll(" ", ""); // check unknown card type numbers for know card types // we already had regex rules that detect the card types AmericanExpress, // Visa and MasterCard so those must not be detected be ruleID unknown if (ruleID != null && ruleID.equals("unknown")) { // check AmericanExpress if ((coveredText.startsWith("34") || coveredText.startsWith("37")) && coveredText.length() == 15) { // already detected by the AmericanExpress pattern return false; } // check MasterCards if (coveredText.length() == 16) { String[] masterCardStarts = { "51", "52", "53", "54", "55" }; for (int i = 0; i < masterCardStarts.length; i++) { if (coveredText.startsWith(masterCardStarts[i])) { // master card already detected return false; } } } // check Visa if (coveredText.startsWith("4") && coveredText.length() == 16) { // already detected by the Visa pattern return false; } } // get character array of credit card number digits char[] creditCardCharArray = coveredText.toCharArray(); // get credit card number length int creditCardLength = creditCardCharArray.length; // calculate credit card check digit using the Luhn algorithm boolean isSecond = false; int sum = 0; for (int i = creditCardLength - 1; i >= 0; i--) { int digit = Character.digit(creditCardCharArray[i], 10); if (isSecond) { // we have to double the digit int doubledDigit = digit * 2; // if the digit is greater than 9 we have to compute the crossfoot if (doubledDigit > 9) { // calculate crossfoot int crossFoot = (doubledDigit % 10) + 1; // add crossfoot to sum sum = sum + crossFoot; } else { sum = sum + doubledDigit; } } else { sum = sum + digit; } isSecond = !isSecond; } // calculate Luhn result int result = sum % 10; // in case the result == 0 the Luhn algorithm was correct and the credit // card number is valid if (result == 0) { return true; } return false; } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension/impl/ISBNNumberValidator.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension0000644000175000017500000000731711625126522033650 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.extension.impl; import org.apache.uima.annotator.regex.extension.Validation; /** * ISBN number validator * */ public class ISBNNumberValidator implements Validation { /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.extension.Validation#validate(java.lang.String, * java.lang.String) */ public boolean validate(String coveredText, String ruleID) throws Exception { // cleanup '-' signs from the covered text to check the isbn number coveredText = coveredText.replaceAll("-", ""); // get character array for ISBN number digits char[] isbnCharArray = coveredText.toCharArray(); // check if we have a ISBN-10 or ISBN-13 if (coveredText.length() == 10) { // covert ISBN number digits to integer array int[] isbnDigits = new int[9]; for (int i = 0; i < 9; i++) { isbnDigits[i] = Character.digit(isbnCharArray[i], 10); } // calculate ISBN-10 check digit int checkDigit = 11 - (10 * isbnDigits[0] + 9 * isbnDigits[1] + 8 * isbnDigits[2] + 7 * isbnDigits[3] + 6 * isbnDigits[4] + 5 * isbnDigits[5] + 4 * isbnDigits[6] + 3 * isbnDigits[7] + 2 * isbnDigits[8]) % 11; // check if ISBN number if it is a real ISBN number if (checkDigit == 10) { if (isbnCharArray[9] == 'X' || isbnCharArray[9] == 'x') { // real ISBN number return true; } } else if (Character.digit(isbnCharArray[9], 10) == checkDigit) { // real ISBN number return true; } else if (checkDigit == 11) { // normally this is an invalid ISBN number but they are still // available so we decided they are valid return true; } } else if (coveredText.length() == 13) { // covert ISBN number digits to integer array int[] isbnDigits = new int[12]; for (int i = 0; i < 12; i++) { isbnDigits[i] = Character.digit(isbnCharArray[i], 10); } // calculate ISBN-13 check digit int checkDigit = 10 - (isbnDigits[0] + 3 * isbnDigits[1] + isbnDigits[2] + 3 * isbnDigits[3] + isbnDigits[4] + 3 * isbnDigits[5] + isbnDigits[6] + 3 * isbnDigits[7] + isbnDigits[8] + 3 * isbnDigits[9] + isbnDigits[10] + 3 * isbnDigits[11]) % 10; // check if ISBN number if it is a real ISBN number if (checkDigit == 10) { if (Character.digit(isbnCharArray[12], 10) == 0) { // real ISBN number return true; } } else if (Character.digit(isbnCharArray[12], 10) == checkDigit) { // real ISBN number return true; } } return false; } } uima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/0000755000175000017500000000000011625126520032640 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/ConceptFileParser_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Conc0000644000175000017500000003015211625126520033446 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import org.apache.incubator.uima.regex.AnnotationDocument; import org.apache.incubator.uima.regex.ConceptDocument; import org.apache.incubator.uima.regex.ConceptSetDocument; import org.apache.incubator.uima.regex.CreateAnnotationsDocument; import org.apache.incubator.uima.regex.ExceptionDocument; import org.apache.incubator.uima.regex.FeatureDocument; import org.apache.incubator.uima.regex.RuleDocument; import org.apache.incubator.uima.regex.RulesDocument; import org.apache.incubator.uima.regex.SetFeatureDocument; import org.apache.incubator.uima.regex.VariableDocument; import org.apache.incubator.uima.regex.VariablesDocument; import org.apache.uima.annotator.regex.Annotation; import org.apache.uima.annotator.regex.Concept; import org.apache.uima.annotator.regex.ConceptFileParser; import org.apache.uima.annotator.regex.Feature; import org.apache.uima.annotator.regex.FilterFeature; import org.apache.uima.annotator.regex.Position; import org.apache.uima.annotator.regex.Rule; import org.apache.uima.annotator.regex.RegexVariables; import org.apache.uima.resource.ResourceInitializationException; import org.apache.xmlbeans.XmlError; import org.apache.xmlbeans.XmlOptions; /** * */ public class ConceptFileParser_impl implements ConceptFileParser { /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.ConceptFileParser#parseConceptFile(java.lang.String, * java.io.InputStream) */ public Concept[] parseConceptFile(String conceptFilePathName, InputStream conceptFileStream) throws ResourceInitializationException { ArrayList conceptList = new ArrayList(); // parse regex concept file and extract content to local objects ConceptSetDocument conceptSetDoc; try { conceptSetDoc = ConceptSetDocument.Factory.parse(conceptFileStream); } catch (Exception ex) { throw new RegexAnnotatorConfigException( "regex_annotator_error_parsing_rule_set_file", new Object[] { conceptFilePathName }, ex); } // validate input file ArrayList validationErrors = new ArrayList(); XmlOptions validationOptions = new XmlOptions(); validationOptions.setErrorListener(validationErrors); boolean isValid = conceptSetDoc.validate(validationOptions); // output the errors if the XML is invalid. if (!isValid) { Iterator iter = validationErrors.iterator(); StringBuffer errorMessages = new StringBuffer(); while (iter.hasNext()) { errorMessages.append("\n>> "); errorMessages.append(iter.next()); } throw new RegexAnnotatorConfigException( "regex_annotator_error_xml_validation", new Object[] { conceptFilePathName, errorMessages.toString() }); } // get concept file regex variables and store them all to the variables // object VariablesDocument.Variables variablesDoc = conceptSetDoc.getConceptSet() .getVariables(); RegexVariables variables = null; if (variablesDoc != null) { VariableDocument.Variable[] varArray = variablesDoc.getVariableArray(); if (varArray.length > 0) { variables = new RegexVariables_impl(); for (int i = 0; i < varArray.length; i++) { String value = varArray[i].getValue().replaceAll("\\\\", "\\\\\\\\"); variables.addVariable(varArray[i].getName(), value); } } } // *************************************************** // get the concepts from the concept file document // *************************************************** ConceptSetDocument.ConceptSet conceptSet = conceptSetDoc.getConceptSet(); ConceptDocument.Concept[] concepts = conceptSet.getConceptArray(); for (int i = 0; i < concepts.length; i++) { // get concept meta data String conceptName = concepts[i].getName(); boolean processAllRules = concepts[i].getProcessAllRules(); // create new concept object org.apache.uima.annotator.regex.Concept concept = new Concept_impl( conceptName, processAllRules); // ******************************** // get all rules for this concept // ******************************** RulesDocument.Rules rules = concepts[i].getRules(); RuleDocument.Rule[] ruleList = rules.getRuleArray(); for (int r = 0; r < ruleList.length; r++) { // get rule meta data String regex = ruleList[r].getRegEx(); String matchType = ruleList[r].getMatchType(); int matchStrategy = ruleList[r].getMatchStrategy().intValue(); String id = ruleList[r].getRuleId(); String featurePath = ruleList[r].getFeaturePath(); float confidence = (float) 0.0; if (ruleList[r].getConfidence() != null) { confidence = ruleList[r].getConfidence().floatValue(); } // create new rule and add all rule settings // additionally add a reference to the regex variables object // to resolve regex variables Rule rule = new Rule_impl(regex, matchStrategy, matchType, id, confidence, featurePath, variables); // ******************************** // get match type filter features // ******************************** if (ruleList[r].getMatchTypeFilter() != null) { // iterate over all filter features and add them to the rule FeatureDocument.Feature[] filterFeatures = ruleList[r] .getMatchTypeFilter().getFeatureArray(); for (int x = 0; x < filterFeatures.length; x++) { String featureName = filterFeatures[x].getFeaturePath(); String featureValue = filterFeatures[x].getStringValue(); // create new filter feature and add them to the rule FilterFeature filterFeature = new FilterFeature_impl( featureName, featureValue); rule.addFilterFeature(filterFeature); } } // *********************************************** // get all update match type annotation features // *********************************************** if (ruleList[r].getUpdateMatchTypeAnnotation() != null) { // iterate over all match type annotation update features and add // them to the rule SetFeatureDocument.SetFeature[] updateFeatures = ruleList[r] .getUpdateMatchTypeAnnotation().getSetFeatureArray(); for (int x = 0; x < updateFeatures.length; x++) { String featureName = updateFeatures[x].getName(); String featureValue = updateFeatures[x].getStringValue(); int featureType = updateFeatures[x].getType().intValue(); int normalization = 0; if (updateFeatures[x].getNormalization() != null) { normalization = updateFeatures[x].getNormalization() .intValue(); } String implClass = updateFeatures[x].getClass1(); // create new feature and add them to the rule Feature updateFeature = new Feature_impl(featureType, featureName, featureValue, normalization, implClass); rule.addUpdateFeature(updateFeature); } } // ********************************** // get all exceptions for this rule // ********************************** if (ruleList[r].getRuleExceptions() != null) { // iterate over all match type annotation update features and add // them to the rule ExceptionDocument.Exception[] exceptions = ruleList[r] .getRuleExceptions().getExceptionArray(); for (int x = 0; x < exceptions.length; x++) { String exceptionMatchType = exceptions[x].getMatchType(); String regexPattern = exceptions[x].getStringValue(); // create new Exception object and add them to the rule org.apache.uima.annotator.regex.RuleException exception = new RuleException_impl( exceptionMatchType, regexPattern); rule.addException(exception); } } // add rule to the concept concept.addRule(rule); } // ************************************** // get all annotations for this concept // ************************************** CreateAnnotationsDocument.CreateAnnotations annotations = concepts[i] .getCreateAnnotations(); AnnotationDocument.Annotation[] annotationList = annotations .getAnnotationArray(); for (int a = 0; a < annotationList.length; a++) { // create annotation position objects int beginMatchGroup = annotationList[a].getBegin().getGroup().intValue(); int beginLocation = annotationList[a].getBegin().getLocation() .intValue(); int endMatchGroup = annotationList[a].getEnd().getGroup().intValue(); int endLocation = annotationList[a].getEnd().getLocation() .intValue(); Position begin = new Position_impl(beginMatchGroup, beginLocation); Position end = new Position_impl(endMatchGroup, endLocation); // create annotation object String id = annotationList[a].getId(); String type = annotationList[a].getType(); String validationClass = annotationList[a].getValidate(); Annotation annotation = new Annotation_impl(id, type, begin, end, validationClass); // read out feature values and add it to the annotation SetFeatureDocument.SetFeature[] features = annotationList[a] .getSetFeatureArray(); for (int f = 0; f < features.length; f++) { String name = features[f].getName(); int featureType = features[f].getType().intValue(); String value = features[f].getStringValue(); int normalization = 0; if (features[f].getNormalization() != null) { normalization = features[f].getNormalization().intValue(); } String implClass = features[f].getClass1(); Feature feature = new Feature_impl(featureType, name, value, normalization, implClass); annotation.addFeature(feature); } // add annotation to rule concept.addAnnotation(annotation); } conceptList.add(concept); } return conceptList.toArray(new Concept[0]); } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/RuleComparator.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Rule0000644000175000017500000000303711625126520033475 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.io.Serializable; import java.util.Comparator; import org.apache.uima.annotator.regex.Rule; /** * */ public class RuleComparator implements Comparator, Serializable { private static final long serialVersionUID = -1327195437752705633L; /* (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public int compare(Rule r1, Rule r2) { Rule rule1 = r1; Rule rule2 = r2; if(rule1.getConfidence() < rule2.getConfidence()) { return 1; } else if (rule1.getConfidence() > rule2.getConfidence()) { return -1; } else { return 0; } } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/RegexAnnotatorConfigException.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Rege0000644000175000017500000000513711625126520033453 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import org.apache.uima.resource.ResourceInitializationException; /** * * */ public class RegexAnnotatorConfigException extends ResourceInitializationException { /** * */ private static final long serialVersionUID = 2867637574651305994L; /** * Creates a new exception with a the specified message. * * @param aMessageKey * an identifier that maps to the message for this exception. The message may contain * placeholders for arguments as defined by the * {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if the message has no * arguments. */ public RegexAnnotatorConfigException(String aMessageKey, Object[] aArguments) { super(RegExAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments); } /** * Creates a new exception with the specified cause and a message from the * {@link #STANDARD_MESSAGE_CATALOG}. * * @param aMessageKey * an identifier that maps to the message for this exception. The message may contain * placeholders for arguments as defined by the * {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if the message has no * arguments. * @param aCause * the original exception that caused this exception to be thrown, if any */ public RegexAnnotatorConfigException(String aMessageKey, Object[] aArguments, Throwable aCause) { super(RegExAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments, aCause); } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/RegexAnnotatorProcessException.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Rege0000644000175000017500000000567411625126520033461 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; /** * * */ public class RegexAnnotatorProcessException extends AnalysisEngineProcessException { /** * */ private static final long serialVersionUID = -3610786991433275190L; /** * Creates a new exception with a the specified message. * * @param aMessageKey * an identifier that maps to the message for this exception. The * message may contain placeholders for arguments as defined by the * {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if * the message has no arguments. */ public RegexAnnotatorProcessException(String aMessageKey, Object[] aArguments) { super(RegExAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments); } /** * Creates a new exception with the specified cause and a message from the * {@link #STANDARD_MESSAGE_CATALOG}. * * @param aMessageKey * an identifier that maps to the message for this exception. The * message may contain placeholders for arguments as defined by the * {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if * the message has no arguments. * @param aCause * the original exception that caused this exception to be thrown, * if any */ public RegexAnnotatorProcessException(String aMessageKey, Object[] aArguments, Throwable aCause) { super(RegExAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments, aCause); } /** * Creates a new exception with the specified cause and a null message. * * @param aCause * the original exception that caused this exception to be thrown, if any */ public RegexAnnotatorProcessException(Throwable aCause) { super(aCause); } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Annotation_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Anno0000644000175000017500000001603211625126520033460 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.util.ArrayList; import org.apache.uima.annotator.regex.Annotation; import org.apache.uima.annotator.regex.Feature; import org.apache.uima.annotator.regex.Position; import org.apache.uima.annotator.regex.extension.Validation; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.resource.ResourceInitializationException; /** * Implementation of an RegEx Annotation definition * */ public class Annotation_impl implements Annotation { private final String annotationId; private final String annotationTypeStr; private final Position begin; private final Position end; private final String validationClass; private Validation validator; private boolean hasValidator; private ArrayList features; private Type annotationType; /** * @param annotId * @param annotType * @param begin * @param end */ public Annotation_impl(String annotId, String annotType, Position begin, Position end, String validationClass) { this.annotationId = annotId; this.annotationTypeStr = annotType; this.begin = begin; this.end = end; this.features = new ArrayList(); this.validationClass = validationClass; this.validator = null; this.hasValidator = false; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Annotation#getAnnotationType() */ public Type getAnnotationType() { return this.annotationType; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Annotation#getBegin() */ public Position getBegin() { return this.begin; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Annotation#getEnd() */ public Position getEnd() { return this.end; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Annotation#getId() */ public String getId() { return this.annotationId; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Annotation#addFeature(org.apache.uima.annotator.regex.Feature) */ public void addFeature(Feature aFeature) { this.features.add(aFeature); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Annotation#getFeatures() */ public Feature[] getFeatures() { return this.features.toArray(new Feature[0]); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Annotation#validate(java.lang.String, * java.lang.String) */ public boolean validate(String coveredText, String ruleID) throws Exception { if (this.validator != null) { return this.validator.validate(coveredText, ruleID); } else { return true; } } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Annotation#hasValidator() */ public boolean hasValidator() { return this.hasValidator; } /** * @param ts * @throws ResourceInitializationException */ public void typeInit(TypeSystem ts) throws ResourceInitializationException { // initialize annotation type if (this.annotationTypeStr != null) { this.annotationType = ts.getType(this.annotationTypeStr); if (this.annotationType == null) { throw new RegexAnnotatorConfigException( "regex_annotator_error_resolving_types", new Object[] { this.annotationTypeStr }); } } // initialize features with types Feature[] featureList = getFeatures(); for (int i = 0; i < featureList.length; i++) { ((Feature_impl) featureList[i]).typeInit(this.annotationType); } } /** * initialize the Regex Annotation object with all the annotation features * * @throws RegexAnnotatorConfigException */ public void initialize() throws RegexAnnotatorConfigException { // initialize features Feature[] featureList = getFeatures(); for (int i = 0; i < featureList.length; i++) { ((Feature_impl) featureList[i]).initialize(); } if (this.validationClass != null) { try { // try to get the custom validation class Class validatorClass = this.getClass().getClassLoader() .loadClass(this.validationClass); Object obj = validatorClass.newInstance(); if (obj instanceof Validation) { this.validator = (Validation) obj; this.hasValidator = true; } else { throw new RegexAnnotatorConfigException( "regex_annotator_error_custom_validator_wrong_interface", new Object[] { this.validationClass }); } } catch (Exception ex) { throw new RegexAnnotatorConfigException( "regex_annotator_error_creating_custom_validator", new Object[] { this.validationClass }, ex); } } } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("Annotation: "); buffer.append("\n ID: "); buffer.append(this.annotationId); buffer.append("\n Type: "); buffer.append(this.annotationTypeStr); buffer.append("\n Begin: "); buffer.append(this.begin.toString()); buffer.append("\n End: "); buffer.append(this.end.toString()); if (this.validationClass != null) { buffer.append("\n Validation class: "); buffer.append(this.validationClass); } Feature[] featureList = getFeatures(); if (featureList.length > 0) { buffer.append("\nFeatures: \n"); } // print all features for this annotation for (int i = 0; i < featureList.length; i++) { buffer.append(featureList[i].toString()); } buffer.append("\n"); return buffer.toString(); } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Feature_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Feat0000644000175000017500000001643411625126520033452 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import org.apache.uima.analysis_engine.annotator.AnnotatorInitializationException; import org.apache.uima.annotator.regex.Feature; import org.apache.uima.annotator.regex.extension.Normalization; import org.apache.uima.cas.Type; import org.apache.uima.resource.ResourceInitializationException; /** * * */ public class Feature_impl implements Feature { private final int type; private final int normalizationType; private final boolean hasNormalizer; private final String name; private final String value; private final String implClass; private Normalization normalizer; private org.apache.uima.cas.Feature feature; public Feature_impl(int type, String name, String value, int normalizationType, String implClass) { this.type = type; this.name = name; this.value = value; this.feature = null; this.normalizationType = normalizationType; this.implClass = implClass; this.normalizer = null; if (this.normalizationType > 0) { this.hasNormalizer = true; } else { this.hasNormalizer = false; } } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Feature#getType() */ public int getType() { return this.type; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Feature#getName() */ public String getName() { return this.name; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Feature#getValue() */ public String getValue() { return this.value; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Feature#getFeature() */ public org.apache.uima.cas.Feature getFeature() { return this.feature; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Feature#normalize(java.lang.String, * java.lang.String) */ public String normalize(String input, String ruleId) throws Exception { if (this.hasNormalizer) { // check normalizer type if (this.normalizationType == Feature.CUSTOM_NORMALIZATION) { return this.normalizer.normalize(input, ruleId); } else if (this.normalizationType == Feature.TO_LOWER_NORMALIZATION) { return input.toLowerCase(); } else if (this.normalizationType == Feature.TO_UPPER_NORMALIZATION) { return input.toUpperCase(); } else if (this.normalizationType == Feature.TRIM_NORMALIZATION) { return input.trim(); } } return input; } /** * @param annotationType * @throws ResourceInitializationException */ public void typeInit(Type annotationType) throws ResourceInitializationException { // get feature by name from the specified annotation type this.feature = annotationType.getFeatureByBaseName(this.name); // throw exception if the feature does not exist if (this.feature == null) { throw new ResourceInitializationException( AnnotatorInitializationException.FEATURE_NOT_FOUND, new Object[] { Feature_impl.class.getName(), this.name }); } } /** * Initialize the feature definition. Try to instantiate the custom * normalization class if specified. * */ public void initialize() throws RegexAnnotatorConfigException { // check if the normalization implementation exists in case of custom // normalization if (this.normalizationType == Feature.CUSTOM_NORMALIZATION) { // check if the normalizer class is specified if (this.implClass == null) { throw new RegexAnnotatorConfigException( "regex_annotator_error_custom_normalizer_not_specified", new Object[] { this.name }); } else { try { // try to get the custom normalization class Class normalizerClass = this.getClass().getClassLoader() .loadClass(this.implClass); Object obj = normalizerClass.newInstance(); if (obj instanceof Normalization) { this.normalizer = (Normalization) obj; } else { throw new RegexAnnotatorConfigException( "regex_annotator_error_custom_normalizer_wrong_interface", new Object[] { this.implClass }); } } catch (Exception ex) { throw new RegexAnnotatorConfigException( "regex_annotator_error_creating_custom_normalizer", new Object[] { this.implClass }, ex); } } } } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("Feature: "); buffer.append("\n Name: "); buffer.append(this.name); if (this.type == Feature.FLOAT_FEATURE) { buffer.append("\n Type: float"); } else if (this.type == Feature.INTEGER_FEATURE) { buffer.append("\n Type: integer"); } else if (this.type == Feature.STRING_FEATURE) { buffer.append("\n Type: string"); } else if (this.type == Feature.REFERENCE_FEATURE) { buffer.append("\n Type: reference"); } else if (this.type == Feature.CONFIDENCE_FEATURE) { buffer.append("\n Type: confidence"); } else if (this.type == Feature.RULEID_FEATURE) { buffer.append("\n Type: ruleId"); } buffer.append("\n Value: "); buffer.append(this.value); if (this.normalizationType > 0) { if (this.normalizationType == Feature.TO_LOWER_NORMALIZATION) { buffer.append("\n Normalization: ToLowerCase"); } else if (this.normalizationType == Feature.TO_UPPER_NORMALIZATION) { buffer.append("\n Normalization: ToUpperCase"); } else if (this.normalizationType == Feature.TRIM_NORMALIZATION) { buffer.append("\n Normalization: Trim"); } if (this.normalizationType == Feature.CUSTOM_NORMALIZATION) { buffer.append("\n Normalization: " + this.implClass); } } buffer.append("\n"); return buffer.toString(); } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Concept_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Conc0000644000175000017500000002161511625126520033452 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import org.apache.uima.annotator.regex.Annotation; import org.apache.uima.annotator.regex.Concept; import org.apache.uima.annotator.regex.Feature; import org.apache.uima.annotator.regex.Rule; import org.apache.uima.cas.TypeSystem; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; /** * */ public class Concept_impl implements Concept { private ArrayList annotations; private Annotation[] annotArray; private String name; private ArrayList rules; private boolean processAllRules; private Rule[] ruleList; /** * @param name */ public Concept_impl(String name, boolean processAllRules) { this.name = name; this.processAllRules = processAllRules; this.annotations = new ArrayList(); this.rules = new ArrayList(); this.ruleList = null; this.annotArray = null; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#addAnnotation(org.apache.uima.annotator.regex.Annotation) */ public void addAnnotation(Annotation aAnnotation) { this.annotations.add(aAnnotation); this.annotArray = this.annotations.toArray(new Annotation[0]); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getInstructions() */ public Annotation[] getAnnotations() { return this.annotArray; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Concept#addRule(org.apache.uima.annotator.regex.Rule) */ public void addRule(Rule aRule) { this.rules.add(aRule); //create ruleList array this.ruleList = this.rules.toArray(new Rule[0]); // sort rules array by confidence Arrays.sort(this.ruleList, new RuleComparator()); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Concept#getName() */ public String getName() { return this.name; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Concept#getRules() */ public Rule[] getRules() { return this.ruleList; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Concept#processAllConceptRules() */ public boolean processAllConceptRules() { return this.processAllRules; } /** * @param ts * @throws ResourceInitializationException */ public void typeInit(TypeSystem ts) throws ResourceInitializationException { // initialize all rules for this concept for (int i = 0; i < this.ruleList.length; i++) { ((Rule_impl) this.ruleList[i]).typeInit(ts); } // initialize all annotations for this concept Annotation[] annots = getAnnotations(); for (int i = 0; i < annots.length; i++) { ((Annotation_impl) annots[i]).typeInit(ts); } } /** * initialize the concept and the referred rules and annotations. * * Also do some additional syntax checking. * * @throws RegexAnnotatorConfigException */ public void initialize(Logger logger) throws RegexAnnotatorConfigException { // get a list of annotations Annotation[] annots = getAnnotations(); // initialize all rules for this concept for (int i = 0; i < this.ruleList.length; i++) { ((Rule_impl) this.ruleList[i]).initialize(); } // initialize all annotations for this concept for (int i = 0; i < annots.length; i++) { ((Annotation_impl) annots[i]).initialize(); } // check duplicate rule IDs within the same concept // store ruleIDs for one concept HashSet ruleIds = new HashSet(this.ruleList.length); for (int x = 0; x < this.ruleList.length; x++) { String ruleID = this.ruleList[x].getId(); // if no ruleID was specified, skip rule if (ruleID == null) { continue; } // check if ruleID already exist for this concept if (ruleIds.contains(ruleID)) { logger.logrb(Level.WARNING, "RegExAnnotator", "initialize", RegExAnnotator.MESSAGE_DIGEST, "regex_annotator_warning_duplicate_rule_id", new Object[] { ruleID, this.name }); } else { // ruleID does not exist for this concept, add it to the ruleID // list ruleIds.add(ruleID); } } // check if annotation IDs are available in case of reference type // features and // check if they are unique within the concept HashSet referenceIds = new HashSet(); HashSet annotationIds = new HashSet(); for (int a = 0; a < annots.length; a++) { String annotID = annots[a].getId(); // check annotation ID if available if (annotID != null) { // if annotation ID already exists for the current concept // throw an exception, annotation IDs must be unique for a // concept if (annotationIds.contains(annotID)) { throw new RegexAnnotatorConfigException( "regex_annotator_error_duplicate_annotation_id", new Object[] { annotID, this.name }); } else { annotationIds.add(annotID); } } Feature[] features = annots[a].getFeatures(); for (int f = 0; f < features.length; f++) { // check if the feature is a reference feature if (features[f].getType() == Feature.REFERENCE_FEATURE) { // add the annotation ID to the referenceIDs list to check // if this annotation ID is available and unique for the // concept referenceIds.add(features[f].getValue()); // check annotation ID for the current annotation. Annotations // that have a reference type feature must also have a valid // annotation ID if (annotID == null) { throw new RegexAnnotatorConfigException( "regex_annotator_error_annotation_id_not_available", new Object[] { this.name }); } } } } // check if all referred annotation IDs are available Iterator refIterator = referenceIds.iterator(); while (refIterator.hasNext()) { String refID = refIterator.next(); // check if refID is available in the anntoationIDs list // if it is not available, throw an exception if (!annotationIds.contains(refID)) { throw new RegexAnnotatorConfigException( "regex_annotator_error_referred_annotation_id_not_available", new Object[] { refID, this.name }); } } } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("Concept "); if (this.name != null) { buffer.append(this.name); } buffer.append("\nProcessAllConceptRules: " + this.processAllRules + "\n"); if (this.ruleList.length > 0) { buffer.append("\nConcept rules: \n"); } for (int i = 0; i < this.ruleList.length; i++) { buffer.append(this.ruleList[i].toString()); } Annotation[] annots = getAnnotations(); if (annots.length > 0) { buffer.append("Annotations: \n"); } // print all annotations for this rule for (int i = 0; i < annots.length; i++) { buffer.append(annots[i].toString()); } buffer.append("\n"); return buffer.toString(); } }././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Rule_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Rule0000644000175000017500000003601311625126520033475 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.uima.annotator.regex.Feature; import org.apache.uima.annotator.regex.FeaturePath; import org.apache.uima.annotator.regex.FilterFeature; import org.apache.uima.annotator.regex.RegexVariables; import org.apache.uima.annotator.regex.Rule; import org.apache.uima.annotator.regex.RuleException; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.resource.ResourceInitializationException; /** * Implementation of the Rule interface. */ public class Rule_impl implements Rule { // rule regex string private String regex; // rule ID private final String id; // rule confidence value private final float confidence; // rule match type as string value private final String matchTypeStr; // rule featurePath object private FeaturePath_impl featurePath; // true if a featurePath was specified for this rule private boolean isFeaturePathMatch = false; // rule match strategy private final int matchStrategy; // compiled rule regex pattern private Pattern pattern; // resolved rule match type private Type matchType; // rule filter features private ArrayList filterFeatures; // rule update features private ArrayList updateFeatures; // rule exceptions private ArrayList exceptions; // concept variables private RegexVariables variables; private HashMap matchGroupNames; /** * Constructor to create a new Rule object. * * @param regex * regex pattern as String * @param matchStrategy * matching strategy * @param matchType * match type as String * @param id * rule id (can also be null) * @param confidence * confidence value * @param featurePath * featurePath (can also be null) */ public Rule_impl(String regex, int matchStrategy, String matchType, String id, float confidence, String featurePath, RegexVariables variables) { this.regex = regex; this.matchStrategy = matchStrategy; this.matchTypeStr = matchType; this.filterFeatures = new ArrayList(); this.updateFeatures = new ArrayList(); this.exceptions = new ArrayList(); this.pattern = null; this.id = id; this.confidence = confidence; this.featurePath = new FeaturePath_impl(featurePath); // set FeaturePath matching mode if a feature path is specified if (featurePath != null) { this.isFeaturePathMatch = true; } this.variables = variables; this.matchGroupNames = new HashMap(); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#addFilterFeature(org.apache.uima.annotator.regex.Feature) */ public void addFilterFeature(FilterFeature aFeature) { this.filterFeatures.add(aFeature); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getMatchTypeFilterFeatures() */ public FilterFeature[] getMatchTypeFilterFeatures() { return this.filterFeatures.toArray(new FilterFeature[0]); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getMatchStrategy() */ public int getMatchStrategy() { return this.matchStrategy; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getMatchType() */ public Type getMatchType() { return this.matchType; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getRegex() */ public Pattern getRegexPattern() { return this.pattern; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getConfidence() */ public float getConfidence() { return this.confidence; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getId() */ public String getId() { return this.id; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#addUpdateFeature(org.apache.uima.annotator.regex.Feature) */ public void addUpdateFeature(Feature aFeature) { this.updateFeatures.add(aFeature); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getMatchTypeUpdateFeatures() */ public Feature[] getMatchTypeUpdateFeatures() { return this.updateFeatures.toArray(new Feature[0]); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#addException(org.apache.uima.annotator.regex.Exception) */ public void addException(RuleException aException) { this.exceptions.add(aException); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getExceptions() */ public RuleException[] getExceptions() { return this.exceptions.toArray(new RuleException[0]); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getMatchTypeFeaturePath() */ public FeaturePath getMatchTypeFeaturePath() { return this.featurePath; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#isFeaturePathMatch() */ public boolean isFeaturePathMatch() { return this.isFeaturePathMatch; } /** * @param ts * @throws ResourceInitializationException */ public void typeInit(TypeSystem ts) throws ResourceInitializationException { // initialize the match type if (this.matchTypeStr != null) { this.matchType = ts.getType(this.matchTypeStr); if (this.matchType == null) { throw new RegexAnnotatorConfigException( "regex_annotator_error_resolving_types", new Object[] { this.matchTypeStr }); } } // initialize match type filters FilterFeature[] filterFeats = getMatchTypeFilterFeatures(); for (int i = 0; i < filterFeats.length; i++) { ((FilterFeature_impl) filterFeats[i]).typeInit(this.matchType); } // initialize match type update features Feature[] updateFeats = getMatchTypeUpdateFeatures(); for (int i = 0; i < updateFeats.length; i++) { ((Feature_impl) updateFeats[i]).typeInit(this.matchType); } // initialize rule exceptions RuleException[] ruleExceptions = getExceptions(); for (int i = 0; i < ruleExceptions.length; i++) { ((RuleException_impl) ruleExceptions[i]).typeInit(ts); } // initialize featurePath element this.featurePath.initialize(this.matchType); } /** * @throws RegexAnnotatorConfigException */ public void initialize() throws RegexAnnotatorConfigException { // check if regular expression contains a regex variable, it must be // replaced first if (this.regex.indexOf(RegexVariables.VARIABLE_START) > -1) { // we have to replace the regex variables replaceRegexVariables(); } // evaluate match group names if (this.regex.indexOf(Rule.MATCH_GROUP_START) > -1) { evaluateMatchGroupNames(); } // compile regex this.pattern = Pattern.compile(this.regex); // initialize match type filters FilterFeature[] filterFeats = getMatchTypeFilterFeatures(); for (int i = 0; i < filterFeats.length; i++) { ((FilterFeature_impl) filterFeats[i]).initialize(); } // initialize match type update features Feature[] updateFeats = getMatchTypeUpdateFeatures(); for (int i = 0; i < updateFeats.length; i++) { ((Feature_impl) updateFeats[i]).initialize(); } // initialize rule exceptions RuleException[] ruleExceptions = getExceptions(); for (int i = 0; i < ruleExceptions.length; i++) { ((RuleException_impl) ruleExceptions[i]).initialize(); } } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Rule#getMatchGroupNumber(java.lang.String) */ public int getMatchGroupNumber(String matchGroupName) { Integer value = this.matchGroupNames.get(matchGroupName.toLowerCase()); if (value != null) { return value.intValue(); } else { return -1; } } /** * replace the variables used in the regular expression pattern * * @throws RegexAnnotatorConfigException */ private void replaceRegexVariables() throws RegexAnnotatorConfigException { // create a regex matcher for the variable pattern Matcher matcher = RegexVariables.VARIABLE_REGEX_PATTERN .matcher(this.regex); // find all variables in the regular expression int pos = 0; HashSet variableSet = new HashSet(); while (matcher.find(pos)) { // get match area for match group 1 int varStart = matcher.start(1); int varEnd = matcher.end(1); // add match group 1 content (variable name) to the variable list variableSet.add(this.regex.substring(varStart, varEnd)); // current end match position pos = matcher.end(); } // replace all found variables in the regular expression for (String variableName : variableSet) { // check if variables are defined if (this.variables == null) { throw new RegexAnnotatorConfigException( "regex_annotator_error_variable_not_found", new Object[] { variableName, this.id }); } else { // get variable value for the variable name String varValue = this.variables.getVariableValue(variableName); if (varValue != null) { // create variable expression that must be replaced String variablePattern = RegexVariables.VARIABLE_REGEX_BEGIN + variableName + RegexVariables.VARIABLE_REGEX_END; // replace variable with the variable value this.regex = this.regex.replaceAll(variablePattern, varValue); } else { throw new RegexAnnotatorConfigException( "regex_annotator_error_variable_not_found", new Object[] { variableName, this.id }); } } } } /** * replace the variables used in the regular expression pattern * * @throws RegexAnnotatorConfigException */ private void evaluateMatchGroupNames() { // create a regex matcher for the match group pattern Matcher matcher = Rule.MATCH_GROUP_REGEX_PATTERN.matcher(this.regex); ArrayList names = new ArrayList(); // find all match group names in the regular expression int pos = 0; while (matcher.find(pos)) { // get match area for match group 1 int varStart = matcher.start(1); int varEnd = matcher.end(1); // count match groups int groupCounter = 1; for (int i = 0; i < varEnd; i++) { if (this.regex.charAt(i) == '(') { if (this.regex.charAt(i + 1) != '?') { groupCounter++; } } } String matchGroupName = this.regex.substring(varStart, varEnd); // add first match group content (match group name) to the variable list this.matchGroupNames.put(matchGroupName.toLowerCase(), Integer.valueOf( groupCounter)); // store match group name with original case names.add(matchGroupName); // current end match position pos = matcher.end(); } // replace all found match group names in the regular expression - never // needed for (String matchGroupName : names) { // create variable expression that must be replaced String matchGroupNamePattern = Rule.MATCH_GROUP_REGEX_BEGIN + matchGroupName + Rule.MATCH_GROUP_REGEX_END; // replace variable with the variable value this.regex = this.regex.replaceAll(matchGroupNamePattern, ""); } } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("Rule "); if (this.id != null) { buffer.append(this.id); } buffer.append("\n"); buffer.append("Regex: "); buffer.append(this.regex); if (this.matchStrategy == Rule.MATCH_ALL) { buffer.append("\nMatch strategy: MATCH_ALL"); } else if (this.matchStrategy == Rule.MATCH_COMPLETE) { buffer.append("\nMatch strategy: MATCH_COMPLETE"); } else if (this.matchStrategy == Rule.MATCH_FIRST) { buffer.append("\nMatch strategy: MATCH_FIRST"); } buffer.append("\nMatch type: "); buffer.append(this.matchTypeStr); buffer.append("\nFeaturePath: "); buffer.append(this.featurePath.getFeaturePath()); if (this.confidence != 0.0) { buffer.append("\nConfidence: "); buffer.append(this.confidence); } FilterFeature[] filterFeats = getMatchTypeFilterFeatures(); if (filterFeats.length > 0) { buffer.append("\nMatch type filter features: \n"); } for (int i = 0; i < filterFeats.length; i++) { buffer.append(filterFeats[i].toString()); } buffer.append("\n"); RuleException[] ruleExceptions = getExceptions(); if (ruleExceptions.length > 0) { buffer.append("\nRule exceptions: \n"); } for (int i = 0; i < ruleExceptions.length; i++) { buffer.append(ruleExceptions[i].toString()); } buffer.append("\n"); return buffer.toString(); } }././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/RegExAnnotator.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/RegE0000644000175000017500000011673511625126520033422 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.io.BufferedInputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.analysis_engine.annotator.AnnotatorContextException; import org.apache.uima.annotator.regex.Annotation; import org.apache.uima.annotator.regex.Concept; import org.apache.uima.annotator.regex.ConceptFileParser; import org.apache.uima.annotator.regex.Feature; import org.apache.uima.annotator.regex.FilterFeature; import org.apache.uima.annotator.regex.Rule; import org.apache.uima.annotator.regex.RuleException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; /** * Main RegEx annotator implementation class. * */ public class RegExAnnotator extends CasAnnotator_ImplBase { public static final String MESSAGE_DIGEST = "org.apache.uima.annotator.regex.regexMessages"; public static final String REGEX_CONCEPTS_FILES = "ConceptFiles"; public static final String PATH_SEPARATOR = System.getProperty("path.separator"); private Logger logger; private Concept[] regexConcepts; private boolean lastRuleExceptionMatch = false; private AnnotationFS lastRuleExceptionAnnotation = null; private NumberFormat floatNumberFormat = null; private NumberFormat integerNumberFormat = null; /** * Performs any startup tasks required by this annotator. This implementation reads the * configuration parameters and compiles the regular expressions. */ public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); // initialize annotator logger this.logger = getContext().getLogger(); // default initialization for number format this.floatNumberFormat = NumberFormat.getNumberInstance(); this.integerNumberFormat = NumberFormat.getIntegerInstance(); // create a concept file parser object ConceptFileParser parser = new ConceptFileParser_impl(); // get configuration parameter settings // get parameter ConceptFiles, default is an empty array String[] conceptFileNames = safeGetConfigParameterStringArrayValue(getContext(), REGEX_CONCEPTS_FILES, new String[] {}); // get UIMA datapath and tokenize it into its elements StringTokenizer tokenizer = new StringTokenizer(getContext().getDataPath(), PATH_SEPARATOR); ArrayList datapathElements = new ArrayList(); while (tokenizer.hasMoreTokens()) { // add datapath elements to the 'datapathElements' array list datapathElements.add(new File(tokenizer.nextToken())); } // try to resolve the concept file names ArrayList concepts = new ArrayList(); for (int i = 0; i < conceptFileNames.length; i++) { // try to resolve the relative file name with classpath or datapath String filename = conceptFileNames[i]; List cfList = new ArrayList(); if (containsWildcardChar(filename)) { resolveRelativeWildcardFilePath(filename, datapathElements, cfList); } else { ConceptFile file = resolveRelativeFilePath(filename, datapathElements); // if the current concept file wasn't found, throw an exception if (file == null) { throw new RegexAnnotatorConfigException("regex_annotator_resource_not_found", new Object[] { conceptFileNames[i] }); } cfList.add(file); // log concept file path this.logger.logrb(Level.CONFIG, "RegExAnnotator", "initialize", MESSAGE_DIGEST, "regex_annotator_rule_set_file", new Object[] { file.getFilePath() }); } for (ConceptFile file : cfList) { // parse concept file to internal objects Concept[] currentConcepts = parser.parseConceptFile(file.getFilePath(), file.getStream()); try { file.getStream().close(); } catch (IOException e) { this.logger.logrb(Level.WARNING, "RegExAnnotator", "initialize", MESSAGE_DIGEST, "regex_annotator_error_closing_input_stream", new Object[] { file.getFilePath(), e.getMessage() }); } // add all concepts to the concepts list for (int c = 0; c < currentConcepts.length; c++) { concepts.add(currentConcepts[c]); } } } // get one array that contains all the concepts this.regexConcepts = concepts.toArray(new Concept[] {}); // check duplicate concept names HashSet conceptNames = new HashSet(this.regexConcepts.length); for (int i = 0; i < this.regexConcepts.length; i++) { String name = this.regexConcepts[i].getName(); // check if concept name was set, if not, skip concept if (name == null) { continue; } // concept name was set, check for duplicate concept names // duplicate concept names can occurs, just log a warning! if (conceptNames.contains(name)) { this.logger.logrb(Level.WARNING, "RegExAnnotator", "initialize", MESSAGE_DIGEST, "regex_annotator_warning_duplicate_concept_name", new Object[] { name }); } else { // add concept name to the concept name list conceptNames.add(name); } } // initialize the regex concepts for (int i = 0; i < this.regexConcepts.length; i++) { ((Concept_impl) this.regexConcepts[i]).initialize(this.logger); } } /** * @param context * @param param * @param defaultValue * @return returns the boolean parameter value * @throws AnnotatorContextException */ private static String[] safeGetConfigParameterStringArrayValue(UimaContext context, String param, String[] defaultValue) { String[] array = (String[]) context.getConfigParameterValue(param); if (array != null && array.length > 0) { return array; } return defaultValue; } private static final boolean containsWildcardChar(String filename) { final int pos = filename.lastIndexOf('/'); if (pos >= 0) { filename = filename.substring(pos); } return filename.indexOf('*') >= 0; } private static final Pattern wildcardExpr2Regex(String wildcardExpr) { // Note: backslash must be the first character to be replaced, for obvious reasons. final String[] specialChars = new String[] { "\\", ".", "+", "(", ")", "?", "[", "]", "{", "}", "$", "^", "|" }; for (String escape : specialChars) { wildcardExpr = wildcardExpr.replace(escape, "\\" + escape); } wildcardExpr = wildcardExpr.replace("*", ".*"); return Pattern.compile(wildcardExpr); } /** * @param context * @param param * @param defaultValue * @return returns the boolean parameter value * @throws AnnotatorContextException */ private ConceptFile resolveRelativeFilePath(String fileName, ArrayList datapathElements) { ConceptFile conceptFile; URL url; // try to use the class loader to load the file resource if ((url = this.getClass().getClassLoader().getResource(fileName)) != null) { // we have successfully resolved the concept file, now also get it as // stream InputStream stream = this.getClass().getClassLoader().getResourceAsStream(fileName); conceptFile = new ConceptFile(url.getFile(), stream); return conceptFile; } if (datapathElements == null || datapathElements.size() == 0) { return null; } // try to use the datapath to load the file resource for (int i = 0; i < datapathElements.size(); i++) { File testFile = new File(datapathElements.get(i), fileName); if (testFile.exists()) { InputStream stream; try { stream = new BufferedInputStream(new FileInputStream(testFile)); } catch (FileNotFoundException ex) { return null; } conceptFile = new ConceptFile(testFile.getAbsolutePath(), stream); return conceptFile; } } return null; } private static final class RegexFileFilter implements FileFilter { private Pattern pattern; private RegexFileFilter(Pattern pattern) { super(); this.pattern = pattern; } public boolean accept(File file) { return this.pattern.matcher(file.getName()).matches(); } } private void resolveRelativeWildcardFilePath(String wildcardExpr, List datapathElements, List cfList) { // try to use the class loader to load the file resource if (datapathElements == null || datapathElements.size() == 0) { return; } Pattern pattern = wildcardExpr2Regex((new File(wildcardExpr)).getName()); FileFilter regexFileFilter = new RegexFileFilter(pattern); // try to use the datapath to load the file resource for (File dpDir : datapathElements) { if (dpDir.isDirectory() && dpDir.canRead()) { dpDir = (new File(dpDir, wildcardExpr)).getParentFile(); File[] files = dpDir.listFiles(regexFileFilter); if (files.length == 0) { continue; } for (File file : files) { InputStream stream; try { stream = new BufferedInputStream(new FileInputStream(file)); } catch (FileNotFoundException ex) { continue; } ConceptFile conceptFile = new ConceptFile(file.getAbsolutePath(), stream); cfList.add(conceptFile); } break; } } } /** * Acquires references to CAS Type and Feature objects that are later used during the * {@link #process(CAS)} method. */ public void typeSystemInit(TypeSystem aTypeSystem) throws AnalysisEngineProcessException { // initialize types for the regex concepts if (this.regexConcepts != null) { try { for (int i = 0; i < this.regexConcepts.length; i++) { ((Concept_impl) this.regexConcepts[i]).typeInit(aTypeSystem); } } catch (ResourceInitializationException ex) { throw new RegexAnnotatorProcessException(ex); } } } /** * Invokes this annotator's analysis logic. This annotator uses the java regular expression * package to find annotations using the regular expressions defined by its configuration * parameters. * * @param aCAS * the CAS to process * * @throws AnalysisEngineProcessException * if a failure occurs during processing. * * @see CasAnnotator_ImplBase#process(CAS) */ public void process(CAS aCAS) throws AnalysisEngineProcessException { // iterate over all concepts one after the other to process them for (int i = 0; i < this.regexConcepts.length; i++) { // System.out.println(this.regexConcepts[i]); // list of all annotation that must be added to the CAS for this // concept ArrayList annotsToAdd = new ArrayList(); // get the rules for the current concept Rule[] conceptRules = this.regexConcepts[i].getRules(); boolean foundMatch = false; for (int ruleCount = 0; ruleCount < conceptRules.length; ruleCount++) { // get the regex pattern for the current rule Pattern pattern = conceptRules[ruleCount].getRegexPattern(); // get the match type where the rule should be processed on Type matchType = conceptRules[ruleCount].getMatchType(); // get match type iterator from the CAS FSIterator mtIterator = aCAS.getAnnotationIndex(matchType).iterator(); String matchValue = null; AnnotationFS currentAnnot = null; // iterate over all match type annotations where the // current rule should be processed on while (mtIterator.hasNext()) { // get next match type annotation currentAnnot = (AnnotationFS) mtIterator.next(); // check filter features, if all conditions are true FilterFeature[] filterFeatures = conceptRules[ruleCount].getMatchTypeFilterFeatures(); boolean passed = true; for (int ff = 0; ff < filterFeatures.length; ff++) { // get the current filterFeature featurePath value String featureValue = filterFeatures[ff].getFeaturePath().getValue(currentAnnot); // check if feature value is set if (featureValue != null) { // create matcher for the current feature value Matcher matcher = filterFeatures[ff].getPattern().matcher(featureValue); // check matches - use MATCH_COMPLETE if (!matcher.matches()) { // no match - stop processing passed = false; break; } } else { // feature value not set - stop processing passed = false; break; } } // check if the filter feature check passed all conditions if (!passed) { // conditions for the current annotation not passed, go on // with the next continue; } // get the specified feature path value from the current // annotation to run the regex on matchValue = conceptRules[ruleCount].getMatchTypeFeaturePath().getValue(currentAnnot); // check matchValue result, if it is null we don't have to match // anything and can go on with the next annotation if (matchValue == null) { continue; } // try to match the current pattern on the text Matcher matcher = pattern.matcher(matchValue); // check the match strategy we have for this rule // MatchStrategy - MATCH_ALL if (conceptRules[ruleCount].getMatchStrategy() == Rule.MATCH_ALL) { int pos = 0; while (matcher.find(pos)) { // we have a match // check rule exceptions if (!matchRuleExceptions(conceptRules[ruleCount].getExceptions(), aCAS, currentAnnot)) { // create annotations and features processConceptInstructions(matcher, currentAnnot, matchValue, aCAS, this.regexConcepts[i], ruleCount, annotsToAdd); // set match found foundMatch = true; } // set start match position for the next match to the // current end match position if (matcher.end() == pos) { // Special case: matched the empty string. If at the end of the input, need // to break. if (pos == matchValue.length()) { break; } // Otherwise increment search pos so as not to loop. ++pos; } else { // Default case: match was non-empty. pos = matcher.end(); } } } // MatchStrategy - MATCH_COMPLETE else if (conceptRules[ruleCount].getMatchStrategy() == Rule.MATCH_COMPLETE) { if (matcher.matches()) { // we have a match // check rule exceptions if (!matchRuleExceptions(conceptRules[ruleCount].getExceptions(), aCAS, currentAnnot)) { // create annotations and features processConceptInstructions(matcher, currentAnnot, matchValue, aCAS, this.regexConcepts[i], ruleCount, annotsToAdd); // set match found foundMatch = true; } } } // MatchStrategy - MATCH_FIRST else if (conceptRules[ruleCount].getMatchStrategy() == Rule.MATCH_FIRST) { if (matcher.find()) { // we have a match // check rule exceptions if (!matchRuleExceptions(conceptRules[ruleCount].getExceptions(), aCAS, currentAnnot)) { // create annotations and features processConceptInstructions(matcher, currentAnnot, matchValue, aCAS, this.regexConcepts[i], ruleCount, annotsToAdd); // set match found foundMatch = true; } } } // all analysis is done, we can go to the next annotation } if (foundMatch) { // check setting of processAllConceptRules to decide if // we go on with the next rule or not if (!this.regexConcepts[i].processAllConceptRules()) { // we found a match for the current rule and we don't want go // on with further rules of this concept break; } } } // add all created annotations to the CAS index before moving to the // next concept for (int x = 0; x < annotsToAdd.size(); x++) { aCAS.getIndexRepository().addFS(annotsToAdd.get(x)); } // reset last rule exception annotation since we move to the next rule // and everything is new this.lastRuleExceptionAnnotation = null; } } /** * Check if the rule exception match for the current match type annotation. * * @param exceptions * current rule exceptions * @param aCAS * current CAS * @param annot * current match type annotation * * @return returns true if the rule exception match */ private boolean matchRuleExceptions(RuleException[] exceptions, CAS aCAS, AnnotationFS annot) { // if we have already checked the exceptions for the current match type // annotation, return the // last result - this can happen in case of MATCH_ALL match strategy if (this.lastRuleExceptionAnnotation == annot) { return this.lastRuleExceptionMatch; } // loop over all rule exceptions for (int i = 0; i < exceptions.length; i++) { // store current match type annotation for performance reason. In case // of MATCH_ALL match // strategy maybe the matchRuleException() method is called multiple // times for the same // match type annotations and in that case the result of the rule // exception match is exactly // the same. this.lastRuleExceptionAnnotation = annot; // find covering annotation AnnotationFS coverFs = findCoverFS(aCAS, annot, exceptions[i].getType()); // check if covering annotation was found if (coverFs != null) { // check if the found coverFs annotation match the exception pattern if (exceptions[i].matchPattern(coverFs)) { this.lastRuleExceptionMatch = true; return this.lastRuleExceptionMatch; } } } this.lastRuleExceptionMatch = false; return false; } /** * Finds the covering annotation of the specified coverFSType for the given annotation. * * @param aCAS * a CAS to search in * @param annot * current annotation * @param coverFsType * covering annotation type to search for * * @return returns the covering annotation FS or null if the covering annotation was not found. * */ private AnnotationFS findCoverFS(CAS aCAS, AnnotationFS annot, Type coverFsType) { // covering annotation AnnotationFS coverFs = null; // create a searchFS of the coverFsType with the annot boundaries to // search for it. FeatureStructure searchFs = aCAS.createAnnotation(coverFsType, annot.getBegin(), aCAS .getDocumentText().length()); // get the coverFSType iterator from the CAS and move it "near" to the // position of the created searchFS. FSIterator iterator = aCAS.getAnnotationIndex(coverFsType).iterator(); iterator.moveTo(searchFs); // now the iterator can either point directly to the FS we are searching // or it points to the next higher FS in the list. So we either have // already found the correct one, of we maybe have to move the iterator to // the previous position. // check if the iterator at the current position is valid if (iterator.isValid()) { // iterator is valid, so we either have the correct annotation of we // have to move to the // previous one, lets check the current FS from the iterator // get current FS coverFs = (AnnotationFS) iterator.get(); // check if the coverFS covers the current match type annotation if ((coverFs.getBegin() <= annot.getBegin()) && (coverFs.getEnd() >= annot.getEnd())) { // we found the covering annotation return coverFs; } // current coverFs does not cover the current match type annotation // lets try to move iterator to the previous annotation and check // again iterator.moveToPrevious(); // check if the iterator is still valid after me move it to the // previous FS if (iterator.isValid()) { // get FS coverFs = (AnnotationFS) iterator.get(); // check the found coverFS covers the current match type // annotation if ((coverFs.getBegin() <= annot.getBegin()) && (coverFs.getEnd() >= annot.getEnd())) { // we found the covering annotation return coverFs; } } } // iterator is invalid lets try to move the iterator to the last FS and // check the FS iterator.moveToLast(); // check if the iterator is valid after we move it if (iterator.isValid()) { // get FS coverFs = (AnnotationFS) iterator.get(); // check the found coverFS covers the current match type annotation if ((coverFs.getBegin() <= annot.getBegin()) && (coverFs.getEnd() >= annot.getEnd())) { // we found the covering annotation return coverFs; } } // no covering annotation found return null; } /** * The createAnnotations method creates the annotations and features for the given rule matches. * * @param matcher * current regex matcher * @param annot * match type annotation * @param matchingText * text that is used to match * @param aCAS * current CAS * @param concept * current concept * @param ruleIndex * current rule index * @param annotsToAdd * array for the annotations that should be created */ private void processConceptInstructions(Matcher matcher, AnnotationFS annot, String matchingText, CAS aCAS, Concept concept, int ruleIndex, ArrayList annotsToAdd) throws RegexAnnotatorProcessException { // create local annotation map for reference features HashMap annotMap = new HashMap(); // has the rule some reference features to set boolean hasReferenceFeatures = false; // get annotations that should be created Annotation[] annotations = concept.getAnnotations(); for (int a = 0; a < annotations.length; a++) { // get annotation type Type annotType = annotations[a].getAnnotationType(); // get local start and end position of the match in the matchingText int localStart = annotations[a].getBegin().getMatchPosition(matcher); int localEnd = annotations[a].getEnd().getMatchPosition(matcher); // check if match group positions are valid. If they are invalid, // the match group is available but has no matching content if (localStart == -1 || localEnd == -1) { // match group positions are invalid, so we cannot create the // annotation continue; } // set default validation value to true, by default all annotations // are created boolean validation = true; // check if an validator for the current annotation is available if (annotations[a].hasValidator()) { // get the substring of the match from the matching text String matchText = matchingText.substring(localStart, localEnd); // validate annotation try { validation = annotations[a].validate(matchText, concept.getRules()[ruleIndex].getId()); } catch (Exception ex) { throw new RegexAnnotatorProcessException("regex_annotator_error_validating_annotation", new Object[] { annotations[a].getId(), matchText, Integer.valueOf(localStart), Integer.valueOf(localEnd) }, ex); } } // only create annotation if the validation was true if (validation == true) { // create annotation start and begin positions dependent of the rule // matching if (concept.getRules()[ruleIndex].isFeaturePathMatch()) { // we match a feature path, use a source annotation boundaries // for the annotation that is created localStart = annot.getBegin(); localEnd = annot.getEnd(); } else { // we match no feature path, make positions absolute to the // document text -> add match type annotation offset. localStart = annot.getBegin() + localStart; localEnd = annot.getBegin() + localEnd; } // create annotation for this match FeatureStructure fs = aCAS.createAnnotation(annotType, localStart, localEnd); // get features for the current annotation Feature[] features = annotations[a].getFeatures(); for (int f = 0; f < features.length; f++) { // get feature type int type = features[f].getType(); // check if we have a reference feature or not if (type == Feature.FLOAT_FEATURE || type == Feature.INTEGER_FEATURE || type == Feature.STRING_FEATURE) { // we have no reference feature // replace match groups in the feature value String featureValue = replaceMatchGroupValues(features[f].getValue(), matcher, concept .getRules()[ruleIndex]); // do featureValue normalization try { // try to set the normalized feature value, if no // normalization was specified for the feature, the // original feature value is set if (featureValue != null) { featureValue = features[f].normalize(featureValue, concept.getRules()[ruleIndex] .getId()); } } catch (Exception ex) { throw new RegexAnnotatorProcessException( "regex_annotator_error_normalizing_feature_value", new Object[] { featureValue, features[f].getName() }, ex); } // set feature value at the annotation in dependence of the // feature type if (type == Feature.FLOAT_FEATURE) { try { if (featureValue != null) { Number number = this.floatNumberFormat.parse(featureValue); fs.setFloatValue(features[f].getFeature(), number.floatValue()); } } catch (ParseException ex) { this.logger.logrb(Level.WARNING, "RegExAnnotator", "processConceptInstructions", MESSAGE_DIGEST, "regex_annotator_warning_number_format_conversion", new Object[] { featureValue, features[f].getFeature().getName(), "float" }); } } else if (type == Feature.INTEGER_FEATURE) { try { if (featureValue != null) { Number number = this.integerNumberFormat.parse(featureValue); fs.setIntValue(features[f].getFeature(), number.intValue()); } } catch (ParseException ex) { this.logger.logrb(Level.WARNING, "RegExAnnotator", "processConceptInstructions", MESSAGE_DIGEST, "regex_annotator_warning_number_format_conversion", new Object[] { featureValue, features[f].getFeature().getName(), "integer" }); } } else if (type == Feature.STRING_FEATURE) { fs.setStringValue(features[f].getFeature(), featureValue); } } else if (type == Feature.REFERENCE_FEATURE) { // we have a reference feature, we have to set this later // since we cannot be sure that the referenced annotation is // already created hasReferenceFeatures = true; } else if (type == Feature.RULEID_FEATURE) { // get rule id and set it as feature value String ruleId = concept.getRules()[ruleIndex].getId(); fs.setStringValue(features[f].getFeature(), ruleId); } else if (type == Feature.CONFIDENCE_FEATURE) { // get rule confidence value and set it as feature value float confidence = concept.getRules()[ruleIndex].getConfidence(); fs.setFloatValue(features[f].getFeature(), confidence); } } // add annotation to the local HashMap that is used to set // annotation // reference features, the annotation must only be added in case // that // an annotation id was specified. if (annotations[a].getId() != null) { annotMap.put(annotations[a].getId(), fs); } // add annotation to the list of feature structures that must be // added // to the index annotsToAdd.add(fs); } } // end of annotation processing // if we detected previously some reference feature types we have to set // them now if (hasReferenceFeatures) { // iterate again over the annotation array for (int a = 0; a < annotations.length; a++) { // get all features for the current annotation Feature[] features = annotations[a].getFeatures(); for (int f = 0; f < features.length; f++) { // get feature type int type = features[f].getType(); // check if we have a reference feature, we are only // interested in reference features now if (type == Feature.REFERENCE_FEATURE) { // search for the annotation the feature belongs to, the // annotation was created earlier // to search for the correct annotation we use the current // annotation ID FeatureStructure fs = annotMap.get(annotations[a].getId()); // search for the referenced annotation ID // the annotation ID we search for is specified in the feature // value FeatureStructure refFs = annotMap.get(features[f].getValue()); // set reference feature value fs.setFeatureValue(features[f].getFeature(), refFs); } } } } // end - set reference feature value // process update features of the current match type annotation // get all match type update features of the current rule Feature[] updateFeatures = concept.getRules()[ruleIndex].getMatchTypeUpdateFeatures(); for (int f = 0; f < updateFeatures.length; f++) { int type = updateFeatures[f].getType(); // check if we have a reference feature or not if (type == Feature.FLOAT_FEATURE || type == Feature.INTEGER_FEATURE || type == Feature.STRING_FEATURE) { // we have no reference feature // replace match groups in the feature value String featureValue = replaceMatchGroupValues(updateFeatures[f].getValue(), matcher, concept.getRules()[ruleIndex]); // do featureValue normalization try { // try to set the normalized feature value, if no // normalization was specified for the feature, the // original feature value is set featureValue = updateFeatures[f].normalize(featureValue, concept.getRules()[ruleIndex] .getId()); } catch (Exception ex) { throw new RegexAnnotatorProcessException( "regex_annotator_error_normalizing_feature_value", new Object[] { featureValue, updateFeatures[f].getName() }, ex); } // set feature value at the annotation in dependence of the feature // type if (type == Feature.FLOAT_FEATURE) { annot.setFloatValue(updateFeatures[f].getFeature(), Float.parseFloat(featureValue)); } else if (type == Feature.INTEGER_FEATURE) { annot.setIntValue(updateFeatures[f].getFeature(), Integer.parseInt(featureValue)); } else if (type == Feature.STRING_FEATURE) { annot.setStringValue(updateFeatures[f].getFeature(), featureValue); } } else if (type == Feature.REFERENCE_FEATURE) { // search for the referenced annotation ID // the annotation ID we search for is specified in the feature value FeatureStructure refFs = annotMap.get(updateFeatures[f].getValue()); // set reference feature value annot.setFeatureValue(updateFeatures[f].getFeature(), refFs); } else if (type == Feature.RULEID_FEATURE) { // get rule id and set it as feature value String ruleId = concept.getRules()[ruleIndex].getId(); annot.setStringValue(updateFeatures[f].getFeature(), ruleId); } else if (type == Feature.CONFIDENCE_FEATURE) { // get rule confidence value and set it as feature value float confidence = concept.getRules()[ruleIndex].getConfidence(); annot.setFloatValue(updateFeatures[f].getFeature(), confidence); } } } /** * replace the string containing match group syntax with the current match group values. * * @param featureValue * string value that contains the match group syntax * * @param matcher * regex matcher to match the match groups * * @return returns the replaced match group value content */ private String replaceMatchGroupValues(String featureValue, Matcher matcher, Rule rule) throws RegexAnnotatorProcessException { StringBuffer replaced = new StringBuffer(); int pos = 0; int end = featureValue.length(); char c; // Iterate over the input text to find the match groups that must be // replaced. // In the input text, all $ and \ characters must be escaped by \. while (pos < end) { c = featureValue.charAt(pos); // Everything followed by a \ was escaped and the \ (escape character) // can be removed now if (c == '\\') { // skip escape character ++pos; // add escaped character to the output if (pos < end) { replaced.append(featureValue.charAt(pos)); // go to the next character ++pos; } } else if (c == '$') { // this must be a match group $n since all other $ characters must // be escaped with a \ which is handled above. // skip $ character we are only interested in the match group number // or name // match group name syntax is ${match group name} ++pos; if (pos < end) { // get next char to check if we have a match group number or a // match group name c = featureValue.charAt(pos); int groupNumber = -1; if (c == '{') { // we have a match group name // skip grace '{' ++pos; // get match group name int matchNameEnd = featureValue.indexOf("}", pos); if (matchNameEnd > -1) { String matchGroupName = featureValue.substring(pos, matchNameEnd); // get match group number for the given match group name groupNumber = rule.getMatchGroupNumber(matchGroupName); if (groupNumber == -1) { throw new RegexAnnotatorProcessException( "regex_annotator_error_match_group_name_not_found", new Object[] { matchGroupName, rule.getId() }); } // set pos to the end of the match group name syntax pos = matchNameEnd + 1; } } else { // we have a match group number // convert match group number to integer value groupNumber = c - '0'; // skip match group number ++pos; } // get match group content String groupMatch = matcher.group(groupNumber); // add match group content to the output if (groupMatch != null) { replaced.append(groupMatch); } } } else { // default output character that is added to the output replaced.append(c); ++pos; } } return replaced.toString(); } /** * Helper class to bundle the XML Concept file name and the concept file input stream to one * object. */ private static class ConceptFile { // concept file path name private String filePath; // concept file stream private InputStream stream; /** * creates a new conceptFile object with the file path and the stream * * @param filePath * concept file path * * @param stream * concept file stream */ public ConceptFile(String filePath, InputStream stream) { this.filePath = filePath; this.stream = stream; } /** * Returns the concept file path name * * @return concept file path name */ public String getFilePath() { return this.filePath; } /** * Returns the concept file stream * * @return concept file stream */ public InputStream getStream() { return this.stream; } } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/FeaturePath_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Feat0000644000175000017500000002475311625126520033455 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.util.ArrayList; import java.util.StringTokenizer; import org.apache.uima.annotator.regex.FeaturePath; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.LowLevelCAS; import org.apache.uima.cas.impl.TypeSystemUtils; import org.apache.uima.cas.impl.TypeSystemUtils.PathValid; import org.apache.uima.cas.text.AnnotationFS; /** * FeaturePath implementation that validates and the given featurePath and * returns the featurePath value for a specified annotation. */ public class FeaturePath_impl implements FeaturePath { // featurePath string, separated by "/" private String featurePathString; // featurePath element names private ArrayList featurePathElementNames; // featurePath element features private ArrayList featurePathElements; /** * Constructor to create a new featurePath object with a given featurePath * string. * * @param featurePath * featurePath string separated by "/" */ public FeaturePath_impl(String featurePath) { this.featurePathString = featurePath; this.featurePathElementNames = new ArrayList(); this.featurePathElements = null; } /** * Initialize the object's featurePath for the given type. If the featurePath * is not valid an exception is thrown. * * @param type * CAS type to used to initialize the featurePath */ public void initialize(Type type) throws RegexAnnotatorConfigException { // initialization must only be done if a featurePath value was specified if (this.featurePathString != null) { //check featurePath for invalid character sequences if(this.featurePathString.indexOf("//") > -1) { // invalid featurePath syntax throw new RegexAnnotatorConfigException( "regex_annotator_error_invalid_feature_path_syntax", new Object[] { this.featurePathString, "//" }); } // parse featurePath into path elements StringTokenizer tokenizer = new StringTokenizer( this.featurePathString, "/"); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); this.featurePathElementNames.add(token); } // validate featurePath for given type PathValid pathValid = TypeSystemUtils.isPathValid(type, this.featurePathElementNames); if (PathValid.NEVER == pathValid) { // invalid featurePath - throw an configuration exception throw new RegexAnnotatorConfigException( "regex_annotator_error_validating_feature_path", new Object[] { this.featurePathString, type.getName() }); } else if (PathValid.ALWAYS == pathValid) { // the featurePath is always valid, so we can resolve and cache the // path elements this.featurePathElements = new ArrayList(); Type currentType = type; // iterate over all featurePathNames and store the resolved CAS // feature in the featurePathElements list for (int i = 0; i < this.featurePathElementNames.size(); i++) { // get feature Feature feature = currentType .getFeatureByBaseName(this.featurePathElementNames.get(i)); // store feature this.featurePathElements.add(feature); // get current feature type to resolve the next feature name currentType = feature.getRange(); } } } } /* (non-Javadoc) * @see org.apache.uima.annotator.regex.FeaturePath#getValue(org.apache.uima.cas.text.AnnotationFS) */ public String getValue(AnnotationFS annotFS) throws RegexAnnotatorProcessException{ // handle special case where no featurePath was specified // (featurePathString == null) if (this.featurePathElementNames.size() == 0) { // no featurePath was specified, return the coveredText of the annotFS // as matching text return annotFS.getCoveredText(); } else { // we have a feature path that must be evaluated // featurePathValue String featurePathValue = null; // check if further featurePath elements are possible boolean noFurtherElementsPossible = false; // set current FS values FeatureStructure currentFS = annotFS; Type currentType = annotFS.getType(); // resolve feature path value for (int i = 0; i < this.featurePathElementNames.size(); i++) { // if we had in the last iteration a primitive feature or a FS that // was // not set, the feature path is not valid for this annotation. if (noFurtherElementsPossible) { return null; } // get the Feature for the current featurePath element. If the // featurePath is always valid the featurePath Feature elements are // cached, otherwise the feature names must be resolved by name Feature feature; if (this.featurePathElements == null) { // resolve Feature by name feature = currentType .getFeatureByBaseName(this.featurePathElementNames.get(i)); } else { // use cached Feature element feature = this.featurePathElements.get(i); } // if feature is null the feature was not defined if (feature == null) { return null; } // get feature type and type code Type featureType = feature.getRange(); int featureTypeCode = TypeSystemUtils.classifyType(featureType); // switch feature type code switch (featureTypeCode) { case LowLevelCAS.TYPE_CLASS_STRING: featurePathValue = currentFS.getStringValue(feature); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_INT: featurePathValue = Integer.toString(currentFS .getIntValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_BOOLEAN: featurePathValue = Boolean.toString(currentFS .getBooleanValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_BYTE: featurePathValue = Byte .toString(currentFS.getByteValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_DOUBLE: featurePathValue = Double.toString(currentFS .getDoubleValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_FLOAT: featurePathValue = Float.toString(currentFS .getFloatValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_LONG: featurePathValue = Long .toString(currentFS.getLongValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_INVALID: featurePathValue = null; noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_SHORT: featurePathValue = Short.toString(currentFS .getShortValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_FS: currentFS = currentFS.getFeatureValue(feature); if (currentFS == null) { // FS value not set - feature path cannot return a valid value noFurtherElementsPossible = true; featurePathValue = null; } else { currentType = currentFS.getType(); } break; default: throw new RegexAnnotatorProcessException( "regex_annotator_error_feature_path_element_not_supported", new Object[] { currentType.getName(), this.featurePathElementNames.get(i), this.featurePathString }); } } // the featurePath was processed correctly, check the featurePath value if (featurePathValue != null) { return featurePathValue; } else { // it seems that the last featurePath element was a FS // check now if the FS is of type AnnotationFS if (currentFS != null) { if (currentFS instanceof AnnotationFS) { // the last FS was an Annotation, so return the covered Text // of the annotation as featurePath value return ((AnnotationFS) currentFS).getCoveredText(); } } return null; } } } /* (non-Javadoc) * @see org.apache.uima.annotator.regex.FeaturePath#getFeaturePath() */ public String getFeaturePath() { return this.featurePathString; } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/FilterFeature_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Filt0000644000175000017500000000546611625126520033474 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.util.regex.Pattern; import org.apache.uima.annotator.regex.FeaturePath; import org.apache.uima.annotator.regex.FilterFeature; import org.apache.uima.cas.Type; import org.apache.uima.resource.ResourceInitializationException; /** * * */ public class FilterFeature_impl implements FilterFeature { private final FeaturePath_impl featurePath; private final String featurePathString; private final String patternStr; private Pattern pattern; /** * @param featurePathString * @param patternStr */ public FilterFeature_impl(String featurePathString, String patternStr) { this.featurePath = new FeaturePath_impl(featurePathString); this.featurePathString = featurePathString; this.patternStr = patternStr; this.pattern = null; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.FilterFeature#getPattern() */ public Pattern getPattern() { return this.pattern; } /* (non-Javadoc) * @see org.apache.uima.annotator.regex.FilterFeature#getFeaturePath() */ public FeaturePath getFeaturePath() { return this.featurePath; } public void typeInit(Type annotationType) throws ResourceInitializationException { this.featurePath.initialize(annotationType); } /** * initialize the regex pattern */ public void initialize() { // compile pattern this.pattern = Pattern.compile(this.patternStr); } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("Filter Feature: "); buffer.append("\n FeaturePath: "); buffer.append(this.featurePathString); buffer.append("\n Pattern: "); buffer.append(this.patternStr); buffer.append("\n"); return buffer.toString(); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Position_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Posi0000644000175000017500000000427111625126520033501 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.util.regex.Matcher; import org.apache.uima.annotator.regex.Position; /** * */ public class Position_impl implements Position { private final int matchGroup; private final int location; /** * @param matchGroup * @param location */ public Position_impl(int matchGroup, int location) { this.matchGroup = matchGroup; this.location = location; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Position#getMatchGroup() */ public int getMatchGroup() { return this.matchGroup; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Position#getMatchPosition(java.util.regex.Matcher) */ public int getMatchPosition(Matcher matcher) { if (this.location == START_LOCATION) { return matcher.start(this.matchGroup); } return matcher.end(this.matchGroup); } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("matchGroup: "); buffer.append(this.matchGroup); buffer.append(" location: "); if (this.location == Position.START_LOCATION) { buffer.append("start"); } else { buffer.append("end"); } return buffer.toString(); } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/RuleException_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Rule0000644000175000017500000000725411625126520033502 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; /** * * */ public class RuleException_impl implements org.apache.uima.annotator.regex.RuleException { private final String matchTypeStr; private final String patternStr; private org.apache.uima.cas.Type matchType; private Pattern pattern; private AnnotationFS lastAnnot = null; private boolean lastMatchResult = false; /** * @param matchType * @param patternStr */ public RuleException_impl(String matchType, String patternStr) { this.matchTypeStr = matchType; this.patternStr = patternStr; this.matchType = null; this.pattern = null; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.RuleException#matchPattern(org.apache.uima.cas.text.AnnotationFS) */ public boolean matchPattern(AnnotationFS annot) { if (this.lastAnnot == annot) { return this.lastMatchResult; } // save current annotation this.lastAnnot = annot; // check if the pattern match the current annotation if (this.pattern != null) { Matcher matcher = this.pattern.matcher(annot.getCoveredText()); // use match strategy matchFirst if (matcher.find()) { this.lastMatchResult = true; return true; } } this.lastMatchResult = false; return false; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.Exception#getType() */ public Type getType() { return this.matchType; } public void typeInit(TypeSystem ts) throws ResourceInitializationException { // initialize annotation type if (this.matchTypeStr != null) { this.matchType = ts.getType(this.matchTypeStr); if (this.matchType == null) { throw new RegexAnnotatorConfigException( "regex_annotator_error_resolving_types", new Object[] { this.matchTypeStr }); } } } /** * */ public void initialize() { // compile pattern this.pattern = Pattern.compile(this.patternStr); } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("Exception: "); buffer.append("\n matchType: "); buffer.append(this.matchTypeStr); buffer.append("\n Pattern: "); buffer.append(this.patternStr); buffer.append("\n"); return buffer.toString(); } } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/RegexVariables_impl.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/impl/Rege0000644000175000017500000000325511625126520033452 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex.impl; import java.util.HashMap; import org.apache.uima.annotator.regex.RegexVariables; /** * Implementation of the RegexVariables interface */ public class RegexVariables_impl implements RegexVariables { private HashMap variables; public RegexVariables_impl() { this.variables = new HashMap(); } /* (non-Javadoc) * @see org.apache.uima.annotator.regex.Variables#addVariable(java.lang.String, java.lang.String) */ public void addVariable(String varName, String varValue) { this.variables.put(varName, varValue); } /* (non-Javadoc) * @see org.apache.uima.annotator.regex.Variables#getVariableValue(java.lang.String) */ public String getVariableValue(String varName) { return this.variables.get(varName); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/RegexVariables.javauima-addons-2.3.1/RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/RegexVari0000644000175000017500000000361111625126522033521 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.util.regex.Pattern; /** * RegexVariables interface. */ public interface RegexVariables { public static final String VARIABLE_START = "\\v"; public static final String VARIABLE_REGEX_BEGIN = "\\\\v\\{"; public static final String VARIABLE_REGEX_END = "\\}"; public static final Pattern VARIABLE_REGEX_PATTERN = Pattern .compile(VARIABLE_REGEX_BEGIN + "(\\w+)" + VARIABLE_REGEX_END); /** * Adds a variable to the Variables object. * * @param varName * variable name * * @param varValue * variable value */ public void addVariable(String varName, String varValue); /** * returns the value of the specified variable or null if the * variable does not exist * * @param varName * variable name * * @return returns the variable value of null if the variable * does not exist * */ public String getVariableValue(String varName); }uima-addons-2.3.1/RegularExpressionAnnotator/src/test/0000755000175000017500000000000011625126514022732 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/0000755000175000017500000000000011625126520024741 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/emptyRegex/0000755000175000017500000000000011625126520027072 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/emptyRegex/RegExEmptyRegex.xml0000644000175000017500000001307311625126520032644 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles emptyRegex/emptyRegex.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot2 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot3 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot4 uima.tcas.Annotation org.apache.uima.TestAnnot org.apache.uima.TestAnnot1 org.apache.uima.TestAnnot2 org.apache.uima.TestAnnot3 org.apache.uima.TestAnnot4 true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/emptyRegex/emptyRegex.xml0000644000175000017500000000252111625126520031745 0ustar drazzibdrazzib uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/performanceTest/0000755000175000017500000000000011625126514030105 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/performanceTest/perfRules.xml0000644000175000017500000001145311625126514032602 0ustar drazzibdrazzib $1 $2 $0 ${currency} ${amount} ${amountText} uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/performanceTest/fileSet1/0000755000175000017500000000000011625126514031561 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/performanceTest/fileSet1/perfTestInput.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/performanceTest/fileSet1/perfTestInp0000644000175000017500000000224411625126514033751 0ustar drazzibdrazzib email addresses: sample@sample.com apache.uima@sample.com apache_uima@mmm-xxx.zzz.de test@sample.com uima@sample.com uima@apache isbn numbers: 0-306-40615-2 978-0-306-40615-7 9971-5-0210-0 0306406152 9780306406157 faked credit card numbers: 4552720412345677 5490 1234 5678 9128 money amounts: 12$ 120.0€ 12 million $ 45 $uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/performanceTest/RegExAnnotPerf.xml0000644000175000017500000001242311625126514033460 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles performanceTest/perfRules.xml org.apache.uima.EmailAddress uima.tcas.Annotation localPart uima.cas.String domainPart uima.cas.String normalizedEmail uima.cas.String org.apache.uima.ISBNNumber uima.tcas.Annotation confidence uima.cas.Float org.apache.uima.MoneyAmount uima.tcas.Annotation amount uima.cas.Float amountText uima.cas.String currency uima.cas.String org.apache.uima.CreditCardNumber uima.tcas.Annotation confidence uima.cas.Float cardType uima.cas.String true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/0000755000175000017500000000000011625126516030671 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/advancedFeaturePathMatchingRef.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/advancedFeatureP0000644000175000017500000000104511625126516034015 0ustar drazzibdrazzibTestAnnot(3,16): AdvancedRegex { testFeature=MyAdvancedFeaturePathMatchingTest } TestAnnot1(3,16): AdvancedRegex { refFeature=TestAnnot "AdvancedRegex" sofa: _InitialView begin: 3 end: 16 testFeature: "MyAdvancedFeaturePathMatchingTest" testFeature1: testFeatureInt: 0 testFeatureFloat: 0.0 testFeatureBoolean: false testFeatureShort: 0 testFeatureLong: 0 testFeatureDouble: 0.0 testFeatureByte: 0 , testFeature=null } TestAnnot2(3,16): AdvancedRegex { testFeature=AdvancedFeaturePath } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/featurePathMatching.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/featurePathMatch0000644000175000017500000001027411625126516034045 0ustar drazzibdrazzib SimpleFeaturePathMatchingTest 3243 324.34 $0 MyAdvancedFeaturePathMatchingTest annot1 $0 ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/RegExAnnotInvalidFeaturePath.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/RegExAnnotInvali0000644000175000017500000001073411625126516033776 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles featurePathMatching/invalidFeaturePath.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation testFeature uima.cas.String refFeature org.apache.uima.TestAnnot org.apache.uima.TestAnnot2 uima.tcas.Annotation testFeature uima.cas.String uima.tcas.DocumentAnnotation org.apache.uima.TestAnnot org.apache.uima.TestAnnot1 org.apache.uima.TestAnnot2 true true false ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/invalidFeaturePath.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/invalidFeaturePa0000644000175000017500000000255311625126516034044 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/RegExAnnotFeaturePath.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/RegExAnnotFeatur0000644000175000017500000001377411625126516034011 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles featurePathMatching/featurePathMatching.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String testFeatureInt uima.cas.Integer testFeatureFloat uima.cas.Float testFeatureBoolean uima.cas.Boolean testFeatureShort uima.cas.Short testFeatureLong uima.cas.Long testFeatureDouble uima.cas.Double testFeatureByte uima.cas.Byte org.apache.uima.TestAnnot1 uima.tcas.Annotation testFeature uima.cas.String refFeature org.apache.uima.TestAnnot org.apache.uima.TestAnnot2 uima.tcas.Annotation testFeature uima.cas.String uima.tcas.DocumentAnnotation org.apache.uima.TestAnnot org.apache.uima.TestAnnot1 org.apache.uima.TestAnnot2 true true false ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/RegExAnnotInvalidFeaturePath2.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/RegExAnnotInvali0000644000175000017500000000650111625126516033773 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles featurePathMatching/invalidFeaturePath2.xml org.apache.uima.TestAnnot uima.tcas.Annotation uima.tcas.DocumentAnnotation uima.tcas.Annotation arrayFeature uima.cas.StringArray uima.tcas.DocumentAnnotation org.apache.uima.TestAnnot true true false ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/invalidFeaturePath2.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/invalidFeaturePa0000644000175000017500000000254211625126516034042 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/featurePathMatchingRef.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/featurePathMatching/featurePathMatch0000644000175000017500000000021111625126516034033 0ustar drazzibdrazzibTestAnnot(3,14): SimpleRegex { testFeature=SimpleFeaturePathMatchingTest } TestAnnot1(3,14): SimpleRegex { testFeature=FeaturePath } uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/0000755000175000017500000000000011625126516030235 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/featureValuesRef3.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/featureValuesRef3.t0000644000175000017500000000027511625126516033761 0ustar drazzibdrazzibTestAnnot(0,13): RuleRegex32.4 { testFeature0={Rule}$, testFeature1=RuleRegex32.4, testFeature2=Regex with additions, testFeature3=value only, testFeature4=first Rule, testFeature7=2.4 } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/RegExAnnotFeatureValues.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/RegExAnnotFeatureVa0000644000175000017500000001721711625126516034005 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles setFeatureValues/featureValues.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature0 uima.cas.String testFeature1 uima.cas.String testFeature2 uima.cas.String testFeature3 uima.cas.String testFeature4 uima.cas.String testFeature5 org.apache.uima.TestAnnot1 testFeature6 uima.cas.Float testFeature7 uima.cas.Float testFeature8 uima.cas.Integer testFeature9 uima.cas.Integer testFeature10 uima.cas.String testFeature11 uima.cas.String testFeature12 uima.cas.String testFeature13 uima.cas.String testFeature14 uima.cas.String confidenceValue uima.cas.Float ruleId uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation uima.tcas.DocumentAnnotation uima.tcas.Annotation language1 uima.cas.String language2 uima.cas.String refFeature org.apache.uima.TestAnnot ruleID uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.DocumentAnnotation org.apache.uima.TestAnnot true true false ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/featureValuesRef.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/featureValuesRef.tx0000644000175000017500000000255711625126516034073 0ustar drazzibdrazzibTestAnnot1(0,13): RuleRegex12.4 DocumentAnnotation(0,13): RuleRegex12.4 { language=RuleRegex12.4 Test, language1=RULEREGEX12.4 TEST, language2=CustomTestNormalizerWorks, refFeature=TestAnnot "RuleRegex12.4" sofa: _InitialView begin: 0 end: 13 testFeature0: "RuleRegex12.4" testFeature1: "RuleRegex1" testFeature2: "Regex with additions" testFeature3: "value only" testFeature4: "frist RuleRegex12.4" testFeature5: TestAnnot1 sofa: _InitialView begin: 0 end: 13 testFeature6: 2343.34 testFeature7: 2.4 testFeature8: 12345 testFeature9: 1 testFeature10: "value only" testFeature11: "VALUE ONLY" testFeature12: "RuleRegex12.4" testFeature13: "RULE TEST REGEX" testFeature14: "CustomTestNormalizerWorks" confidenceValue: 1.0 ruleId: "ID1" , ruleID=ID1 } TestAnnot(0,13): RuleRegex12.4 { confidenceValue=1.0, ruleId=ID1, testFeature0=RuleRegex12.4, testFeature1=RuleRegex1, testFeature10=value only, testFeature11=VALUE ONLY, testFeature12=RuleRegex12.4, testFeature13=RULE TEST REGEX, testFeature14=CustomTestNormalizerWorks, testFeature2=Regex with additions, testFeature3=value only, testFeature4=frist RuleRegex12.4, testFeature5=TestAnnot1 "RuleRegex12.4" sofa: _InitialView begin: 0 end: 13 , testFeature6=2343.34, testFeature7=2.4, testFeature8=12345, testFeature9=1 } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/featureValuesRef2.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/featureValuesRef2.t0000644000175000017500000000126311625126516033756 0ustar drazzibdrazzibTestAnnot1(0,13): RuleRegex22.4 DocumentAnnotation(0,13): RuleRegex22.4 { language=Rule, language1=null, language2=null, refFeature=null, ruleID=null } TestAnnot(0,13): RuleRegex22.4 { confidenceValue=0.7, ruleId=ID2, testFeature0=RuleRegex22.4, testFeature1=RuleRegex2, testFeature10=value only, testFeature11=VALUE ONLY, testFeature12=RuleRegex22.4, testFeature13=RULE TEST REGEX, testFeature14=CustomTestNormalizerWorks, testFeature2=Regex with additions, testFeature3=value only, testFeature4=frist RuleRegex22.4, testFeature5=TestAnnot1 "RuleRegex22.4" sofa: _InitialView begin: 0 end: 13 , testFeature6=2343.34, testFeature7=2.4, testFeature8=12345, testFeature9=2 } uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/featureValues.xml0000644000175000017500000001225311625126516033575 0ustar drazzibdrazzib $0 Test $0 Test $0 testannot $1 $0 $1$2$3 $2 with additions value only frist $0 VALUE OnLy value only $0 $1 test $2 $1 test $2 2343.34 $4 12345 $3 testannot1 {${group1}}\$ ${GroUp1}${group2}${group3}${group4} ${group2} with additions value only first $1 ${group4} uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/setFeatureValues/miniConfigRef.txt0000644000175000017500000000011611625126516033513 0ustar drazzibdrazzibTestAnnot(0,21): Minimal Configuration { confidenceValue=0.0, ruleId=null } uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/variables/0000755000175000017500000000000011625126520026711 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/variables/variables.xml0000644000175000017500000000447111625126520031411 0ustar drazzibdrazzib uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/variables/variablesNotAvailable.xml0000644000175000017500000000271411625126520033671 0ustar drazzibdrazzib uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/variables/variablesConcept2Ref.txt0000644000175000017500000000006511625126520033456 0ustar drazzibdrazzibTestAnnot(0,34): Tuesday January Sunday test {days} uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/variables/RegExAnnotVariables.xml0000644000175000017500000001117711625126520033305 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles variables/variables.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String refFeature org.apache.uima.TestAnnot2 org.apache.uima.TestAnnot1 uima.tcas.Annotation org.apache.uima.TestAnnot2 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String refFeature org.apache.uima.TestAnnot1 uima.tcas.DocumentAnnotation org.apache.uima.TestAnnot org.apache.uima.TestAnnot1 org.apache.uima.TestAnnot2 true true false ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/variables/RegExAnnotVariablesError.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/variables/RegExAnnotVariablesError.x0000644000175000017500000001121311625126520033755 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles variables/variablesNotAvailable.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String refFeature org.apache.uima.TestAnnot2 org.apache.uima.TestAnnot1 uima.tcas.Annotation org.apache.uima.TestAnnot2 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String refFeature org.apache.uima.TestAnnot1 uima.tcas.DocumentAnnotation org.apache.uima.TestAnnot org.apache.uima.TestAnnot1 org.apache.uima.TestAnnot2 true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/variables/variablesConcept3Ref.txt0000644000175000017500000000002711625126520033455 0ustar drazzibdrazzibTestAnnot(7,11): Jan. uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/variables/variablesConcept1Ref.txt0000644000175000017500000000007311625126520033454 0ustar drazzibdrazzibTestAnnot(0,42): Monday simple regex with variables Tuesdayuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/matchStrategy/0000755000175000017500000000000011625126514027563 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/matchStrategy/RegExAnnotMatchStrategy.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/matchStrategy/RegExAnnotMatchStrateg0000644000175000017500000000651311625126514034034 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles matchStrategy/matchStrategy.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/matchStrategy/matchCompleteOKRef.txt0000644000175000017500000000004011625126514033772 0ustar drazzibdrazzibTestAnnot(0,13): matchComplete uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/matchStrategy/matchFirstRef.txt0000644000175000017500000000003611625126514033064 0ustar drazzibdrazzibTestAnnot(10,20): matchFirst uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/matchStrategy/matchStrategy.xml0000644000175000017500000000405411625126514033127 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/matchStrategy/matchCompleteNotOKRef.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/matchStrategy/matchCompleteNotOKRef.0000644000175000017500000000006511625126514033722 0ustar drazzibdrazzibDocumentAnnotation(0,23): matchComplete is not OK uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/matchStrategy/matchAllRef.txt0000644000175000017500000000012411625126514032503 0ustar drazzibdrazzibTestAnnot(10,18): matchALL TestAnnot(19,27): matchALL TestAnnot(28,36): matchALL uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/0000755000175000017500000000000011625126516026416 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/filterFeatureAdvanced1Ref.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/filterFeatureAdvanced1Ref.tx0000644000175000017500000000012011625126516033731 0ustar drazzibdrazzibDocumentAnnotation: { language=en-us } TestAnnot(0,19): AdvancedFilterRegex uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/filterFeatureCorrectRef.txt0000644000175000017500000000010511625126516033733 0ustar drazzibdrazzibDocumentAnnotation: { language=en } TestAnnot(0,11): SimpleRegex uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/RegExAnnotFilterFeature.xml0000644000175000017500000001120111625126516033627 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles filters/filterFeature.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String refFeature org.apache.uima.TestAnnot2 org.apache.uima.TestAnnot1 uima.tcas.Annotation org.apache.uima.TestAnnot2 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String refFeature org.apache.uima.TestAnnot1 uima.tcas.DocumentAnnotation org.apache.uima.TestAnnot org.apache.uima.TestAnnot1 org.apache.uima.TestAnnot2 true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/filterFeatureWrongRef.txt0000644000175000017500000000005211625126516033427 0ustar drazzibdrazzibDocumentAnnotation: { language=en-us } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/filterFeatureAdvanced2Ref.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/filterFeatureAdvanced2Ref.tx0000644000175000017500000000012011625126516033732 0ustar drazzibdrazzibDocumentAnnotation: { language=en-gb } TestAnnot(0,19): AdvancedFilterRegex ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/filterFeatureOnCreatedAnnotRef.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/filterFeatureOnCreatedAnnotR0000644000175000017500000000017711625126516034056 0ustar drazzibdrazzibTestAnnot(0,22): JustCreateAnAnnotation { testFeature=JustCreate } TestAnnot(12,22): Annotation { testFeature=Annotation } uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/filters/filterFeature.xml0000644000175000017500000001042111625126516031737 0ustar drazzibdrazzib en en-\w\w $1 $2 testannot6 $1 $2 JustCreate AnAnnotation JustCreate AnAnnotation $0 doesNotMatch AnAnnotation uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/0000755000175000017500000000000011625126516031407 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/loadFilesWithWildcard.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/loadFilesWith0000644000175000017500000000630111625126516034070 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles wildcardFilenameSyntax/major*minor*.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String true true false ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major1minor1.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major1minor1.0000644000175000017500000000252611625126516033734 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major2minor1.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major2minor1.0000644000175000017500000000252611625126516033735 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major2minor2.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major2minor2.0000644000175000017500000000252611625126516033736 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major1minor2.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major1minor2.0000644000175000017500000000252611625126514033733 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major2minor3.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/wildcardFilenameSyntax/major2minor3.0000644000175000017500000000252611625126516033737 0ustar drazzibdrazzib uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/0000755000175000017500000000000011625126520027752 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/docAnnotMatchRef.txt0000644000175000017500000000015611625126520033674 0ustar drazzibdrazzibDocumentAnnotation(0,51): this is my text with a simpleMatch and no exception TestAnnot(23,34): simpleMatch ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/sentenceAnnotNoMatchRef.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/sentenceAnnotNoMatchR0000644000175000017500000000040411625126520034073 0ustar drazzibdrazzibDocumentAnnotation(0,59): My text starts here: car carbon test cat cart and ends here SentenceAnnot(21,45): car carbon test cat cart TokenAnnot(21,24): car TokenAnnot(25,31): carbon TokenAnnot(32,36): test TokenAnnot(37,40): cat TokenAnnot(41,45): cart uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/exceptions.xml0000644000175000017500000000670211625126520032662 0ustar drazzibdrazzib \d\d-\w\w\w-test $0 test ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/sentenceAnnotMatchRef.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/sentenceAnnotMatchRef0000644000175000017500000000045611625126520034120 0ustar drazzibdrazzibDocumentAnnotation(0,55): My text starts here: car carbon cat cart and ends here SentenceAnnot(21,41): car carbon cat cart TokenAnnot(21,24): car TestAnnot(21,24): car TokenAnnot(25,31): carbon TestAnnot(25,31): carbon TokenAnnot(33,36): cat TokenAnnot(37,41): cart TestAnnot(37,41): cart ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/RegExAnnotExceptions.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/RegExAnnotExceptions.0000644000175000017500000000736211625126520034037 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles ruleExceptions/exceptions.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.SentenceAnnot uima.tcas.Annotation org.apache.uima.TokenAnnot uima.tcas.Annotation org.apache.uima.TokenAnnot org.apache.uima.TestAnnot org.apache.uima.SentenceAnnot true true false ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/docAnnotNoMatchRef.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/ruleExceptions/docAnnotNoMatchRef.tx0000644000175000017500000000013311625126520034000 0ustar drazzibdrazzibDocumentAnnotation(0,63): this is my text with a simpleMatch and an exception 12-wbt-test uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/annotationCreation/0000755000175000017500000000000011625126514030603 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/annotationCreation/createAnnot.xml0000644000175000017500000000517511625126514033600 0ustar drazzibdrazzib $0 $1 $2 $4 $6 $8 $7 $9 ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/annotationCreation/RegExAnnotCreateAnnot.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/annotationCreation/RegExAnnotCreateA0000644000175000017500000001310411625126514033764 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles annotationCreation/createAnnot.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot2 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot3 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot4 uima.tcas.Annotation org.apache.uima.TestAnnot org.apache.uima.TestAnnot1 org.apache.uima.TestAnnot2 org.apache.uima.TestAnnot3 org.apache.uima.TestAnnot4 true true false ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/annotationCreation/createAnnotRef.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/annotationCreation/createAnnotRef.tx0000644000175000017500000000066511625126514034067 0ustar drazzibdrazzibTestAnnot(0,59): AnnotationCreationTestThatTestsTheVariousMatchGroupsNumbers { testFeature=AnnotationCreationTestThatTestsTheVariousMatchGroupsNumbers, testFeature1=Annotation } TestAnnot1(18,22): Test { testFeature=Creation, testFeature1=That } TestAnnot2(18,22): Test { testFeature=The, testFeature1=Match } TestAnnot4(26,59): TestsTheVariousMatchGroupsNumbers TestAnnot3(26,26): { testFeature=Various, testFeature1=Groups } uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptFileLocking/0000755000175000017500000000000011625126516030510 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptFileLocking/repeat.xml0000644000175000017500000000252611625126516032517 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptFileLocking/repeatDescriptor.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptFileLocking/repeatDescriptor.0000644000175000017500000001307611625126516034037 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles conceptFileLocking/repeat.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot2 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot3 uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot4 uima.tcas.Annotation org.apache.uima.TestAnnot org.apache.uima.TestAnnot1 org.apache.uima.TestAnnot2 org.apache.uima.TestAnnot3 org.apache.uima.TestAnnot4 true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/0000755000175000017500000000000011625126516027610 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotDuplicateAnnotId.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotDuplicateAnn0000644000175000017500000000650111625126516034037 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles conceptSyntax/duplicateAnnotId.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation true true false ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotReferenceFeature.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotReferenceFea0000644000175000017500000001256011625126516034004 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles conceptSyntax/referenceFeature.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature0 uima.cas.String testFeature1 uima.cas.String testFeature2 uima.cas.String testFeature3 uima.cas.String testFeature4 uima.cas.String testFeature5 org.apache.uima.TestAnnot1 testFeature6 uima.cas.Float testFeature7 uima.cas.Float testFeature8 uima.cas.Integer testFeature9 uima.cas.Integer confidenceValue uima.cas.Float ruleId uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation true true false ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotReferenceFeatureError.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotReferenceFea0000644000175000017500000001256411625126516034010 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles conceptSyntax/referenceFeatureError.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature0 uima.cas.String testFeature1 uima.cas.String testFeature2 uima.cas.String testFeature3 uima.cas.String testFeature4 uima.cas.String testFeature5 org.apache.uima.TestAnnot1 testFeature6 uima.cas.Float testFeature7 uima.cas.Float testFeature8 uima.cas.Integer testFeature9 uima.cas.Integer confidenceValue uima.cas.Float ruleId uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation true true false ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotValidatorClassNotFound.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotValidatorCla0000644000175000017500000000502311625126516034033 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles conceptSyntax/validatorClassNotFound.xml true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/emptyFile.xml0000644000175000017500000000175711625126516032302 0ustar drazzibdrazzib uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/referenceFeature.xml0000644000175000017500000000320211625126516033601 0ustar drazzibdrazzib refAnnotID ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotNotAllRuleFilesAvailable.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotNotAllRuleFi0000644000175000017500000000717011625126516033773 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles conceptSyntax/emptyFile.xml fileThatDoesNotExist.xml conceptSyntax/syntaxCheck.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String testFeature2 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation true true false ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotCustomNormalizationClassNotFound.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotCustomNormal0000644000175000017500000000503711625126516034116 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles conceptSyntax/customNormalizationClassNotFound.xml true true false ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/customNormalizationClassNotFound.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/customNormalizationCla0000644000175000017500000000310411625126516034232 0ustar drazzibdrazzib $1 test $2 ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/customNormalizationSyntaxError.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/customNormalizationSyn0000644000175000017500000000300111625126516034300 0ustar drazzibdrazzib $1 test $2 ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotLoadRuleFileUsingDatapath.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotLoadRuleFile0000644000175000017500000000645611625126516034010 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles emptyFile.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/duplicateNames.xml0000644000175000017500000000352411625126516033274 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/syntaxCheckRefOutput.txtuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/syntaxCheckRefOutput.t0000644000175000017500000000411711625126516034142 0ustar drazzibdrazzibConcept ConceptName ProcessAllConceptRules: true Concept rules: Rule ID1 Regex: someRegex Match strategy: MATCH_ALL Match type: uima.tcas.DocumentAnnotation FeaturePath: null Confidence: 1.0 Match type filter features: Filter Feature: FeaturePath: language Pattern: regexExpression Rule exceptions: Exception: matchType: uima.tcas.DocumentAnnotation Pattern: regexExpression Rule ID2 Regex: someOtherRegex Match strategy: MATCH_FIRST Match type: uima.tcas.DocumentAnnotation FeaturePath: null Confidence: 0.7 Match type filter features: Filter Feature: FeaturePath: language Pattern: regexExpression Rule ID3 Regex: anotherRegex Match strategy: MATCH_COMPLETE Match type: uima.tcas.DocumentAnnotation FeaturePath: valid/feature/path Confidence: 0.3 Match type filter features: Filter Feature: FeaturePath: language Pattern: regexExpression Annotations: Annotation: ID: testannot Type: org.apache.uima.TestAnnot Begin: matchGroup: 0 location: end End: matchGroup: 0 location: start Features: Feature: Name: testFeature Type: string Value: $0 Normalization: ToLowerCase Feature: Name: customNormalized Type: string Value: $0 Normalization: my.package.Normalizer Feature: Name: testFeature1 Type: reference Value: testannot1 Feature: Name: confidenceValue Type: confidence Value: Feature: Name: ruleId Type: ruleId Value: Normalization: ToUpperCase Feature: Name: testFeature2 Type: ruleId Value: Normalization: Trim Annotation: ID: testannot1 Type: org.apache.uima.TestAnnot1 Begin: matchGroup: 8 location: start End: matchGroup: 3 location: end Validation class: my.package.Validator Concept ProcessAllConceptRules: false Concept rules: Rule Regex: regexExpression Match strategy: MATCH_ALL Match type: uima.tcas.DocumentAnnotation FeaturePath: null Annotations: Annotation: ID: testannotation Type: org.apache.uima.TestAnnot1 Begin: matchGroup: 0 location: start End: matchGroup: 0 location: end ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotDuplicateNames.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotDuplicateNam0000644000175000017500000000647011625126516034043 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles conceptSyntax/duplicateNames.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation true true false ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/referenceFeatureError.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/referenceFeatureError.0000644000175000017500000000320711625126516034077 0ustar drazzibdrazzib refAnnotID ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotRuleFileNotFound.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotRuleFileNotF0000644000175000017500000000647011625126516033773 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles fileThatDoesNotExist.xml org.apache.uima.TestAnnot uima.tcas.Annotation testFeature uima.cas.String testFeature1 uima.cas.String org.apache.uima.TestAnnot1 uima.tcas.Annotation true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/duplicateAnnotId.xml0000644000175000017500000000276711625126516033575 0ustar drazzibdrazzib ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/validatorClassNotFound.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/validatorClassNotFound0000644000175000017500000000305711625126516034170 0ustar drazzibdrazzib $1 test $2 ././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotCustomNormalizationSyntaxError.xmluima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/RegExAnnotCustomNormal0000644000175000017500000000503311625126516034112 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles conceptSyntax/customNormalizationSyntaxError.xml true true false uima-addons-2.3.1/RegularExpressionAnnotator/src/test/resources/conceptSyntax/syntaxCheck.xml0000644000175000017500000000666011625126516032626 0ustar drazzibdrazzib regexExpression $0 regexExpression regexExpression regexExpression $0 $0 testannot1 uima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/0000755000175000017500000000000011625126514023653 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/0000755000175000017500000000000011625126514024442 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/0000755000175000017500000000000011625126514025663 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/0000755000175000017500000000000011625126514026616 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/0000755000175000017500000000000011625126514030623 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/0000755000175000017500000000000011625126514031735 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestFeaturePathMatching.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestFeatu0000644000175000017500000001210011625126514033556 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.uima.annotator.regex.impl.RegexAnnotatorProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * * */ public class TestFeaturePathMatching extends TestCase { /** * Test simple feature path matching. Test matching on a feature of the match * type * * @throws Exception */ public void testSimpleFeaturePathMatching() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("featurePathMatching/RegExAnnotFeaturePath.xml")); CAS cas = annotTester.performTest("My SimpleRegex String", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot", "org.apache.uima.TestAnnot:testFeature", "org.apache.uima.TestAnnot1", "org.apache.uima.TestAnnot1:testFeature" }; // compare results File outputFile = new File(JUnitExtension.getFile("featurePathMatching"), "featurePathMatching_testouput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("featurePathMatching/featurePathMatchingRef.txt"), outputFile); } /** * Test advanced feature path matching. Test matching on a feature path of * the match type * * @throws Exception */ public void testAdvancedFeaturePathMatching() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("featurePathMatching/RegExAnnotFeaturePath.xml")); CAS cas = annotTester.performTest("My AdvancedRegex String", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot", "org.apache.uima.TestAnnot:testFeature", "org.apache.uima.TestAnnot1", "org.apache.uima.TestAnnot1:testFeature", "org.apache.uima.TestAnnot1:refFeature", "org.apache.uima.TestAnnot2", "org.apache.uima.TestAnnot2:testFeature"}; // compare results File outputFile = new File(JUnitExtension.getFile("featurePathMatching"), "advancedFeaturePathMatching_testouput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("featurePathMatching/advancedFeaturePathMatchingRef.txt"), outputFile); } /** * Test invalid feature path matching. Test a feature path that does not exist. * * @throws Exception */ public void testInvalidFeaturePath() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("featurePathMatching/RegExAnnotInvalidFeaturePath.xml")); boolean foundMessage = false; try { annotTester.performTest("Dummy text", "en"); }catch(RegexAnnotatorProcessException ex) { String message = ex.getCause().getMessage(); if(message.indexOf("testFeature/invalid/path") > -1){ foundMessage = true; } } Assert.assertTrue(foundMessage); } /** * Test unsupported feature path matching. Test an unsupported feature path * * @throws Exception */ public void testInvalidFeaturePath2() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("featurePathMatching/RegExAnnotInvalidFeaturePath2.xml")); boolean foundMessage = false; try { annotTester.performTest("Dummy text", "en"); }catch(RegexAnnotatorProcessException ex) { String message = ex.getMessage(); if(message.indexOf("arrayFeature") > -1){ foundMessage = true; } } Assert.assertTrue(foundMessage); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestConceptFileLocking.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestConce0000644000175000017500000000556711625126514033564 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * * */ public class TestConceptFileLocking extends TestCase { /** * Test * * @throws Exception */ public void testEmptyRegex() throws Exception { System.out.println("Reading in concept file"); final File conceptFile = JUnitExtension.getFile("conceptFileLocking/repeat.xml"); BufferedInputStream is = new BufferedInputStream(new FileInputStream(conceptFile)); final byte[] conceptBytes = new byte[(int) conceptFile.length()]; int pos = 0; int rc = 0; while (((rc = is.read(conceptBytes, pos, conceptBytes.length - pos)) >= 0) && ((pos += rc) < conceptBytes.length)) { // side effects in loop condition; looks like C code ;-) } is.close(); System.out.println("Starting test runs"); // Run test max times final int max = 20; for (int i = 0; i < max; i++) { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("conceptFileLocking/repeatDescriptor.xml")); CAS cas = annotTester.performTest("Test a regex.", "en"); // Document annotation and one "a" found. assertTrue(cas.getAnnotationIndex().size() == 2); try { org.apache.commons.io.FileUtils.forceDelete(conceptFile); BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(conceptFile)); os.write(conceptBytes); os.close(); } catch (IOException e) { e.printStackTrace(); assertTrue(false); } // System.out.println("Number of test runs: " + (i + 1)); } } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/CustomTestNormalizer.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/CustomTes0000644000175000017500000000276311625126514033616 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import junit.framework.Assert; import org.apache.uima.annotator.regex.extension.Normalization; /** * custom test normalizer * */ public class CustomTestNormalizer implements Normalization { /* (non-Javadoc) * @see org.apache.uima.annotator.regex.Normalization#normalize(java.lang.String) */ public String normalize(String input, String ruleId) { Assert.assertTrue(input.equals("Rule test Regex") || input.equals("RuleRegex12.4")); Assert.assertTrue(ruleId.equals("ID1") || ruleId.equals("ID2")); //replace input string with Test Output return "CustomTestNormalizerWorks"; } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestMatchStrategy.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestMatch0000644000175000017500000001053011625126514033553 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * * */ public class TestMatchStrategy extends TestCase { /** * test matchAll match strategy * * @throws Exception */ public void testMatchAll() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("matchStrategy/RegExAnnotMatchStrategy.xml")); CAS cas = annotTester.performTest("no mactch matchALL matchALL matchALL no match", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("matchStrategy"), "matchAll_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("matchStrategy/matchAllRef.txt"), outputFile); } /** * test matchFirst match strategy * * @throws Exception */ public void testMatchFirst() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("matchStrategy/RegExAnnotMatchStrategy.xml")); CAS cas = annotTester.performTest("no mactch matchFirst matchFirst no match", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("matchStrategy"), "matchFirst_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("matchStrategy/matchFirstRef.txt"), outputFile); } /** * test matchComplete match strategy - Test match * * @throws Exception */ public void testMatchCompleteOK() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("matchStrategy/RegExAnnotMatchStrategy.xml")); CAS cas = annotTester.performTest("matchComplete", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("matchStrategy"), "matchCompleteOK_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("matchStrategy/matchCompleteOKRef.txt"), outputFile); } /** * test matchComplete match strategy - no match * * @throws Exception */ public void testMatchCompleteNotOK() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("matchStrategy/RegExAnnotMatchStrategy.xml")); CAS cas = annotTester.performTest("matchComplete is not OK", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot", "uima.tcas.DocumentAnnotation" }; // compare results File outputFile = new File(JUnitExtension.getFile("matchStrategy"), "matchCompleteNotOK_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("matchStrategy/matchCompleteNotOKRef.txt"), outputFile); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestRuleExceptions.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestRuleE0000644000175000017500000001120111625126514033527 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * * */ public class TestRuleExceptions extends TestCase { /** * * * @throws Exception */ public void testRuleExceptionDocAnnotNoMAtch() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("ruleExceptions/RegExAnnotExceptions.xml")); CAS cas = annotTester.performTest("this is my text with a simpleMatch and an exception 12-wbt-test", "en"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation", "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("ruleExceptions"), "docAnnotNoMatch_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("ruleExceptions/docAnnotNoMatchRef.txt"), outputFile); } /** * * * @throws Exception */ public void testRuleExceptionDocAnnotMatch() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("ruleExceptions/RegExAnnotExceptions.xml")); CAS cas = annotTester.performTest("this is my text with a simpleMatch and no exception", "en"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation", "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("ruleExceptions"), "docAnnotMatch_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("ruleExceptions/docAnnotMatchRef.txt"), outputFile); } /** * * * @throws Exception */ public void testRuleExceptionSentenceAnnotNoMatch() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("ruleExceptions/RegExAnnotExceptions.xml")); CAS cas = annotTester.performTest("My text starts here: car carbon test cat cart and ends here", "en"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation", "org.apache.uima.TestAnnot", "org.apache.uima.SentenceAnnot", "org.apache.uima.TokenAnnot"}; // compare results File outputFile = new File(JUnitExtension.getFile("ruleExceptions"), "sentenceAnnotNoMatch_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("ruleExceptions/sentenceAnnotNoMatchRef.txt"), outputFile); } /** * * * @throws Exception */ public void testRuleExceptionSentenceAnnotMatch() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("ruleExceptions/RegExAnnotExceptions.xml")); CAS cas = annotTester.performTest("My text starts here: car carbon cat cart and ends here", "en"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation", "org.apache.uima.TestAnnot", "org.apache.uima.SentenceAnnot", "org.apache.uima.TokenAnnot"}; // compare results File outputFile = new File(JUnitExtension.getFile("ruleExceptions"), "sentenceAnnotMatch_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("ruleExceptions/sentenceAnnotMatchRef.txt"), outputFile); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestValidator.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestValid0000644000175000017500000000256011625126514033562 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import org.apache.uima.annotator.regex.extension.Validation; /** * custom test validator * */ public class TestValidator implements Validation { /* (non-Javadoc) * @see org.apache.uima.annotator.regex.extension.Validation#validate(java.lang.String, java.lang.String) */ public boolean validate(String coveredText, String ruleID) throws Exception { if(ruleID != null && ruleID.equals("TestID")) { return true; } return false; } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestVariables.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestVaria0000644000175000017500000001073311625126514033566 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * * */ public class TestVariables extends TestCase { /** * Test regex variable replacement for variable concept 1 * * @throws Exception */ public void testVariablesConept1() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("variables/RegExAnnotVariables.xml")); CAS cas = annotTester.performTest( "Monday simple regex with variables Tuesday", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("variables"), "variablesConcept1_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("variables/variablesConcept1Ref.txt"), outputFile); } /** * Test regex variable replacement for variable concept 2 * * @throws Exception */ public void testVariablesConept2() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("variables/RegExAnnotVariables.xml")); CAS cas = annotTester.performTest("Tuesday January Sunday test {days}", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("variables"), "variablesConcept2_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("variables/variablesConcept2Ref.txt"), outputFile); } /** * Test regex variable replacement for variable concept 3 * * @throws Exception */ public void testVariablesConept3() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("variables/RegExAnnotVariables.xml")); CAS cas = annotTester.performTest("Match: Jan. Don't macht Jana", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("variables"), "variablesConcept3_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("variables/variablesConcept3Ref.txt"), outputFile); } /** * Test regex variable replacement for variable concept 2 * * @throws Exception */ public void testVariablesNotAvailable() throws Exception { boolean foundMessage = false; try { // create annotation tester with the regex annotator specifier new AnnotatorTester(JUnitExtension .getFile("variables/RegExAnnotVariablesError.xml")); } catch (ResourceInitializationException ex) { String message = ex.getCause().getMessage(); if ((message.indexOf("days") > -1) && (message.indexOf("VariableError") > -1)) { foundMessage = true; } } Assert.assertTrue(foundMessage); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestFilterFeatures.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestFilte0000644000175000017500000001317011625126514033565 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * * */ public class TestFilterFeatures extends TestCase { /** * Test filter feature where the filter condition is correct and the * annotation is created. * * @throws Exception */ public void testFilterFeaturesConditionCorrect() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("filters/RegExAnnotFilterFeature.xml")); CAS cas = annotTester.performTest("SimpleRegex", "en"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation:language", "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("filters"), "filterFeatureCorrect_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("filters/filterFeatureCorrectRef.txt"), outputFile); } /** * Test filter feature where the filter condition is not correct and the * annotation is not created. * * @throws Exception */ public void testFilterFeaturesConditionWrong() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("filters/RegExAnnotFilterFeature.xml")); CAS cas = annotTester.performTest("SimpleRegex", "en-US"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation:language", "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("filters"), "filterFeatureWrong_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("filters/filterFeatureWrongRef.txt"), outputFile); } /** * Test filter feature where the filter has an advanced condition that is correct and the * annotation is created. * * @throws Exception */ public void testFilterFeaturesAdvancedCondition1() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("filters/RegExAnnotFilterFeature.xml")); CAS cas = annotTester.performTest("AdvancedFilterRegex", "en-US"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation:language", "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("filters"), "filterFeatureAdvanced1_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("filters/filterFeatureAdvanced1Ref.txt"), outputFile); } /** * Test filter feature where the filter has an advanced condition that is correct and the * annotation is created. * * @throws Exception */ public void testFilterFeaturesAdvancedCondition2() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("filters/RegExAnnotFilterFeature.xml")); CAS cas = annotTester.performTest("AdvancedFilterRegex", "en-GB"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation:language", "org.apache.uima.TestAnnot" }; // compare results File outputFile = new File(JUnitExtension.getFile("filters"), "filterFeatureAdvanced2_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("filters/filterFeatureAdvanced2Ref.txt"), outputFile); } /** * Test filter feature on an annotation that was just created before. * * @throws Exception */ public void testFilterFeaturesOnCreatedAnnot() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("filters/RegExAnnotFilterFeature.xml")); CAS cas = annotTester.performTest("JustCreateAnAnnotation", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot", "org.apache.uima.TestAnnot:testFeature" }; // compare results File outputFile = new File(JUnitExtension.getFile("filters"), "filterFeatureOnCreatedAnnot_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("filters/filterFeatureOnCreatedAnnotRef.txt"), outputFile); } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestWildcardFileLoading.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestWildc0000644000175000017500000000452211625126514033565 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; import junit.framework.TestCase; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.cas.CAS; import org.apache.uima.resource.ResourceManager; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.util.XMLInputSource; import org.apache.uima.util.XMLParser; /** * * */ public class TestWildcardFileLoading extends TestCase { /** * Test loading rule files with a wildcard file name. * * @throws Exception */ public void testEmptyRegex() throws Exception { // create annotation tester with the regex annotator specifier File descFile = JUnitExtension.getFile("wildcardFilenameSyntax/loadFilesWithWildcard.xml"); File dpDir = descFile.getParentFile().getParentFile(); String datapath = dpDir.getAbsolutePath(); XMLParser parser = UIMAFramework.getXMLParser(); AnalysisEngineDescription desc = parser.parseAnalysisEngineDescription(new XMLInputSource( descFile)); ResourceManager rm = UIMAFramework.newDefaultResourceManager(); rm.setDataPath(datapath); AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(desc, rm, null); CAS cas = ae.newCAS(); cas.setDocumentLanguage("en"); cas.setDocumentText("This is a test."); ae.process(cas); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestAnnotationCreation.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestAnnot0000644000175000017500000000507111625126514033602 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * * */ public class TestAnnotationCreation extends TestCase { /** * test the annotation creation with different begin and end positions and with different match * groups * * @throws Exception */ public void testAnnotationCreation() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("annotationCreation/RegExAnnotCreateAnnot.xml")); CAS cas = annotTester .performTest("AnnotationCreationTestThatTestsTheVariousMatchGroupsNumbers)", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot", "org.apache.uima.TestAnnot:testFeature", "org.apache.uima.TestAnnot:testFeature1", "org.apache.uima.TestAnnot1", "org.apache.uima.TestAnnot1:testFeature", "org.apache.uima.TestAnnot1:testFeature1", "org.apache.uima.TestAnnot2", "org.apache.uima.TestAnnot2:testFeature", "org.apache.uima.TestAnnot2:testFeature1", "org.apache.uima.TestAnnot3", "org.apache.uima.TestAnnot3:testFeature", "org.apache.uima.TestAnnot3:testFeature1", "org.apache.uima.TestAnnot4"}; // compare results File outputFile = new File(JUnitExtension.getFile("annotationCreation"), "createAnnot_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("annotationCreation/createAnnotRef.txt"), outputFile); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestConceptFileParser.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestConce0000644000175000017500000000624411625126514033555 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.uima.annotator.regex.impl.ConceptFileParser_impl; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.test.junit_extension.FileCompare; import org.apache.uima.test.junit_extension.JUnitExtension; /** * Test class to test the concept file XML parser. */ public class TestConceptFileParser extends TestCase { /** * checks the good case - concept file syntax check * * @throws Exception */ public void testSyntaxCheck() throws Exception { File conceptFile = JUnitExtension.getFile("conceptSyntax/syntaxCheck.xml"); InputStream stream = new BufferedInputStream(new FileInputStream(conceptFile)); //parse concept file ConceptFileParser parser = new ConceptFileParser_impl(); Concept[] concepts = parser.parseConceptFile(conceptFile.getAbsolutePath(), stream); File outputFile = new File(conceptFile.getParent(), "syntaxCheck_current.txt"); OutputStreamWriter fileWriter = new OutputStreamWriter(new FileOutputStream(outputFile, false), "UTF-8"); // write all rules to the output file for (int i = 0; i < concepts.length; i++) { fileWriter.write(concepts[i].toString()); } fileWriter.close(); // get reference file File refFile = JUnitExtension.getFile("conceptSyntax/syntaxCheckRefOutput.txt"); // compare current output with reference output Assert.assertTrue(FileCompare.compare(refFile, outputFile)); } /** * check an empty concept file * * @throws Exception */ public void testEmptySyntaxFile() throws Exception { File conceptFile = JUnitExtension.getFile("conceptSyntax/emptyFile.xml"); InputStream stream = new BufferedInputStream(new FileInputStream(conceptFile)); try { //parse empty concept file ConceptFileParser parser = new ConceptFileParser_impl(); parser.parseConceptFile(conceptFile.getAbsolutePath(), stream); } catch (ResourceInitializationException ex) { //we get an exception... what is correct! } } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestConceptFileSyntax.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestConce0000644000175000017500000001706611625126514033561 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.uima.UIMAFramework; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceManager; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * Test class to test the concept file syntax. */ public class TestConceptFileSyntax extends TestCase { public void testSyntaxDuplicateNames() throws Exception { // test annotator configuration with // - duplicate concept names // - duplicate rule IDs within the same concept // - duplicate annotation IDs within the concept file document but not // within the same concept new AnnotatorTester(JUnitExtension .getFile("conceptSyntax/RegExAnnotDuplicateNames.xml")); } public void testSyntaxDuplicateAnnotationIds() throws Exception { // test annotator configuration with // - duplicate annotation IDs within the same concept String message = ""; try { new AnnotatorTester(JUnitExtension .getFile("conceptSyntax/RegExAnnotDuplicateAnnotId.xml")); } catch (ResourceInitializationException ex) { message = ex.getCause().getLocalizedMessage(); } Assert .assertTrue( "exception does not contain the duplicate annotation id: testannotation", message.indexOf("testannotation") > 0); } public void testSyntaxReferenceAnnotationIdNotAvaliable() throws Exception { // test annotator configuration with // - missing annotation ID- String message = ""; try { new AnnotatorTester(JUnitExtension .getFile("conceptSyntax/RegExAnnotReferenceFeature.xml")); } catch (ResourceInitializationException ex) { message = ex.getCause().getLocalizedMessage(); } Assert.assertTrue( "exception does not contain missing annotation id: refAnnotID", message.indexOf("refAnnotID") > 0); } public void testSyntaxReferenceAnnotationIdError() throws Exception { // test annotator configuration with // a missing annotation id for the annotation that has - duplicate // annotation IDs within the same concept String message = ""; try { new AnnotatorTester(JUnitExtension .getFile("conceptSyntax/RegExAnnotReferenceFeatureError.xml")); } catch (ResourceInitializationException ex) { message = ex.getCause().getLocalizedMessage(); } Assert .assertTrue( "exception does not contain the concept name: referenceFeatureValueError", message.indexOf("referenceFeatureValueError") > 0); } public void testSyntaxRuleFileNotFound() throws Exception { // test annotator configuration with a concept file that could not be // found // in the UIMA datapath or in the classpath String message = ""; try { new AnnotatorTester(JUnitExtension .getFile("conceptSyntax/RegExAnnotRuleFileNotFound.xml")); } catch (ResourceInitializationException ex) { message = ex.getCause().getLocalizedMessage(); } Assert .assertTrue( "exception does not contain the file name: fileThatDoesNotExist.xml", message.indexOf("fileThatDoesNotExist.xml") > 0); } public void testSyntaxNotAllRuleFilesAvailable() throws Exception { // test annotator configuration with more than one concept file // where one of the concept files could not be found String message = ""; try { new AnnotatorTester(JUnitExtension .getFile("conceptSyntax/RegExAnnotNotAllRuleFilesAvailable.xml")); } catch (ResourceInitializationException ex) { message = ex.getCause().getLocalizedMessage(); } Assert .assertTrue( "exception does not contain the file name: fileThatDoesNotExist.xml", message.indexOf("fileThatDoesNotExist.xml") > 0); } public void testSyntaxLoadRuleFileUsingDatapath() throws Exception { // test annotator configuration with a concept file that is loaded // using the UIMA datapath ResourceManager rscMgr = UIMAFramework.newDefaultResourceManager(); rscMgr.setDataPath(JUnitExtension.getFile("conceptSyntax") .getAbsolutePath()); new AnnotatorTester(JUnitExtension.getFile( "conceptSyntax/RegExAnnotLoadRuleFileUsingDatapath.xml") .getAbsolutePath(), rscMgr); } public void testCustomNormalizationSyntaxError() throws Exception { // test annotator configuration with a syntax error for the custom normalizer String message = ""; try { new AnnotatorTester(JUnitExtension .getFile("conceptSyntax/RegExAnnotCustomNormalizationSyntaxError.xml")); } catch (ResourceInitializationException ex) { message = ex.getCause().getLocalizedMessage(); } Assert .assertTrue( "exception does not contain the file name: testFeatureCustomNormalizer", message.indexOf("testFeatureCustomNormalizer") > 0); } public void testCustomNormalizationClassNotFound() throws Exception { // test annotator configuration where the custom normalizer could not be found. String message = ""; try { new AnnotatorTester(JUnitExtension .getFile("conceptSyntax/RegExAnnotCustomNormalizationClassNotFound.xml")); } catch (ResourceInitializationException ex) { message = ex.getCause().getLocalizedMessage(); } Assert .assertTrue( "exception does not contain the file name: CustomNormalizerTestClass", message.indexOf("CustomNormalizerTestClass") > 0); } public void testCustomValidatorClassNotFound() throws Exception { // test annotator configuration where the custom validator could not be found String message = ""; try { new AnnotatorTester(JUnitExtension .getFile("conceptSyntax/RegExAnnotValidatorClassNotFound.xml")); } catch (ResourceInitializationException ex) { message = ex.getCause().getLocalizedMessage(); } Assert .assertTrue( "exception does not contain the file name: org.apache.uima.annotator.regex.TestValidatorDoesNotExist", message.indexOf("org.apache.uima.annotator.regex.TestValidatorDoesNotExist") > 0); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/RegexAnnotatorPerfTest.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/RegexAnno0000644000175000017500000000425111625126514033550 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; import junit.framework.TestCase; import org.apache.uima.test.junit_extension.AnnotatorPerformanceTester; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.test.junit_extension.PerformanceTestResult; /** * * RegexAnnotator performance test class */ public class RegexAnnotatorPerfTest extends TestCase { /** * test annotator performance for sample rule set. * * @throws Exception */ public void testPerformanceSet1() throws Exception { // get descriptor File descFile = JUnitExtension.getFile("performanceTest/RegExAnnotPerf.xml"); File testFileDir = JUnitExtension.getFile("performanceTest/fileSet1"); // run performance test PerformanceTestResult result = AnnotatorPerformanceTester.runPerformanceTest(true, 10000, descFile, testFileDir, null, true); // get result file assertEquals(180000, result.getNumberOfCreatedAnnotations()); System.out.println(result); } /** * main method to start the tests not a JUnit test. * * @param args */ public static void main(String[] args) { RegexAnnotatorPerfTest perf = new RegexAnnotatorPerfTest(); try { perf.testPerformanceSet1(); } catch (Exception ex) { ex.printStackTrace(); } } }././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestSetFeatureValues.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestSetFe0000644000175000017500000001674311625126514033541 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import java.io.File; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * * */ public class TestSetFeatureValues extends TestCase { /** * test all possible feature values and types use Rule with id=ID1 * * @throws Exception */ public void testSetFeatureValues1() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("setFeatureValues/RegExAnnotFeatureValues.xml")); CAS cas = annotTester.performTest("RuleRegex12.4", "en"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation:language", "org.apache.uima.TestAnnot", "org.apache.uima.TestAnnot:testFeature0", "org.apache.uima.TestAnnot:testFeature1", "org.apache.uima.TestAnnot:testFeature2", "org.apache.uima.TestAnnot:testFeature3", "org.apache.uima.TestAnnot:testFeature4", "org.apache.uima.TestAnnot:testFeature5", "org.apache.uima.TestAnnot:testFeature6", "org.apache.uima.TestAnnot:testFeature7", "org.apache.uima.TestAnnot:testFeature8", "org.apache.uima.TestAnnot:testFeature9", "org.apache.uima.TestAnnot:testFeature10", "org.apache.uima.TestAnnot:testFeature11", "org.apache.uima.TestAnnot:testFeature12", "org.apache.uima.TestAnnot:testFeature13", "org.apache.uima.TestAnnot:testFeature14", "uima.tcas.DocumentAnnotation:language1", "uima.tcas.DocumentAnnotation:language2", "uima.tcas.DocumentAnnotation:refFeature", "uima.tcas.DocumentAnnotation:ruleID", "org.apache.uima.TestAnnot:confidenceValue", "org.apache.uima.TestAnnot:ruleId", "org.apache.uima.TestAnnot1" }; // compare results File outputFile = new File(JUnitExtension.getFile("setFeatureValues"), "featureValues_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("setFeatureValues/featureValuesRef.txt"), outputFile); } /** * test all possbible feature values and types with the second rule of a * concept. Especially the confidence and rule ID. Use Rule with id=ID2 * * @throws Exception */ public void testSetFeatureValues2() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("setFeatureValues/RegExAnnotFeatureValues.xml")); CAS cas = annotTester.performTest("RuleRegex22.4", "en"); // define result interested in String[] tofs = { "uima.tcas.DocumentAnnotation:language", "org.apache.uima.TestAnnot", "org.apache.uima.TestAnnot:testFeature0", "org.apache.uima.TestAnnot:testFeature1", "org.apache.uima.TestAnnot:testFeature2", "org.apache.uima.TestAnnot:testFeature3", "org.apache.uima.TestAnnot:testFeature4", "org.apache.uima.TestAnnot:testFeature5", "org.apache.uima.TestAnnot:testFeature6", "org.apache.uima.TestAnnot:testFeature7", "org.apache.uima.TestAnnot:testFeature8", "org.apache.uima.TestAnnot:testFeature9", "org.apache.uima.TestAnnot:testFeature10", "org.apache.uima.TestAnnot:testFeature11", "org.apache.uima.TestAnnot:testFeature12", "org.apache.uima.TestAnnot:testFeature13", "org.apache.uima.TestAnnot:testFeature14", "uima.tcas.DocumentAnnotation:language1", "uima.tcas.DocumentAnnotation:language2", "uima.tcas.DocumentAnnotation:refFeature", "uima.tcas.DocumentAnnotation:ruleID", "org.apache.uima.TestAnnot:confidenceValue", "org.apache.uima.TestAnnot:ruleId", "org.apache.uima.TestAnnot1" }; // compare results File outputFile = new File(JUnitExtension.getFile("setFeatureValues"), "featureValues2_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("setFeatureValues/featureValuesRef2.txt"), outputFile); } /** * test match group names. Use Rule with id=ID3 * * @throws Exception */ public void testSetFeatureValues3() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("setFeatureValues/RegExAnnotFeatureValues.xml")); CAS cas = annotTester.performTest("RuleRegex32.4", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot", "org.apache.uima.TestAnnot:testFeature0", "org.apache.uima.TestAnnot:testFeature1", "org.apache.uima.TestAnnot:testFeature2", "org.apache.uima.TestAnnot:testFeature3", "org.apache.uima.TestAnnot:testFeature4", "org.apache.uima.TestAnnot:testFeature7" }; // compare results File outputFile = new File(JUnitExtension.getFile("setFeatureValues"), "featureValues3_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("setFeatureValues/featureValuesRef3.txt"), outputFile); } /** * test all setFeature values for confidence and ruleID without have * specified these values in the concept file. * * @throws Exception */ public void testSetFeatureValuesForConfidenceAndRuleID() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("setFeatureValues/RegExAnnotFeatureValues.xml")); CAS cas = annotTester.performTest("Minimal Configuration", "en"); // define result interested in String[] tofs = { "org.apache.uima.TestAnnot", "org.apache.uima.TestAnnot:confidenceValue", "org.apache.uima.TestAnnot:ruleId" }; // compare results File outputFile = new File(JUnitExtension.getFile("setFeatureValues"), "miniConfig_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("setFeatureValues/miniConfigRef.txt"), outputFile); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestEmptyRegex.javauima-addons-2.3.1/RegularExpressionAnnotator/src/test/java/org/apache/uima/annotator/regex/TestEmpty0000644000175000017500000000473611625126514033630 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.regex; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * * */ public class TestEmptyRegex extends TestCase { /** * test the annotation creation with different begin and end positions and with different match * groups * * @throws Exception */ public void testEmptyRegex() throws Exception { // create annotation tester with the regex annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("emptyRegex/RegExEmptyRegex.xml")); CAS cas = annotTester.performTest("Test an empty regex.", "en"); // // define result interested in // String[] tofs = { "org.apache.uima.TestAnnot", "org.apache.uima.TestAnnot:testFeature", // "org.apache.uima.TestAnnot:testFeature1", "org.apache.uima.TestAnnot1", // "org.apache.uima.TestAnnot1:testFeature", "org.apache.uima.TestAnnot1:testFeature1", // "org.apache.uima.TestAnnot2", "org.apache.uima.TestAnnot2:testFeature", // "org.apache.uima.TestAnnot2:testFeature1", "org.apache.uima.TestAnnot3", // "org.apache.uima.TestAnnot3:testFeature", "org.apache.uima.TestAnnot3:testFeature1", // "org.apache.uima.TestAnnot4" }; // // // compare results // File outputFile = new File(JUnitExtension.getFile("annotationCreation"), // "createAnnot_testoutput.txt"); // AnnotatorTester.checkResult(cas, tofs, JUnitExtension // .getFile("annotationCreation/createAnnotRef.txt"), outputFile); } } uima-addons-2.3.1/RegularExpressionAnnotator/src/docbook/0000755000175000017500000000000011625126520023370 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/src/docbook/RegexAnnotatorUserGuide.xml0000644000175000017500000016620711625126520030703 0ustar drazzibdrazzib Apache UIMA Regular Expression Annotator Documentation Introduction The Regular Expression Annotator (RegexAnnotator) is an Apache UIMA analysis engine that detects entities such as email addresses, URLs, phone numbers, zip codes or any other entity that can be specified using a regular expression. For each entity that is detected an own annotation can be created or an already existing annotation can be updated with new features. To detect also more difficult and complex entities, the annotator provides some advanced filter capabilities and a rule definition syntax that can combine rules to a concept with a confidence value for each of the concept's rules. Processing Overview To detect any kind of entity the RegexAnnotator must be configured using an external XML file. We call this file "concept file" since it contains the regular expressions and concepts that the annotator use during its processing to detect entities. In addition to the rules the concept file also contains the "entity result processing" that is done if an entity was detected. The "entity result processing" can either be the creation of new annotations or an update of an existing annotation with additional features. The types and features that are used to create new annotations have to be available in the UIMA type system. After the concept file is created, the annotator XML descriptor have to be updated with the capabilities and maybe with the type system information from the concept file. The capability update is necessary that the UIMA framework can call the annotator also in complex annotator flows if the annotator is assembled with others to an analysis bundle. The UIMA type system update is only necessary if the used types are not available in the UIMA type system definition. With the completion of the descriptor updates, the RegexAnnotator is ready to use. When starting the annotator, during the initialization the annotator reads the concept file and checks if all rules and concepts are valid and if all annotations types are defined in the UIMA type system. For each document that is processed the rules and concepts are executed in exactly the same order as defined in the concept file. The results and annotations created for a preceding rule are used by the following one since they are stored in the CAS. Concepts Configuration File The RegexAnnotator can be configured using two levels of complexity. The RuleSet definition is the easier way to define rules. Such a definition consists of a regular expression pattern and of annotations that should be created if the rule match an entity. The Concept definition is the more complex way to define rules. Such a definition can consists of more than one regular expression rule that can be combined together and of a set of annotations that should be created if one of the rules has matched an entity. The syntax for both definitions is the same, so you don't need to learn two configuration possibilities. The RuleSet definition is just available to have an easier and faster way to configure the annotator for simple tasks. If you have a RuleSet definition it is also possible to extend it with more and more features so that it becomes a real Concept definition.
RuleSet definition The syntax of a simple RuleSet definition to detect email addresses is shown in the listing below: ]]> The definition above defines are simple concept with the name emailAddressDetection. The defined rule use ([a-zA-Z0-9!#$%*+'/=?^_-`{|}~.\x26]+)@([a-zA-Z0-9._-]+[a-zA-Z]{2,4}) as regular expression pattern that is matched on the covered text of the match type uima.tcas.DocumentAnnotation. As match strategy, matchAll is used that means that all matches for the pattern are used to create the annotations defined in the <createAnnotations> element. So for each match a org.apache.uima.EmailAddress annotation is created that covers the match in the document text. For additional annotation creation possibilities such as adding features to a created annotation, please refer to
Concept definition The syntax of a complex Concept definition to detect credit card numbers for the RegexAnnotator is shown in the listing below: ]]> As you can see the Concept definition is a more complex RuleSet definition. The main differences are some additional features defined at the rule and the combination of rules within one concept. The new features for a rule are ruleID and confidence. If these features are specified, the feature values for these features can later be assigned to an annotation feature for a created annotation. In case we use the listing above as example this means that when the org.apache.uima.CreditCardNumber is created the value of the confidence feature of the rule that matched the document text is assigned to the annotation feature called confidenceValue. The same is done for the ruleId feature. With that you can later check your annotation confidence and you can see which rule was responsible for the annotation creation. The annotation features for Confidence and RuleId have to be created manually in the UIMA type system. Given that it is possible to assign the confidence and ruleId feature values to any other annotation feature you have defined in the UIMA type system. Confidence features have to be of type uima.cas.Float and RuleId features have to be of type uima.cas.String. The processing of a concept definition depends on the rule processing. The feature that controls the rule processing is called processAllRules and is specified at the <concept> element. By default this optional feature is set to false. This means that the concept processing starts with the first rule and goes on with the next one until a match was found. So in this processing mode, maybe only the first rule of a concept is evaluated if there a match was found. The other rules of this concept will be ignored in that case. This strategy should be used for example if your first concept rule has a strict pattern with a confidence of 1.0 and your second rule has a more lenient pattern with a confidence of 0.5. If the processAllRules feature is set to true all rules of a concept are processed independent of the matches for a previous rule.
Regex Variables The regex variables allows to externalize parts of a regular expression to shorten them and make it easier to read. The externalized part of the expression is replaced with a regex variable. The variable syntax looks like \v{weekdays}, where weekdays is the variable name. The field for regex variables are mainly the separation of enumerations in a regular expression to make them easier to understand and maintain. But let's see how it works in the short example below. A simple regular expression for a date like Wednesday, November 28, 2007 can look like: ]]> When using regex variables to externalize the weekdays and the months in this regular expression, it looks like: ]]> The regex variables must be defined at the beginning of the concept file next to the <conceptSet> element before the concepts are defined. The variables can be used in all concept definition within the same file. The regex variable name can contain any of the following characters [a-zA-Z_0-9]. Other characters are not allowed.
Rule Definition This paragraph shows in detail how to define a rule for a RuleSet or Concept definition and give you some advanced configuration possibilities for the rule processing. The listing below shows an abstract rule definition with all possible sub elements and attributes. Please refer to the sub sections for details about the sub elements. en $0 ExceptionExpression ]]> For each rule that should be added a <rule> element have to be created. The <rule> element definition has three mandatory features, these are: regEx - The regular expression pattern that is used for this rule. As pattern, everything supported by the Java regular expression syntax is allowed. matchStrategy - The match strategy that is used for this rule. Possible values are matchAll to get all matches, matchFirst to get the first match only and matchComplete to get matches where the whole input text match the regular expression pattern. matchType - The annotation type that is used to match the regular expression pattern. As input text for the match, the annotation span is used, but only if no additional featurePath feature is specified. In addition to the mandatory features the <rule> element definition also has some optional features that can be used, these are: ruleId - Specifies the ID for this rule. The ID can later be used to add it as value to an annotation feature (see ). confidence - Specifies the confidence value of this rule. If you have more than one rule that describes the same complex entity you can classify the rules with a confidence value. This confidence value can later be used to add it as value to an annotation feature (see ). featurePath - Specifies the feature path that should be used to match the regular expression pattern. If a feature path is specified, the feature path value is used to match against the regular expression instead of the match type annotation span. The defined feature path must be valid for the specified match type annotation type. The feature path elements are separated by "/". The listing below shows how to match a regular expression on the normalizedText feature of a uima.TokenAnnotation. So in this case, not the covered text of the uima.TokenAnnotation is used to match the regular expression but the normalizedText feature value of the annotation. The normalizedText feature must be defined in the UIMA type system as feature of type uima.TokenAnnotation. ]]>
Match Type Filter en ]]> Match type filters can be used to filter the match type annotations that are used for matching the regular expression pattern. For example to use a rule only when the document language is English, as shown in the example above. Match type filters ever relate to the matchType that was specified for the rule. The <matchTypeFilter> element can contain an arbitrary amount of <feature> elements that contains the filter information. But all specified <feature> elements have to be valid for the matchType annotation of the rule. The feature path that should be used as filter is specified using the featurePath feature of the <feature> element. Feature path elements are separated by "/" e.g. my/feature/path. The specified feature path must be valid for the matchType annotation. The content of the <feature> element contains the regular expression pattern that is used as filter. To pass the filter, this pattern have to match the feature path value that is resolved using the match type annotation. In the example above the match type annotation has a UIMA feature called language that have to have the content en. If that is true, the annotation passed the filter condition.
Update Match Type Annotations With Additional Features $0 ]]> With the <updateMatchTypeAnnotation> construct it is possible to update or set a UIMA feature value for the match type annotation in case a rule match was found. The <updateMatchTypeAnnotation> element can have an arbitrary amount of <setFeature> elements that contains the feature information that should be updated. The <setFeature> element has two mandatory features, these are: name - Specifies the UIMA feature name that should be set. The feature have to be available at the matchType annotation of the rule. type - Specifies the UIMA feature type that is defined in the UIMA type system for this feature. Currently supported feature types are String, Integer and Float. The optional features are: normalization - Specifies the normalization that should be performed before the feature value is assigned to the match type annotation. For a list of all built-in normalization functions please refer to . class - Specifies the custom normalization class that should be used to normalize the feature value before it is assigned to the match type annotation. Custom normalization classes are used if the normalization feature has the value Custom. The normalization class have to implement the org.apache.uima.annotator.regex.extension.Normalization interface. For details about the feature normalization please refer to . The content of the <setFeature> element definition contains the feature value that should be set. This can either be a literal value or a regular expression capturing group as shown in the example above. A combination of capturing groups and literals is also possible.
Rule exception ExceptionPattern ]]> With the <ruleExceptions> construct it is possible to configure exceptions to prevent matches for the rule. An exception is something similar to a filter, but on the higher level. For example take the scenario where you have several token annotations that are covered by a sentence annotation. You have written a rule that can detect car brands. The text you analyze has the sentence "Henry Ford was born 1863". When analyzing the text you will get a car brand annotation since "Ford" is a car brand. But is this the correct behavior? The work around that issue you can create an exception that looks like Henry ]]> and add it to your car brand rule. After adding this, car brand annotations are only created if the sentence annotation that covers the token annotation does not contain the word "Henry". The <ruleExceptions> element can have an arbitrary amount of <exception> elements to specify rule exceptions. The <exception> element has one mandatory feature called matchType. The matchType feature specifies the annotation type the exception is based on. The concrete exception match type annotation that is used during the runtime is evaluated for each match type annotation that is used to match a rule. As exception annotation always the covering annotation of the current match type annotation is used. If no covering annotation instance of the exception match type was found the exception is not evaluated. The content of the <exception> element specifies the regular expression that is used to evaluate the exception. If the exception match is true, the current match type annotation is filtered out and is not used to create any matches and annotations.
Annotation Creation This paragraph explains in detail how to create annotations if a rule has matched some input text. An annotation creation example with all possible settings is shown in the listing below. $0 $0 $1 $2 testannot1 $0 ]]> The <annotation> element has two mandatory features, these are: id - Specifies the annotation id for this annotation. If the annotation id is specified, it must be unique within the same concept. An annotation id is required if the annotation is referred by another annotation or if the annotation itself refers other annotations using a Reference feature. type - Specifies the UIMA annotation type that is used if an annotation is created. The used type have to be defined in the UIMA type system. The optional features are: validate - Specifies the custom validator class that is used to validate matches before they are added as annotation to the CAS. For more details about the custom annotation validation, please refer to . The mandatory sub elements of the <annotation> element are: <begin> - Specifies the begin position of the annotation that is created. For details about the <begin> element, please refer to . <end> - Specifies the end position of the annotation that is created. For details about the <end> element, please refer to . The optional sub elements of the <annotation> element are: <setFeature> - set a UIMA feature for the created annotation. For details about the <setFeature> element, please refer to
Annotation Boundaries When creating an annotation with the <annotation> element it is also necessary to define the annotations boundaries. The annotation boundaries are defined using the sub elements <begin> and <end>. The start position of the annotation is defined using the <begin> element, the end position using the <end> element. Both elements have the same features as shown below: group - identifies the capturing group number within the regular expression pattern for the current rule. The value is a positive number where 0 denotes the whole match, 1 the first capturing group, 2 the second one, and so on. location - indicates a position inside the capturing group, which can either be the position of the left parenthesis in case of a value start, or the right parenthesis in case of a value end. The location feature is optional. By default the <begin> element is set to location="start" and the <end> element to location="end". When the rule definition defines a featurePath for a matchType, the annotation boundaries for the created annotation are automatically set to the annotation boundaries of the match input annotation. This must be done since the matching with a feature value of an annotation has no relation to the document text, so the only relation is the annotation where the feature is defined.
Annotation Validation The custom annotation validation can be used to validate a regular expression match by using some java code before the match is added as annotation to the CAS. For example if your regular expression detects an ISBN number you can use the custom validation code to check if it is really an ISBN number by calculating the last check digit or if it is just a phone number. To use the custom annotation validation you have to specify the validation class at the validate feature of the <annotation> element. The validation class must implement the org.apache.uima.annotator.regex.extension.Validation interface (). The interface defines one method called validate(String coveredText, String ruleID). The validate method is called by the annotator before the match is added as annotation to the CAS. Annotations are only added if the validate method returns true, otherwise the match is skipped. The coveredText parameter contains the text that matches the regular expression. The ruleID parameter contains the ruldId of the rule that creates the match. This can also be null if no ruleID was specified. The listing below shows a sample implementation of the validation interface. The configuration for this example looks like: ]]>
Annotation Features With the <setFeature> element of <annotation> definition it is possible to set UIMA features for the created annotation. The mandatory features for the <setFeature> element are: name - Specifies the UIMA feature name that should be set. The feature name have to be a valid UIMA feature for this annotation and have to be defined in the UIMA type system. type - Specifies the type of the UIMA feature. For a list of all possible feature types please refer to . The optional features are: normalization - Specifies the normalization that should be performed before the feature value is assigned to the UIMA annotation. For a list of all built-in normalization functions please refer to . class - Specifies the custom normalization class that should be used to normalize the feature value before it is assigned to the UIMA annotation. Custom normalization classes are used if the normalization feature has the value Custom. The normalization class have to implement the org.apache.uima.annotator.regex.extension.Normalization interface. For details about the feature normalization please refer to . The content of the <setFeature> element specifies the value of the UIMA feature that is set. As value a literal, a capturing group or a combination of both can be used. To add the value of a capturing group there are two ways to do it. The first notation is $ followed by the capturing group number from 0 to 9 e.g. $0 for capturing group 0 or $7 for capturing group 7. The second notation to get the value of a capturing group are capturing group names. If the rule contains named capturing groups these groups can be accessed with ${matchGroupName}. For the access of capturing groups greater than 9 capturing group names must be used. An example for capturing group names is shown below: To add a name to a capturing group just add the following fragment \m{groupname} in front of the capturing group start parenthesis. ${groupName} ]]>
Features Types When setting UIMA feature for an annotation using the <setFeature> element the feature type has to be specified according the the UIMA type system definition. The feature at the <setFeature> element to do that is called type. The list below shows all currently supported feature types: String - for uima.cas.String based UIMA features. Integer - for uima.cas.Integer based UIMA features. Float - for uima.cas.Float based UIMA features. Reference - to link a UIMA feature to another annotation. In this case the UIMA feature type have to be the same as the referred annotation type. To reference another annotation instance the <setFeature> content must have the annotation id as value of the referred annotation. The referred annotation instance is the created annotation of the current match. Confidence - to add the value of the confidence feature defined at the <rule> element to this feature. The UIMA feature have to be of type uima.cas.Float. RuleId - to add the value of the ruleId feature defined at the <rule> element to this feature. The UIMA feature have to be of type uima.cas.String. Float and Integer based feature values are converted using the Java NumberFormat for the current Java default locale. If the feature value cannot be converted the feature value is not set and a warning is written to the log. To prevent these warnings it may be useful to do a custom normalization of the numbers before they are added to the feature.
Features Value Normalization Before assigning a feature value to an annotation it is possible to do a normalization on the feature value. This normalization can be useful for example to normalize a detected email addresses to lower case before it is added to the annotation. To normalize a feature value the normalization feature of the <setFeature> element is used. The built-in normalization functions are listed below. Additionally the RegexAnnotator provides an extension point that can be implemented to add a custom normalization. The possible build-in functions that are specified as feature value of the normalization feature are listed below: ToLowerCase - normalize the feature value to lower case before it is assigned to the annotation. ToUpperCase - normalize the feature value to upper case before it is assigned to the annotation. Trim - remove all leading and trailing whitespace characters from the feature value before it is assigned to the annotation. Built-in normalization configuration: $0]]> In case of a custom normalization, the normalization feature must have the value Custom, and an additional feature of the <setFeature> element called class have to be specified containing the full qualified class name of the custom normalization implementation. The custom normalization implementation have to implement the interface org.apache.uima.annotator.regex.extension.Normalization () which defines the normalize method to normalize the feature values. A sample implementation with the corresponding configuration is shown below. Custom normalization implementation: Custom normalization configuration: $0 ]]>
Annotator Descriptor The RegexAnnotator analysis engine descriptor contains some processing information for the annotator. The processing information is specified as configuration parameters. This chapter we explain in detail the possible descriptor settings.
Configuration Parameters The RegexAnnotator has the following configuration parameters: ConceptFiles - This parameter is modeled as array of Strings and contains the concept files the annotator should use. The concept files must be specified using a relative path that is available in the UIMA datapath or in the classpath. When you use the UIMA datapath, you can use wildcard expressions such as rules/*.rule. These kinds of wildcard expressions will not work when rule files are discovered via the classpath. ConceptFiles subdir/myConcepts.xml SampleConcept.xml ]]>
Capabilities In the capabilities section of the RegexAnnotator descriptor the input and output capabilities and the supported languages have to be defined. The input capabilities defined in the descriptor have to comply with the match types used in the concept rule file that is used. For example the uima.SentenceAnnotation used in the rule below have to be added to the input capability section in the RegexAnnotator descriptor. ]]> In the output section, all of the annotation types and features created by the RegexAnnotator have to be specified. These have to match the output types and features declared in the <annotation> elements of the concept file. For example the org.apache.uima.TestAnnot annotation and the org.apache.uima.TestAnnot:testFeature feature used below have to be added to the output capability section in the RegexAnnotator descriptor. $0 ]]> If there are any language dependent rules in the concept file the languages abbreviations have to be specified in the <languagesSupported>element. If there are no language dependent rules available you can specify x-unspecified as language. That means that the annotator can work on all languages. For the short examples used above the capabilities section in the RegexAnnotator descriptor looks like: uima.SentenceAnnotation org.apache.uima.TestAnnot org.apache.uima.TestAnnot:testFeature x-unspecified ]]>
Concept File Schema The concept file schema that is used to define the concept file looks like: ]]> Validation Interface Normalization Interface
uima-addons-2.3.1/RegularExpressionAnnotator/src/docbook/images/0000755000175000017500000000000011625126520024635 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/desc/0000755000175000017500000000000011625126522022101 5ustar drazzibdrazzibuima-addons-2.3.1/RegularExpressionAnnotator/desc/RegExAnnotator.xml0000644000175000017500000001276311625126522025534 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.regex.impl.RegExAnnotator RegExAnnotator Matches regular expressions in document text. ConceptFiles list of concept files to configure the annotator String true true ConceptFiles concepts.xml org.apache.uima.EmailAddress uima.tcas.Annotation localPart uima.cas.String domainPart uima.cas.String normalizedEmail uima.cas.String org.apache.uima.ISBNNumber uima.tcas.Annotation confidence uima.cas.Float org.apache.uima.MoneyAmount uima.tcas.Annotation amount uima.cas.Float amountText uima.cas.String currency uima.cas.String org.apache.uima.CreditCardNumber uima.tcas.Annotation confidence uima.cas.Float cardType uima.cas.String org.apache.uima.EmailAddress org.apache.uima.EmailAddress:localPart org.apache.uima.EmailAddress:domainPart org.apache.uima.EmailAddress:normalizedEmail org.apache.uima.ISBNNumber true true false uima-addons-2.3.1/SnowballAnnotator/0000755000175000017500000000000011625127606017267 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/pom.xml0000644000175000017500000001201511625126512020576 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent SnowballAnnotator 2.3.1 UIMA Annotator: ${project.artifactId} Annotator that annotates tokens using Snowball scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/SnowballAnnotator.xml org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.uima uimaj-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test uima-an-snowball org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/main/java/org/tartarus/snowball/ext/*Stemmer.java src/main/java/org/tartarus/snowball/Among.java src/main/java/org/tartarus/snowball/SnowballProgram.java src/main/java/org/tartarus/snowball/TestApp.java src/test/resources/englishRef.txt desc src/test/resources uima-addons-2.3.1/SnowballAnnotator/LICENSE.txt0000644000175000017500000003245311625126512021114 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ========================================================================================== For org.tartarus.snowball package: Snowball license (from http://snowball.tartarus.org/license.php): All the software given out on this Snowball site is covered by the BSD License (see http://www.opensource.org/licenses/bsd-license.html ), with Copyright (c) 2001, Dr Martin Porter, and (for the Java developments) Copyright (c) 2002, Richard Boulton. Copyright (c) , All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. uima-addons-2.3.1/SnowballAnnotator/lib/0000755000175000017500000000000011625126510020026 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/README.txt0000644000175000017500000000112111625126512020753 0ustar drazzibdrazzibApache UIMA SnowballAnnotator README file INTRODUCTION This project provides a version of the Snowball stemmers. The Snowball stemmers are licensed under the BSD License (see http://snowball.tartarus.org/license.php), with Copyright (c) 2001, Dr Martin Porter, and (for the Java developments) Copyright (c) 2002, Richard Boulton. The Snowball stemmers are used to build an UIMA analysis component based on the Apache UIMA framework. For more information on UIMA, see: http://incubator.apache.org/uima For more information on Snowball, see: http://snowball.tartarus.org/uima-addons-2.3.1/SnowballAnnotator/metadata/0000755000175000017500000000000011625126510021040 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/metadata/install.xml0000644000175000017500000000211411625126510023226 0ustar drazzibdrazzib uima-addons-2.3.1/SnowballAnnotator/marker-file-identifying-single-project0000644000175000017500000000000011625126512026623 0ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/marker-file-identifying-standard-pear0000644000175000017500000000000011625126512026423 0ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/marker-file-identifying-osgi-project0000644000175000017500000000000011625126512026303 0ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/NOTICE.txt0000644000175000017500000000072011625126512021003 0ustar drazzibdrazzibApache UIMA SnowballAnnotator software component Copyright 2006-2011 The Apache Software Foundation This Apache UIMA software component includes code that was developed at The Apache Software Foundation (http://www.apache.org/). This software includes the Snowball software from http://snowball.tartarus.org/. Copyright (c) 2001, Dr Martin Porter, and (for the Java developments) Copyright (c) 2002, Richard Boulton. Packages: org.tartarus.snowball uima-addons-2.3.1/SnowballAnnotator/src/0000755000175000017500000000000011625126512020051 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/0000755000175000017500000000000011625126512020775 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/java/0000755000175000017500000000000011625126512021716 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/java/org/0000755000175000017500000000000011625126512022505 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/java/org/apache/0000755000175000017500000000000011625126512023726 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/java/org/apache/uima/0000755000175000017500000000000011625126512024661 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/java/org/apache/uima/SentenceAnnotation_Type.java0000644000175000017500000000525211625126512032330 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Sep 02 14:47:15 EDT 2010 */ package org.apache.uima; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.jcas.tcas.Annotation_Type; /** sentence annotation * Updated by JCasGen Thu Sep 02 14:47:15 EDT 2010 * @generated */ public class SentenceAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (SentenceAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = SentenceAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new SentenceAnnotation(addr, SentenceAnnotation_Type.this); SentenceAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new SentenceAnnotation(addr, SentenceAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = SentenceAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.SentenceAnnotation"); /** initialize variables to correspond with Cas Type and Features * @generated */ public SentenceAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/apache/uima/TokenAnnotation_Type.java0000644000175000017500000000704411625126512031645 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Sep 02 14:47:15 EDT 2010 */ package org.apache.uima; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.Annotation_Type; /** Single token annotation * Updated by JCasGen Thu Sep 02 14:47:15 EDT 2010 * @generated */ public class TokenAnnotation_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (TokenAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = TokenAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new TokenAnnotation(addr, TokenAnnotation_Type.this); TokenAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new TokenAnnotation(addr, TokenAnnotation_Type.this); } }; /** @generated */ public final static int typeIndexID = TokenAnnotation.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.TokenAnnotation"); /** @generated */ final Feature casFeat_stem; /** @generated */ final int casFeatCode_stem; /** @generated */ public String getStem(int addr) { if (featOkTst && casFeat_stem == null) jcas.throwFeatMissing("stem", "org.apache.uima.TokenAnnotation"); return ll_cas.ll_getStringValue(addr, casFeatCode_stem); } /** @generated */ public void setStem(int addr, String v) { if (featOkTst && casFeat_stem == null) jcas.throwFeatMissing("stem", "org.apache.uima.TokenAnnotation"); ll_cas.ll_setStringValue(addr, casFeatCode_stem, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public TokenAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_stem = jcas.getRequiredFeatureDE(casType, "stem", "uima.cas.String", featOkTst); casFeatCode_stem = (null == casFeat_stem) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_stem).getCode(); } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/apache/uima/SentenceAnnotation.java0000644000175000017500000000453511625126512031332 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Sep 02 14:47:15 EDT 2010 */ package org.apache.uima; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** sentence annotation * Updated by JCasGen Thu Sep 02 14:47:15 EDT 2010 * XML source: D:/mavenAlign/sandbox-trunk-data/SnowballAnnotator/desc/SnowballAnnotator.xml * @generated */ public class SentenceAnnotation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(SentenceAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected SentenceAnnotation() {} /** Internal - constructor used by generator * @generated */ public SentenceAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public SentenceAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public SentenceAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/apache/uima/annotator/0000755000175000017500000000000011625126512026666 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/java/org/apache/uima/annotator/SnowballAnnotator.java0000644000175000017500000001226311625126512033204 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator; import java.lang.reflect.Method; import java.util.HashMap; import org.apache.uima.TokenAnnotation; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.text.Language; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.ext.danishStemmer; import org.tartarus.snowball.ext.dutchStemmer; import org.tartarus.snowball.ext.englishStemmer; import org.tartarus.snowball.ext.finnishStemmer; import org.tartarus.snowball.ext.frenchStemmer; import org.tartarus.snowball.ext.germanStemmer; import org.tartarus.snowball.ext.hungarianStemmer; import org.tartarus.snowball.ext.italianStemmer; import org.tartarus.snowball.ext.norwegianStemmer; import org.tartarus.snowball.ext.portugueseStemmer; import org.tartarus.snowball.ext.russianStemmer; import org.tartarus.snowball.ext.spanishStemmer; import org.tartarus.snowball.ext.swedishStemmer; public class SnowballAnnotator extends JCasAnnotator_ImplBase { private Logger logger; private HashMap stemmers; private static final Object[] emptyArgs = new Object[0]; public void process(JCas aJCas) throws AnalysisEngineProcessException { this.logger.log(Level.INFO, "Snowball annotator starts processing"); // get get stemmer for the document language String language = new Language(aJCas.getDocumentLanguage()).getLanguagePart(); SnowballProgram stemmer = this.stemmers.get(language); // create stemms if stemmer for the current document language is available if (stemmer != null) { // get stem() method from stemmer Method stemmerStemMethod; try { stemmerStemMethod = stemmer.getClass().getMethod("stem", new Class[0]); } catch (Exception ex) { throw new AnalysisEngineProcessException(ex); } // iterate over all token annotations and add stem if available FSIterator tokenIterator = aJCas.getAnnotationIndex(TokenAnnotation.type).iterator(); while (tokenIterator.hasNext()) { // get token content TokenAnnotation annot = (TokenAnnotation) tokenIterator.next(); String span = annot.getCoveredText(); // set annotation content and call stemmer try { stemmer.setCurrent(span); stemmerStemMethod.invoke(stemmer, emptyArgs); } catch (Exception ex) { throw new AnalysisEngineProcessException(ex); } // get stemmer result and set annotation feature annot.setStem(stemmer.getCurrent()); } } else { if (language.equals("x")) { this.logger.log(Level.WARNING, "Language of the CAS is set to 'x', SnowballAnnotator skipped processing."); } } this.logger.log(Level.INFO, "Snowball annotator processing finished"); } @Override public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); // initialize logger try { this.logger = aContext.getLogger(); // initialize stemmers this.stemmers = new HashMap(); this.stemmers.put("da", new danishStemmer()); this.stemmers.put("nl", new dutchStemmer()); this.stemmers.put("en", new englishStemmer()); this.stemmers.put("fi", new finnishStemmer()); this.stemmers.put("fr", new frenchStemmer()); this.stemmers.put("de", new germanStemmer()); this.stemmers.put("hu", new hungarianStemmer()); this.stemmers.put("it", new italianStemmer()); this.stemmers.put("no", new norwegianStemmer()); this.stemmers.put("pt", new portugueseStemmer()); this.stemmers.put("ru", new russianStemmer()); this.stemmers.put("es", new spanishStemmer()); this.stemmers.put("sw", new swedishStemmer()); } catch (Exception ex) { throw new ResourceInitializationException(ex); } this.logger.log(Level.INFO, "Snowball annotator successfully initialized"); } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/apache/uima/TokenAnnotation.java0000644000175000017500000000616611625126512030650 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Sep 02 14:47:15 EDT 2010 */ package org.apache.uima; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** Single token annotation * Updated by JCasGen Thu Sep 02 14:47:15 EDT 2010 * XML source: D:/mavenAlign/sandbox-trunk-data/SnowballAnnotator/desc/SnowballAnnotator.xml * @generated */ public class TokenAnnotation extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(TokenAnnotation.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected TokenAnnotation() {} /** Internal - constructor used by generator * @generated */ public TokenAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public TokenAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public TokenAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: stem /** getter for stem - gets stem * @generated */ public String getStem() { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type)jcasType).casFeat_stem == null) jcasType.jcas.throwFeatMissing("stem", "org.apache.uima.TokenAnnotation"); return jcasType.ll_cas.ll_getStringValue(addr, ((TokenAnnotation_Type)jcasType).casFeatCode_stem);} /** setter for stem - sets stem * @generated */ public void setStem(String v) { if (TokenAnnotation_Type.featOkTst && ((TokenAnnotation_Type)jcasType).casFeat_stem == null) jcasType.jcas.throwFeatMissing("stem", "org.apache.uima.TokenAnnotation"); jcasType.ll_cas.ll_setStringValue(addr, ((TokenAnnotation_Type)jcasType).casFeatCode_stem, v);} } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/0000755000175000017500000000000011625126512024352 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/0000755000175000017500000000000011625126512026173 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/SnowballProgram.java0000644000175000017500000002354211625126512032155 0ustar drazzibdrazzib package org.tartarus.snowball; import java.lang.reflect.InvocationTargetException; public class SnowballProgram { protected SnowballProgram() { current = new StringBuffer(); setCurrent(""); } /** * Set the current string. */ public void setCurrent(String value) { current.replace(0, current.length(), value); cursor = 0; limit = current.length(); limit_backward = 0; bra = cursor; ket = limit; } /** * Get the current string. */ public String getCurrent() { String result = current.toString(); // Make a new StringBuffer. If we reuse the old one, and a user of // the library keeps a reference to the buffer returned (for example, // by converting it to a String in a way which doesn't force a copy), // the buffer size will not decrease, and we will risk wasting a large // amount of memory. // Thanks to Wolfram Esser for spotting this problem. current = new StringBuffer(); return result; } // current string protected StringBuffer current; protected int cursor; protected int limit; protected int limit_backward; protected int bra; protected int ket; protected void copy_from(SnowballProgram other) { current = other.current; cursor = other.cursor; limit = other.limit; limit_backward = other.limit_backward; bra = other.bra; ket = other.ket; } protected boolean in_grouping(char [] s, int min, int max) { if (cursor >= limit) return false; char ch = current.charAt(cursor); if (ch > max || ch < min) return false; ch -= min; if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false; cursor++; return true; } protected boolean in_grouping_b(char [] s, int min, int max) { if (cursor <= limit_backward) return false; char ch = current.charAt(cursor - 1); if (ch > max || ch < min) return false; ch -= min; if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false; cursor--; return true; } protected boolean out_grouping(char [] s, int min, int max) { if (cursor >= limit) return false; char ch = current.charAt(cursor); if (ch > max || ch < min) { cursor++; return true; } ch -= min; if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) { cursor ++; return true; } return false; } protected boolean out_grouping_b(char [] s, int min, int max) { if (cursor <= limit_backward) return false; char ch = current.charAt(cursor - 1); if (ch > max || ch < min) { cursor--; return true; } ch -= min; if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) { cursor--; return true; } return false; } protected boolean in_range(int min, int max) { if (cursor >= limit) return false; char ch = current.charAt(cursor); if (ch > max || ch < min) return false; cursor++; return true; } protected boolean in_range_b(int min, int max) { if (cursor <= limit_backward) return false; char ch = current.charAt(cursor - 1); if (ch > max || ch < min) return false; cursor--; return true; } protected boolean out_range(int min, int max) { if (cursor >= limit) return false; char ch = current.charAt(cursor); if (!(ch > max || ch < min)) return false; cursor++; return true; } protected boolean out_range_b(int min, int max) { if (cursor <= limit_backward) return false; char ch = current.charAt(cursor - 1); if(!(ch > max || ch < min)) return false; cursor--; return true; } protected boolean eq_s(int s_size, String s) { if (limit - cursor < s_size) return false; int i; for (i = 0; i != s_size; i++) { if (current.charAt(cursor + i) != s.charAt(i)) return false; } cursor += s_size; return true; } protected boolean eq_s_b(int s_size, String s) { if (cursor - limit_backward < s_size) return false; int i; for (i = 0; i != s_size; i++) { if (current.charAt(cursor - s_size + i) != s.charAt(i)) return false; } cursor -= s_size; return true; } protected boolean eq_v(StringBuffer s) { return eq_s(s.length(), s.toString()); } protected boolean eq_v_b(StringBuffer s) { return eq_s_b(s.length(), s.toString()); } protected int find_among(Among v[], int v_size) { int i = 0; int j = v_size; int c = cursor; int l = limit; int common_i = 0; int common_j = 0; boolean first_key_inspected = false; while(true) { int k = i + ((j - i) >> 1); int diff = 0; int common = common_i < common_j ? common_i : common_j; // smaller Among w = v[k]; int i2; for (i2 = common; i2 < w.s_size; i2++) { if (c + common == l) { diff = -1; break; } diff = current.charAt(c + common) - w.s.charAt(i2); if (diff != 0) break; common++; } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) break; // v->s has been inspected if (j == i) break; // only one item in v // - but now we need to go round once more to get // v->s inspected. This looks messy, but is actually // the optimal approach. if (first_key_inspected) break; first_key_inspected = true; } } while(true) { Among w = v[i]; if (common_i >= w.s_size) { cursor = c + w.s_size; if (w.method == null) return w.result; boolean res; try { Object resobj = w.method.invoke(w.methodobject, new Object[0]); res = resobj.toString().equals("true"); } catch (InvocationTargetException e) { res = false; // FIXME - debug message } catch (IllegalAccessException e) { res = false; // FIXME - debug message } cursor = c + w.s_size; if (res) return w.result; } i = w.substring_i; if (i < 0) return 0; } } // find_among_b is for backwards processing. Same comments apply protected int find_among_b(Among v[], int v_size) { int i = 0; int j = v_size; int c = cursor; int lb = limit_backward; int common_i = 0; int common_j = 0; boolean first_key_inspected = false; while(true) { int k = i + ((j - i) >> 1); int diff = 0; int common = common_i < common_j ? common_i : common_j; Among w = v[k]; int i2; for (i2 = w.s_size - 1 - common; i2 >= 0; i2--) { if (c - common == lb) { diff = -1; break; } diff = current.charAt(c - 1 - common) - w.s.charAt(i2); if (diff != 0) break; common++; } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) break; if (j == i) break; if (first_key_inspected) break; first_key_inspected = true; } } while(true) { Among w = v[i]; if (common_i >= w.s_size) { cursor = c - w.s_size; if (w.method == null) return w.result; boolean res; try { Object resobj = w.method.invoke(w.methodobject, new Object[0]); res = resobj.toString().equals("true"); } catch (InvocationTargetException e) { res = false; // FIXME - debug message } catch (IllegalAccessException e) { res = false; // FIXME - debug message } cursor = c - w.s_size; if (res) return w.result; } i = w.substring_i; if (i < 0) return 0; } } /* to replace chars between c_bra and c_ket in current by the * chars in s. */ protected int replace_s(int c_bra, int c_ket, String s) { int adjustment = s.length() - (c_ket - c_bra); current.replace(c_bra, c_ket, s); limit += adjustment; if (cursor >= c_ket) cursor += adjustment; else if (cursor > c_bra) cursor = c_bra; return adjustment; } protected void slice_check() { if (bra < 0 || bra > ket || ket > limit || limit > current.length()) // this line could be removed { System.err.println("faulty slice operation"); // FIXME: report error somehow. /* fprintf(stderr, "faulty slice operation:\n"); debug(z, -1, 0); exit(1); */ } } protected void slice_from(String s) { slice_check(); replace_s(bra, ket, s); } protected void slice_from(StringBuffer s) { slice_from(s.toString()); } protected void slice_del() { slice_from(""); } protected void insert(int c_bra, int c_ket, String s) { int adjustment = replace_s(c_bra, c_ket, s); if (c_bra <= bra) bra += adjustment; if (c_bra <= ket) ket += adjustment; } protected void insert(int c_bra, int c_ket, StringBuffer s) { insert(c_bra, c_ket, s.toString()); } /* Copy the slice into the supplied StringBuffer */ protected StringBuffer slice_to(StringBuffer s) { slice_check(); int len = ket - bra; s.replace(0, s.length(), current.substring(bra, ket)); return s; } protected StringBuffer assign_to(StringBuffer s) { s.replace(0, s.length(), current.substring(0, limit)); return s; } /* extern void debug(struct SN_env * z, int number, int line_count) { int i; int limit = SIZE(z->p); //if (number >= 0) printf("%3d (line %4d): '", number, line_count); if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit); for (i = 0; i <= limit; i++) { if (z->lb == i) printf("{"); if (z->bra == i) printf("["); if (z->c == i) printf("|"); if (z->ket == i) printf("]"); if (z->l == i) printf("}"); if (i < limit) { int ch = z->p[i]; if (ch == 0) ch = '#'; printf("%c", ch); } } printf("'\n"); } */ }; uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/0000755000175000017500000000000011625126512026773 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/portugueseStemmer.java0000644000175000017500000012172611625126512033406 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class portugueseStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "", -1, 3, "", this), new Among ( "\u00E3", 0, 1, "", this), new Among ( "\u00F5", 0, 2, "", this) }; private Among a_1[] = { new Among ( "", -1, 3, "", this), new Among ( "a~", 0, 1, "", this), new Among ( "o~", 0, 2, "", this) }; private Among a_2[] = { new Among ( "ic", -1, -1, "", this), new Among ( "ad", -1, -1, "", this), new Among ( "os", -1, -1, "", this), new Among ( "iv", -1, 1, "", this) }; private Among a_3[] = { new Among ( "ante", -1, 1, "", this), new Among ( "avel", -1, 1, "", this), new Among ( "\u00EDvel", -1, 1, "", this) }; private Among a_4[] = { new Among ( "ic", -1, 1, "", this), new Among ( "abil", -1, 1, "", this), new Among ( "iv", -1, 1, "", this) }; private Among a_5[] = { new Among ( "ica", -1, 1, "", this), new Among ( "\u00E2ncia", -1, 1, "", this), new Among ( "\u00EAncia", -1, 4, "", this), new Among ( "ira", -1, 9, "", this), new Among ( "adora", -1, 1, "", this), new Among ( "osa", -1, 1, "", this), new Among ( "ista", -1, 1, "", this), new Among ( "iva", -1, 8, "", this), new Among ( "eza", -1, 1, "", this), new Among ( "log\u00EDa", -1, 2, "", this), new Among ( "idade", -1, 7, "", this), new Among ( "ante", -1, 1, "", this), new Among ( "mente", -1, 6, "", this), new Among ( "amente", 12, 5, "", this), new Among ( "\u00E1vel", -1, 1, "", this), new Among ( "\u00EDvel", -1, 1, "", this), new Among ( "uci\u00F3n", -1, 3, "", this), new Among ( "ico", -1, 1, "", this), new Among ( "ismo", -1, 1, "", this), new Among ( "oso", -1, 1, "", this), new Among ( "amento", -1, 1, "", this), new Among ( "imento", -1, 1, "", this), new Among ( "ivo", -1, 8, "", this), new Among ( "a\u00E7a~o", -1, 1, "", this), new Among ( "ador", -1, 1, "", this), new Among ( "icas", -1, 1, "", this), new Among ( "\u00EAncias", -1, 4, "", this), new Among ( "iras", -1, 9, "", this), new Among ( "adoras", -1, 1, "", this), new Among ( "osas", -1, 1, "", this), new Among ( "istas", -1, 1, "", this), new Among ( "ivas", -1, 8, "", this), new Among ( "ezas", -1, 1, "", this), new Among ( "log\u00EDas", -1, 2, "", this), new Among ( "idades", -1, 7, "", this), new Among ( "uciones", -1, 3, "", this), new Among ( "adores", -1, 1, "", this), new Among ( "antes", -1, 1, "", this), new Among ( "a\u00E7o~es", -1, 1, "", this), new Among ( "icos", -1, 1, "", this), new Among ( "ismos", -1, 1, "", this), new Among ( "osos", -1, 1, "", this), new Among ( "amentos", -1, 1, "", this), new Among ( "imentos", -1, 1, "", this), new Among ( "ivos", -1, 8, "", this) }; private Among a_6[] = { new Among ( "ada", -1, 1, "", this), new Among ( "ida", -1, 1, "", this), new Among ( "ia", -1, 1, "", this), new Among ( "aria", 2, 1, "", this), new Among ( "eria", 2, 1, "", this), new Among ( "iria", 2, 1, "", this), new Among ( "ara", -1, 1, "", this), new Among ( "era", -1, 1, "", this), new Among ( "ira", -1, 1, "", this), new Among ( "ava", -1, 1, "", this), new Among ( "asse", -1, 1, "", this), new Among ( "esse", -1, 1, "", this), new Among ( "isse", -1, 1, "", this), new Among ( "aste", -1, 1, "", this), new Among ( "este", -1, 1, "", this), new Among ( "iste", -1, 1, "", this), new Among ( "ei", -1, 1, "", this), new Among ( "arei", 16, 1, "", this), new Among ( "erei", 16, 1, "", this), new Among ( "irei", 16, 1, "", this), new Among ( "am", -1, 1, "", this), new Among ( "iam", 20, 1, "", this), new Among ( "ariam", 21, 1, "", this), new Among ( "eriam", 21, 1, "", this), new Among ( "iriam", 21, 1, "", this), new Among ( "aram", 20, 1, "", this), new Among ( "eram", 20, 1, "", this), new Among ( "iram", 20, 1, "", this), new Among ( "avam", 20, 1, "", this), new Among ( "em", -1, 1, "", this), new Among ( "arem", 29, 1, "", this), new Among ( "erem", 29, 1, "", this), new Among ( "irem", 29, 1, "", this), new Among ( "assem", 29, 1, "", this), new Among ( "essem", 29, 1, "", this), new Among ( "issem", 29, 1, "", this), new Among ( "ado", -1, 1, "", this), new Among ( "ido", -1, 1, "", this), new Among ( "ando", -1, 1, "", this), new Among ( "endo", -1, 1, "", this), new Among ( "indo", -1, 1, "", this), new Among ( "ara~o", -1, 1, "", this), new Among ( "era~o", -1, 1, "", this), new Among ( "ira~o", -1, 1, "", this), new Among ( "ar", -1, 1, "", this), new Among ( "er", -1, 1, "", this), new Among ( "ir", -1, 1, "", this), new Among ( "as", -1, 1, "", this), new Among ( "adas", 47, 1, "", this), new Among ( "idas", 47, 1, "", this), new Among ( "ias", 47, 1, "", this), new Among ( "arias", 50, 1, "", this), new Among ( "erias", 50, 1, "", this), new Among ( "irias", 50, 1, "", this), new Among ( "aras", 47, 1, "", this), new Among ( "eras", 47, 1, "", this), new Among ( "iras", 47, 1, "", this), new Among ( "avas", 47, 1, "", this), new Among ( "es", -1, 1, "", this), new Among ( "ardes", 58, 1, "", this), new Among ( "erdes", 58, 1, "", this), new Among ( "irdes", 58, 1, "", this), new Among ( "ares", 58, 1, "", this), new Among ( "eres", 58, 1, "", this), new Among ( "ires", 58, 1, "", this), new Among ( "asses", 58, 1, "", this), new Among ( "esses", 58, 1, "", this), new Among ( "isses", 58, 1, "", this), new Among ( "astes", 58, 1, "", this), new Among ( "estes", 58, 1, "", this), new Among ( "istes", 58, 1, "", this), new Among ( "is", -1, 1, "", this), new Among ( "ais", 71, 1, "", this), new Among ( "eis", 71, 1, "", this), new Among ( "areis", 73, 1, "", this), new Among ( "ereis", 73, 1, "", this), new Among ( "ireis", 73, 1, "", this), new Among ( "\u00E1reis", 73, 1, "", this), new Among ( "\u00E9reis", 73, 1, "", this), new Among ( "\u00EDreis", 73, 1, "", this), new Among ( "\u00E1sseis", 73, 1, "", this), new Among ( "\u00E9sseis", 73, 1, "", this), new Among ( "\u00EDsseis", 73, 1, "", this), new Among ( "\u00E1veis", 73, 1, "", this), new Among ( "\u00EDeis", 73, 1, "", this), new Among ( "ar\u00EDeis", 84, 1, "", this), new Among ( "er\u00EDeis", 84, 1, "", this), new Among ( "ir\u00EDeis", 84, 1, "", this), new Among ( "ados", -1, 1, "", this), new Among ( "idos", -1, 1, "", this), new Among ( "amos", -1, 1, "", this), new Among ( "\u00E1ramos", 90, 1, "", this), new Among ( "\u00E9ramos", 90, 1, "", this), new Among ( "\u00EDramos", 90, 1, "", this), new Among ( "\u00E1vamos", 90, 1, "", this), new Among ( "\u00EDamos", 90, 1, "", this), new Among ( "ar\u00EDamos", 95, 1, "", this), new Among ( "er\u00EDamos", 95, 1, "", this), new Among ( "ir\u00EDamos", 95, 1, "", this), new Among ( "emos", -1, 1, "", this), new Among ( "aremos", 99, 1, "", this), new Among ( "eremos", 99, 1, "", this), new Among ( "iremos", 99, 1, "", this), new Among ( "\u00E1ssemos", 99, 1, "", this), new Among ( "\u00EAssemos", 99, 1, "", this), new Among ( "\u00EDssemos", 99, 1, "", this), new Among ( "imos", -1, 1, "", this), new Among ( "armos", -1, 1, "", this), new Among ( "ermos", -1, 1, "", this), new Among ( "irmos", -1, 1, "", this), new Among ( "\u00E1mos", -1, 1, "", this), new Among ( "ar\u00E1s", -1, 1, "", this), new Among ( "er\u00E1s", -1, 1, "", this), new Among ( "ir\u00E1s", -1, 1, "", this), new Among ( "eu", -1, 1, "", this), new Among ( "iu", -1, 1, "", this), new Among ( "ou", -1, 1, "", this), new Among ( "ar\u00E1", -1, 1, "", this), new Among ( "er\u00E1", -1, 1, "", this), new Among ( "ir\u00E1", -1, 1, "", this) }; private Among a_7[] = { new Among ( "a", -1, 1, "", this), new Among ( "i", -1, 1, "", this), new Among ( "o", -1, 1, "", this), new Among ( "os", -1, 1, "", this), new Among ( "\u00E1", -1, 1, "", this), new Among ( "\u00ED", -1, 1, "", this), new Among ( "\u00F3", -1, 1, "", this) }; private Among a_8[] = { new Among ( "e", -1, 1, "", this), new Among ( "\u00E7", -1, 2, "", this), new Among ( "\u00E9", -1, 1, "", this), new Among ( "\u00EA", -1, 1, "", this) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 }; private int I_p2; private int I_p1; private int I_pV; private void copy_from(portugueseStemmer other) { I_p2 = other.I_p2; I_p1 = other.I_p1; I_pV = other.I_pV; super.copy_from(other); } private boolean r_prelude() { int among_var; int v_1; // repeat, line 36 replab0: while(true) { v_1 = cursor; lab1: do { // (, line 36 // [, line 37 bra = cursor; // substring, line 37 among_var = find_among(a_0, 3); if (among_var == 0) { break lab1; } // ], line 37 ket = cursor; switch(among_var) { case 0: break lab1; case 1: // (, line 38 // <-, line 38 slice_from("a~"); break; case 2: // (, line 39 // <-, line 39 slice_from("o~"); break; case 3: // (, line 40 // next, line 40 if (cursor >= limit) { break lab1; } cursor++; break; } continue replab0; } while (false); cursor = v_1; break replab0; } return true; } private boolean r_mark_regions() { int v_1; int v_2; int v_3; int v_6; int v_8; // (, line 44 I_pV = limit; I_p1 = limit; I_p2 = limit; // do, line 50 v_1 = cursor; lab0: do { // (, line 50 // or, line 52 lab1: do { v_2 = cursor; lab2: do { // (, line 51 if (!(in_grouping(g_v, 97, 250))) { break lab2; } // or, line 51 lab3: do { v_3 = cursor; lab4: do { // (, line 51 if (!(out_grouping(g_v, 97, 250))) { break lab4; } // gopast, line 51 golab5: while(true) { lab6: do { if (!(in_grouping(g_v, 97, 250))) { break lab6; } break golab5; } while (false); if (cursor >= limit) { break lab4; } cursor++; } break lab3; } while (false); cursor = v_3; // (, line 51 if (!(in_grouping(g_v, 97, 250))) { break lab2; } // gopast, line 51 golab7: while(true) { lab8: do { if (!(out_grouping(g_v, 97, 250))) { break lab8; } break golab7; } while (false); if (cursor >= limit) { break lab2; } cursor++; } } while (false); break lab1; } while (false); cursor = v_2; // (, line 53 if (!(out_grouping(g_v, 97, 250))) { break lab0; } // or, line 53 lab9: do { v_6 = cursor; lab10: do { // (, line 53 if (!(out_grouping(g_v, 97, 250))) { break lab10; } // gopast, line 53 golab11: while(true) { lab12: do { if (!(in_grouping(g_v, 97, 250))) { break lab12; } break golab11; } while (false); if (cursor >= limit) { break lab10; } cursor++; } break lab9; } while (false); cursor = v_6; // (, line 53 if (!(in_grouping(g_v, 97, 250))) { break lab0; } // next, line 53 if (cursor >= limit) { break lab0; } cursor++; } while (false); } while (false); // setmark pV, line 54 I_pV = cursor; } while (false); cursor = v_1; // do, line 56 v_8 = cursor; lab13: do { // (, line 56 // gopast, line 57 golab14: while(true) { lab15: do { if (!(in_grouping(g_v, 97, 250))) { break lab15; } break golab14; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // gopast, line 57 golab16: while(true) { lab17: do { if (!(out_grouping(g_v, 97, 250))) { break lab17; } break golab16; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // setmark p1, line 57 I_p1 = cursor; // gopast, line 58 golab18: while(true) { lab19: do { if (!(in_grouping(g_v, 97, 250))) { break lab19; } break golab18; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // gopast, line 58 golab20: while(true) { lab21: do { if (!(out_grouping(g_v, 97, 250))) { break lab21; } break golab20; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // setmark p2, line 58 I_p2 = cursor; } while (false); cursor = v_8; return true; } private boolean r_postlude() { int among_var; int v_1; // repeat, line 62 replab0: while(true) { v_1 = cursor; lab1: do { // (, line 62 // [, line 63 bra = cursor; // substring, line 63 among_var = find_among(a_1, 3); if (among_var == 0) { break lab1; } // ], line 63 ket = cursor; switch(among_var) { case 0: break lab1; case 1: // (, line 64 // <-, line 64 slice_from("\u00E3"); break; case 2: // (, line 65 // <-, line 65 slice_from("\u00F5"); break; case 3: // (, line 66 // next, line 66 if (cursor >= limit) { break lab1; } cursor++; break; } continue replab0; } while (false); cursor = v_1; break replab0; } return true; } private boolean r_RV() { if (!(I_pV <= cursor)) { return false; } return true; } private boolean r_R1() { if (!(I_p1 <= cursor)) { return false; } return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_standard_suffix() { int among_var; int v_1; int v_2; int v_3; int v_4; // (, line 76 // [, line 77 ket = cursor; // substring, line 77 among_var = find_among_b(a_5, 45); if (among_var == 0) { return false; } // ], line 77 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 92 // call R2, line 93 if (!r_R2()) { return false; } // delete, line 93 slice_del(); break; case 2: // (, line 97 // call R2, line 98 if (!r_R2()) { return false; } // <-, line 98 slice_from("log"); break; case 3: // (, line 101 // call R2, line 102 if (!r_R2()) { return false; } // <-, line 102 slice_from("u"); break; case 4: // (, line 105 // call R2, line 106 if (!r_R2()) { return false; } // <-, line 106 slice_from("ente"); break; case 5: // (, line 109 // call R1, line 110 if (!r_R1()) { return false; } // delete, line 110 slice_del(); // try, line 111 v_1 = limit - cursor; lab0: do { // (, line 111 // [, line 112 ket = cursor; // substring, line 112 among_var = find_among_b(a_2, 4); if (among_var == 0) { cursor = limit - v_1; break lab0; } // ], line 112 bra = cursor; // call R2, line 112 if (!r_R2()) { cursor = limit - v_1; break lab0; } // delete, line 112 slice_del(); switch(among_var) { case 0: cursor = limit - v_1; break lab0; case 1: // (, line 113 // [, line 113 ket = cursor; // literal, line 113 if (!(eq_s_b(2, "at"))) { cursor = limit - v_1; break lab0; } // ], line 113 bra = cursor; // call R2, line 113 if (!r_R2()) { cursor = limit - v_1; break lab0; } // delete, line 113 slice_del(); break; } } while (false); break; case 6: // (, line 121 // call R2, line 122 if (!r_R2()) { return false; } // delete, line 122 slice_del(); // try, line 123 v_2 = limit - cursor; lab1: do { // (, line 123 // [, line 124 ket = cursor; // substring, line 124 among_var = find_among_b(a_3, 3); if (among_var == 0) { cursor = limit - v_2; break lab1; } // ], line 124 bra = cursor; switch(among_var) { case 0: cursor = limit - v_2; break lab1; case 1: // (, line 127 // call R2, line 127 if (!r_R2()) { cursor = limit - v_2; break lab1; } // delete, line 127 slice_del(); break; } } while (false); break; case 7: // (, line 133 // call R2, line 134 if (!r_R2()) { return false; } // delete, line 134 slice_del(); // try, line 135 v_3 = limit - cursor; lab2: do { // (, line 135 // [, line 136 ket = cursor; // substring, line 136 among_var = find_among_b(a_4, 3); if (among_var == 0) { cursor = limit - v_3; break lab2; } // ], line 136 bra = cursor; switch(among_var) { case 0: cursor = limit - v_3; break lab2; case 1: // (, line 139 // call R2, line 139 if (!r_R2()) { cursor = limit - v_3; break lab2; } // delete, line 139 slice_del(); break; } } while (false); break; case 8: // (, line 145 // call R2, line 146 if (!r_R2()) { return false; } // delete, line 146 slice_del(); // try, line 147 v_4 = limit - cursor; lab3: do { // (, line 147 // [, line 148 ket = cursor; // literal, line 148 if (!(eq_s_b(2, "at"))) { cursor = limit - v_4; break lab3; } // ], line 148 bra = cursor; // call R2, line 148 if (!r_R2()) { cursor = limit - v_4; break lab3; } // delete, line 148 slice_del(); } while (false); break; case 9: // (, line 152 // call RV, line 153 if (!r_RV()) { return false; } // literal, line 153 if (!(eq_s_b(1, "e"))) { return false; } // <-, line 154 slice_from("ir"); break; } return true; } private boolean r_verb_suffix() { int among_var; int v_1; int v_2; // setlimit, line 159 v_1 = limit - cursor; // tomark, line 159 if (cursor < I_pV) { return false; } cursor = I_pV; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 159 // [, line 160 ket = cursor; // substring, line 160 among_var = find_among_b(a_6, 120); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 160 bra = cursor; switch(among_var) { case 0: limit_backward = v_2; return false; case 1: // (, line 179 // delete, line 179 slice_del(); break; } limit_backward = v_2; return true; } private boolean r_residual_suffix() { int among_var; // (, line 183 // [, line 184 ket = cursor; // substring, line 184 among_var = find_among_b(a_7, 7); if (among_var == 0) { return false; } // ], line 184 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 187 // call RV, line 187 if (!r_RV()) { return false; } // delete, line 187 slice_del(); break; } return true; } private boolean r_residual_form() { int among_var; int v_1; int v_2; int v_3; // (, line 191 // [, line 192 ket = cursor; // substring, line 192 among_var = find_among_b(a_8, 4); if (among_var == 0) { return false; } // ], line 192 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 194 // call RV, line 194 if (!r_RV()) { return false; } // delete, line 194 slice_del(); // [, line 194 ket = cursor; // or, line 194 lab0: do { v_1 = limit - cursor; lab1: do { // (, line 194 // literal, line 194 if (!(eq_s_b(1, "u"))) { break lab1; } // ], line 194 bra = cursor; // test, line 194 v_2 = limit - cursor; // literal, line 194 if (!(eq_s_b(1, "g"))) { break lab1; } cursor = limit - v_2; break lab0; } while (false); cursor = limit - v_1; // (, line 195 // literal, line 195 if (!(eq_s_b(1, "i"))) { return false; } // ], line 195 bra = cursor; // test, line 195 v_3 = limit - cursor; // literal, line 195 if (!(eq_s_b(1, "c"))) { return false; } cursor = limit - v_3; } while (false); // call RV, line 195 if (!r_RV()) { return false; } // delete, line 195 slice_del(); break; case 2: // (, line 196 // <-, line 196 slice_from("c"); break; } return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; int v_10; // (, line 201 // do, line 202 v_1 = cursor; lab0: do { // call prelude, line 202 if (!r_prelude()) { break lab0; } } while (false); cursor = v_1; // do, line 203 v_2 = cursor; lab1: do { // call mark_regions, line 203 if (!r_mark_regions()) { break lab1; } } while (false); cursor = v_2; // backwards, line 204 limit_backward = cursor; cursor = limit; // (, line 204 // do, line 205 v_3 = limit - cursor; lab2: do { // (, line 205 // or, line 209 lab3: do { v_4 = limit - cursor; lab4: do { // (, line 206 // and, line 207 v_5 = limit - cursor; // (, line 206 // or, line 206 lab5: do { v_6 = limit - cursor; lab6: do { // call standard_suffix, line 206 if (!r_standard_suffix()) { break lab6; } break lab5; } while (false); cursor = limit - v_6; // call verb_suffix, line 206 if (!r_verb_suffix()) { break lab4; } } while (false); cursor = limit - v_5; // do, line 207 v_7 = limit - cursor; lab7: do { // (, line 207 // [, line 207 ket = cursor; // literal, line 207 if (!(eq_s_b(1, "i"))) { break lab7; } // ], line 207 bra = cursor; // test, line 207 v_8 = limit - cursor; // literal, line 207 if (!(eq_s_b(1, "c"))) { break lab7; } cursor = limit - v_8; // call RV, line 207 if (!r_RV()) { break lab7; } // delete, line 207 slice_del(); } while (false); cursor = limit - v_7; break lab3; } while (false); cursor = limit - v_4; // call residual_suffix, line 209 if (!r_residual_suffix()) { break lab2; } } while (false); } while (false); cursor = limit - v_3; // do, line 211 v_9 = limit - cursor; lab8: do { // call residual_form, line 211 if (!r_residual_form()) { break lab8; } } while (false); cursor = limit - v_9; cursor = limit_backward; // do, line 213 v_10 = cursor; lab9: do { // call postlude, line 213 if (!r_postlude()) { break lab9; } } while (false); cursor = v_10; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/swedishStemmer.java0000644000175000017500000002545411625126512032653 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class swedishStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "a", -1, 1, "", this), new Among ( "arna", 0, 1, "", this), new Among ( "erna", 0, 1, "", this), new Among ( "heterna", 2, 1, "", this), new Among ( "orna", 0, 1, "", this), new Among ( "ad", -1, 1, "", this), new Among ( "e", -1, 1, "", this), new Among ( "ade", 6, 1, "", this), new Among ( "ande", 6, 1, "", this), new Among ( "arne", 6, 1, "", this), new Among ( "are", 6, 1, "", this), new Among ( "aste", 6, 1, "", this), new Among ( "en", -1, 1, "", this), new Among ( "anden", 12, 1, "", this), new Among ( "aren", 12, 1, "", this), new Among ( "heten", 12, 1, "", this), new Among ( "ern", -1, 1, "", this), new Among ( "ar", -1, 1, "", this), new Among ( "er", -1, 1, "", this), new Among ( "heter", 18, 1, "", this), new Among ( "or", -1, 1, "", this), new Among ( "s", -1, 2, "", this), new Among ( "as", 21, 1, "", this), new Among ( "arnas", 22, 1, "", this), new Among ( "ernas", 22, 1, "", this), new Among ( "ornas", 22, 1, "", this), new Among ( "es", 21, 1, "", this), new Among ( "ades", 26, 1, "", this), new Among ( "andes", 26, 1, "", this), new Among ( "ens", 21, 1, "", this), new Among ( "arens", 29, 1, "", this), new Among ( "hetens", 29, 1, "", this), new Among ( "erns", 21, 1, "", this), new Among ( "at", -1, 1, "", this), new Among ( "andet", -1, 1, "", this), new Among ( "het", -1, 1, "", this), new Among ( "ast", -1, 1, "", this) }; private Among a_1[] = { new Among ( "dd", -1, -1, "", this), new Among ( "gd", -1, -1, "", this), new Among ( "nn", -1, -1, "", this), new Among ( "dt", -1, -1, "", this), new Among ( "gt", -1, -1, "", this), new Among ( "kt", -1, -1, "", this), new Among ( "tt", -1, -1, "", this) }; private Among a_2[] = { new Among ( "ig", -1, 1, "", this), new Among ( "lig", 0, 1, "", this), new Among ( "els", -1, 1, "", this), new Among ( "fullt", -1, 3, "", this), new Among ( "l\u00F6st", -1, 2, "", this) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 }; private static final char g_s_ending[] = {119, 127, 149 }; private int I_x; private int I_p1; private void copy_from(swedishStemmer other) { I_x = other.I_x; I_p1 = other.I_p1; super.copy_from(other); } private boolean r_mark_regions() { int v_1; int v_2; // (, line 26 I_p1 = limit; // test, line 29 v_1 = cursor; // (, line 29 // hop, line 29 { int c = cursor + 3; if (0 > c || c > limit) { return false; } cursor = c; } // setmark x, line 29 I_x = cursor; cursor = v_1; // goto, line 30 golab0: while(true) { v_2 = cursor; lab1: do { if (!(in_grouping(g_v, 97, 246))) { break lab1; } cursor = v_2; break golab0; } while (false); cursor = v_2; if (cursor >= limit) { return false; } cursor++; } // gopast, line 30 golab2: while(true) { lab3: do { if (!(out_grouping(g_v, 97, 246))) { break lab3; } break golab2; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p1, line 30 I_p1 = cursor; // try, line 31 lab4: do { // (, line 31 if (!(I_p1 < I_x)) { break lab4; } I_p1 = I_x; } while (false); return true; } private boolean r_main_suffix() { int among_var; int v_1; int v_2; // (, line 36 // setlimit, line 37 v_1 = limit - cursor; // tomark, line 37 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 37 // [, line 37 ket = cursor; // substring, line 37 among_var = find_among_b(a_0, 37); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 37 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 44 // delete, line 44 slice_del(); break; case 2: // (, line 46 if (!(in_grouping_b(g_s_ending, 98, 121))) { return false; } // delete, line 46 slice_del(); break; } return true; } private boolean r_consonant_pair() { int v_1; int v_2; int v_3; // setlimit, line 50 v_1 = limit - cursor; // tomark, line 50 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 50 // and, line 52 v_3 = limit - cursor; // among, line 51 if (find_among_b(a_1, 7) == 0) { limit_backward = v_2; return false; } cursor = limit - v_3; // (, line 52 // [, line 52 ket = cursor; // next, line 52 if (cursor <= limit_backward) { limit_backward = v_2; return false; } cursor--; // ], line 52 bra = cursor; // delete, line 52 slice_del(); limit_backward = v_2; return true; } private boolean r_other_suffix() { int among_var; int v_1; int v_2; // setlimit, line 55 v_1 = limit - cursor; // tomark, line 55 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 55 // [, line 56 ket = cursor; // substring, line 56 among_var = find_among_b(a_2, 5); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 56 bra = cursor; switch(among_var) { case 0: limit_backward = v_2; return false; case 1: // (, line 57 // delete, line 57 slice_del(); break; case 2: // (, line 58 // <-, line 58 slice_from("l\u00F6s"); break; case 3: // (, line 59 // <-, line 59 slice_from("full"); break; } limit_backward = v_2; return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; // (, line 64 // do, line 66 v_1 = cursor; lab0: do { // call mark_regions, line 66 if (!r_mark_regions()) { break lab0; } } while (false); cursor = v_1; // backwards, line 67 limit_backward = cursor; cursor = limit; // (, line 67 // do, line 68 v_2 = limit - cursor; lab1: do { // call main_suffix, line 68 if (!r_main_suffix()) { break lab1; } } while (false); cursor = limit - v_2; // do, line 69 v_3 = limit - cursor; lab2: do { // call consonant_pair, line 69 if (!r_consonant_pair()) { break lab2; } } while (false); cursor = limit - v_3; // do, line 70 v_4 = limit - cursor; lab3: do { // call other_suffix, line 70 if (!r_other_suffix()) { break lab3; } } while (false); cursor = limit - v_4; cursor = limit_backward; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/russianStemmer.java0000644000175000017500000006357011625126512032672 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class russianStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "\u0432", -1, 1, "", this), new Among ( "\u0438\u0432", 0, 2, "", this), new Among ( "\u044B\u0432", 0, 2, "", this), new Among ( "\u0432\u0448\u0438", -1, 1, "", this), new Among ( "\u0438\u0432\u0448\u0438", 3, 2, "", this), new Among ( "\u044B\u0432\u0448\u0438", 3, 2, "", this), new Among ( "\u0432\u0448\u0438\u0441\u044C", -1, 1, "", this), new Among ( "\u0438\u0432\u0448\u0438\u0441\u044C", 6, 2, "", this), new Among ( "\u044B\u0432\u0448\u0438\u0441\u044C", 6, 2, "", this) }; private Among a_1[] = { new Among ( "\u0435\u0435", -1, 1, "", this), new Among ( "\u0438\u0435", -1, 1, "", this), new Among ( "\u043E\u0435", -1, 1, "", this), new Among ( "\u044B\u0435", -1, 1, "", this), new Among ( "\u0438\u043C\u0438", -1, 1, "", this), new Among ( "\u044B\u043C\u0438", -1, 1, "", this), new Among ( "\u0435\u0439", -1, 1, "", this), new Among ( "\u0438\u0439", -1, 1, "", this), new Among ( "\u043E\u0439", -1, 1, "", this), new Among ( "\u044B\u0439", -1, 1, "", this), new Among ( "\u0435\u043C", -1, 1, "", this), new Among ( "\u0438\u043C", -1, 1, "", this), new Among ( "\u043E\u043C", -1, 1, "", this), new Among ( "\u044B\u043C", -1, 1, "", this), new Among ( "\u0435\u0433\u043E", -1, 1, "", this), new Among ( "\u043E\u0433\u043E", -1, 1, "", this), new Among ( "\u0435\u043C\u0443", -1, 1, "", this), new Among ( "\u043E\u043C\u0443", -1, 1, "", this), new Among ( "\u0438\u0445", -1, 1, "", this), new Among ( "\u044B\u0445", -1, 1, "", this), new Among ( "\u0435\u044E", -1, 1, "", this), new Among ( "\u043E\u044E", -1, 1, "", this), new Among ( "\u0443\u044E", -1, 1, "", this), new Among ( "\u044E\u044E", -1, 1, "", this), new Among ( "\u0430\u044F", -1, 1, "", this), new Among ( "\u044F\u044F", -1, 1, "", this) }; private Among a_2[] = { new Among ( "\u0435\u043C", -1, 1, "", this), new Among ( "\u043D\u043D", -1, 1, "", this), new Among ( "\u0432\u0448", -1, 1, "", this), new Among ( "\u0438\u0432\u0448", 2, 2, "", this), new Among ( "\u044B\u0432\u0448", 2, 2, "", this), new Among ( "\u0449", -1, 1, "", this), new Among ( "\u044E\u0449", 5, 1, "", this), new Among ( "\u0443\u044E\u0449", 6, 2, "", this) }; private Among a_3[] = { new Among ( "\u0441\u044C", -1, 1, "", this), new Among ( "\u0441\u044F", -1, 1, "", this) }; private Among a_4[] = { new Among ( "\u043B\u0430", -1, 1, "", this), new Among ( "\u0438\u043B\u0430", 0, 2, "", this), new Among ( "\u044B\u043B\u0430", 0, 2, "", this), new Among ( "\u043D\u0430", -1, 1, "", this), new Among ( "\u0435\u043D\u0430", 3, 2, "", this), new Among ( "\u0435\u0442\u0435", -1, 1, "", this), new Among ( "\u0438\u0442\u0435", -1, 2, "", this), new Among ( "\u0439\u0442\u0435", -1, 1, "", this), new Among ( "\u0435\u0439\u0442\u0435", 7, 2, "", this), new Among ( "\u0443\u0439\u0442\u0435", 7, 2, "", this), new Among ( "\u043B\u0438", -1, 1, "", this), new Among ( "\u0438\u043B\u0438", 10, 2, "", this), new Among ( "\u044B\u043B\u0438", 10, 2, "", this), new Among ( "\u0439", -1, 1, "", this), new Among ( "\u0435\u0439", 13, 2, "", this), new Among ( "\u0443\u0439", 13, 2, "", this), new Among ( "\u043B", -1, 1, "", this), new Among ( "\u0438\u043B", 16, 2, "", this), new Among ( "\u044B\u043B", 16, 2, "", this), new Among ( "\u0435\u043C", -1, 1, "", this), new Among ( "\u0438\u043C", -1, 2, "", this), new Among ( "\u044B\u043C", -1, 2, "", this), new Among ( "\u043D", -1, 1, "", this), new Among ( "\u0435\u043D", 22, 2, "", this), new Among ( "\u043B\u043E", -1, 1, "", this), new Among ( "\u0438\u043B\u043E", 24, 2, "", this), new Among ( "\u044B\u043B\u043E", 24, 2, "", this), new Among ( "\u043D\u043E", -1, 1, "", this), new Among ( "\u0435\u043D\u043E", 27, 2, "", this), new Among ( "\u043D\u043D\u043E", 27, 1, "", this), new Among ( "\u0435\u0442", -1, 1, "", this), new Among ( "\u0443\u0435\u0442", 30, 2, "", this), new Among ( "\u0438\u0442", -1, 2, "", this), new Among ( "\u044B\u0442", -1, 2, "", this), new Among ( "\u044E\u0442", -1, 1, "", this), new Among ( "\u0443\u044E\u0442", 34, 2, "", this), new Among ( "\u044F\u0442", -1, 2, "", this), new Among ( "\u043D\u044B", -1, 1, "", this), new Among ( "\u0435\u043D\u044B", 37, 2, "", this), new Among ( "\u0442\u044C", -1, 1, "", this), new Among ( "\u0438\u0442\u044C", 39, 2, "", this), new Among ( "\u044B\u0442\u044C", 39, 2, "", this), new Among ( "\u0435\u0448\u044C", -1, 1, "", this), new Among ( "\u0438\u0448\u044C", -1, 2, "", this), new Among ( "\u044E", -1, 2, "", this), new Among ( "\u0443\u044E", 44, 2, "", this) }; private Among a_5[] = { new Among ( "\u0430", -1, 1, "", this), new Among ( "\u0435\u0432", -1, 1, "", this), new Among ( "\u043E\u0432", -1, 1, "", this), new Among ( "\u0435", -1, 1, "", this), new Among ( "\u0438\u0435", 3, 1, "", this), new Among ( "\u044C\u0435", 3, 1, "", this), new Among ( "\u0438", -1, 1, "", this), new Among ( "\u0435\u0438", 6, 1, "", this), new Among ( "\u0438\u0438", 6, 1, "", this), new Among ( "\u0430\u043C\u0438", 6, 1, "", this), new Among ( "\u044F\u043C\u0438", 6, 1, "", this), new Among ( "\u0438\u044F\u043C\u0438", 10, 1, "", this), new Among ( "\u0439", -1, 1, "", this), new Among ( "\u0435\u0439", 12, 1, "", this), new Among ( "\u0438\u0435\u0439", 13, 1, "", this), new Among ( "\u0438\u0439", 12, 1, "", this), new Among ( "\u043E\u0439", 12, 1, "", this), new Among ( "\u0430\u043C", -1, 1, "", this), new Among ( "\u0435\u043C", -1, 1, "", this), new Among ( "\u0438\u0435\u043C", 18, 1, "", this), new Among ( "\u043E\u043C", -1, 1, "", this), new Among ( "\u044F\u043C", -1, 1, "", this), new Among ( "\u0438\u044F\u043C", 21, 1, "", this), new Among ( "\u043E", -1, 1, "", this), new Among ( "\u0443", -1, 1, "", this), new Among ( "\u0430\u0445", -1, 1, "", this), new Among ( "\u044F\u0445", -1, 1, "", this), new Among ( "\u0438\u044F\u0445", 26, 1, "", this), new Among ( "\u044B", -1, 1, "", this), new Among ( "\u044C", -1, 1, "", this), new Among ( "\u044E", -1, 1, "", this), new Among ( "\u0438\u044E", 30, 1, "", this), new Among ( "\u044C\u044E", 30, 1, "", this), new Among ( "\u044F", -1, 1, "", this), new Among ( "\u0438\u044F", 33, 1, "", this), new Among ( "\u044C\u044F", 33, 1, "", this) }; private Among a_6[] = { new Among ( "\u043E\u0441\u0442", -1, 1, "", this), new Among ( "\u043E\u0441\u0442\u044C", -1, 1, "", this) }; private Among a_7[] = { new Among ( "\u0435\u0439\u0448\u0435", -1, 1, "", this), new Among ( "\u043D", -1, 2, "", this), new Among ( "\u0435\u0439\u0448", -1, 1, "", this), new Among ( "\u044C", -1, 3, "", this) }; private static final char g_v[] = {33, 65, 8, 232 }; private int I_p2; private int I_pV; private void copy_from(russianStemmer other) { I_p2 = other.I_p2; I_pV = other.I_pV; super.copy_from(other); } private boolean r_mark_regions() { int v_1; // (, line 57 I_pV = limit; I_p2 = limit; // do, line 61 v_1 = cursor; lab0: do { // (, line 61 // gopast, line 62 golab1: while(true) { lab2: do { if (!(in_grouping(g_v, 1072, 1103))) { break lab2; } break golab1; } while (false); if (cursor >= limit) { break lab0; } cursor++; } // setmark pV, line 62 I_pV = cursor; // gopast, line 62 golab3: while(true) { lab4: do { if (!(out_grouping(g_v, 1072, 1103))) { break lab4; } break golab3; } while (false); if (cursor >= limit) { break lab0; } cursor++; } // gopast, line 63 golab5: while(true) { lab6: do { if (!(in_grouping(g_v, 1072, 1103))) { break lab6; } break golab5; } while (false); if (cursor >= limit) { break lab0; } cursor++; } // gopast, line 63 golab7: while(true) { lab8: do { if (!(out_grouping(g_v, 1072, 1103))) { break lab8; } break golab7; } while (false); if (cursor >= limit) { break lab0; } cursor++; } // setmark p2, line 63 I_p2 = cursor; } while (false); cursor = v_1; return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_perfective_gerund() { int among_var; int v_1; // (, line 71 // [, line 72 ket = cursor; // substring, line 72 among_var = find_among_b(a_0, 9); if (among_var == 0) { return false; } // ], line 72 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 76 // or, line 76 lab0: do { v_1 = limit - cursor; lab1: do { // literal, line 76 if (!(eq_s_b(1, "\u0430"))) { break lab1; } break lab0; } while (false); cursor = limit - v_1; // literal, line 76 if (!(eq_s_b(1, "\u044F"))) { return false; } } while (false); // delete, line 76 slice_del(); break; case 2: // (, line 83 // delete, line 83 slice_del(); break; } return true; } private boolean r_adjective() { int among_var; // (, line 87 // [, line 88 ket = cursor; // substring, line 88 among_var = find_among_b(a_1, 26); if (among_var == 0) { return false; } // ], line 88 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 97 // delete, line 97 slice_del(); break; } return true; } private boolean r_adjectival() { int among_var; int v_1; int v_2; // (, line 101 // call adjective, line 102 if (!r_adjective()) { return false; } // try, line 109 v_1 = limit - cursor; lab0: do { // (, line 109 // [, line 110 ket = cursor; // substring, line 110 among_var = find_among_b(a_2, 8); if (among_var == 0) { cursor = limit - v_1; break lab0; } // ], line 110 bra = cursor; switch(among_var) { case 0: cursor = limit - v_1; break lab0; case 1: // (, line 115 // or, line 115 lab1: do { v_2 = limit - cursor; lab2: do { // literal, line 115 if (!(eq_s_b(1, "\u0430"))) { break lab2; } break lab1; } while (false); cursor = limit - v_2; // literal, line 115 if (!(eq_s_b(1, "\u044F"))) { cursor = limit - v_1; break lab0; } } while (false); // delete, line 115 slice_del(); break; case 2: // (, line 122 // delete, line 122 slice_del(); break; } } while (false); return true; } private boolean r_reflexive() { int among_var; // (, line 128 // [, line 129 ket = cursor; // substring, line 129 among_var = find_among_b(a_3, 2); if (among_var == 0) { return false; } // ], line 129 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 132 // delete, line 132 slice_del(); break; } return true; } private boolean r_verb() { int among_var; int v_1; // (, line 136 // [, line 137 ket = cursor; // substring, line 137 among_var = find_among_b(a_4, 46); if (among_var == 0) { return false; } // ], line 137 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 143 // or, line 143 lab0: do { v_1 = limit - cursor; lab1: do { // literal, line 143 if (!(eq_s_b(1, "\u0430"))) { break lab1; } break lab0; } while (false); cursor = limit - v_1; // literal, line 143 if (!(eq_s_b(1, "\u044F"))) { return false; } } while (false); // delete, line 143 slice_del(); break; case 2: // (, line 151 // delete, line 151 slice_del(); break; } return true; } private boolean r_noun() { int among_var; // (, line 159 // [, line 160 ket = cursor; // substring, line 160 among_var = find_among_b(a_5, 36); if (among_var == 0) { return false; } // ], line 160 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 167 // delete, line 167 slice_del(); break; } return true; } private boolean r_derivational() { int among_var; // (, line 175 // [, line 176 ket = cursor; // substring, line 176 among_var = find_among_b(a_6, 2); if (among_var == 0) { return false; } // ], line 176 bra = cursor; // call R2, line 176 if (!r_R2()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 179 // delete, line 179 slice_del(); break; } return true; } private boolean r_tidy_up() { int among_var; // (, line 183 // [, line 184 ket = cursor; // substring, line 184 among_var = find_among_b(a_7, 4); if (among_var == 0) { return false; } // ], line 184 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 188 // delete, line 188 slice_del(); // [, line 189 ket = cursor; // literal, line 189 if (!(eq_s_b(1, "\u043D"))) { return false; } // ], line 189 bra = cursor; // literal, line 189 if (!(eq_s_b(1, "\u043D"))) { return false; } // delete, line 189 slice_del(); break; case 2: // (, line 192 // literal, line 192 if (!(eq_s_b(1, "\u043D"))) { return false; } // delete, line 192 slice_del(); break; case 3: // (, line 194 // delete, line 194 slice_del(); break; } return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; int v_10; // (, line 199 // do, line 201 v_1 = cursor; lab0: do { // call mark_regions, line 201 if (!r_mark_regions()) { break lab0; } } while (false); cursor = v_1; // backwards, line 202 limit_backward = cursor; cursor = limit; // setlimit, line 202 v_2 = limit - cursor; // tomark, line 202 if (cursor < I_pV) { return false; } cursor = I_pV; v_3 = limit_backward; limit_backward = cursor; cursor = limit - v_2; // (, line 202 // do, line 203 v_4 = limit - cursor; lab1: do { // (, line 203 // or, line 204 lab2: do { v_5 = limit - cursor; lab3: do { // call perfective_gerund, line 204 if (!r_perfective_gerund()) { break lab3; } break lab2; } while (false); cursor = limit - v_5; // (, line 205 // try, line 205 v_6 = limit - cursor; lab4: do { // call reflexive, line 205 if (!r_reflexive()) { cursor = limit - v_6; break lab4; } } while (false); // or, line 206 lab5: do { v_7 = limit - cursor; lab6: do { // call adjectival, line 206 if (!r_adjectival()) { break lab6; } break lab5; } while (false); cursor = limit - v_7; lab7: do { // call verb, line 206 if (!r_verb()) { break lab7; } break lab5; } while (false); cursor = limit - v_7; // call noun, line 206 if (!r_noun()) { break lab1; } } while (false); } while (false); } while (false); cursor = limit - v_4; // try, line 209 v_8 = limit - cursor; lab8: do { // (, line 209 // [, line 209 ket = cursor; // literal, line 209 if (!(eq_s_b(1, "\u0438"))) { cursor = limit - v_8; break lab8; } // ], line 209 bra = cursor; // delete, line 209 slice_del(); } while (false); // do, line 212 v_9 = limit - cursor; lab9: do { // call derivational, line 212 if (!r_derivational()) { break lab9; } } while (false); cursor = limit - v_9; // do, line 213 v_10 = limit - cursor; lab10: do { // call tidy_up, line 213 if (!r_tidy_up()) { break lab10; } } while (false); cursor = limit - v_10; limit_backward = v_3; cursor = limit_backward; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/spanishStemmer.java0000644000175000017500000012547711625126512032660 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class spanishStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "", -1, 6, "", this), new Among ( "\u00E1", 0, 1, "", this), new Among ( "\u00E9", 0, 2, "", this), new Among ( "\u00ED", 0, 3, "", this), new Among ( "\u00F3", 0, 4, "", this), new Among ( "\u00FA", 0, 5, "", this) }; private Among a_1[] = { new Among ( "la", -1, -1, "", this), new Among ( "sela", 0, -1, "", this), new Among ( "le", -1, -1, "", this), new Among ( "me", -1, -1, "", this), new Among ( "se", -1, -1, "", this), new Among ( "lo", -1, -1, "", this), new Among ( "selo", 5, -1, "", this), new Among ( "las", -1, -1, "", this), new Among ( "selas", 7, -1, "", this), new Among ( "les", -1, -1, "", this), new Among ( "los", -1, -1, "", this), new Among ( "selos", 10, -1, "", this), new Among ( "nos", -1, -1, "", this) }; private Among a_2[] = { new Among ( "ando", -1, 6, "", this), new Among ( "iendo", -1, 6, "", this), new Among ( "yendo", -1, 7, "", this), new Among ( "\u00E1ndo", -1, 2, "", this), new Among ( "i\u00E9ndo", -1, 1, "", this), new Among ( "ar", -1, 6, "", this), new Among ( "er", -1, 6, "", this), new Among ( "ir", -1, 6, "", this), new Among ( "\u00E1r", -1, 3, "", this), new Among ( "\u00E9r", -1, 4, "", this), new Among ( "\u00EDr", -1, 5, "", this) }; private Among a_3[] = { new Among ( "ic", -1, -1, "", this), new Among ( "ad", -1, -1, "", this), new Among ( "os", -1, -1, "", this), new Among ( "iv", -1, 1, "", this) }; private Among a_4[] = { new Among ( "able", -1, 1, "", this), new Among ( "ible", -1, 1, "", this), new Among ( "ante", -1, 1, "", this) }; private Among a_5[] = { new Among ( "ic", -1, 1, "", this), new Among ( "abil", -1, 1, "", this), new Among ( "iv", -1, 1, "", this) }; private Among a_6[] = { new Among ( "ica", -1, 1, "", this), new Among ( "ancia", -1, 2, "", this), new Among ( "encia", -1, 5, "", this), new Among ( "adora", -1, 2, "", this), new Among ( "osa", -1, 1, "", this), new Among ( "ista", -1, 1, "", this), new Among ( "iva", -1, 9, "", this), new Among ( "anza", -1, 1, "", this), new Among ( "log\u00EDa", -1, 3, "", this), new Among ( "idad", -1, 8, "", this), new Among ( "able", -1, 1, "", this), new Among ( "ible", -1, 1, "", this), new Among ( "ante", -1, 2, "", this), new Among ( "mente", -1, 7, "", this), new Among ( "amente", 13, 6, "", this), new Among ( "aci\u00F3n", -1, 2, "", this), new Among ( "uci\u00F3n", -1, 4, "", this), new Among ( "ico", -1, 1, "", this), new Among ( "ismo", -1, 1, "", this), new Among ( "oso", -1, 1, "", this), new Among ( "amiento", -1, 1, "", this), new Among ( "imiento", -1, 1, "", this), new Among ( "ivo", -1, 9, "", this), new Among ( "ador", -1, 2, "", this), new Among ( "icas", -1, 1, "", this), new Among ( "ancias", -1, 2, "", this), new Among ( "encias", -1, 5, "", this), new Among ( "adoras", -1, 2, "", this), new Among ( "osas", -1, 1, "", this), new Among ( "istas", -1, 1, "", this), new Among ( "ivas", -1, 9, "", this), new Among ( "anzas", -1, 1, "", this), new Among ( "log\u00EDas", -1, 3, "", this), new Among ( "idades", -1, 8, "", this), new Among ( "ables", -1, 1, "", this), new Among ( "ibles", -1, 1, "", this), new Among ( "aciones", -1, 2, "", this), new Among ( "uciones", -1, 4, "", this), new Among ( "adores", -1, 2, "", this), new Among ( "antes", -1, 2, "", this), new Among ( "icos", -1, 1, "", this), new Among ( "ismos", -1, 1, "", this), new Among ( "osos", -1, 1, "", this), new Among ( "amientos", -1, 1, "", this), new Among ( "imientos", -1, 1, "", this), new Among ( "ivos", -1, 9, "", this) }; private Among a_7[] = { new Among ( "ya", -1, 1, "", this), new Among ( "ye", -1, 1, "", this), new Among ( "yan", -1, 1, "", this), new Among ( "yen", -1, 1, "", this), new Among ( "yeron", -1, 1, "", this), new Among ( "yendo", -1, 1, "", this), new Among ( "yo", -1, 1, "", this), new Among ( "yas", -1, 1, "", this), new Among ( "yes", -1, 1, "", this), new Among ( "yais", -1, 1, "", this), new Among ( "yamos", -1, 1, "", this), new Among ( "y\u00F3", -1, 1, "", this) }; private Among a_8[] = { new Among ( "aba", -1, 2, "", this), new Among ( "ada", -1, 2, "", this), new Among ( "ida", -1, 2, "", this), new Among ( "ara", -1, 2, "", this), new Among ( "iera", -1, 2, "", this), new Among ( "\u00EDa", -1, 2, "", this), new Among ( "ar\u00EDa", 5, 2, "", this), new Among ( "er\u00EDa", 5, 2, "", this), new Among ( "ir\u00EDa", 5, 2, "", this), new Among ( "ad", -1, 2, "", this), new Among ( "ed", -1, 2, "", this), new Among ( "id", -1, 2, "", this), new Among ( "ase", -1, 2, "", this), new Among ( "iese", -1, 2, "", this), new Among ( "aste", -1, 2, "", this), new Among ( "iste", -1, 2, "", this), new Among ( "an", -1, 2, "", this), new Among ( "aban", 16, 2, "", this), new Among ( "aran", 16, 2, "", this), new Among ( "ieran", 16, 2, "", this), new Among ( "\u00EDan", 16, 2, "", this), new Among ( "ar\u00EDan", 20, 2, "", this), new Among ( "er\u00EDan", 20, 2, "", this), new Among ( "ir\u00EDan", 20, 2, "", this), new Among ( "en", -1, 1, "", this), new Among ( "asen", 24, 2, "", this), new Among ( "iesen", 24, 2, "", this), new Among ( "aron", -1, 2, "", this), new Among ( "ieron", -1, 2, "", this), new Among ( "ar\u00E1n", -1, 2, "", this), new Among ( "er\u00E1n", -1, 2, "", this), new Among ( "ir\u00E1n", -1, 2, "", this), new Among ( "ado", -1, 2, "", this), new Among ( "ido", -1, 2, "", this), new Among ( "ando", -1, 2, "", this), new Among ( "iendo", -1, 2, "", this), new Among ( "ar", -1, 2, "", this), new Among ( "er", -1, 2, "", this), new Among ( "ir", -1, 2, "", this), new Among ( "as", -1, 2, "", this), new Among ( "abas", 39, 2, "", this), new Among ( "adas", 39, 2, "", this), new Among ( "idas", 39, 2, "", this), new Among ( "aras", 39, 2, "", this), new Among ( "ieras", 39, 2, "", this), new Among ( "\u00EDas", 39, 2, "", this), new Among ( "ar\u00EDas", 45, 2, "", this), new Among ( "er\u00EDas", 45, 2, "", this), new Among ( "ir\u00EDas", 45, 2, "", this), new Among ( "es", -1, 1, "", this), new Among ( "ases", 49, 2, "", this), new Among ( "ieses", 49, 2, "", this), new Among ( "abais", -1, 2, "", this), new Among ( "arais", -1, 2, "", this), new Among ( "ierais", -1, 2, "", this), new Among ( "\u00EDais", -1, 2, "", this), new Among ( "ar\u00EDais", 55, 2, "", this), new Among ( "er\u00EDais", 55, 2, "", this), new Among ( "ir\u00EDais", 55, 2, "", this), new Among ( "aseis", -1, 2, "", this), new Among ( "ieseis", -1, 2, "", this), new Among ( "asteis", -1, 2, "", this), new Among ( "isteis", -1, 2, "", this), new Among ( "\u00E1is", -1, 2, "", this), new Among ( "\u00E9is", -1, 1, "", this), new Among ( "ar\u00E9is", 64, 2, "", this), new Among ( "er\u00E9is", 64, 2, "", this), new Among ( "ir\u00E9is", 64, 2, "", this), new Among ( "ados", -1, 2, "", this), new Among ( "idos", -1, 2, "", this), new Among ( "amos", -1, 2, "", this), new Among ( "\u00E1bamos", 70, 2, "", this), new Among ( "\u00E1ramos", 70, 2, "", this), new Among ( "i\u00E9ramos", 70, 2, "", this), new Among ( "\u00EDamos", 70, 2, "", this), new Among ( "ar\u00EDamos", 74, 2, "", this), new Among ( "er\u00EDamos", 74, 2, "", this), new Among ( "ir\u00EDamos", 74, 2, "", this), new Among ( "emos", -1, 1, "", this), new Among ( "aremos", 78, 2, "", this), new Among ( "eremos", 78, 2, "", this), new Among ( "iremos", 78, 2, "", this), new Among ( "\u00E1semos", 78, 2, "", this), new Among ( "i\u00E9semos", 78, 2, "", this), new Among ( "imos", -1, 2, "", this), new Among ( "ar\u00E1s", -1, 2, "", this), new Among ( "er\u00E1s", -1, 2, "", this), new Among ( "ir\u00E1s", -1, 2, "", this), new Among ( "\u00EDs", -1, 2, "", this), new Among ( "ar\u00E1", -1, 2, "", this), new Among ( "er\u00E1", -1, 2, "", this), new Among ( "ir\u00E1", -1, 2, "", this), new Among ( "ar\u00E9", -1, 2, "", this), new Among ( "er\u00E9", -1, 2, "", this), new Among ( "ir\u00E9", -1, 2, "", this), new Among ( "i\u00F3", -1, 2, "", this) }; private Among a_9[] = { new Among ( "a", -1, 1, "", this), new Among ( "e", -1, 2, "", this), new Among ( "o", -1, 1, "", this), new Among ( "os", -1, 1, "", this), new Among ( "\u00E1", -1, 1, "", this), new Among ( "\u00E9", -1, 2, "", this), new Among ( "\u00ED", -1, 1, "", this), new Among ( "\u00F3", -1, 1, "", this) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 }; private int I_p2; private int I_p1; private int I_pV; private void copy_from(spanishStemmer other) { I_p2 = other.I_p2; I_p1 = other.I_p1; I_pV = other.I_pV; super.copy_from(other); } private boolean r_mark_regions() { int v_1; int v_2; int v_3; int v_6; int v_8; // (, line 31 I_pV = limit; I_p1 = limit; I_p2 = limit; // do, line 37 v_1 = cursor; lab0: do { // (, line 37 // or, line 39 lab1: do { v_2 = cursor; lab2: do { // (, line 38 if (!(in_grouping(g_v, 97, 252))) { break lab2; } // or, line 38 lab3: do { v_3 = cursor; lab4: do { // (, line 38 if (!(out_grouping(g_v, 97, 252))) { break lab4; } // gopast, line 38 golab5: while(true) { lab6: do { if (!(in_grouping(g_v, 97, 252))) { break lab6; } break golab5; } while (false); if (cursor >= limit) { break lab4; } cursor++; } break lab3; } while (false); cursor = v_3; // (, line 38 if (!(in_grouping(g_v, 97, 252))) { break lab2; } // gopast, line 38 golab7: while(true) { lab8: do { if (!(out_grouping(g_v, 97, 252))) { break lab8; } break golab7; } while (false); if (cursor >= limit) { break lab2; } cursor++; } } while (false); break lab1; } while (false); cursor = v_2; // (, line 40 if (!(out_grouping(g_v, 97, 252))) { break lab0; } // or, line 40 lab9: do { v_6 = cursor; lab10: do { // (, line 40 if (!(out_grouping(g_v, 97, 252))) { break lab10; } // gopast, line 40 golab11: while(true) { lab12: do { if (!(in_grouping(g_v, 97, 252))) { break lab12; } break golab11; } while (false); if (cursor >= limit) { break lab10; } cursor++; } break lab9; } while (false); cursor = v_6; // (, line 40 if (!(in_grouping(g_v, 97, 252))) { break lab0; } // next, line 40 if (cursor >= limit) { break lab0; } cursor++; } while (false); } while (false); // setmark pV, line 41 I_pV = cursor; } while (false); cursor = v_1; // do, line 43 v_8 = cursor; lab13: do { // (, line 43 // gopast, line 44 golab14: while(true) { lab15: do { if (!(in_grouping(g_v, 97, 252))) { break lab15; } break golab14; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // gopast, line 44 golab16: while(true) { lab17: do { if (!(out_grouping(g_v, 97, 252))) { break lab17; } break golab16; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // setmark p1, line 44 I_p1 = cursor; // gopast, line 45 golab18: while(true) { lab19: do { if (!(in_grouping(g_v, 97, 252))) { break lab19; } break golab18; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // gopast, line 45 golab20: while(true) { lab21: do { if (!(out_grouping(g_v, 97, 252))) { break lab21; } break golab20; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // setmark p2, line 45 I_p2 = cursor; } while (false); cursor = v_8; return true; } private boolean r_postlude() { int among_var; int v_1; // repeat, line 49 replab0: while(true) { v_1 = cursor; lab1: do { // (, line 49 // [, line 50 bra = cursor; // substring, line 50 among_var = find_among(a_0, 6); if (among_var == 0) { break lab1; } // ], line 50 ket = cursor; switch(among_var) { case 0: break lab1; case 1: // (, line 51 // <-, line 51 slice_from("a"); break; case 2: // (, line 52 // <-, line 52 slice_from("e"); break; case 3: // (, line 53 // <-, line 53 slice_from("i"); break; case 4: // (, line 54 // <-, line 54 slice_from("o"); break; case 5: // (, line 55 // <-, line 55 slice_from("u"); break; case 6: // (, line 57 // next, line 57 if (cursor >= limit) { break lab1; } cursor++; break; } continue replab0; } while (false); cursor = v_1; break replab0; } return true; } private boolean r_RV() { if (!(I_pV <= cursor)) { return false; } return true; } private boolean r_R1() { if (!(I_p1 <= cursor)) { return false; } return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_attached_pronoun() { int among_var; // (, line 67 // [, line 68 ket = cursor; // substring, line 68 if (find_among_b(a_1, 13) == 0) { return false; } // ], line 68 bra = cursor; // substring, line 72 among_var = find_among_b(a_2, 11); if (among_var == 0) { return false; } // call RV, line 72 if (!r_RV()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 73 // ], line 73 bra = cursor; // <-, line 73 slice_from("iendo"); break; case 2: // (, line 74 // ], line 74 bra = cursor; // <-, line 74 slice_from("ando"); break; case 3: // (, line 75 // ], line 75 bra = cursor; // <-, line 75 slice_from("ar"); break; case 4: // (, line 76 // ], line 76 bra = cursor; // <-, line 76 slice_from("er"); break; case 5: // (, line 77 // ], line 77 bra = cursor; // <-, line 77 slice_from("ir"); break; case 6: // (, line 81 // delete, line 81 slice_del(); break; case 7: // (, line 82 // literal, line 82 if (!(eq_s_b(1, "u"))) { return false; } // delete, line 82 slice_del(); break; } return true; } private boolean r_standard_suffix() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; // (, line 86 // [, line 87 ket = cursor; // substring, line 87 among_var = find_among_b(a_6, 46); if (among_var == 0) { return false; } // ], line 87 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 98 // call R2, line 99 if (!r_R2()) { return false; } // delete, line 99 slice_del(); break; case 2: // (, line 104 // call R2, line 105 if (!r_R2()) { return false; } // delete, line 105 slice_del(); // try, line 106 v_1 = limit - cursor; lab0: do { // (, line 106 // [, line 106 ket = cursor; // literal, line 106 if (!(eq_s_b(2, "ic"))) { cursor = limit - v_1; break lab0; } // ], line 106 bra = cursor; // call R2, line 106 if (!r_R2()) { cursor = limit - v_1; break lab0; } // delete, line 106 slice_del(); } while (false); break; case 3: // (, line 110 // call R2, line 111 if (!r_R2()) { return false; } // <-, line 111 slice_from("log"); break; case 4: // (, line 114 // call R2, line 115 if (!r_R2()) { return false; } // <-, line 115 slice_from("u"); break; case 5: // (, line 118 // call R2, line 119 if (!r_R2()) { return false; } // <-, line 119 slice_from("ente"); break; case 6: // (, line 122 // call R1, line 123 if (!r_R1()) { return false; } // delete, line 123 slice_del(); // try, line 124 v_2 = limit - cursor; lab1: do { // (, line 124 // [, line 125 ket = cursor; // substring, line 125 among_var = find_among_b(a_3, 4); if (among_var == 0) { cursor = limit - v_2; break lab1; } // ], line 125 bra = cursor; // call R2, line 125 if (!r_R2()) { cursor = limit - v_2; break lab1; } // delete, line 125 slice_del(); switch(among_var) { case 0: cursor = limit - v_2; break lab1; case 1: // (, line 126 // [, line 126 ket = cursor; // literal, line 126 if (!(eq_s_b(2, "at"))) { cursor = limit - v_2; break lab1; } // ], line 126 bra = cursor; // call R2, line 126 if (!r_R2()) { cursor = limit - v_2; break lab1; } // delete, line 126 slice_del(); break; } } while (false); break; case 7: // (, line 134 // call R2, line 135 if (!r_R2()) { return false; } // delete, line 135 slice_del(); // try, line 136 v_3 = limit - cursor; lab2: do { // (, line 136 // [, line 137 ket = cursor; // substring, line 137 among_var = find_among_b(a_4, 3); if (among_var == 0) { cursor = limit - v_3; break lab2; } // ], line 137 bra = cursor; switch(among_var) { case 0: cursor = limit - v_3; break lab2; case 1: // (, line 140 // call R2, line 140 if (!r_R2()) { cursor = limit - v_3; break lab2; } // delete, line 140 slice_del(); break; } } while (false); break; case 8: // (, line 146 // call R2, line 147 if (!r_R2()) { return false; } // delete, line 147 slice_del(); // try, line 148 v_4 = limit - cursor; lab3: do { // (, line 148 // [, line 149 ket = cursor; // substring, line 149 among_var = find_among_b(a_5, 3); if (among_var == 0) { cursor = limit - v_4; break lab3; } // ], line 149 bra = cursor; switch(among_var) { case 0: cursor = limit - v_4; break lab3; case 1: // (, line 152 // call R2, line 152 if (!r_R2()) { cursor = limit - v_4; break lab3; } // delete, line 152 slice_del(); break; } } while (false); break; case 9: // (, line 158 // call R2, line 159 if (!r_R2()) { return false; } // delete, line 159 slice_del(); // try, line 160 v_5 = limit - cursor; lab4: do { // (, line 160 // [, line 161 ket = cursor; // literal, line 161 if (!(eq_s_b(2, "at"))) { cursor = limit - v_5; break lab4; } // ], line 161 bra = cursor; // call R2, line 161 if (!r_R2()) { cursor = limit - v_5; break lab4; } // delete, line 161 slice_del(); } while (false); break; } return true; } private boolean r_y_verb_suffix() { int among_var; int v_1; int v_2; // (, line 167 // setlimit, line 168 v_1 = limit - cursor; // tomark, line 168 if (cursor < I_pV) { return false; } cursor = I_pV; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 168 // [, line 168 ket = cursor; // substring, line 168 among_var = find_among_b(a_7, 12); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 168 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 171 // literal, line 171 if (!(eq_s_b(1, "u"))) { return false; } // delete, line 171 slice_del(); break; } return true; } private boolean r_verb_suffix() { int among_var; int v_1; int v_2; int v_3; int v_4; // (, line 175 // setlimit, line 176 v_1 = limit - cursor; // tomark, line 176 if (cursor < I_pV) { return false; } cursor = I_pV; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 176 // [, line 176 ket = cursor; // substring, line 176 among_var = find_among_b(a_8, 96); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 176 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 179 // try, line 179 v_3 = limit - cursor; lab0: do { // (, line 179 // literal, line 179 if (!(eq_s_b(1, "u"))) { cursor = limit - v_3; break lab0; } // test, line 179 v_4 = limit - cursor; // literal, line 179 if (!(eq_s_b(1, "g"))) { cursor = limit - v_3; break lab0; } cursor = limit - v_4; } while (false); // ], line 179 bra = cursor; // delete, line 179 slice_del(); break; case 2: // (, line 200 // delete, line 200 slice_del(); break; } return true; } private boolean r_residual_suffix() { int among_var; int v_1; int v_2; // (, line 204 // [, line 205 ket = cursor; // substring, line 205 among_var = find_among_b(a_9, 8); if (among_var == 0) { return false; } // ], line 205 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 208 // call RV, line 208 if (!r_RV()) { return false; } // delete, line 208 slice_del(); break; case 2: // (, line 210 // call RV, line 210 if (!r_RV()) { return false; } // delete, line 210 slice_del(); // try, line 210 v_1 = limit - cursor; lab0: do { // (, line 210 // [, line 210 ket = cursor; // literal, line 210 if (!(eq_s_b(1, "u"))) { cursor = limit - v_1; break lab0; } // ], line 210 bra = cursor; // test, line 210 v_2 = limit - cursor; // literal, line 210 if (!(eq_s_b(1, "g"))) { cursor = limit - v_1; break lab0; } cursor = limit - v_2; // call RV, line 210 if (!r_RV()) { cursor = limit - v_1; break lab0; } // delete, line 210 slice_del(); } while (false); break; } return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; // (, line 215 // do, line 216 v_1 = cursor; lab0: do { // call mark_regions, line 216 if (!r_mark_regions()) { break lab0; } } while (false); cursor = v_1; // backwards, line 217 limit_backward = cursor; cursor = limit; // (, line 217 // do, line 218 v_2 = limit - cursor; lab1: do { // call attached_pronoun, line 218 if (!r_attached_pronoun()) { break lab1; } } while (false); cursor = limit - v_2; // do, line 219 v_3 = limit - cursor; lab2: do { // (, line 219 // or, line 219 lab3: do { v_4 = limit - cursor; lab4: do { // call standard_suffix, line 219 if (!r_standard_suffix()) { break lab4; } break lab3; } while (false); cursor = limit - v_4; lab5: do { // call y_verb_suffix, line 220 if (!r_y_verb_suffix()) { break lab5; } break lab3; } while (false); cursor = limit - v_4; // call verb_suffix, line 221 if (!r_verb_suffix()) { break lab2; } } while (false); } while (false); cursor = limit - v_3; // do, line 223 v_5 = limit - cursor; lab6: do { // call residual_suffix, line 223 if (!r_residual_suffix()) { break lab6; } } while (false); cursor = limit - v_5; cursor = limit_backward; // do, line 225 v_6 = cursor; lab7: do { // call postlude, line 225 if (!r_postlude()) { break lab7; } } while (false); cursor = v_6; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/dutchStemmer.java0000644000175000017500000006634511625126512032320 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class dutchStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "", -1, 6, "", this), new Among ( "\u00E1", 0, 1, "", this), new Among ( "\u00E4", 0, 1, "", this), new Among ( "\u00E9", 0, 2, "", this), new Among ( "\u00EB", 0, 2, "", this), new Among ( "\u00ED", 0, 3, "", this), new Among ( "\u00EF", 0, 3, "", this), new Among ( "\u00F3", 0, 4, "", this), new Among ( "\u00F6", 0, 4, "", this), new Among ( "\u00FA", 0, 5, "", this), new Among ( "\u00FC", 0, 5, "", this) }; private Among a_1[] = { new Among ( "", -1, 3, "", this), new Among ( "I", 0, 2, "", this), new Among ( "Y", 0, 1, "", this) }; private Among a_2[] = { new Among ( "dd", -1, -1, "", this), new Among ( "kk", -1, -1, "", this), new Among ( "tt", -1, -1, "", this) }; private Among a_3[] = { new Among ( "ene", -1, 2, "", this), new Among ( "se", -1, 3, "", this), new Among ( "en", -1, 2, "", this), new Among ( "heden", 2, 1, "", this), new Among ( "s", -1, 3, "", this) }; private Among a_4[] = { new Among ( "end", -1, 1, "", this), new Among ( "ig", -1, 2, "", this), new Among ( "ing", -1, 1, "", this), new Among ( "lijk", -1, 3, "", this), new Among ( "baar", -1, 4, "", this), new Among ( "bar", -1, 5, "", this) }; private Among a_5[] = { new Among ( "aa", -1, -1, "", this), new Among ( "ee", -1, -1, "", this), new Among ( "oo", -1, -1, "", this), new Among ( "uu", -1, -1, "", this) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; private static final char g_v_I[] = {1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; private static final char g_v_j[] = {17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; private int I_p2; private int I_p1; private boolean B_e_found; private void copy_from(dutchStemmer other) { I_p2 = other.I_p2; I_p1 = other.I_p1; B_e_found = other.B_e_found; super.copy_from(other); } private boolean r_prelude() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; // (, line 41 // test, line 42 v_1 = cursor; // repeat, line 42 replab0: while(true) { v_2 = cursor; lab1: do { // (, line 42 // [, line 43 bra = cursor; // substring, line 43 among_var = find_among(a_0, 11); if (among_var == 0) { break lab1; } // ], line 43 ket = cursor; switch(among_var) { case 0: break lab1; case 1: // (, line 45 // <-, line 45 slice_from("a"); break; case 2: // (, line 47 // <-, line 47 slice_from("e"); break; case 3: // (, line 49 // <-, line 49 slice_from("i"); break; case 4: // (, line 51 // <-, line 51 slice_from("o"); break; case 5: // (, line 53 // <-, line 53 slice_from("u"); break; case 6: // (, line 54 // next, line 54 if (cursor >= limit) { break lab1; } cursor++; break; } continue replab0; } while (false); cursor = v_2; break replab0; } cursor = v_1; // try, line 57 v_3 = cursor; lab2: do { // (, line 57 // [, line 57 bra = cursor; // literal, line 57 if (!(eq_s(1, "y"))) { cursor = v_3; break lab2; } // ], line 57 ket = cursor; // <-, line 57 slice_from("Y"); } while (false); // repeat, line 58 replab3: while(true) { v_4 = cursor; lab4: do { // goto, line 58 golab5: while(true) { v_5 = cursor; lab6: do { // (, line 58 if (!(in_grouping(g_v, 97, 232))) { break lab6; } // [, line 59 bra = cursor; // or, line 59 lab7: do { v_6 = cursor; lab8: do { // (, line 59 // literal, line 59 if (!(eq_s(1, "i"))) { break lab8; } // ], line 59 ket = cursor; if (!(in_grouping(g_v, 97, 232))) { break lab8; } // <-, line 59 slice_from("I"); break lab7; } while (false); cursor = v_6; // (, line 60 // literal, line 60 if (!(eq_s(1, "y"))) { break lab6; } // ], line 60 ket = cursor; // <-, line 60 slice_from("Y"); } while (false); cursor = v_5; break golab5; } while (false); cursor = v_5; if (cursor >= limit) { break lab4; } cursor++; } continue replab3; } while (false); cursor = v_4; break replab3; } return true; } private boolean r_mark_regions() { // (, line 64 I_p1 = limit; I_p2 = limit; // gopast, line 69 golab0: while(true) { lab1: do { if (!(in_grouping(g_v, 97, 232))) { break lab1; } break golab0; } while (false); if (cursor >= limit) { return false; } cursor++; } // gopast, line 69 golab2: while(true) { lab3: do { if (!(out_grouping(g_v, 97, 232))) { break lab3; } break golab2; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p1, line 69 I_p1 = cursor; // try, line 70 lab4: do { // (, line 70 if (!(I_p1 < 3)) { break lab4; } I_p1 = 3; } while (false); // gopast, line 71 golab5: while(true) { lab6: do { if (!(in_grouping(g_v, 97, 232))) { break lab6; } break golab5; } while (false); if (cursor >= limit) { return false; } cursor++; } // gopast, line 71 golab7: while(true) { lab8: do { if (!(out_grouping(g_v, 97, 232))) { break lab8; } break golab7; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p2, line 71 I_p2 = cursor; return true; } private boolean r_postlude() { int among_var; int v_1; // repeat, line 75 replab0: while(true) { v_1 = cursor; lab1: do { // (, line 75 // [, line 77 bra = cursor; // substring, line 77 among_var = find_among(a_1, 3); if (among_var == 0) { break lab1; } // ], line 77 ket = cursor; switch(among_var) { case 0: break lab1; case 1: // (, line 78 // <-, line 78 slice_from("y"); break; case 2: // (, line 79 // <-, line 79 slice_from("i"); break; case 3: // (, line 80 // next, line 80 if (cursor >= limit) { break lab1; } cursor++; break; } continue replab0; } while (false); cursor = v_1; break replab0; } return true; } private boolean r_R1() { if (!(I_p1 <= cursor)) { return false; } return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_undouble() { int v_1; // (, line 90 // test, line 91 v_1 = limit - cursor; // among, line 91 if (find_among_b(a_2, 3) == 0) { return false; } cursor = limit - v_1; // [, line 91 ket = cursor; // next, line 91 if (cursor <= limit_backward) { return false; } cursor--; // ], line 91 bra = cursor; // delete, line 91 slice_del(); return true; } private boolean r_e_ending() { int v_1; // (, line 94 // unset e_found, line 95 B_e_found = false; // [, line 96 ket = cursor; // literal, line 96 if (!(eq_s_b(1, "e"))) { return false; } // ], line 96 bra = cursor; // call R1, line 96 if (!r_R1()) { return false; } // test, line 96 v_1 = limit - cursor; if (!(out_grouping_b(g_v, 97, 232))) { return false; } cursor = limit - v_1; // delete, line 96 slice_del(); // set e_found, line 97 B_e_found = true; // call undouble, line 98 if (!r_undouble()) { return false; } return true; } private boolean r_en_ending() { int v_1; int v_2; // (, line 101 // call R1, line 102 if (!r_R1()) { return false; } // and, line 102 v_1 = limit - cursor; if (!(out_grouping_b(g_v, 97, 232))) { return false; } cursor = limit - v_1; // not, line 102 { v_2 = limit - cursor; lab0: do { // literal, line 102 if (!(eq_s_b(3, "gem"))) { break lab0; } return false; } while (false); cursor = limit - v_2; } // delete, line 102 slice_del(); // call undouble, line 103 if (!r_undouble()) { return false; } return true; } private boolean r_standard_suffix() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; int v_10; // (, line 106 // do, line 107 v_1 = limit - cursor; lab0: do { // (, line 107 // [, line 108 ket = cursor; // substring, line 108 among_var = find_among_b(a_3, 5); if (among_var == 0) { break lab0; } // ], line 108 bra = cursor; switch(among_var) { case 0: break lab0; case 1: // (, line 110 // call R1, line 110 if (!r_R1()) { break lab0; } // <-, line 110 slice_from("heid"); break; case 2: // (, line 113 // call en_ending, line 113 if (!r_en_ending()) { break lab0; } break; case 3: // (, line 116 // call R1, line 116 if (!r_R1()) { break lab0; } if (!(out_grouping_b(g_v_j, 97, 232))) { break lab0; } // delete, line 116 slice_del(); break; } } while (false); cursor = limit - v_1; // do, line 120 v_2 = limit - cursor; lab1: do { // call e_ending, line 120 if (!r_e_ending()) { break lab1; } } while (false); cursor = limit - v_2; // do, line 122 v_3 = limit - cursor; lab2: do { // (, line 122 // [, line 122 ket = cursor; // literal, line 122 if (!(eq_s_b(4, "heid"))) { break lab2; } // ], line 122 bra = cursor; // call R2, line 122 if (!r_R2()) { break lab2; } // not, line 122 { v_4 = limit - cursor; lab3: do { // literal, line 122 if (!(eq_s_b(1, "c"))) { break lab3; } break lab2; } while (false); cursor = limit - v_4; } // delete, line 122 slice_del(); // [, line 123 ket = cursor; // literal, line 123 if (!(eq_s_b(2, "en"))) { break lab2; } // ], line 123 bra = cursor; // call en_ending, line 123 if (!r_en_ending()) { break lab2; } } while (false); cursor = limit - v_3; // do, line 126 v_5 = limit - cursor; lab4: do { // (, line 126 // [, line 127 ket = cursor; // substring, line 127 among_var = find_among_b(a_4, 6); if (among_var == 0) { break lab4; } // ], line 127 bra = cursor; switch(among_var) { case 0: break lab4; case 1: // (, line 129 // call R2, line 129 if (!r_R2()) { break lab4; } // delete, line 129 slice_del(); // or, line 130 lab5: do { v_6 = limit - cursor; lab6: do { // (, line 130 // [, line 130 ket = cursor; // literal, line 130 if (!(eq_s_b(2, "ig"))) { break lab6; } // ], line 130 bra = cursor; // call R2, line 130 if (!r_R2()) { break lab6; } // not, line 130 { v_7 = limit - cursor; lab7: do { // literal, line 130 if (!(eq_s_b(1, "e"))) { break lab7; } break lab6; } while (false); cursor = limit - v_7; } // delete, line 130 slice_del(); break lab5; } while (false); cursor = limit - v_6; // call undouble, line 130 if (!r_undouble()) { break lab4; } } while (false); break; case 2: // (, line 133 // call R2, line 133 if (!r_R2()) { break lab4; } // not, line 133 { v_8 = limit - cursor; lab8: do { // literal, line 133 if (!(eq_s_b(1, "e"))) { break lab8; } break lab4; } while (false); cursor = limit - v_8; } // delete, line 133 slice_del(); break; case 3: // (, line 136 // call R2, line 136 if (!r_R2()) { break lab4; } // delete, line 136 slice_del(); // call e_ending, line 136 if (!r_e_ending()) { break lab4; } break; case 4: // (, line 139 // call R2, line 139 if (!r_R2()) { break lab4; } // delete, line 139 slice_del(); break; case 5: // (, line 142 // call R2, line 142 if (!r_R2()) { break lab4; } // Boolean test e_found, line 142 if (!(B_e_found)) { break lab4; } // delete, line 142 slice_del(); break; } } while (false); cursor = limit - v_5; // do, line 146 v_9 = limit - cursor; lab9: do { // (, line 146 if (!(out_grouping_b(g_v_I, 73, 232))) { break lab9; } // test, line 148 v_10 = limit - cursor; // (, line 148 // among, line 149 if (find_among_b(a_5, 4) == 0) { break lab9; } if (!(out_grouping_b(g_v, 97, 232))) { break lab9; } cursor = limit - v_10; // [, line 152 ket = cursor; // next, line 152 if (cursor <= limit_backward) { break lab9; } cursor--; // ], line 152 bra = cursor; // delete, line 152 slice_del(); } while (false); cursor = limit - v_9; return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; // (, line 157 // do, line 159 v_1 = cursor; lab0: do { // call prelude, line 159 if (!r_prelude()) { break lab0; } } while (false); cursor = v_1; // do, line 160 v_2 = cursor; lab1: do { // call mark_regions, line 160 if (!r_mark_regions()) { break lab1; } } while (false); cursor = v_2; // backwards, line 161 limit_backward = cursor; cursor = limit; // do, line 162 v_3 = limit - cursor; lab2: do { // call standard_suffix, line 162 if (!r_standard_suffix()) { break lab2; } } while (false); cursor = limit - v_3; cursor = limit_backward; // do, line 163 v_4 = cursor; lab3: do { // call postlude, line 163 if (!r_postlude()) { break lab3; } } while (false); cursor = v_4; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/porterStemmer.java0000644000175000017500000007202711625126512032516 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class porterStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "s", -1, 3, "", this), new Among ( "ies", 0, 2, "", this), new Among ( "sses", 0, 1, "", this), new Among ( "ss", 0, -1, "", this) }; private Among a_1[] = { new Among ( "", -1, 3, "", this), new Among ( "bb", 0, 2, "", this), new Among ( "dd", 0, 2, "", this), new Among ( "ff", 0, 2, "", this), new Among ( "gg", 0, 2, "", this), new Among ( "bl", 0, 1, "", this), new Among ( "mm", 0, 2, "", this), new Among ( "nn", 0, 2, "", this), new Among ( "pp", 0, 2, "", this), new Among ( "rr", 0, 2, "", this), new Among ( "at", 0, 1, "", this), new Among ( "tt", 0, 2, "", this), new Among ( "iz", 0, 1, "", this) }; private Among a_2[] = { new Among ( "ed", -1, 2, "", this), new Among ( "eed", 0, 1, "", this), new Among ( "ing", -1, 2, "", this) }; private Among a_3[] = { new Among ( "anci", -1, 3, "", this), new Among ( "enci", -1, 2, "", this), new Among ( "abli", -1, 4, "", this), new Among ( "eli", -1, 6, "", this), new Among ( "alli", -1, 9, "", this), new Among ( "ousli", -1, 12, "", this), new Among ( "entli", -1, 5, "", this), new Among ( "aliti", -1, 10, "", this), new Among ( "biliti", -1, 14, "", this), new Among ( "iviti", -1, 13, "", this), new Among ( "tional", -1, 1, "", this), new Among ( "ational", 10, 8, "", this), new Among ( "alism", -1, 10, "", this), new Among ( "ation", -1, 8, "", this), new Among ( "ization", 13, 7, "", this), new Among ( "izer", -1, 7, "", this), new Among ( "ator", -1, 8, "", this), new Among ( "iveness", -1, 13, "", this), new Among ( "fulness", -1, 11, "", this), new Among ( "ousness", -1, 12, "", this) }; private Among a_4[] = { new Among ( "icate", -1, 2, "", this), new Among ( "ative", -1, 3, "", this), new Among ( "alize", -1, 1, "", this), new Among ( "iciti", -1, 2, "", this), new Among ( "ical", -1, 2, "", this), new Among ( "ful", -1, 3, "", this), new Among ( "ness", -1, 3, "", this) }; private Among a_5[] = { new Among ( "ic", -1, 1, "", this), new Among ( "ance", -1, 1, "", this), new Among ( "ence", -1, 1, "", this), new Among ( "able", -1, 1, "", this), new Among ( "ible", -1, 1, "", this), new Among ( "ate", -1, 1, "", this), new Among ( "ive", -1, 1, "", this), new Among ( "ize", -1, 1, "", this), new Among ( "iti", -1, 1, "", this), new Among ( "al", -1, 1, "", this), new Among ( "ism", -1, 1, "", this), new Among ( "ion", -1, 2, "", this), new Among ( "er", -1, 1, "", this), new Among ( "ous", -1, 1, "", this), new Among ( "ant", -1, 1, "", this), new Among ( "ent", -1, 1, "", this), new Among ( "ment", 15, 1, "", this), new Among ( "ement", 16, 1, "", this), new Among ( "ou", -1, 1, "", this) }; private static final char g_v[] = {17, 65, 16, 1 }; private static final char g_v_WXY[] = {1, 17, 65, 208, 1 }; private boolean B_Y_found; private int I_p2; private int I_p1; private void copy_from(porterStemmer other) { B_Y_found = other.B_Y_found; I_p2 = other.I_p2; I_p1 = other.I_p1; super.copy_from(other); } private boolean r_shortv() { // (, line 19 if (!(out_grouping_b(g_v_WXY, 89, 121))) { return false; } if (!(in_grouping_b(g_v, 97, 121))) { return false; } if (!(out_grouping_b(g_v, 97, 121))) { return false; } return true; } private boolean r_R1() { if (!(I_p1 <= cursor)) { return false; } return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_Step_1a() { int among_var; // (, line 24 // [, line 25 ket = cursor; // substring, line 25 among_var = find_among_b(a_0, 4); if (among_var == 0) { return false; } // ], line 25 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 26 // <-, line 26 slice_from("ss"); break; case 2: // (, line 27 // <-, line 27 slice_from("i"); break; case 3: // (, line 29 // delete, line 29 slice_del(); break; } return true; } private boolean r_Step_1b() { int among_var; int v_1; int v_3; int v_4; // (, line 33 // [, line 34 ket = cursor; // substring, line 34 among_var = find_among_b(a_2, 3); if (among_var == 0) { return false; } // ], line 34 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 35 // call R1, line 35 if (!r_R1()) { return false; } // <-, line 35 slice_from("ee"); break; case 2: // (, line 37 // test, line 38 v_1 = limit - cursor; // gopast, line 38 golab0: while(true) { lab1: do { if (!(in_grouping_b(g_v, 97, 121))) { break lab1; } break golab0; } while (false); if (cursor <= limit_backward) { return false; } cursor--; } cursor = limit - v_1; // delete, line 38 slice_del(); // test, line 39 v_3 = limit - cursor; // substring, line 39 among_var = find_among_b(a_1, 13); if (among_var == 0) { return false; } cursor = limit - v_3; switch(among_var) { case 0: return false; case 1: // (, line 41 // <+, line 41 { int c = cursor; insert(cursor, cursor, "e"); cursor = c; } break; case 2: // (, line 44 // [, line 44 ket = cursor; // next, line 44 if (cursor <= limit_backward) { return false; } cursor--; // ], line 44 bra = cursor; // delete, line 44 slice_del(); break; case 3: // (, line 45 // atmark, line 45 if (cursor != I_p1) { return false; } // test, line 45 v_4 = limit - cursor; // call shortv, line 45 if (!r_shortv()) { return false; } cursor = limit - v_4; // <+, line 45 { int c = cursor; insert(cursor, cursor, "e"); cursor = c; } break; } break; } return true; } private boolean r_Step_1c() { int v_1; // (, line 51 // [, line 52 ket = cursor; // or, line 52 lab0: do { v_1 = limit - cursor; lab1: do { // literal, line 52 if (!(eq_s_b(1, "y"))) { break lab1; } break lab0; } while (false); cursor = limit - v_1; // literal, line 52 if (!(eq_s_b(1, "Y"))) { return false; } } while (false); // ], line 52 bra = cursor; // gopast, line 53 golab2: while(true) { lab3: do { if (!(in_grouping_b(g_v, 97, 121))) { break lab3; } break golab2; } while (false); if (cursor <= limit_backward) { return false; } cursor--; } // <-, line 54 slice_from("i"); return true; } private boolean r_Step_2() { int among_var; // (, line 57 // [, line 58 ket = cursor; // substring, line 58 among_var = find_among_b(a_3, 20); if (among_var == 0) { return false; } // ], line 58 bra = cursor; // call R1, line 58 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 59 // <-, line 59 slice_from("tion"); break; case 2: // (, line 60 // <-, line 60 slice_from("ence"); break; case 3: // (, line 61 // <-, line 61 slice_from("ance"); break; case 4: // (, line 62 // <-, line 62 slice_from("able"); break; case 5: // (, line 63 // <-, line 63 slice_from("ent"); break; case 6: // (, line 64 // <-, line 64 slice_from("e"); break; case 7: // (, line 66 // <-, line 66 slice_from("ize"); break; case 8: // (, line 68 // <-, line 68 slice_from("ate"); break; case 9: // (, line 69 // <-, line 69 slice_from("al"); break; case 10: // (, line 71 // <-, line 71 slice_from("al"); break; case 11: // (, line 72 // <-, line 72 slice_from("ful"); break; case 12: // (, line 74 // <-, line 74 slice_from("ous"); break; case 13: // (, line 76 // <-, line 76 slice_from("ive"); break; case 14: // (, line 77 // <-, line 77 slice_from("ble"); break; } return true; } private boolean r_Step_3() { int among_var; // (, line 81 // [, line 82 ket = cursor; // substring, line 82 among_var = find_among_b(a_4, 7); if (among_var == 0) { return false; } // ], line 82 bra = cursor; // call R1, line 82 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 83 // <-, line 83 slice_from("al"); break; case 2: // (, line 85 // <-, line 85 slice_from("ic"); break; case 3: // (, line 87 // delete, line 87 slice_del(); break; } return true; } private boolean r_Step_4() { int among_var; int v_1; // (, line 91 // [, line 92 ket = cursor; // substring, line 92 among_var = find_among_b(a_5, 19); if (among_var == 0) { return false; } // ], line 92 bra = cursor; // call R2, line 92 if (!r_R2()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 95 // delete, line 95 slice_del(); break; case 2: // (, line 96 // or, line 96 lab0: do { v_1 = limit - cursor; lab1: do { // literal, line 96 if (!(eq_s_b(1, "s"))) { break lab1; } break lab0; } while (false); cursor = limit - v_1; // literal, line 96 if (!(eq_s_b(1, "t"))) { return false; } } while (false); // delete, line 96 slice_del(); break; } return true; } private boolean r_Step_5a() { int v_1; int v_2; // (, line 100 // [, line 101 ket = cursor; // literal, line 101 if (!(eq_s_b(1, "e"))) { return false; } // ], line 101 bra = cursor; // or, line 102 lab0: do { v_1 = limit - cursor; lab1: do { // call R2, line 102 if (!r_R2()) { break lab1; } break lab0; } while (false); cursor = limit - v_1; // (, line 102 // call R1, line 102 if (!r_R1()) { return false; } // not, line 102 { v_2 = limit - cursor; lab2: do { // call shortv, line 102 if (!r_shortv()) { break lab2; } return false; } while (false); cursor = limit - v_2; } } while (false); // delete, line 103 slice_del(); return true; } private boolean r_Step_5b() { // (, line 106 // [, line 107 ket = cursor; // literal, line 107 if (!(eq_s_b(1, "l"))) { return false; } // ], line 107 bra = cursor; // call R2, line 108 if (!r_R2()) { return false; } // literal, line 108 if (!(eq_s_b(1, "l"))) { return false; } // delete, line 109 slice_del(); return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_10; int v_11; int v_12; int v_13; int v_14; int v_15; int v_16; int v_17; int v_18; int v_19; int v_20; // (, line 113 // unset Y_found, line 115 B_Y_found = false; // do, line 116 v_1 = cursor; lab0: do { // (, line 116 // [, line 116 bra = cursor; // literal, line 116 if (!(eq_s(1, "y"))) { break lab0; } // ], line 116 ket = cursor; // <-, line 116 slice_from("Y"); // set Y_found, line 116 B_Y_found = true; } while (false); cursor = v_1; // do, line 117 v_2 = cursor; lab1: do { // repeat, line 117 replab2: while(true) { v_3 = cursor; lab3: do { // (, line 117 // goto, line 117 golab4: while(true) { v_4 = cursor; lab5: do { // (, line 117 if (!(in_grouping(g_v, 97, 121))) { break lab5; } // [, line 117 bra = cursor; // literal, line 117 if (!(eq_s(1, "y"))) { break lab5; } // ], line 117 ket = cursor; cursor = v_4; break golab4; } while (false); cursor = v_4; if (cursor >= limit) { break lab3; } cursor++; } // <-, line 117 slice_from("Y"); // set Y_found, line 117 B_Y_found = true; continue replab2; } while (false); cursor = v_3; break replab2; } } while (false); cursor = v_2; I_p1 = limit; I_p2 = limit; // do, line 121 v_5 = cursor; lab6: do { // (, line 121 // gopast, line 122 golab7: while(true) { lab8: do { if (!(in_grouping(g_v, 97, 121))) { break lab8; } break golab7; } while (false); if (cursor >= limit) { break lab6; } cursor++; } // gopast, line 122 golab9: while(true) { lab10: do { if (!(out_grouping(g_v, 97, 121))) { break lab10; } break golab9; } while (false); if (cursor >= limit) { break lab6; } cursor++; } // setmark p1, line 122 I_p1 = cursor; // gopast, line 123 golab11: while(true) { lab12: do { if (!(in_grouping(g_v, 97, 121))) { break lab12; } break golab11; } while (false); if (cursor >= limit) { break lab6; } cursor++; } // gopast, line 123 golab13: while(true) { lab14: do { if (!(out_grouping(g_v, 97, 121))) { break lab14; } break golab13; } while (false); if (cursor >= limit) { break lab6; } cursor++; } // setmark p2, line 123 I_p2 = cursor; } while (false); cursor = v_5; // backwards, line 126 limit_backward = cursor; cursor = limit; // (, line 126 // do, line 127 v_10 = limit - cursor; lab15: do { // call Step_1a, line 127 if (!r_Step_1a()) { break lab15; } } while (false); cursor = limit - v_10; // do, line 128 v_11 = limit - cursor; lab16: do { // call Step_1b, line 128 if (!r_Step_1b()) { break lab16; } } while (false); cursor = limit - v_11; // do, line 129 v_12 = limit - cursor; lab17: do { // call Step_1c, line 129 if (!r_Step_1c()) { break lab17; } } while (false); cursor = limit - v_12; // do, line 130 v_13 = limit - cursor; lab18: do { // call Step_2, line 130 if (!r_Step_2()) { break lab18; } } while (false); cursor = limit - v_13; // do, line 131 v_14 = limit - cursor; lab19: do { // call Step_3, line 131 if (!r_Step_3()) { break lab19; } } while (false); cursor = limit - v_14; // do, line 132 v_15 = limit - cursor; lab20: do { // call Step_4, line 132 if (!r_Step_4()) { break lab20; } } while (false); cursor = limit - v_15; // do, line 133 v_16 = limit - cursor; lab21: do { // call Step_5a, line 133 if (!r_Step_5a()) { break lab21; } } while (false); cursor = limit - v_16; // do, line 134 v_17 = limit - cursor; lab22: do { // call Step_5b, line 134 if (!r_Step_5b()) { break lab22; } } while (false); cursor = limit - v_17; cursor = limit_backward; // do, line 137 v_18 = cursor; lab23: do { // (, line 137 // Boolean test Y_found, line 137 if (!(B_Y_found)) { break lab23; } // repeat, line 137 replab24: while(true) { v_19 = cursor; lab25: do { // (, line 137 // goto, line 137 golab26: while(true) { v_20 = cursor; lab27: do { // (, line 137 // [, line 137 bra = cursor; // literal, line 137 if (!(eq_s(1, "Y"))) { break lab27; } // ], line 137 ket = cursor; cursor = v_20; break golab26; } while (false); cursor = v_20; if (cursor >= limit) { break lab25; } cursor++; } // <-, line 137 slice_from("y"); continue replab24; } while (false); cursor = v_19; break replab24; } } while (false); cursor = v_18; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/englishStemmer.java0000644000175000017500000012720511625126512032633 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class englishStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "arsen", -1, -1, "", this), new Among ( "commun", -1, -1, "", this), new Among ( "gener", -1, -1, "", this) }; private Among a_1[] = { new Among ( "'", -1, 1, "", this), new Among ( "'s'", 0, 1, "", this), new Among ( "'s", -1, 1, "", this) }; private Among a_2[] = { new Among ( "ied", -1, 2, "", this), new Among ( "s", -1, 3, "", this), new Among ( "ies", 1, 2, "", this), new Among ( "sses", 1, 1, "", this), new Among ( "ss", 1, -1, "", this), new Among ( "us", 1, -1, "", this) }; private Among a_3[] = { new Among ( "", -1, 3, "", this), new Among ( "bb", 0, 2, "", this), new Among ( "dd", 0, 2, "", this), new Among ( "ff", 0, 2, "", this), new Among ( "gg", 0, 2, "", this), new Among ( "bl", 0, 1, "", this), new Among ( "mm", 0, 2, "", this), new Among ( "nn", 0, 2, "", this), new Among ( "pp", 0, 2, "", this), new Among ( "rr", 0, 2, "", this), new Among ( "at", 0, 1, "", this), new Among ( "tt", 0, 2, "", this), new Among ( "iz", 0, 1, "", this) }; private Among a_4[] = { new Among ( "ed", -1, 2, "", this), new Among ( "eed", 0, 1, "", this), new Among ( "ing", -1, 2, "", this), new Among ( "edly", -1, 2, "", this), new Among ( "eedly", 3, 1, "", this), new Among ( "ingly", -1, 2, "", this) }; private Among a_5[] = { new Among ( "anci", -1, 3, "", this), new Among ( "enci", -1, 2, "", this), new Among ( "ogi", -1, 13, "", this), new Among ( "li", -1, 16, "", this), new Among ( "bli", 3, 12, "", this), new Among ( "abli", 4, 4, "", this), new Among ( "alli", 3, 8, "", this), new Among ( "fulli", 3, 14, "", this), new Among ( "lessli", 3, 15, "", this), new Among ( "ousli", 3, 10, "", this), new Among ( "entli", 3, 5, "", this), new Among ( "aliti", -1, 8, "", this), new Among ( "biliti", -1, 12, "", this), new Among ( "iviti", -1, 11, "", this), new Among ( "tional", -1, 1, "", this), new Among ( "ational", 14, 7, "", this), new Among ( "alism", -1, 8, "", this), new Among ( "ation", -1, 7, "", this), new Among ( "ization", 17, 6, "", this), new Among ( "izer", -1, 6, "", this), new Among ( "ator", -1, 7, "", this), new Among ( "iveness", -1, 11, "", this), new Among ( "fulness", -1, 9, "", this), new Among ( "ousness", -1, 10, "", this) }; private Among a_6[] = { new Among ( "icate", -1, 4, "", this), new Among ( "ative", -1, 6, "", this), new Among ( "alize", -1, 3, "", this), new Among ( "iciti", -1, 4, "", this), new Among ( "ical", -1, 4, "", this), new Among ( "tional", -1, 1, "", this), new Among ( "ational", 5, 2, "", this), new Among ( "ful", -1, 5, "", this), new Among ( "ness", -1, 5, "", this) }; private Among a_7[] = { new Among ( "ic", -1, 1, "", this), new Among ( "ance", -1, 1, "", this), new Among ( "ence", -1, 1, "", this), new Among ( "able", -1, 1, "", this), new Among ( "ible", -1, 1, "", this), new Among ( "ate", -1, 1, "", this), new Among ( "ive", -1, 1, "", this), new Among ( "ize", -1, 1, "", this), new Among ( "iti", -1, 1, "", this), new Among ( "al", -1, 1, "", this), new Among ( "ism", -1, 1, "", this), new Among ( "ion", -1, 2, "", this), new Among ( "er", -1, 1, "", this), new Among ( "ous", -1, 1, "", this), new Among ( "ant", -1, 1, "", this), new Among ( "ent", -1, 1, "", this), new Among ( "ment", 15, 1, "", this), new Among ( "ement", 16, 1, "", this) }; private Among a_8[] = { new Among ( "e", -1, 1, "", this), new Among ( "l", -1, 2, "", this) }; private Among a_9[] = { new Among ( "succeed", -1, -1, "", this), new Among ( "proceed", -1, -1, "", this), new Among ( "exceed", -1, -1, "", this), new Among ( "canning", -1, -1, "", this), new Among ( "inning", -1, -1, "", this), new Among ( "earring", -1, -1, "", this), new Among ( "herring", -1, -1, "", this), new Among ( "outing", -1, -1, "", this) }; private Among a_10[] = { new Among ( "andes", -1, -1, "", this), new Among ( "atlas", -1, -1, "", this), new Among ( "bias", -1, -1, "", this), new Among ( "cosmos", -1, -1, "", this), new Among ( "dying", -1, 3, "", this), new Among ( "early", -1, 9, "", this), new Among ( "gently", -1, 7, "", this), new Among ( "howe", -1, -1, "", this), new Among ( "idly", -1, 6, "", this), new Among ( "lying", -1, 4, "", this), new Among ( "news", -1, -1, "", this), new Among ( "only", -1, 10, "", this), new Among ( "singly", -1, 11, "", this), new Among ( "skies", -1, 2, "", this), new Among ( "skis", -1, 1, "", this), new Among ( "sky", -1, -1, "", this), new Among ( "tying", -1, 5, "", this), new Among ( "ugly", -1, 8, "", this) }; private static final char g_v[] = {17, 65, 16, 1 }; private static final char g_v_WXY[] = {1, 17, 65, 208, 1 }; private static final char g_valid_LI[] = {55, 141, 2 }; private boolean B_Y_found; private int I_p2; private int I_p1; private void copy_from(englishStemmer other) { B_Y_found = other.B_Y_found; I_p2 = other.I_p2; I_p1 = other.I_p1; super.copy_from(other); } private boolean r_prelude() { int v_1; int v_2; int v_3; int v_4; int v_5; // (, line 25 // unset Y_found, line 26 B_Y_found = false; // do, line 27 v_1 = cursor; lab0: do { // (, line 27 // [, line 27 bra = cursor; // literal, line 27 if (!(eq_s(1, "'"))) { break lab0; } // ], line 27 ket = cursor; // delete, line 27 slice_del(); } while (false); cursor = v_1; // do, line 28 v_2 = cursor; lab1: do { // (, line 28 // [, line 28 bra = cursor; // literal, line 28 if (!(eq_s(1, "y"))) { break lab1; } // ], line 28 ket = cursor; // <-, line 28 slice_from("Y"); // set Y_found, line 28 B_Y_found = true; } while (false); cursor = v_2; // do, line 29 v_3 = cursor; lab2: do { // repeat, line 29 replab3: while(true) { v_4 = cursor; lab4: do { // (, line 29 // goto, line 29 golab5: while(true) { v_5 = cursor; lab6: do { // (, line 29 if (!(in_grouping(g_v, 97, 121))) { break lab6; } // [, line 29 bra = cursor; // literal, line 29 if (!(eq_s(1, "y"))) { break lab6; } // ], line 29 ket = cursor; cursor = v_5; break golab5; } while (false); cursor = v_5; if (cursor >= limit) { break lab4; } cursor++; } // <-, line 29 slice_from("Y"); // set Y_found, line 29 B_Y_found = true; continue replab3; } while (false); cursor = v_4; break replab3; } } while (false); cursor = v_3; return true; } private boolean r_mark_regions() { int v_1; int v_2; // (, line 32 I_p1 = limit; I_p2 = limit; // do, line 35 v_1 = cursor; lab0: do { // (, line 35 // or, line 41 lab1: do { v_2 = cursor; lab2: do { // among, line 36 if (find_among(a_0, 3) == 0) { break lab2; } break lab1; } while (false); cursor = v_2; // (, line 41 // gopast, line 41 golab3: while(true) { lab4: do { if (!(in_grouping(g_v, 97, 121))) { break lab4; } break golab3; } while (false); if (cursor >= limit) { break lab0; } cursor++; } // gopast, line 41 golab5: while(true) { lab6: do { if (!(out_grouping(g_v, 97, 121))) { break lab6; } break golab5; } while (false); if (cursor >= limit) { break lab0; } cursor++; } } while (false); // setmark p1, line 42 I_p1 = cursor; // gopast, line 43 golab7: while(true) { lab8: do { if (!(in_grouping(g_v, 97, 121))) { break lab8; } break golab7; } while (false); if (cursor >= limit) { break lab0; } cursor++; } // gopast, line 43 golab9: while(true) { lab10: do { if (!(out_grouping(g_v, 97, 121))) { break lab10; } break golab9; } while (false); if (cursor >= limit) { break lab0; } cursor++; } // setmark p2, line 43 I_p2 = cursor; } while (false); cursor = v_1; return true; } private boolean r_shortv() { int v_1; // (, line 49 // or, line 51 lab0: do { v_1 = limit - cursor; lab1: do { // (, line 50 if (!(out_grouping_b(g_v_WXY, 89, 121))) { break lab1; } if (!(in_grouping_b(g_v, 97, 121))) { break lab1; } if (!(out_grouping_b(g_v, 97, 121))) { break lab1; } break lab0; } while (false); cursor = limit - v_1; // (, line 52 if (!(out_grouping_b(g_v, 97, 121))) { return false; } if (!(in_grouping_b(g_v, 97, 121))) { return false; } // atlimit, line 52 if (cursor > limit_backward) { return false; } } while (false); return true; } private boolean r_R1() { if (!(I_p1 <= cursor)) { return false; } return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_Step_1a() { int among_var; int v_1; int v_2; // (, line 58 // try, line 59 v_1 = limit - cursor; lab0: do { // (, line 59 // [, line 60 ket = cursor; // substring, line 60 among_var = find_among_b(a_1, 3); if (among_var == 0) { cursor = limit - v_1; break lab0; } // ], line 60 bra = cursor; switch(among_var) { case 0: cursor = limit - v_1; break lab0; case 1: // (, line 62 // delete, line 62 slice_del(); break; } } while (false); // [, line 65 ket = cursor; // substring, line 65 among_var = find_among_b(a_2, 6); if (among_var == 0) { return false; } // ], line 65 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 66 // <-, line 66 slice_from("ss"); break; case 2: // (, line 68 // or, line 68 lab1: do { v_2 = limit - cursor; lab2: do { // (, line 68 // hop, line 68 { int c = cursor - 2; if (limit_backward > c || c > limit) { break lab2; } cursor = c; } // <-, line 68 slice_from("i"); break lab1; } while (false); cursor = limit - v_2; // <-, line 68 slice_from("ie"); } while (false); break; case 3: // (, line 69 // next, line 69 if (cursor <= limit_backward) { return false; } cursor--; // gopast, line 69 golab3: while(true) { lab4: do { if (!(in_grouping_b(g_v, 97, 121))) { break lab4; } break golab3; } while (false); if (cursor <= limit_backward) { return false; } cursor--; } // delete, line 69 slice_del(); break; } return true; } private boolean r_Step_1b() { int among_var; int v_1; int v_3; int v_4; // (, line 74 // [, line 75 ket = cursor; // substring, line 75 among_var = find_among_b(a_4, 6); if (among_var == 0) { return false; } // ], line 75 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 77 // call R1, line 77 if (!r_R1()) { return false; } // <-, line 77 slice_from("ee"); break; case 2: // (, line 79 // test, line 80 v_1 = limit - cursor; // gopast, line 80 golab0: while(true) { lab1: do { if (!(in_grouping_b(g_v, 97, 121))) { break lab1; } break golab0; } while (false); if (cursor <= limit_backward) { return false; } cursor--; } cursor = limit - v_1; // delete, line 80 slice_del(); // test, line 81 v_3 = limit - cursor; // substring, line 81 among_var = find_among_b(a_3, 13); if (among_var == 0) { return false; } cursor = limit - v_3; switch(among_var) { case 0: return false; case 1: // (, line 83 // <+, line 83 { int c = cursor; insert(cursor, cursor, "e"); cursor = c; } break; case 2: // (, line 86 // [, line 86 ket = cursor; // next, line 86 if (cursor <= limit_backward) { return false; } cursor--; // ], line 86 bra = cursor; // delete, line 86 slice_del(); break; case 3: // (, line 87 // atmark, line 87 if (cursor != I_p1) { return false; } // test, line 87 v_4 = limit - cursor; // call shortv, line 87 if (!r_shortv()) { return false; } cursor = limit - v_4; // <+, line 87 { int c = cursor; insert(cursor, cursor, "e"); cursor = c; } break; } break; } return true; } private boolean r_Step_1c() { int v_1; int v_2; // (, line 93 // [, line 94 ket = cursor; // or, line 94 lab0: do { v_1 = limit - cursor; lab1: do { // literal, line 94 if (!(eq_s_b(1, "y"))) { break lab1; } break lab0; } while (false); cursor = limit - v_1; // literal, line 94 if (!(eq_s_b(1, "Y"))) { return false; } } while (false); // ], line 94 bra = cursor; if (!(out_grouping_b(g_v, 97, 121))) { return false; } // not, line 95 { v_2 = limit - cursor; lab2: do { // atlimit, line 95 if (cursor > limit_backward) { break lab2; } return false; } while (false); cursor = limit - v_2; } // <-, line 96 slice_from("i"); return true; } private boolean r_Step_2() { int among_var; // (, line 99 // [, line 100 ket = cursor; // substring, line 100 among_var = find_among_b(a_5, 24); if (among_var == 0) { return false; } // ], line 100 bra = cursor; // call R1, line 100 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 101 // <-, line 101 slice_from("tion"); break; case 2: // (, line 102 // <-, line 102 slice_from("ence"); break; case 3: // (, line 103 // <-, line 103 slice_from("ance"); break; case 4: // (, line 104 // <-, line 104 slice_from("able"); break; case 5: // (, line 105 // <-, line 105 slice_from("ent"); break; case 6: // (, line 107 // <-, line 107 slice_from("ize"); break; case 7: // (, line 109 // <-, line 109 slice_from("ate"); break; case 8: // (, line 111 // <-, line 111 slice_from("al"); break; case 9: // (, line 112 // <-, line 112 slice_from("ful"); break; case 10: // (, line 114 // <-, line 114 slice_from("ous"); break; case 11: // (, line 116 // <-, line 116 slice_from("ive"); break; case 12: // (, line 118 // <-, line 118 slice_from("ble"); break; case 13: // (, line 119 // literal, line 119 if (!(eq_s_b(1, "l"))) { return false; } // <-, line 119 slice_from("og"); break; case 14: // (, line 120 // <-, line 120 slice_from("ful"); break; case 15: // (, line 121 // <-, line 121 slice_from("less"); break; case 16: // (, line 122 if (!(in_grouping_b(g_valid_LI, 99, 116))) { return false; } // delete, line 122 slice_del(); break; } return true; } private boolean r_Step_3() { int among_var; // (, line 126 // [, line 127 ket = cursor; // substring, line 127 among_var = find_among_b(a_6, 9); if (among_var == 0) { return false; } // ], line 127 bra = cursor; // call R1, line 127 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 128 // <-, line 128 slice_from("tion"); break; case 2: // (, line 129 // <-, line 129 slice_from("ate"); break; case 3: // (, line 130 // <-, line 130 slice_from("al"); break; case 4: // (, line 132 // <-, line 132 slice_from("ic"); break; case 5: // (, line 134 // delete, line 134 slice_del(); break; case 6: // (, line 136 // call R2, line 136 if (!r_R2()) { return false; } // delete, line 136 slice_del(); break; } return true; } private boolean r_Step_4() { int among_var; int v_1; // (, line 140 // [, line 141 ket = cursor; // substring, line 141 among_var = find_among_b(a_7, 18); if (among_var == 0) { return false; } // ], line 141 bra = cursor; // call R2, line 141 if (!r_R2()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 144 // delete, line 144 slice_del(); break; case 2: // (, line 145 // or, line 145 lab0: do { v_1 = limit - cursor; lab1: do { // literal, line 145 if (!(eq_s_b(1, "s"))) { break lab1; } break lab0; } while (false); cursor = limit - v_1; // literal, line 145 if (!(eq_s_b(1, "t"))) { return false; } } while (false); // delete, line 145 slice_del(); break; } return true; } private boolean r_Step_5() { int among_var; int v_1; int v_2; // (, line 149 // [, line 150 ket = cursor; // substring, line 150 among_var = find_among_b(a_8, 2); if (among_var == 0) { return false; } // ], line 150 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 151 // or, line 151 lab0: do { v_1 = limit - cursor; lab1: do { // call R2, line 151 if (!r_R2()) { break lab1; } break lab0; } while (false); cursor = limit - v_1; // (, line 151 // call R1, line 151 if (!r_R1()) { return false; } // not, line 151 { v_2 = limit - cursor; lab2: do { // call shortv, line 151 if (!r_shortv()) { break lab2; } return false; } while (false); cursor = limit - v_2; } } while (false); // delete, line 151 slice_del(); break; case 2: // (, line 152 // call R2, line 152 if (!r_R2()) { return false; } // literal, line 152 if (!(eq_s_b(1, "l"))) { return false; } // delete, line 152 slice_del(); break; } return true; } private boolean r_exception2() { // (, line 156 // [, line 158 ket = cursor; // substring, line 158 if (find_among_b(a_9, 8) == 0) { return false; } // ], line 158 bra = cursor; // atlimit, line 158 if (cursor > limit_backward) { return false; } return true; } private boolean r_exception1() { int among_var; // (, line 168 // [, line 170 bra = cursor; // substring, line 170 among_var = find_among(a_10, 18); if (among_var == 0) { return false; } // ], line 170 ket = cursor; // atlimit, line 170 if (cursor < limit) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 174 // <-, line 174 slice_from("ski"); break; case 2: // (, line 175 // <-, line 175 slice_from("sky"); break; case 3: // (, line 176 // <-, line 176 slice_from("die"); break; case 4: // (, line 177 // <-, line 177 slice_from("lie"); break; case 5: // (, line 178 // <-, line 178 slice_from("tie"); break; case 6: // (, line 182 // <-, line 182 slice_from("idl"); break; case 7: // (, line 183 // <-, line 183 slice_from("gentl"); break; case 8: // (, line 184 // <-, line 184 slice_from("ugli"); break; case 9: // (, line 185 // <-, line 185 slice_from("earli"); break; case 10: // (, line 186 // <-, line 186 slice_from("onli"); break; case 11: // (, line 187 // <-, line 187 slice_from("singl"); break; } return true; } private boolean r_postlude() { int v_1; int v_2; // (, line 203 // Boolean test Y_found, line 203 if (!(B_Y_found)) { return false; } // repeat, line 203 replab0: while(true) { v_1 = cursor; lab1: do { // (, line 203 // goto, line 203 golab2: while(true) { v_2 = cursor; lab3: do { // (, line 203 // [, line 203 bra = cursor; // literal, line 203 if (!(eq_s(1, "Y"))) { break lab3; } // ], line 203 ket = cursor; cursor = v_2; break golab2; } while (false); cursor = v_2; if (cursor >= limit) { break lab1; } cursor++; } // <-, line 203 slice_from("y"); continue replab0; } while (false); cursor = v_1; break replab0; } return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; int v_10; int v_11; int v_12; int v_13; // (, line 205 // or, line 207 lab0: do { v_1 = cursor; lab1: do { // call exception1, line 207 if (!r_exception1()) { break lab1; } break lab0; } while (false); cursor = v_1; lab2: do { // not, line 208 { v_2 = cursor; lab3: do { // hop, line 208 { int c = cursor + 3; if (0 > c || c > limit) { break lab3; } cursor = c; } break lab2; } while (false); cursor = v_2; } break lab0; } while (false); cursor = v_1; // (, line 208 // do, line 209 v_3 = cursor; lab4: do { // call prelude, line 209 if (!r_prelude()) { break lab4; } } while (false); cursor = v_3; // do, line 210 v_4 = cursor; lab5: do { // call mark_regions, line 210 if (!r_mark_regions()) { break lab5; } } while (false); cursor = v_4; // backwards, line 211 limit_backward = cursor; cursor = limit; // (, line 211 // do, line 213 v_5 = limit - cursor; lab6: do { // call Step_1a, line 213 if (!r_Step_1a()) { break lab6; } } while (false); cursor = limit - v_5; // or, line 215 lab7: do { v_6 = limit - cursor; lab8: do { // call exception2, line 215 if (!r_exception2()) { break lab8; } break lab7; } while (false); cursor = limit - v_6; // (, line 215 // do, line 217 v_7 = limit - cursor; lab9: do { // call Step_1b, line 217 if (!r_Step_1b()) { break lab9; } } while (false); cursor = limit - v_7; // do, line 218 v_8 = limit - cursor; lab10: do { // call Step_1c, line 218 if (!r_Step_1c()) { break lab10; } } while (false); cursor = limit - v_8; // do, line 220 v_9 = limit - cursor; lab11: do { // call Step_2, line 220 if (!r_Step_2()) { break lab11; } } while (false); cursor = limit - v_9; // do, line 221 v_10 = limit - cursor; lab12: do { // call Step_3, line 221 if (!r_Step_3()) { break lab12; } } while (false); cursor = limit - v_10; // do, line 222 v_11 = limit - cursor; lab13: do { // call Step_4, line 222 if (!r_Step_4()) { break lab13; } } while (false); cursor = limit - v_11; // do, line 224 v_12 = limit - cursor; lab14: do { // call Step_5, line 224 if (!r_Step_5()) { break lab14; } } while (false); cursor = limit - v_12; } while (false); cursor = limit_backward; // do, line 227 v_13 = cursor; lab15: do { // call postlude, line 227 if (!r_postlude()) { break lab15; } } while (false); cursor = v_13; } while (false); return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/germanStemmer.java0000644000175000017500000005700511625126512032453 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class germanStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "", -1, 6, "", this), new Among ( "U", 0, 2, "", this), new Among ( "Y", 0, 1, "", this), new Among ( "\u00E4", 0, 3, "", this), new Among ( "\u00F6", 0, 4, "", this), new Among ( "\u00FC", 0, 5, "", this) }; private Among a_1[] = { new Among ( "e", -1, 1, "", this), new Among ( "em", -1, 1, "", this), new Among ( "en", -1, 1, "", this), new Among ( "ern", -1, 1, "", this), new Among ( "er", -1, 1, "", this), new Among ( "s", -1, 2, "", this), new Among ( "es", 5, 1, "", this) }; private Among a_2[] = { new Among ( "en", -1, 1, "", this), new Among ( "er", -1, 1, "", this), new Among ( "st", -1, 2, "", this), new Among ( "est", 2, 1, "", this) }; private Among a_3[] = { new Among ( "ig", -1, 1, "", this), new Among ( "lich", -1, 1, "", this) }; private Among a_4[] = { new Among ( "end", -1, 1, "", this), new Among ( "ig", -1, 2, "", this), new Among ( "ung", -1, 1, "", this), new Among ( "lich", -1, 3, "", this), new Among ( "isch", -1, 2, "", this), new Among ( "ik", -1, 2, "", this), new Among ( "heit", -1, 3, "", this), new Among ( "keit", -1, 4, "", this) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 }; private static final char g_s_ending[] = {117, 30, 5 }; private static final char g_st_ending[] = {117, 30, 4 }; private int I_x; private int I_p2; private int I_p1; private void copy_from(germanStemmer other) { I_x = other.I_x; I_p2 = other.I_p2; I_p1 = other.I_p1; super.copy_from(other); } private boolean r_prelude() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; // (, line 28 // test, line 30 v_1 = cursor; // repeat, line 30 replab0: while(true) { v_2 = cursor; lab1: do { // (, line 30 // or, line 33 lab2: do { v_3 = cursor; lab3: do { // (, line 31 // [, line 32 bra = cursor; // literal, line 32 if (!(eq_s(1, "\u00DF"))) { break lab3; } // ], line 32 ket = cursor; // <-, line 32 slice_from("ss"); break lab2; } while (false); cursor = v_3; // next, line 33 if (cursor >= limit) { break lab1; } cursor++; } while (false); continue replab0; } while (false); cursor = v_2; break replab0; } cursor = v_1; // repeat, line 36 replab4: while(true) { v_4 = cursor; lab5: do { // goto, line 36 golab6: while(true) { v_5 = cursor; lab7: do { // (, line 36 if (!(in_grouping(g_v, 97, 252))) { break lab7; } // [, line 37 bra = cursor; // or, line 37 lab8: do { v_6 = cursor; lab9: do { // (, line 37 // literal, line 37 if (!(eq_s(1, "u"))) { break lab9; } // ], line 37 ket = cursor; if (!(in_grouping(g_v, 97, 252))) { break lab9; } // <-, line 37 slice_from("U"); break lab8; } while (false); cursor = v_6; // (, line 38 // literal, line 38 if (!(eq_s(1, "y"))) { break lab7; } // ], line 38 ket = cursor; if (!(in_grouping(g_v, 97, 252))) { break lab7; } // <-, line 38 slice_from("Y"); } while (false); cursor = v_5; break golab6; } while (false); cursor = v_5; if (cursor >= limit) { break lab5; } cursor++; } continue replab4; } while (false); cursor = v_4; break replab4; } return true; } private boolean r_mark_regions() { int v_1; // (, line 42 I_p1 = limit; I_p2 = limit; // test, line 47 v_1 = cursor; // (, line 47 // hop, line 47 { int c = cursor + 3; if (0 > c || c > limit) { return false; } cursor = c; } // setmark x, line 47 I_x = cursor; cursor = v_1; // gopast, line 49 golab0: while(true) { lab1: do { if (!(in_grouping(g_v, 97, 252))) { break lab1; } break golab0; } while (false); if (cursor >= limit) { return false; } cursor++; } // gopast, line 49 golab2: while(true) { lab3: do { if (!(out_grouping(g_v, 97, 252))) { break lab3; } break golab2; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p1, line 49 I_p1 = cursor; // try, line 50 lab4: do { // (, line 50 if (!(I_p1 < I_x)) { break lab4; } I_p1 = I_x; } while (false); // gopast, line 51 golab5: while(true) { lab6: do { if (!(in_grouping(g_v, 97, 252))) { break lab6; } break golab5; } while (false); if (cursor >= limit) { return false; } cursor++; } // gopast, line 51 golab7: while(true) { lab8: do { if (!(out_grouping(g_v, 97, 252))) { break lab8; } break golab7; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p2, line 51 I_p2 = cursor; return true; } private boolean r_postlude() { int among_var; int v_1; // repeat, line 55 replab0: while(true) { v_1 = cursor; lab1: do { // (, line 55 // [, line 57 bra = cursor; // substring, line 57 among_var = find_among(a_0, 6); if (among_var == 0) { break lab1; } // ], line 57 ket = cursor; switch(among_var) { case 0: break lab1; case 1: // (, line 58 // <-, line 58 slice_from("y"); break; case 2: // (, line 59 // <-, line 59 slice_from("u"); break; case 3: // (, line 60 // <-, line 60 slice_from("a"); break; case 4: // (, line 61 // <-, line 61 slice_from("o"); break; case 5: // (, line 62 // <-, line 62 slice_from("u"); break; case 6: // (, line 63 // next, line 63 if (cursor >= limit) { break lab1; } cursor++; break; } continue replab0; } while (false); cursor = v_1; break replab0; } return true; } private boolean r_R1() { if (!(I_p1 <= cursor)) { return false; } return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_standard_suffix() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; // (, line 73 // do, line 74 v_1 = limit - cursor; lab0: do { // (, line 74 // [, line 75 ket = cursor; // substring, line 75 among_var = find_among_b(a_1, 7); if (among_var == 0) { break lab0; } // ], line 75 bra = cursor; // call R1, line 75 if (!r_R1()) { break lab0; } switch(among_var) { case 0: break lab0; case 1: // (, line 77 // delete, line 77 slice_del(); break; case 2: // (, line 80 if (!(in_grouping_b(g_s_ending, 98, 116))) { break lab0; } // delete, line 80 slice_del(); break; } } while (false); cursor = limit - v_1; // do, line 84 v_2 = limit - cursor; lab1: do { // (, line 84 // [, line 85 ket = cursor; // substring, line 85 among_var = find_among_b(a_2, 4); if (among_var == 0) { break lab1; } // ], line 85 bra = cursor; // call R1, line 85 if (!r_R1()) { break lab1; } switch(among_var) { case 0: break lab1; case 1: // (, line 87 // delete, line 87 slice_del(); break; case 2: // (, line 90 if (!(in_grouping_b(g_st_ending, 98, 116))) { break lab1; } // hop, line 90 { int c = cursor - 3; if (limit_backward > c || c > limit) { break lab1; } cursor = c; } // delete, line 90 slice_del(); break; } } while (false); cursor = limit - v_2; // do, line 94 v_3 = limit - cursor; lab2: do { // (, line 94 // [, line 95 ket = cursor; // substring, line 95 among_var = find_among_b(a_4, 8); if (among_var == 0) { break lab2; } // ], line 95 bra = cursor; // call R2, line 95 if (!r_R2()) { break lab2; } switch(among_var) { case 0: break lab2; case 1: // (, line 97 // delete, line 97 slice_del(); // try, line 98 v_4 = limit - cursor; lab3: do { // (, line 98 // [, line 98 ket = cursor; // literal, line 98 if (!(eq_s_b(2, "ig"))) { cursor = limit - v_4; break lab3; } // ], line 98 bra = cursor; // not, line 98 { v_5 = limit - cursor; lab4: do { // literal, line 98 if (!(eq_s_b(1, "e"))) { break lab4; } cursor = limit - v_4; break lab3; } while (false); cursor = limit - v_5; } // call R2, line 98 if (!r_R2()) { cursor = limit - v_4; break lab3; } // delete, line 98 slice_del(); } while (false); break; case 2: // (, line 101 // not, line 101 { v_6 = limit - cursor; lab5: do { // literal, line 101 if (!(eq_s_b(1, "e"))) { break lab5; } break lab2; } while (false); cursor = limit - v_6; } // delete, line 101 slice_del(); break; case 3: // (, line 104 // delete, line 104 slice_del(); // try, line 105 v_7 = limit - cursor; lab6: do { // (, line 105 // [, line 106 ket = cursor; // or, line 106 lab7: do { v_8 = limit - cursor; lab8: do { // literal, line 106 if (!(eq_s_b(2, "er"))) { break lab8; } break lab7; } while (false); cursor = limit - v_8; // literal, line 106 if (!(eq_s_b(2, "en"))) { cursor = limit - v_7; break lab6; } } while (false); // ], line 106 bra = cursor; // call R1, line 106 if (!r_R1()) { cursor = limit - v_7; break lab6; } // delete, line 106 slice_del(); } while (false); break; case 4: // (, line 110 // delete, line 110 slice_del(); // try, line 111 v_9 = limit - cursor; lab9: do { // (, line 111 // [, line 112 ket = cursor; // substring, line 112 among_var = find_among_b(a_3, 2); if (among_var == 0) { cursor = limit - v_9; break lab9; } // ], line 112 bra = cursor; // call R2, line 112 if (!r_R2()) { cursor = limit - v_9; break lab9; } switch(among_var) { case 0: cursor = limit - v_9; break lab9; case 1: // (, line 114 // delete, line 114 slice_del(); break; } } while (false); break; } } while (false); cursor = limit - v_3; return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; // (, line 124 // do, line 125 v_1 = cursor; lab0: do { // call prelude, line 125 if (!r_prelude()) { break lab0; } } while (false); cursor = v_1; // do, line 126 v_2 = cursor; lab1: do { // call mark_regions, line 126 if (!r_mark_regions()) { break lab1; } } while (false); cursor = v_2; // backwards, line 127 limit_backward = cursor; cursor = limit; // do, line 128 v_3 = limit - cursor; lab2: do { // call standard_suffix, line 128 if (!r_standard_suffix()) { break lab2; } } while (false); cursor = limit - v_3; cursor = limit_backward; // do, line 129 v_4 = cursor; lab3: do { // call postlude, line 129 if (!r_postlude()) { break lab3; } } while (false); cursor = v_4; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/frenchStemmer.java0000644000175000017500000015666511625126512032463 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class frenchStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "col", -1, -1, "", this), new Among ( "par", -1, -1, "", this), new Among ( "tap", -1, -1, "", this) }; private Among a_1[] = { new Among ( "", -1, 4, "", this), new Among ( "I", 0, 1, "", this), new Among ( "U", 0, 2, "", this), new Among ( "Y", 0, 3, "", this) }; private Among a_2[] = { new Among ( "iqU", -1, 3, "", this), new Among ( "abl", -1, 3, "", this), new Among ( "I\u00E8r", -1, 4, "", this), new Among ( "i\u00E8r", -1, 4, "", this), new Among ( "eus", -1, 2, "", this), new Among ( "iv", -1, 1, "", this) }; private Among a_3[] = { new Among ( "ic", -1, 2, "", this), new Among ( "abil", -1, 1, "", this), new Among ( "iv", -1, 3, "", this) }; private Among a_4[] = { new Among ( "iqUe", -1, 1, "", this), new Among ( "atrice", -1, 2, "", this), new Among ( "ance", -1, 1, "", this), new Among ( "ence", -1, 5, "", this), new Among ( "logie", -1, 3, "", this), new Among ( "able", -1, 1, "", this), new Among ( "isme", -1, 1, "", this), new Among ( "euse", -1, 11, "", this), new Among ( "iste", -1, 1, "", this), new Among ( "ive", -1, 8, "", this), new Among ( "if", -1, 8, "", this), new Among ( "usion", -1, 4, "", this), new Among ( "ation", -1, 2, "", this), new Among ( "ution", -1, 4, "", this), new Among ( "ateur", -1, 2, "", this), new Among ( "iqUes", -1, 1, "", this), new Among ( "atrices", -1, 2, "", this), new Among ( "ances", -1, 1, "", this), new Among ( "ences", -1, 5, "", this), new Among ( "logies", -1, 3, "", this), new Among ( "ables", -1, 1, "", this), new Among ( "ismes", -1, 1, "", this), new Among ( "euses", -1, 11, "", this), new Among ( "istes", -1, 1, "", this), new Among ( "ives", -1, 8, "", this), new Among ( "ifs", -1, 8, "", this), new Among ( "usions", -1, 4, "", this), new Among ( "ations", -1, 2, "", this), new Among ( "utions", -1, 4, "", this), new Among ( "ateurs", -1, 2, "", this), new Among ( "ments", -1, 15, "", this), new Among ( "ements", 30, 6, "", this), new Among ( "issements", 31, 12, "", this), new Among ( "it\u00E9s", -1, 7, "", this), new Among ( "ment", -1, 15, "", this), new Among ( "ement", 34, 6, "", this), new Among ( "issement", 35, 12, "", this), new Among ( "amment", 34, 13, "", this), new Among ( "emment", 34, 14, "", this), new Among ( "aux", -1, 10, "", this), new Among ( "eaux", 39, 9, "", this), new Among ( "eux", -1, 1, "", this), new Among ( "it\u00E9", -1, 7, "", this) }; private Among a_5[] = { new Among ( "ira", -1, 1, "", this), new Among ( "ie", -1, 1, "", this), new Among ( "isse", -1, 1, "", this), new Among ( "issante", -1, 1, "", this), new Among ( "i", -1, 1, "", this), new Among ( "irai", 4, 1, "", this), new Among ( "ir", -1, 1, "", this), new Among ( "iras", -1, 1, "", this), new Among ( "ies", -1, 1, "", this), new Among ( "\u00EEmes", -1, 1, "", this), new Among ( "isses", -1, 1, "", this), new Among ( "issantes", -1, 1, "", this), new Among ( "\u00EEtes", -1, 1, "", this), new Among ( "is", -1, 1, "", this), new Among ( "irais", 13, 1, "", this), new Among ( "issais", 13, 1, "", this), new Among ( "irions", -1, 1, "", this), new Among ( "issions", -1, 1, "", this), new Among ( "irons", -1, 1, "", this), new Among ( "issons", -1, 1, "", this), new Among ( "issants", -1, 1, "", this), new Among ( "it", -1, 1, "", this), new Among ( "irait", 21, 1, "", this), new Among ( "issait", 21, 1, "", this), new Among ( "issant", -1, 1, "", this), new Among ( "iraIent", -1, 1, "", this), new Among ( "issaIent", -1, 1, "", this), new Among ( "irent", -1, 1, "", this), new Among ( "issent", -1, 1, "", this), new Among ( "iront", -1, 1, "", this), new Among ( "\u00EEt", -1, 1, "", this), new Among ( "iriez", -1, 1, "", this), new Among ( "issiez", -1, 1, "", this), new Among ( "irez", -1, 1, "", this), new Among ( "issez", -1, 1, "", this) }; private Among a_6[] = { new Among ( "a", -1, 3, "", this), new Among ( "era", 0, 2, "", this), new Among ( "asse", -1, 3, "", this), new Among ( "ante", -1, 3, "", this), new Among ( "\u00E9e", -1, 2, "", this), new Among ( "ai", -1, 3, "", this), new Among ( "erai", 5, 2, "", this), new Among ( "er", -1, 2, "", this), new Among ( "as", -1, 3, "", this), new Among ( "eras", 8, 2, "", this), new Among ( "\u00E2mes", -1, 3, "", this), new Among ( "asses", -1, 3, "", this), new Among ( "antes", -1, 3, "", this), new Among ( "\u00E2tes", -1, 3, "", this), new Among ( "\u00E9es", -1, 2, "", this), new Among ( "ais", -1, 3, "", this), new Among ( "erais", 15, 2, "", this), new Among ( "ions", -1, 1, "", this), new Among ( "erions", 17, 2, "", this), new Among ( "assions", 17, 3, "", this), new Among ( "erons", -1, 2, "", this), new Among ( "ants", -1, 3, "", this), new Among ( "\u00E9s", -1, 2, "", this), new Among ( "ait", -1, 3, "", this), new Among ( "erait", 23, 2, "", this), new Among ( "ant", -1, 3, "", this), new Among ( "aIent", -1, 3, "", this), new Among ( "eraIent", 26, 2, "", this), new Among ( "\u00E8rent", -1, 2, "", this), new Among ( "assent", -1, 3, "", this), new Among ( "eront", -1, 2, "", this), new Among ( "\u00E2t", -1, 3, "", this), new Among ( "ez", -1, 2, "", this), new Among ( "iez", 32, 2, "", this), new Among ( "eriez", 33, 2, "", this), new Among ( "assiez", 33, 3, "", this), new Among ( "erez", 32, 2, "", this), new Among ( "\u00E9", -1, 2, "", this) }; private Among a_7[] = { new Among ( "e", -1, 3, "", this), new Among ( "I\u00E8re", 0, 2, "", this), new Among ( "i\u00E8re", 0, 2, "", this), new Among ( "ion", -1, 1, "", this), new Among ( "Ier", -1, 2, "", this), new Among ( "ier", -1, 2, "", this), new Among ( "\u00EB", -1, 4, "", this) }; private Among a_8[] = { new Among ( "ell", -1, -1, "", this), new Among ( "eill", -1, -1, "", this), new Among ( "enn", -1, -1, "", this), new Among ( "onn", -1, -1, "", this), new Among ( "ett", -1, -1, "", this) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 }; private static final char g_keep_with_s[] = {1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; private int I_p2; private int I_p1; private int I_pV; private void copy_from(frenchStemmer other) { I_p2 = other.I_p2; I_p1 = other.I_p1; I_pV = other.I_pV; super.copy_from(other); } private boolean r_prelude() { int v_1; int v_2; int v_3; int v_4; // repeat, line 38 replab0: while(true) { v_1 = cursor; lab1: do { // goto, line 38 golab2: while(true) { v_2 = cursor; lab3: do { // (, line 38 // or, line 44 lab4: do { v_3 = cursor; lab5: do { // (, line 40 if (!(in_grouping(g_v, 97, 251))) { break lab5; } // [, line 40 bra = cursor; // or, line 40 lab6: do { v_4 = cursor; lab7: do { // (, line 40 // literal, line 40 if (!(eq_s(1, "u"))) { break lab7; } // ], line 40 ket = cursor; if (!(in_grouping(g_v, 97, 251))) { break lab7; } // <-, line 40 slice_from("U"); break lab6; } while (false); cursor = v_4; lab8: do { // (, line 41 // literal, line 41 if (!(eq_s(1, "i"))) { break lab8; } // ], line 41 ket = cursor; if (!(in_grouping(g_v, 97, 251))) { break lab8; } // <-, line 41 slice_from("I"); break lab6; } while (false); cursor = v_4; // (, line 42 // literal, line 42 if (!(eq_s(1, "y"))) { break lab5; } // ], line 42 ket = cursor; // <-, line 42 slice_from("Y"); } while (false); break lab4; } while (false); cursor = v_3; lab9: do { // (, line 45 // [, line 45 bra = cursor; // literal, line 45 if (!(eq_s(1, "y"))) { break lab9; } // ], line 45 ket = cursor; if (!(in_grouping(g_v, 97, 251))) { break lab9; } // <-, line 45 slice_from("Y"); break lab4; } while (false); cursor = v_3; // (, line 47 // literal, line 47 if (!(eq_s(1, "q"))) { break lab3; } // [, line 47 bra = cursor; // literal, line 47 if (!(eq_s(1, "u"))) { break lab3; } // ], line 47 ket = cursor; // <-, line 47 slice_from("U"); } while (false); cursor = v_2; break golab2; } while (false); cursor = v_2; if (cursor >= limit) { break lab1; } cursor++; } continue replab0; } while (false); cursor = v_1; break replab0; } return true; } private boolean r_mark_regions() { int v_1; int v_2; int v_4; // (, line 50 I_pV = limit; I_p1 = limit; I_p2 = limit; // do, line 56 v_1 = cursor; lab0: do { // (, line 56 // or, line 58 lab1: do { v_2 = cursor; lab2: do { // (, line 57 if (!(in_grouping(g_v, 97, 251))) { break lab2; } if (!(in_grouping(g_v, 97, 251))) { break lab2; } // next, line 57 if (cursor >= limit) { break lab2; } cursor++; break lab1; } while (false); cursor = v_2; lab3: do { // among, line 59 if (find_among(a_0, 3) == 0) { break lab3; } break lab1; } while (false); cursor = v_2; // (, line 66 // next, line 66 if (cursor >= limit) { break lab0; } cursor++; // gopast, line 66 golab4: while(true) { lab5: do { if (!(in_grouping(g_v, 97, 251))) { break lab5; } break golab4; } while (false); if (cursor >= limit) { break lab0; } cursor++; } } while (false); // setmark pV, line 67 I_pV = cursor; } while (false); cursor = v_1; // do, line 69 v_4 = cursor; lab6: do { // (, line 69 // gopast, line 70 golab7: while(true) { lab8: do { if (!(in_grouping(g_v, 97, 251))) { break lab8; } break golab7; } while (false); if (cursor >= limit) { break lab6; } cursor++; } // gopast, line 70 golab9: while(true) { lab10: do { if (!(out_grouping(g_v, 97, 251))) { break lab10; } break golab9; } while (false); if (cursor >= limit) { break lab6; } cursor++; } // setmark p1, line 70 I_p1 = cursor; // gopast, line 71 golab11: while(true) { lab12: do { if (!(in_grouping(g_v, 97, 251))) { break lab12; } break golab11; } while (false); if (cursor >= limit) { break lab6; } cursor++; } // gopast, line 71 golab13: while(true) { lab14: do { if (!(out_grouping(g_v, 97, 251))) { break lab14; } break golab13; } while (false); if (cursor >= limit) { break lab6; } cursor++; } // setmark p2, line 71 I_p2 = cursor; } while (false); cursor = v_4; return true; } private boolean r_postlude() { int among_var; int v_1; // repeat, line 75 replab0: while(true) { v_1 = cursor; lab1: do { // (, line 75 // [, line 77 bra = cursor; // substring, line 77 among_var = find_among(a_1, 4); if (among_var == 0) { break lab1; } // ], line 77 ket = cursor; switch(among_var) { case 0: break lab1; case 1: // (, line 78 // <-, line 78 slice_from("i"); break; case 2: // (, line 79 // <-, line 79 slice_from("u"); break; case 3: // (, line 80 // <-, line 80 slice_from("y"); break; case 4: // (, line 81 // next, line 81 if (cursor >= limit) { break lab1; } cursor++; break; } continue replab0; } while (false); cursor = v_1; break replab0; } return true; } private boolean r_RV() { if (!(I_pV <= cursor)) { return false; } return true; } private boolean r_R1() { if (!(I_p1 <= cursor)) { return false; } return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_standard_suffix() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; int v_10; int v_11; // (, line 91 // [, line 92 ket = cursor; // substring, line 92 among_var = find_among_b(a_4, 43); if (among_var == 0) { return false; } // ], line 92 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 96 // call R2, line 96 if (!r_R2()) { return false; } // delete, line 96 slice_del(); break; case 2: // (, line 99 // call R2, line 99 if (!r_R2()) { return false; } // delete, line 99 slice_del(); // try, line 100 v_1 = limit - cursor; lab0: do { // (, line 100 // [, line 100 ket = cursor; // literal, line 100 if (!(eq_s_b(2, "ic"))) { cursor = limit - v_1; break lab0; } // ], line 100 bra = cursor; // or, line 100 lab1: do { v_2 = limit - cursor; lab2: do { // (, line 100 // call R2, line 100 if (!r_R2()) { break lab2; } // delete, line 100 slice_del(); break lab1; } while (false); cursor = limit - v_2; // <-, line 100 slice_from("iqU"); } while (false); } while (false); break; case 3: // (, line 104 // call R2, line 104 if (!r_R2()) { return false; } // <-, line 104 slice_from("log"); break; case 4: // (, line 107 // call R2, line 107 if (!r_R2()) { return false; } // <-, line 107 slice_from("u"); break; case 5: // (, line 110 // call R2, line 110 if (!r_R2()) { return false; } // <-, line 110 slice_from("ent"); break; case 6: // (, line 113 // call RV, line 114 if (!r_RV()) { return false; } // delete, line 114 slice_del(); // try, line 115 v_3 = limit - cursor; lab3: do { // (, line 115 // [, line 116 ket = cursor; // substring, line 116 among_var = find_among_b(a_2, 6); if (among_var == 0) { cursor = limit - v_3; break lab3; } // ], line 116 bra = cursor; switch(among_var) { case 0: cursor = limit - v_3; break lab3; case 1: // (, line 117 // call R2, line 117 if (!r_R2()) { cursor = limit - v_3; break lab3; } // delete, line 117 slice_del(); // [, line 117 ket = cursor; // literal, line 117 if (!(eq_s_b(2, "at"))) { cursor = limit - v_3; break lab3; } // ], line 117 bra = cursor; // call R2, line 117 if (!r_R2()) { cursor = limit - v_3; break lab3; } // delete, line 117 slice_del(); break; case 2: // (, line 118 // or, line 118 lab4: do { v_4 = limit - cursor; lab5: do { // (, line 118 // call R2, line 118 if (!r_R2()) { break lab5; } // delete, line 118 slice_del(); break lab4; } while (false); cursor = limit - v_4; // (, line 118 // call R1, line 118 if (!r_R1()) { cursor = limit - v_3; break lab3; } // <-, line 118 slice_from("eux"); } while (false); break; case 3: // (, line 120 // call R2, line 120 if (!r_R2()) { cursor = limit - v_3; break lab3; } // delete, line 120 slice_del(); break; case 4: // (, line 122 // call RV, line 122 if (!r_RV()) { cursor = limit - v_3; break lab3; } // <-, line 122 slice_from("i"); break; } } while (false); break; case 7: // (, line 128 // call R2, line 129 if (!r_R2()) { return false; } // delete, line 129 slice_del(); // try, line 130 v_5 = limit - cursor; lab6: do { // (, line 130 // [, line 131 ket = cursor; // substring, line 131 among_var = find_among_b(a_3, 3); if (among_var == 0) { cursor = limit - v_5; break lab6; } // ], line 131 bra = cursor; switch(among_var) { case 0: cursor = limit - v_5; break lab6; case 1: // (, line 132 // or, line 132 lab7: do { v_6 = limit - cursor; lab8: do { // (, line 132 // call R2, line 132 if (!r_R2()) { break lab8; } // delete, line 132 slice_del(); break lab7; } while (false); cursor = limit - v_6; // <-, line 132 slice_from("abl"); } while (false); break; case 2: // (, line 133 // or, line 133 lab9: do { v_7 = limit - cursor; lab10: do { // (, line 133 // call R2, line 133 if (!r_R2()) { break lab10; } // delete, line 133 slice_del(); break lab9; } while (false); cursor = limit - v_7; // <-, line 133 slice_from("iqU"); } while (false); break; case 3: // (, line 134 // call R2, line 134 if (!r_R2()) { cursor = limit - v_5; break lab6; } // delete, line 134 slice_del(); break; } } while (false); break; case 8: // (, line 140 // call R2, line 141 if (!r_R2()) { return false; } // delete, line 141 slice_del(); // try, line 142 v_8 = limit - cursor; lab11: do { // (, line 142 // [, line 142 ket = cursor; // literal, line 142 if (!(eq_s_b(2, "at"))) { cursor = limit - v_8; break lab11; } // ], line 142 bra = cursor; // call R2, line 142 if (!r_R2()) { cursor = limit - v_8; break lab11; } // delete, line 142 slice_del(); // [, line 142 ket = cursor; // literal, line 142 if (!(eq_s_b(2, "ic"))) { cursor = limit - v_8; break lab11; } // ], line 142 bra = cursor; // or, line 142 lab12: do { v_9 = limit - cursor; lab13: do { // (, line 142 // call R2, line 142 if (!r_R2()) { break lab13; } // delete, line 142 slice_del(); break lab12; } while (false); cursor = limit - v_9; // <-, line 142 slice_from("iqU"); } while (false); } while (false); break; case 9: // (, line 144 // <-, line 144 slice_from("eau"); break; case 10: // (, line 145 // call R1, line 145 if (!r_R1()) { return false; } // <-, line 145 slice_from("al"); break; case 11: // (, line 147 // or, line 147 lab14: do { v_10 = limit - cursor; lab15: do { // (, line 147 // call R2, line 147 if (!r_R2()) { break lab15; } // delete, line 147 slice_del(); break lab14; } while (false); cursor = limit - v_10; // (, line 147 // call R1, line 147 if (!r_R1()) { return false; } // <-, line 147 slice_from("eux"); } while (false); break; case 12: // (, line 150 // call R1, line 150 if (!r_R1()) { return false; } if (!(out_grouping_b(g_v, 97, 251))) { return false; } // delete, line 150 slice_del(); break; case 13: // (, line 155 // call RV, line 155 if (!r_RV()) { return false; } // fail, line 155 // (, line 155 // <-, line 155 slice_from("ant"); return false; case 14: // (, line 156 // call RV, line 156 if (!r_RV()) { return false; } // fail, line 156 // (, line 156 // <-, line 156 slice_from("ent"); return false; case 15: // (, line 158 // test, line 158 v_11 = limit - cursor; // (, line 158 if (!(in_grouping_b(g_v, 97, 251))) { return false; } // call RV, line 158 if (!r_RV()) { return false; } cursor = limit - v_11; // fail, line 158 // (, line 158 // delete, line 158 slice_del(); return false; } return true; } private boolean r_i_verb_suffix() { int among_var; int v_1; int v_2; // setlimit, line 163 v_1 = limit - cursor; // tomark, line 163 if (cursor < I_pV) { return false; } cursor = I_pV; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 163 // [, line 164 ket = cursor; // substring, line 164 among_var = find_among_b(a_5, 35); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 164 bra = cursor; switch(among_var) { case 0: limit_backward = v_2; return false; case 1: // (, line 170 if (!(out_grouping_b(g_v, 97, 251))) { limit_backward = v_2; return false; } // delete, line 170 slice_del(); break; } limit_backward = v_2; return true; } private boolean r_verb_suffix() { int among_var; int v_1; int v_2; int v_3; // setlimit, line 174 v_1 = limit - cursor; // tomark, line 174 if (cursor < I_pV) { return false; } cursor = I_pV; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 174 // [, line 175 ket = cursor; // substring, line 175 among_var = find_among_b(a_6, 38); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 175 bra = cursor; switch(among_var) { case 0: limit_backward = v_2; return false; case 1: // (, line 177 // call R2, line 177 if (!r_R2()) { limit_backward = v_2; return false; } // delete, line 177 slice_del(); break; case 2: // (, line 185 // delete, line 185 slice_del(); break; case 3: // (, line 190 // delete, line 190 slice_del(); // try, line 191 v_3 = limit - cursor; lab0: do { // (, line 191 // [, line 191 ket = cursor; // literal, line 191 if (!(eq_s_b(1, "e"))) { cursor = limit - v_3; break lab0; } // ], line 191 bra = cursor; // delete, line 191 slice_del(); } while (false); break; } limit_backward = v_2; return true; } private boolean r_residual_suffix() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; // (, line 198 // try, line 199 v_1 = limit - cursor; lab0: do { // (, line 199 // [, line 199 ket = cursor; // literal, line 199 if (!(eq_s_b(1, "s"))) { cursor = limit - v_1; break lab0; } // ], line 199 bra = cursor; // test, line 199 v_2 = limit - cursor; if (!(out_grouping_b(g_keep_with_s, 97, 232))) { cursor = limit - v_1; break lab0; } cursor = limit - v_2; // delete, line 199 slice_del(); } while (false); // setlimit, line 200 v_3 = limit - cursor; // tomark, line 200 if (cursor < I_pV) { return false; } cursor = I_pV; v_4 = limit_backward; limit_backward = cursor; cursor = limit - v_3; // (, line 200 // [, line 201 ket = cursor; // substring, line 201 among_var = find_among_b(a_7, 7); if (among_var == 0) { limit_backward = v_4; return false; } // ], line 201 bra = cursor; switch(among_var) { case 0: limit_backward = v_4; return false; case 1: // (, line 202 // call R2, line 202 if (!r_R2()) { limit_backward = v_4; return false; } // or, line 202 lab1: do { v_5 = limit - cursor; lab2: do { // literal, line 202 if (!(eq_s_b(1, "s"))) { break lab2; } break lab1; } while (false); cursor = limit - v_5; // literal, line 202 if (!(eq_s_b(1, "t"))) { limit_backward = v_4; return false; } } while (false); // delete, line 202 slice_del(); break; case 2: // (, line 204 // <-, line 204 slice_from("i"); break; case 3: // (, line 205 // delete, line 205 slice_del(); break; case 4: // (, line 206 // literal, line 206 if (!(eq_s_b(2, "gu"))) { limit_backward = v_4; return false; } // delete, line 206 slice_del(); break; } limit_backward = v_4; return true; } private boolean r_un_double() { int v_1; // (, line 211 // test, line 212 v_1 = limit - cursor; // among, line 212 if (find_among_b(a_8, 5) == 0) { return false; } cursor = limit - v_1; // [, line 212 ket = cursor; // next, line 212 if (cursor <= limit_backward) { return false; } cursor--; // ], line 212 bra = cursor; // delete, line 212 slice_del(); return true; } private boolean r_un_accent() { int v_3; // (, line 215 // atleast, line 216 { int v_1 = 1; // atleast, line 216 replab0: while(true) { lab1: do { if (!(out_grouping_b(g_v, 97, 251))) { break lab1; } v_1--; continue replab0; } while (false); break replab0; } if (v_1 > 0) { return false; } } // [, line 217 ket = cursor; // or, line 217 lab2: do { v_3 = limit - cursor; lab3: do { // literal, line 217 if (!(eq_s_b(1, "\u00E9"))) { break lab3; } break lab2; } while (false); cursor = limit - v_3; // literal, line 217 if (!(eq_s_b(1, "\u00E8"))) { return false; } } while (false); // ], line 217 bra = cursor; // <-, line 217 slice_from("e"); return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; int v_10; int v_11; // (, line 221 // do, line 223 v_1 = cursor; lab0: do { // call prelude, line 223 if (!r_prelude()) { break lab0; } } while (false); cursor = v_1; // do, line 224 v_2 = cursor; lab1: do { // call mark_regions, line 224 if (!r_mark_regions()) { break lab1; } } while (false); cursor = v_2; // backwards, line 225 limit_backward = cursor; cursor = limit; // (, line 225 // do, line 227 v_3 = limit - cursor; lab2: do { // (, line 227 // or, line 237 lab3: do { v_4 = limit - cursor; lab4: do { // (, line 228 // and, line 233 v_5 = limit - cursor; // (, line 229 // or, line 229 lab5: do { v_6 = limit - cursor; lab6: do { // call standard_suffix, line 229 if (!r_standard_suffix()) { break lab6; } break lab5; } while (false); cursor = limit - v_6; lab7: do { // call i_verb_suffix, line 230 if (!r_i_verb_suffix()) { break lab7; } break lab5; } while (false); cursor = limit - v_6; // call verb_suffix, line 231 if (!r_verb_suffix()) { break lab4; } } while (false); cursor = limit - v_5; // try, line 234 v_7 = limit - cursor; lab8: do { // (, line 234 // [, line 234 ket = cursor; // or, line 234 lab9: do { v_8 = limit - cursor; lab10: do { // (, line 234 // literal, line 234 if (!(eq_s_b(1, "Y"))) { break lab10; } // ], line 234 bra = cursor; // <-, line 234 slice_from("i"); break lab9; } while (false); cursor = limit - v_8; // (, line 235 // literal, line 235 if (!(eq_s_b(1, "\u00E7"))) { cursor = limit - v_7; break lab8; } // ], line 235 bra = cursor; // <-, line 235 slice_from("c"); } while (false); } while (false); break lab3; } while (false); cursor = limit - v_4; // call residual_suffix, line 238 if (!r_residual_suffix()) { break lab2; } } while (false); } while (false); cursor = limit - v_3; // do, line 243 v_9 = limit - cursor; lab11: do { // call un_double, line 243 if (!r_un_double()) { break lab11; } } while (false); cursor = limit - v_9; // do, line 244 v_10 = limit - cursor; lab12: do { // call un_accent, line 244 if (!r_un_accent()) { break lab12; } } while (false); cursor = limit - v_10; cursor = limit_backward; // do, line 246 v_11 = cursor; lab13: do { // call postlude, line 246 if (!r_postlude()) { break lab13; } } while (false); cursor = v_11; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/norwegianStemmer.java0000644000175000017500000002606211625126512033172 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class norwegianStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "a", -1, 1, "", this), new Among ( "e", -1, 1, "", this), new Among ( "ede", 1, 1, "", this), new Among ( "ande", 1, 1, "", this), new Among ( "ende", 1, 1, "", this), new Among ( "ane", 1, 1, "", this), new Among ( "ene", 1, 1, "", this), new Among ( "hetene", 6, 1, "", this), new Among ( "erte", 1, 3, "", this), new Among ( "en", -1, 1, "", this), new Among ( "heten", 9, 1, "", this), new Among ( "ar", -1, 1, "", this), new Among ( "er", -1, 1, "", this), new Among ( "heter", 12, 1, "", this), new Among ( "s", -1, 2, "", this), new Among ( "as", 14, 1, "", this), new Among ( "es", 14, 1, "", this), new Among ( "edes", 16, 1, "", this), new Among ( "endes", 16, 1, "", this), new Among ( "enes", 16, 1, "", this), new Among ( "hetenes", 19, 1, "", this), new Among ( "ens", 14, 1, "", this), new Among ( "hetens", 21, 1, "", this), new Among ( "ers", 14, 1, "", this), new Among ( "ets", 14, 1, "", this), new Among ( "et", -1, 1, "", this), new Among ( "het", 25, 1, "", this), new Among ( "ert", -1, 3, "", this), new Among ( "ast", -1, 1, "", this) }; private Among a_1[] = { new Among ( "dt", -1, -1, "", this), new Among ( "vt", -1, -1, "", this) }; private Among a_2[] = { new Among ( "leg", -1, 1, "", this), new Among ( "eleg", 0, 1, "", this), new Among ( "ig", -1, 1, "", this), new Among ( "eig", 2, 1, "", this), new Among ( "lig", 2, 1, "", this), new Among ( "elig", 4, 1, "", this), new Among ( "els", -1, 1, "", this), new Among ( "lov", -1, 1, "", this), new Among ( "elov", 7, 1, "", this), new Among ( "slov", 7, 1, "", this), new Among ( "hetslov", 9, 1, "", this) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; private static final char g_s_ending[] = {119, 125, 149, 1 }; private int I_x; private int I_p1; private void copy_from(norwegianStemmer other) { I_x = other.I_x; I_p1 = other.I_p1; super.copy_from(other); } private boolean r_mark_regions() { int v_1; int v_2; // (, line 26 I_p1 = limit; // test, line 30 v_1 = cursor; // (, line 30 // hop, line 30 { int c = cursor + 3; if (0 > c || c > limit) { return false; } cursor = c; } // setmark x, line 30 I_x = cursor; cursor = v_1; // goto, line 31 golab0: while(true) { v_2 = cursor; lab1: do { if (!(in_grouping(g_v, 97, 248))) { break lab1; } cursor = v_2; break golab0; } while (false); cursor = v_2; if (cursor >= limit) { return false; } cursor++; } // gopast, line 31 golab2: while(true) { lab3: do { if (!(out_grouping(g_v, 97, 248))) { break lab3; } break golab2; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p1, line 31 I_p1 = cursor; // try, line 32 lab4: do { // (, line 32 if (!(I_p1 < I_x)) { break lab4; } I_p1 = I_x; } while (false); return true; } private boolean r_main_suffix() { int among_var; int v_1; int v_2; int v_3; // (, line 37 // setlimit, line 38 v_1 = limit - cursor; // tomark, line 38 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 38 // [, line 38 ket = cursor; // substring, line 38 among_var = find_among_b(a_0, 29); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 38 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 44 // delete, line 44 slice_del(); break; case 2: // (, line 46 // or, line 46 lab0: do { v_3 = limit - cursor; lab1: do { if (!(in_grouping_b(g_s_ending, 98, 122))) { break lab1; } break lab0; } while (false); cursor = limit - v_3; // (, line 46 // literal, line 46 if (!(eq_s_b(1, "k"))) { return false; } if (!(out_grouping_b(g_v, 97, 248))) { return false; } } while (false); // delete, line 46 slice_del(); break; case 3: // (, line 48 // <-, line 48 slice_from("er"); break; } return true; } private boolean r_consonant_pair() { int v_1; int v_2; int v_3; // (, line 52 // test, line 53 v_1 = limit - cursor; // (, line 53 // setlimit, line 54 v_2 = limit - cursor; // tomark, line 54 if (cursor < I_p1) { return false; } cursor = I_p1; v_3 = limit_backward; limit_backward = cursor; cursor = limit - v_2; // (, line 54 // [, line 54 ket = cursor; // substring, line 54 if (find_among_b(a_1, 2) == 0) { limit_backward = v_3; return false; } // ], line 54 bra = cursor; limit_backward = v_3; cursor = limit - v_1; // next, line 59 if (cursor <= limit_backward) { return false; } cursor--; // ], line 59 bra = cursor; // delete, line 59 slice_del(); return true; } private boolean r_other_suffix() { int among_var; int v_1; int v_2; // (, line 62 // setlimit, line 63 v_1 = limit - cursor; // tomark, line 63 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 63 // [, line 63 ket = cursor; // substring, line 63 among_var = find_among_b(a_2, 11); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 63 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 67 // delete, line 67 slice_del(); break; } return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; // (, line 72 // do, line 74 v_1 = cursor; lab0: do { // call mark_regions, line 74 if (!r_mark_regions()) { break lab0; } } while (false); cursor = v_1; // backwards, line 75 limit_backward = cursor; cursor = limit; // (, line 75 // do, line 76 v_2 = limit - cursor; lab1: do { // call main_suffix, line 76 if (!r_main_suffix()) { break lab1; } } while (false); cursor = limit - v_2; // do, line 77 v_3 = limit - cursor; lab2: do { // call consonant_pair, line 77 if (!r_consonant_pair()) { break lab2; } } while (false); cursor = limit - v_3; // do, line 78 v_4 = limit - cursor; lab3: do { // call other_suffix, line 78 if (!r_other_suffix()) { break lab3; } } while (false); cursor = limit - v_4; cursor = limit_backward; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/danishStemmer.java0000644000175000017500000003152511625126512032447 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class danishStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "hed", -1, 1, "", this), new Among ( "ethed", 0, 1, "", this), new Among ( "ered", -1, 1, "", this), new Among ( "e", -1, 1, "", this), new Among ( "erede", 3, 1, "", this), new Among ( "ende", 3, 1, "", this), new Among ( "erende", 5, 1, "", this), new Among ( "ene", 3, 1, "", this), new Among ( "erne", 3, 1, "", this), new Among ( "ere", 3, 1, "", this), new Among ( "en", -1, 1, "", this), new Among ( "heden", 10, 1, "", this), new Among ( "eren", 10, 1, "", this), new Among ( "er", -1, 1, "", this), new Among ( "heder", 13, 1, "", this), new Among ( "erer", 13, 1, "", this), new Among ( "s", -1, 2, "", this), new Among ( "heds", 16, 1, "", this), new Among ( "es", 16, 1, "", this), new Among ( "endes", 18, 1, "", this), new Among ( "erendes", 19, 1, "", this), new Among ( "enes", 18, 1, "", this), new Among ( "ernes", 18, 1, "", this), new Among ( "eres", 18, 1, "", this), new Among ( "ens", 16, 1, "", this), new Among ( "hedens", 24, 1, "", this), new Among ( "erens", 24, 1, "", this), new Among ( "ers", 16, 1, "", this), new Among ( "ets", 16, 1, "", this), new Among ( "erets", 28, 1, "", this), new Among ( "et", -1, 1, "", this), new Among ( "eret", 30, 1, "", this) }; private Among a_1[] = { new Among ( "gd", -1, -1, "", this), new Among ( "dt", -1, -1, "", this), new Among ( "gt", -1, -1, "", this), new Among ( "kt", -1, -1, "", this) }; private Among a_2[] = { new Among ( "ig", -1, 1, "", this), new Among ( "lig", 0, 1, "", this), new Among ( "elig", 1, 1, "", this), new Among ( "els", -1, 1, "", this), new Among ( "l\u00F8st", -1, 2, "", this) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; private static final char g_s_ending[] = {239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 }; private int I_x; private int I_p1; private StringBuffer S_ch = new StringBuffer(); private void copy_from(danishStemmer other) { I_x = other.I_x; I_p1 = other.I_p1; S_ch = other.S_ch; super.copy_from(other); } private boolean r_mark_regions() { int v_1; int v_2; // (, line 29 I_p1 = limit; // test, line 33 v_1 = cursor; // (, line 33 // hop, line 33 { int c = cursor + 3; if (0 > c || c > limit) { return false; } cursor = c; } // setmark x, line 33 I_x = cursor; cursor = v_1; // goto, line 34 golab0: while(true) { v_2 = cursor; lab1: do { if (!(in_grouping(g_v, 97, 248))) { break lab1; } cursor = v_2; break golab0; } while (false); cursor = v_2; if (cursor >= limit) { return false; } cursor++; } // gopast, line 34 golab2: while(true) { lab3: do { if (!(out_grouping(g_v, 97, 248))) { break lab3; } break golab2; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p1, line 34 I_p1 = cursor; // try, line 35 lab4: do { // (, line 35 if (!(I_p1 < I_x)) { break lab4; } I_p1 = I_x; } while (false); return true; } private boolean r_main_suffix() { int among_var; int v_1; int v_2; // (, line 40 // setlimit, line 41 v_1 = limit - cursor; // tomark, line 41 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 41 // [, line 41 ket = cursor; // substring, line 41 among_var = find_among_b(a_0, 32); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 41 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 48 // delete, line 48 slice_del(); break; case 2: // (, line 50 if (!(in_grouping_b(g_s_ending, 97, 229))) { return false; } // delete, line 50 slice_del(); break; } return true; } private boolean r_consonant_pair() { int v_1; int v_2; int v_3; // (, line 54 // test, line 55 v_1 = limit - cursor; // (, line 55 // setlimit, line 56 v_2 = limit - cursor; // tomark, line 56 if (cursor < I_p1) { return false; } cursor = I_p1; v_3 = limit_backward; limit_backward = cursor; cursor = limit - v_2; // (, line 56 // [, line 56 ket = cursor; // substring, line 56 if (find_among_b(a_1, 4) == 0) { limit_backward = v_3; return false; } // ], line 56 bra = cursor; limit_backward = v_3; cursor = limit - v_1; // next, line 62 if (cursor <= limit_backward) { return false; } cursor--; // ], line 62 bra = cursor; // delete, line 62 slice_del(); return true; } private boolean r_other_suffix() { int among_var; int v_1; int v_2; int v_3; int v_4; // (, line 65 // do, line 66 v_1 = limit - cursor; lab0: do { // (, line 66 // [, line 66 ket = cursor; // literal, line 66 if (!(eq_s_b(2, "st"))) { break lab0; } // ], line 66 bra = cursor; // literal, line 66 if (!(eq_s_b(2, "ig"))) { break lab0; } // delete, line 66 slice_del(); } while (false); cursor = limit - v_1; // setlimit, line 67 v_2 = limit - cursor; // tomark, line 67 if (cursor < I_p1) { return false; } cursor = I_p1; v_3 = limit_backward; limit_backward = cursor; cursor = limit - v_2; // (, line 67 // [, line 67 ket = cursor; // substring, line 67 among_var = find_among_b(a_2, 5); if (among_var == 0) { limit_backward = v_3; return false; } // ], line 67 bra = cursor; limit_backward = v_3; switch(among_var) { case 0: return false; case 1: // (, line 70 // delete, line 70 slice_del(); // do, line 70 v_4 = limit - cursor; lab1: do { // call consonant_pair, line 70 if (!r_consonant_pair()) { break lab1; } } while (false); cursor = limit - v_4; break; case 2: // (, line 72 // <-, line 72 slice_from("l\u00F8s"); break; } return true; } private boolean r_undouble() { int v_1; int v_2; // (, line 75 // setlimit, line 76 v_1 = limit - cursor; // tomark, line 76 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 76 // [, line 76 ket = cursor; if (!(out_grouping_b(g_v, 97, 248))) { limit_backward = v_2; return false; } // ], line 76 bra = cursor; // -> ch, line 76 S_ch = slice_to(S_ch); limit_backward = v_2; // name ch, line 77 if (!(eq_v_b(S_ch))) { return false; } // delete, line 78 slice_del(); return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; // (, line 82 // do, line 84 v_1 = cursor; lab0: do { // call mark_regions, line 84 if (!r_mark_regions()) { break lab0; } } while (false); cursor = v_1; // backwards, line 85 limit_backward = cursor; cursor = limit; // (, line 85 // do, line 86 v_2 = limit - cursor; lab1: do { // call main_suffix, line 86 if (!r_main_suffix()) { break lab1; } } while (false); cursor = limit - v_2; // do, line 87 v_3 = limit - cursor; lab2: do { // call consonant_pair, line 87 if (!r_consonant_pair()) { break lab2; } } while (false); cursor = limit - v_3; // do, line 88 v_4 = limit - cursor; lab3: do { // call other_suffix, line 88 if (!r_other_suffix()) { break lab3; } } while (false); cursor = limit - v_4; // do, line 89 v_5 = limit - cursor; lab4: do { // call undouble, line 89 if (!r_undouble()) { break lab4; } } while (false); cursor = limit - v_5; cursor = limit_backward; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/finnishStemmer.java0000644000175000017500000010121511625126512032631 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class finnishStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "pa", -1, 1, "", this), new Among ( "sti", -1, 2, "", this), new Among ( "kaan", -1, 1, "", this), new Among ( "han", -1, 1, "", this), new Among ( "kin", -1, 1, "", this), new Among ( "h\u00E4n", -1, 1, "", this), new Among ( "k\u00E4\u00E4n", -1, 1, "", this), new Among ( "ko", -1, 1, "", this), new Among ( "p\u00E4", -1, 1, "", this), new Among ( "k\u00F6", -1, 1, "", this) }; private Among a_1[] = { new Among ( "lla", -1, -1, "", this), new Among ( "na", -1, -1, "", this), new Among ( "ssa", -1, -1, "", this), new Among ( "ta", -1, -1, "", this), new Among ( "lta", 3, -1, "", this), new Among ( "sta", 3, -1, "", this) }; private Among a_2[] = { new Among ( "ll\u00E4", -1, -1, "", this), new Among ( "n\u00E4", -1, -1, "", this), new Among ( "ss\u00E4", -1, -1, "", this), new Among ( "t\u00E4", -1, -1, "", this), new Among ( "lt\u00E4", 3, -1, "", this), new Among ( "st\u00E4", 3, -1, "", this) }; private Among a_3[] = { new Among ( "lle", -1, -1, "", this), new Among ( "ine", -1, -1, "", this) }; private Among a_4[] = { new Among ( "nsa", -1, 3, "", this), new Among ( "mme", -1, 3, "", this), new Among ( "nne", -1, 3, "", this), new Among ( "ni", -1, 2, "", this), new Among ( "si", -1, 1, "", this), new Among ( "an", -1, 4, "", this), new Among ( "en", -1, 6, "", this), new Among ( "\u00E4n", -1, 5, "", this), new Among ( "ns\u00E4", -1, 3, "", this) }; private Among a_5[] = { new Among ( "aa", -1, -1, "", this), new Among ( "ee", -1, -1, "", this), new Among ( "ii", -1, -1, "", this), new Among ( "oo", -1, -1, "", this), new Among ( "uu", -1, -1, "", this), new Among ( "\u00E4\u00E4", -1, -1, "", this), new Among ( "\u00F6\u00F6", -1, -1, "", this) }; private Among a_6[] = { new Among ( "a", -1, 8, "", this), new Among ( "lla", 0, -1, "", this), new Among ( "na", 0, -1, "", this), new Among ( "ssa", 0, -1, "", this), new Among ( "ta", 0, -1, "", this), new Among ( "lta", 4, -1, "", this), new Among ( "sta", 4, -1, "", this), new Among ( "tta", 4, 9, "", this), new Among ( "lle", -1, -1, "", this), new Among ( "ine", -1, -1, "", this), new Among ( "ksi", -1, -1, "", this), new Among ( "n", -1, 7, "", this), new Among ( "han", 11, 1, "", this), new Among ( "den", 11, -1, "r_VI", this), new Among ( "seen", 11, -1, "r_LONG", this), new Among ( "hen", 11, 2, "", this), new Among ( "tten", 11, -1, "r_VI", this), new Among ( "hin", 11, 3, "", this), new Among ( "siin", 11, -1, "r_VI", this), new Among ( "hon", 11, 4, "", this), new Among ( "h\u00E4n", 11, 5, "", this), new Among ( "h\u00F6n", 11, 6, "", this), new Among ( "\u00E4", -1, 8, "", this), new Among ( "ll\u00E4", 22, -1, "", this), new Among ( "n\u00E4", 22, -1, "", this), new Among ( "ss\u00E4", 22, -1, "", this), new Among ( "t\u00E4", 22, -1, "", this), new Among ( "lt\u00E4", 26, -1, "", this), new Among ( "st\u00E4", 26, -1, "", this), new Among ( "tt\u00E4", 26, 9, "", this) }; private Among a_7[] = { new Among ( "eja", -1, -1, "", this), new Among ( "mma", -1, 1, "", this), new Among ( "imma", 1, -1, "", this), new Among ( "mpa", -1, 1, "", this), new Among ( "impa", 3, -1, "", this), new Among ( "mmi", -1, 1, "", this), new Among ( "immi", 5, -1, "", this), new Among ( "mpi", -1, 1, "", this), new Among ( "impi", 7, -1, "", this), new Among ( "ej\u00E4", -1, -1, "", this), new Among ( "mm\u00E4", -1, 1, "", this), new Among ( "imm\u00E4", 10, -1, "", this), new Among ( "mp\u00E4", -1, 1, "", this), new Among ( "imp\u00E4", 12, -1, "", this) }; private Among a_8[] = { new Among ( "i", -1, -1, "", this), new Among ( "j", -1, -1, "", this) }; private Among a_9[] = { new Among ( "mma", -1, 1, "", this), new Among ( "imma", 0, -1, "", this) }; private static final char g_AEI[] = {17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; private static final char g_V1[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; private static final char g_V2[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; private static final char g_particle_end[] = {17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; private boolean B_ending_removed; private StringBuffer S_x = new StringBuffer(); private int I_p2; private int I_p1; private void copy_from(finnishStemmer other) { B_ending_removed = other.B_ending_removed; S_x = other.S_x; I_p2 = other.I_p2; I_p1 = other.I_p1; super.copy_from(other); } private boolean r_mark_regions() { int v_1; int v_3; // (, line 41 I_p1 = limit; I_p2 = limit; // goto, line 46 golab0: while(true) { v_1 = cursor; lab1: do { if (!(in_grouping(g_V1, 97, 246))) { break lab1; } cursor = v_1; break golab0; } while (false); cursor = v_1; if (cursor >= limit) { return false; } cursor++; } // gopast, line 46 golab2: while(true) { lab3: do { if (!(out_grouping(g_V1, 97, 246))) { break lab3; } break golab2; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p1, line 46 I_p1 = cursor; // goto, line 47 golab4: while(true) { v_3 = cursor; lab5: do { if (!(in_grouping(g_V1, 97, 246))) { break lab5; } cursor = v_3; break golab4; } while (false); cursor = v_3; if (cursor >= limit) { return false; } cursor++; } // gopast, line 47 golab6: while(true) { lab7: do { if (!(out_grouping(g_V1, 97, 246))) { break lab7; } break golab6; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p2, line 47 I_p2 = cursor; return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_particle_etc() { int among_var; int v_1; int v_2; // (, line 54 // setlimit, line 55 v_1 = limit - cursor; // tomark, line 55 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 55 // [, line 55 ket = cursor; // substring, line 55 among_var = find_among_b(a_0, 10); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 55 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 62 if (!(in_grouping_b(g_particle_end, 97, 246))) { return false; } break; case 2: // (, line 64 // call R2, line 64 if (!r_R2()) { return false; } break; } // delete, line 66 slice_del(); return true; } private boolean r_possessive() { int among_var; int v_1; int v_2; int v_3; // (, line 68 // setlimit, line 69 v_1 = limit - cursor; // tomark, line 69 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 69 // [, line 69 ket = cursor; // substring, line 69 among_var = find_among_b(a_4, 9); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 69 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 72 // not, line 72 { v_3 = limit - cursor; lab0: do { // literal, line 72 if (!(eq_s_b(1, "k"))) { break lab0; } return false; } while (false); cursor = limit - v_3; } // delete, line 72 slice_del(); break; case 2: // (, line 74 // delete, line 74 slice_del(); // [, line 74 ket = cursor; // literal, line 74 if (!(eq_s_b(3, "kse"))) { return false; } // ], line 74 bra = cursor; // <-, line 74 slice_from("ksi"); break; case 3: // (, line 78 // delete, line 78 slice_del(); break; case 4: // (, line 81 // among, line 81 if (find_among_b(a_1, 6) == 0) { return false; } // delete, line 81 slice_del(); break; case 5: // (, line 83 // among, line 83 if (find_among_b(a_2, 6) == 0) { return false; } // delete, line 84 slice_del(); break; case 6: // (, line 86 // among, line 86 if (find_among_b(a_3, 2) == 0) { return false; } // delete, line 86 slice_del(); break; } return true; } private boolean r_LONG() { // among, line 91 if (find_among_b(a_5, 7) == 0) { return false; } return true; } private boolean r_VI() { // (, line 93 // literal, line 93 if (!(eq_s_b(1, "i"))) { return false; } if (!(in_grouping_b(g_V2, 97, 246))) { return false; } return true; } private boolean r_case_ending() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; // (, line 95 // setlimit, line 96 v_1 = limit - cursor; // tomark, line 96 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 96 // [, line 96 ket = cursor; // substring, line 96 among_var = find_among_b(a_6, 30); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 96 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 98 // literal, line 98 if (!(eq_s_b(1, "a"))) { return false; } break; case 2: // (, line 99 // literal, line 99 if (!(eq_s_b(1, "e"))) { return false; } break; case 3: // (, line 100 // literal, line 100 if (!(eq_s_b(1, "i"))) { return false; } break; case 4: // (, line 101 // literal, line 101 if (!(eq_s_b(1, "o"))) { return false; } break; case 5: // (, line 102 // literal, line 102 if (!(eq_s_b(1, "\u00E4"))) { return false; } break; case 6: // (, line 103 // literal, line 103 if (!(eq_s_b(1, "\u00F6"))) { return false; } break; case 7: // (, line 111 // try, line 111 v_3 = limit - cursor; lab0: do { // (, line 111 // and, line 113 v_4 = limit - cursor; // or, line 112 lab1: do { v_5 = limit - cursor; lab2: do { // call LONG, line 111 if (!r_LONG()) { break lab2; } break lab1; } while (false); cursor = limit - v_5; // literal, line 112 if (!(eq_s_b(2, "ie"))) { cursor = limit - v_3; break lab0; } } while (false); cursor = limit - v_4; // next, line 113 if (cursor <= limit_backward) { cursor = limit - v_3; break lab0; } cursor--; // ], line 113 bra = cursor; } while (false); break; case 8: // (, line 119 if (!(in_grouping_b(g_V1, 97, 246))) { return false; } if (!(out_grouping_b(g_V1, 97, 246))) { return false; } break; case 9: // (, line 121 // literal, line 121 if (!(eq_s_b(1, "e"))) { return false; } break; } // delete, line 138 slice_del(); // set ending_removed, line 139 B_ending_removed = true; return true; } private boolean r_other_endings() { int among_var; int v_1; int v_2; int v_3; // (, line 141 // setlimit, line 142 v_1 = limit - cursor; // tomark, line 142 if (cursor < I_p2) { return false; } cursor = I_p2; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 142 // [, line 142 ket = cursor; // substring, line 142 among_var = find_among_b(a_7, 14); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 142 bra = cursor; limit_backward = v_2; switch(among_var) { case 0: return false; case 1: // (, line 146 // not, line 146 { v_3 = limit - cursor; lab0: do { // literal, line 146 if (!(eq_s_b(2, "po"))) { break lab0; } return false; } while (false); cursor = limit - v_3; } break; } // delete, line 151 slice_del(); return true; } private boolean r_i_plural() { int v_1; int v_2; // (, line 153 // setlimit, line 154 v_1 = limit - cursor; // tomark, line 154 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 154 // [, line 154 ket = cursor; // substring, line 154 if (find_among_b(a_8, 2) == 0) { limit_backward = v_2; return false; } // ], line 154 bra = cursor; limit_backward = v_2; // delete, line 158 slice_del(); return true; } private boolean r_t_plural() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; // (, line 160 // setlimit, line 161 v_1 = limit - cursor; // tomark, line 161 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 161 // [, line 162 ket = cursor; // literal, line 162 if (!(eq_s_b(1, "t"))) { limit_backward = v_2; return false; } // ], line 162 bra = cursor; // test, line 162 v_3 = limit - cursor; if (!(in_grouping_b(g_V1, 97, 246))) { limit_backward = v_2; return false; } cursor = limit - v_3; // delete, line 163 slice_del(); limit_backward = v_2; // setlimit, line 165 v_4 = limit - cursor; // tomark, line 165 if (cursor < I_p2) { return false; } cursor = I_p2; v_5 = limit_backward; limit_backward = cursor; cursor = limit - v_4; // (, line 165 // [, line 165 ket = cursor; // substring, line 165 among_var = find_among_b(a_9, 2); if (among_var == 0) { limit_backward = v_5; return false; } // ], line 165 bra = cursor; limit_backward = v_5; switch(among_var) { case 0: return false; case 1: // (, line 167 // not, line 167 { v_6 = limit - cursor; lab0: do { // literal, line 167 if (!(eq_s_b(2, "po"))) { break lab0; } return false; } while (false); cursor = limit - v_6; } break; } // delete, line 170 slice_del(); return true; } private boolean r_tidy() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; // (, line 172 // setlimit, line 173 v_1 = limit - cursor; // tomark, line 173 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 173 // do, line 174 v_3 = limit - cursor; lab0: do { // (, line 174 // and, line 174 v_4 = limit - cursor; // call LONG, line 174 if (!r_LONG()) { break lab0; } cursor = limit - v_4; // (, line 174 // [, line 174 ket = cursor; // next, line 174 if (cursor <= limit_backward) { break lab0; } cursor--; // ], line 174 bra = cursor; // delete, line 174 slice_del(); } while (false); cursor = limit - v_3; // do, line 175 v_5 = limit - cursor; lab1: do { // (, line 175 // [, line 175 ket = cursor; if (!(in_grouping_b(g_AEI, 97, 228))) { break lab1; } // ], line 175 bra = cursor; if (!(out_grouping_b(g_V1, 97, 246))) { break lab1; } // delete, line 175 slice_del(); } while (false); cursor = limit - v_5; // do, line 176 v_6 = limit - cursor; lab2: do { // (, line 176 // [, line 176 ket = cursor; // literal, line 176 if (!(eq_s_b(1, "j"))) { break lab2; } // ], line 176 bra = cursor; // or, line 176 lab3: do { v_7 = limit - cursor; lab4: do { // literal, line 176 if (!(eq_s_b(1, "o"))) { break lab4; } break lab3; } while (false); cursor = limit - v_7; // literal, line 176 if (!(eq_s_b(1, "u"))) { break lab2; } } while (false); // delete, line 176 slice_del(); } while (false); cursor = limit - v_6; // do, line 177 v_8 = limit - cursor; lab5: do { // (, line 177 // [, line 177 ket = cursor; // literal, line 177 if (!(eq_s_b(1, "o"))) { break lab5; } // ], line 177 bra = cursor; // literal, line 177 if (!(eq_s_b(1, "j"))) { break lab5; } // delete, line 177 slice_del(); } while (false); cursor = limit - v_8; limit_backward = v_2; // goto, line 179 golab6: while(true) { v_9 = limit - cursor; lab7: do { if (!(out_grouping_b(g_V1, 97, 246))) { break lab7; } cursor = limit - v_9; break golab6; } while (false); cursor = limit - v_9; if (cursor <= limit_backward) { return false; } cursor--; } // [, line 179 ket = cursor; // next, line 179 if (cursor <= limit_backward) { return false; } cursor--; // ], line 179 bra = cursor; // -> x, line 179 S_x = slice_to(S_x); // name x, line 179 if (!(eq_v_b(S_x))) { return false; } // delete, line 179 slice_del(); return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; // (, line 183 // do, line 185 v_1 = cursor; lab0: do { // call mark_regions, line 185 if (!r_mark_regions()) { break lab0; } } while (false); cursor = v_1; // unset ending_removed, line 186 B_ending_removed = false; // backwards, line 187 limit_backward = cursor; cursor = limit; // (, line 187 // do, line 188 v_2 = limit - cursor; lab1: do { // call particle_etc, line 188 if (!r_particle_etc()) { break lab1; } } while (false); cursor = limit - v_2; // do, line 189 v_3 = limit - cursor; lab2: do { // call possessive, line 189 if (!r_possessive()) { break lab2; } } while (false); cursor = limit - v_3; // do, line 190 v_4 = limit - cursor; lab3: do { // call case_ending, line 190 if (!r_case_ending()) { break lab3; } } while (false); cursor = limit - v_4; // do, line 191 v_5 = limit - cursor; lab4: do { // call other_endings, line 191 if (!r_other_endings()) { break lab4; } } while (false); cursor = limit - v_5; // or, line 192 lab5: do { v_6 = limit - cursor; lab6: do { // (, line 192 // Boolean test ending_removed, line 192 if (!(B_ending_removed)) { break lab6; } // do, line 192 v_7 = limit - cursor; lab7: do { // call i_plural, line 192 if (!r_i_plural()) { break lab7; } } while (false); cursor = limit - v_7; break lab5; } while (false); cursor = limit - v_6; // do, line 192 v_8 = limit - cursor; lab8: do { // call t_plural, line 192 if (!r_t_plural()) { break lab8; } } while (false); cursor = limit - v_8; } while (false); // do, line 193 v_9 = limit - cursor; lab9: do { // call tidy, line 193 if (!r_tidy()) { break lab9; } } while (false); cursor = limit - v_9; cursor = limit_backward; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/italianStemmer.java0000644000175000017500000012540211625126512032620 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class italianStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "", -1, 7, "", this), new Among ( "qu", 0, 6, "", this), new Among ( "\u00E1", 0, 1, "", this), new Among ( "\u00E9", 0, 2, "", this), new Among ( "\u00ED", 0, 3, "", this), new Among ( "\u00F3", 0, 4, "", this), new Among ( "\u00FA", 0, 5, "", this) }; private Among a_1[] = { new Among ( "", -1, 3, "", this), new Among ( "I", 0, 1, "", this), new Among ( "U", 0, 2, "", this) }; private Among a_2[] = { new Among ( "la", -1, -1, "", this), new Among ( "cela", 0, -1, "", this), new Among ( "gliela", 0, -1, "", this), new Among ( "mela", 0, -1, "", this), new Among ( "tela", 0, -1, "", this), new Among ( "vela", 0, -1, "", this), new Among ( "le", -1, -1, "", this), new Among ( "cele", 6, -1, "", this), new Among ( "gliele", 6, -1, "", this), new Among ( "mele", 6, -1, "", this), new Among ( "tele", 6, -1, "", this), new Among ( "vele", 6, -1, "", this), new Among ( "ne", -1, -1, "", this), new Among ( "cene", 12, -1, "", this), new Among ( "gliene", 12, -1, "", this), new Among ( "mene", 12, -1, "", this), new Among ( "sene", 12, -1, "", this), new Among ( "tene", 12, -1, "", this), new Among ( "vene", 12, -1, "", this), new Among ( "ci", -1, -1, "", this), new Among ( "li", -1, -1, "", this), new Among ( "celi", 20, -1, "", this), new Among ( "glieli", 20, -1, "", this), new Among ( "meli", 20, -1, "", this), new Among ( "teli", 20, -1, "", this), new Among ( "veli", 20, -1, "", this), new Among ( "gli", 20, -1, "", this), new Among ( "mi", -1, -1, "", this), new Among ( "si", -1, -1, "", this), new Among ( "ti", -1, -1, "", this), new Among ( "vi", -1, -1, "", this), new Among ( "lo", -1, -1, "", this), new Among ( "celo", 31, -1, "", this), new Among ( "glielo", 31, -1, "", this), new Among ( "melo", 31, -1, "", this), new Among ( "telo", 31, -1, "", this), new Among ( "velo", 31, -1, "", this) }; private Among a_3[] = { new Among ( "ando", -1, 1, "", this), new Among ( "endo", -1, 1, "", this), new Among ( "ar", -1, 2, "", this), new Among ( "er", -1, 2, "", this), new Among ( "ir", -1, 2, "", this) }; private Among a_4[] = { new Among ( "ic", -1, -1, "", this), new Among ( "abil", -1, -1, "", this), new Among ( "os", -1, -1, "", this), new Among ( "iv", -1, 1, "", this) }; private Among a_5[] = { new Among ( "ic", -1, 1, "", this), new Among ( "abil", -1, 1, "", this), new Among ( "iv", -1, 1, "", this) }; private Among a_6[] = { new Among ( "ica", -1, 1, "", this), new Among ( "logia", -1, 3, "", this), new Among ( "osa", -1, 1, "", this), new Among ( "ista", -1, 1, "", this), new Among ( "iva", -1, 9, "", this), new Among ( "anza", -1, 1, "", this), new Among ( "enza", -1, 5, "", this), new Among ( "ice", -1, 1, "", this), new Among ( "atrice", 7, 1, "", this), new Among ( "iche", -1, 1, "", this), new Among ( "logie", -1, 3, "", this), new Among ( "abile", -1, 1, "", this), new Among ( "ibile", -1, 1, "", this), new Among ( "usione", -1, 4, "", this), new Among ( "azione", -1, 2, "", this), new Among ( "uzione", -1, 4, "", this), new Among ( "atore", -1, 2, "", this), new Among ( "ose", -1, 1, "", this), new Among ( "ante", -1, 1, "", this), new Among ( "mente", -1, 1, "", this), new Among ( "amente", 19, 7, "", this), new Among ( "iste", -1, 1, "", this), new Among ( "ive", -1, 9, "", this), new Among ( "anze", -1, 1, "", this), new Among ( "enze", -1, 5, "", this), new Among ( "ici", -1, 1, "", this), new Among ( "atrici", 25, 1, "", this), new Among ( "ichi", -1, 1, "", this), new Among ( "abili", -1, 1, "", this), new Among ( "ibili", -1, 1, "", this), new Among ( "ismi", -1, 1, "", this), new Among ( "usioni", -1, 4, "", this), new Among ( "azioni", -1, 2, "", this), new Among ( "uzioni", -1, 4, "", this), new Among ( "atori", -1, 2, "", this), new Among ( "osi", -1, 1, "", this), new Among ( "anti", -1, 1, "", this), new Among ( "amenti", -1, 6, "", this), new Among ( "imenti", -1, 6, "", this), new Among ( "isti", -1, 1, "", this), new Among ( "ivi", -1, 9, "", this), new Among ( "ico", -1, 1, "", this), new Among ( "ismo", -1, 1, "", this), new Among ( "oso", -1, 1, "", this), new Among ( "amento", -1, 6, "", this), new Among ( "imento", -1, 6, "", this), new Among ( "ivo", -1, 9, "", this), new Among ( "it\u00E0", -1, 8, "", this), new Among ( "ist\u00E0", -1, 1, "", this), new Among ( "ist\u00E8", -1, 1, "", this), new Among ( "ist\u00EC", -1, 1, "", this) }; private Among a_7[] = { new Among ( "isca", -1, 1, "", this), new Among ( "enda", -1, 1, "", this), new Among ( "ata", -1, 1, "", this), new Among ( "ita", -1, 1, "", this), new Among ( "uta", -1, 1, "", this), new Among ( "ava", -1, 1, "", this), new Among ( "eva", -1, 1, "", this), new Among ( "iva", -1, 1, "", this), new Among ( "erebbe", -1, 1, "", this), new Among ( "irebbe", -1, 1, "", this), new Among ( "isce", -1, 1, "", this), new Among ( "ende", -1, 1, "", this), new Among ( "are", -1, 1, "", this), new Among ( "ere", -1, 1, "", this), new Among ( "ire", -1, 1, "", this), new Among ( "asse", -1, 1, "", this), new Among ( "ate", -1, 1, "", this), new Among ( "avate", 16, 1, "", this), new Among ( "evate", 16, 1, "", this), new Among ( "ivate", 16, 1, "", this), new Among ( "ete", -1, 1, "", this), new Among ( "erete", 20, 1, "", this), new Among ( "irete", 20, 1, "", this), new Among ( "ite", -1, 1, "", this), new Among ( "ereste", -1, 1, "", this), new Among ( "ireste", -1, 1, "", this), new Among ( "ute", -1, 1, "", this), new Among ( "erai", -1, 1, "", this), new Among ( "irai", -1, 1, "", this), new Among ( "isci", -1, 1, "", this), new Among ( "endi", -1, 1, "", this), new Among ( "erei", -1, 1, "", this), new Among ( "irei", -1, 1, "", this), new Among ( "assi", -1, 1, "", this), new Among ( "ati", -1, 1, "", this), new Among ( "iti", -1, 1, "", this), new Among ( "eresti", -1, 1, "", this), new Among ( "iresti", -1, 1, "", this), new Among ( "uti", -1, 1, "", this), new Among ( "avi", -1, 1, "", this), new Among ( "evi", -1, 1, "", this), new Among ( "ivi", -1, 1, "", this), new Among ( "isco", -1, 1, "", this), new Among ( "ando", -1, 1, "", this), new Among ( "endo", -1, 1, "", this), new Among ( "Yamo", -1, 1, "", this), new Among ( "iamo", -1, 1, "", this), new Among ( "avamo", -1, 1, "", this), new Among ( "evamo", -1, 1, "", this), new Among ( "ivamo", -1, 1, "", this), new Among ( "eremo", -1, 1, "", this), new Among ( "iremo", -1, 1, "", this), new Among ( "assimo", -1, 1, "", this), new Among ( "ammo", -1, 1, "", this), new Among ( "emmo", -1, 1, "", this), new Among ( "eremmo", 54, 1, "", this), new Among ( "iremmo", 54, 1, "", this), new Among ( "immo", -1, 1, "", this), new Among ( "ano", -1, 1, "", this), new Among ( "iscano", 58, 1, "", this), new Among ( "avano", 58, 1, "", this), new Among ( "evano", 58, 1, "", this), new Among ( "ivano", 58, 1, "", this), new Among ( "eranno", -1, 1, "", this), new Among ( "iranno", -1, 1, "", this), new Among ( "ono", -1, 1, "", this), new Among ( "iscono", 65, 1, "", this), new Among ( "arono", 65, 1, "", this), new Among ( "erono", 65, 1, "", this), new Among ( "irono", 65, 1, "", this), new Among ( "erebbero", -1, 1, "", this), new Among ( "irebbero", -1, 1, "", this), new Among ( "assero", -1, 1, "", this), new Among ( "essero", -1, 1, "", this), new Among ( "issero", -1, 1, "", this), new Among ( "ato", -1, 1, "", this), new Among ( "ito", -1, 1, "", this), new Among ( "uto", -1, 1, "", this), new Among ( "avo", -1, 1, "", this), new Among ( "evo", -1, 1, "", this), new Among ( "ivo", -1, 1, "", this), new Among ( "ar", -1, 1, "", this), new Among ( "ir", -1, 1, "", this), new Among ( "er\u00E0", -1, 1, "", this), new Among ( "ir\u00E0", -1, 1, "", this), new Among ( "er\u00F2", -1, 1, "", this), new Among ( "ir\u00F2", -1, 1, "", this) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 }; private static final char g_AEIO[] = {17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 }; private static final char g_CG[] = {17 }; private int I_p2; private int I_p1; private int I_pV; private void copy_from(italianStemmer other) { I_p2 = other.I_p2; I_p1 = other.I_p1; I_pV = other.I_pV; super.copy_from(other); } private boolean r_prelude() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; // (, line 34 // test, line 35 v_1 = cursor; // repeat, line 35 replab0: while(true) { v_2 = cursor; lab1: do { // (, line 35 // [, line 36 bra = cursor; // substring, line 36 among_var = find_among(a_0, 7); if (among_var == 0) { break lab1; } // ], line 36 ket = cursor; switch(among_var) { case 0: break lab1; case 1: // (, line 37 // <-, line 37 slice_from("\u00E0"); break; case 2: // (, line 38 // <-, line 38 slice_from("\u00E8"); break; case 3: // (, line 39 // <-, line 39 slice_from("\u00EC"); break; case 4: // (, line 40 // <-, line 40 slice_from("\u00F2"); break; case 5: // (, line 41 // <-, line 41 slice_from("\u00F9"); break; case 6: // (, line 42 // <-, line 42 slice_from("qU"); break; case 7: // (, line 43 // next, line 43 if (cursor >= limit) { break lab1; } cursor++; break; } continue replab0; } while (false); cursor = v_2; break replab0; } cursor = v_1; // repeat, line 46 replab2: while(true) { v_3 = cursor; lab3: do { // goto, line 46 golab4: while(true) { v_4 = cursor; lab5: do { // (, line 46 if (!(in_grouping(g_v, 97, 249))) { break lab5; } // [, line 47 bra = cursor; // or, line 47 lab6: do { v_5 = cursor; lab7: do { // (, line 47 // literal, line 47 if (!(eq_s(1, "u"))) { break lab7; } // ], line 47 ket = cursor; if (!(in_grouping(g_v, 97, 249))) { break lab7; } // <-, line 47 slice_from("U"); break lab6; } while (false); cursor = v_5; // (, line 48 // literal, line 48 if (!(eq_s(1, "i"))) { break lab5; } // ], line 48 ket = cursor; if (!(in_grouping(g_v, 97, 249))) { break lab5; } // <-, line 48 slice_from("I"); } while (false); cursor = v_4; break golab4; } while (false); cursor = v_4; if (cursor >= limit) { break lab3; } cursor++; } continue replab2; } while (false); cursor = v_3; break replab2; } return true; } private boolean r_mark_regions() { int v_1; int v_2; int v_3; int v_6; int v_8; // (, line 52 I_pV = limit; I_p1 = limit; I_p2 = limit; // do, line 58 v_1 = cursor; lab0: do { // (, line 58 // or, line 60 lab1: do { v_2 = cursor; lab2: do { // (, line 59 if (!(in_grouping(g_v, 97, 249))) { break lab2; } // or, line 59 lab3: do { v_3 = cursor; lab4: do { // (, line 59 if (!(out_grouping(g_v, 97, 249))) { break lab4; } // gopast, line 59 golab5: while(true) { lab6: do { if (!(in_grouping(g_v, 97, 249))) { break lab6; } break golab5; } while (false); if (cursor >= limit) { break lab4; } cursor++; } break lab3; } while (false); cursor = v_3; // (, line 59 if (!(in_grouping(g_v, 97, 249))) { break lab2; } // gopast, line 59 golab7: while(true) { lab8: do { if (!(out_grouping(g_v, 97, 249))) { break lab8; } break golab7; } while (false); if (cursor >= limit) { break lab2; } cursor++; } } while (false); break lab1; } while (false); cursor = v_2; // (, line 61 if (!(out_grouping(g_v, 97, 249))) { break lab0; } // or, line 61 lab9: do { v_6 = cursor; lab10: do { // (, line 61 if (!(out_grouping(g_v, 97, 249))) { break lab10; } // gopast, line 61 golab11: while(true) { lab12: do { if (!(in_grouping(g_v, 97, 249))) { break lab12; } break golab11; } while (false); if (cursor >= limit) { break lab10; } cursor++; } break lab9; } while (false); cursor = v_6; // (, line 61 if (!(in_grouping(g_v, 97, 249))) { break lab0; } // next, line 61 if (cursor >= limit) { break lab0; } cursor++; } while (false); } while (false); // setmark pV, line 62 I_pV = cursor; } while (false); cursor = v_1; // do, line 64 v_8 = cursor; lab13: do { // (, line 64 // gopast, line 65 golab14: while(true) { lab15: do { if (!(in_grouping(g_v, 97, 249))) { break lab15; } break golab14; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // gopast, line 65 golab16: while(true) { lab17: do { if (!(out_grouping(g_v, 97, 249))) { break lab17; } break golab16; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // setmark p1, line 65 I_p1 = cursor; // gopast, line 66 golab18: while(true) { lab19: do { if (!(in_grouping(g_v, 97, 249))) { break lab19; } break golab18; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // gopast, line 66 golab20: while(true) { lab21: do { if (!(out_grouping(g_v, 97, 249))) { break lab21; } break golab20; } while (false); if (cursor >= limit) { break lab13; } cursor++; } // setmark p2, line 66 I_p2 = cursor; } while (false); cursor = v_8; return true; } private boolean r_postlude() { int among_var; int v_1; // repeat, line 70 replab0: while(true) { v_1 = cursor; lab1: do { // (, line 70 // [, line 72 bra = cursor; // substring, line 72 among_var = find_among(a_1, 3); if (among_var == 0) { break lab1; } // ], line 72 ket = cursor; switch(among_var) { case 0: break lab1; case 1: // (, line 73 // <-, line 73 slice_from("i"); break; case 2: // (, line 74 // <-, line 74 slice_from("u"); break; case 3: // (, line 75 // next, line 75 if (cursor >= limit) { break lab1; } cursor++; break; } continue replab0; } while (false); cursor = v_1; break replab0; } return true; } private boolean r_RV() { if (!(I_pV <= cursor)) { return false; } return true; } private boolean r_R1() { if (!(I_p1 <= cursor)) { return false; } return true; } private boolean r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private boolean r_attached_pronoun() { int among_var; // (, line 86 // [, line 87 ket = cursor; // substring, line 87 if (find_among_b(a_2, 37) == 0) { return false; } // ], line 87 bra = cursor; // among, line 97 among_var = find_among_b(a_3, 5); if (among_var == 0) { return false; } // (, line 97 // call RV, line 97 if (!r_RV()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 98 // delete, line 98 slice_del(); break; case 2: // (, line 99 // <-, line 99 slice_from("e"); break; } return true; } private boolean r_standard_suffix() { int among_var; int v_1; int v_2; int v_3; int v_4; // (, line 103 // [, line 104 ket = cursor; // substring, line 104 among_var = find_among_b(a_6, 51); if (among_var == 0) { return false; } // ], line 104 bra = cursor; switch(among_var) { case 0: return false; case 1: // (, line 111 // call R2, line 111 if (!r_R2()) { return false; } // delete, line 111 slice_del(); break; case 2: // (, line 113 // call R2, line 113 if (!r_R2()) { return false; } // delete, line 113 slice_del(); // try, line 114 v_1 = limit - cursor; lab0: do { // (, line 114 // [, line 114 ket = cursor; // literal, line 114 if (!(eq_s_b(2, "ic"))) { cursor = limit - v_1; break lab0; } // ], line 114 bra = cursor; // call R2, line 114 if (!r_R2()) { cursor = limit - v_1; break lab0; } // delete, line 114 slice_del(); } while (false); break; case 3: // (, line 117 // call R2, line 117 if (!r_R2()) { return false; } // <-, line 117 slice_from("log"); break; case 4: // (, line 119 // call R2, line 119 if (!r_R2()) { return false; } // <-, line 119 slice_from("u"); break; case 5: // (, line 121 // call R2, line 121 if (!r_R2()) { return false; } // <-, line 121 slice_from("ente"); break; case 6: // (, line 123 // call RV, line 123 if (!r_RV()) { return false; } // delete, line 123 slice_del(); break; case 7: // (, line 124 // call R1, line 125 if (!r_R1()) { return false; } // delete, line 125 slice_del(); // try, line 126 v_2 = limit - cursor; lab1: do { // (, line 126 // [, line 127 ket = cursor; // substring, line 127 among_var = find_among_b(a_4, 4); if (among_var == 0) { cursor = limit - v_2; break lab1; } // ], line 127 bra = cursor; // call R2, line 127 if (!r_R2()) { cursor = limit - v_2; break lab1; } // delete, line 127 slice_del(); switch(among_var) { case 0: cursor = limit - v_2; break lab1; case 1: // (, line 128 // [, line 128 ket = cursor; // literal, line 128 if (!(eq_s_b(2, "at"))) { cursor = limit - v_2; break lab1; } // ], line 128 bra = cursor; // call R2, line 128 if (!r_R2()) { cursor = limit - v_2; break lab1; } // delete, line 128 slice_del(); break; } } while (false); break; case 8: // (, line 133 // call R2, line 134 if (!r_R2()) { return false; } // delete, line 134 slice_del(); // try, line 135 v_3 = limit - cursor; lab2: do { // (, line 135 // [, line 136 ket = cursor; // substring, line 136 among_var = find_among_b(a_5, 3); if (among_var == 0) { cursor = limit - v_3; break lab2; } // ], line 136 bra = cursor; switch(among_var) { case 0: cursor = limit - v_3; break lab2; case 1: // (, line 137 // call R2, line 137 if (!r_R2()) { cursor = limit - v_3; break lab2; } // delete, line 137 slice_del(); break; } } while (false); break; case 9: // (, line 141 // call R2, line 142 if (!r_R2()) { return false; } // delete, line 142 slice_del(); // try, line 143 v_4 = limit - cursor; lab3: do { // (, line 143 // [, line 143 ket = cursor; // literal, line 143 if (!(eq_s_b(2, "at"))) { cursor = limit - v_4; break lab3; } // ], line 143 bra = cursor; // call R2, line 143 if (!r_R2()) { cursor = limit - v_4; break lab3; } // delete, line 143 slice_del(); // [, line 143 ket = cursor; // literal, line 143 if (!(eq_s_b(2, "ic"))) { cursor = limit - v_4; break lab3; } // ], line 143 bra = cursor; // call R2, line 143 if (!r_R2()) { cursor = limit - v_4; break lab3; } // delete, line 143 slice_del(); } while (false); break; } return true; } private boolean r_verb_suffix() { int among_var; int v_1; int v_2; // setlimit, line 148 v_1 = limit - cursor; // tomark, line 148 if (cursor < I_pV) { return false; } cursor = I_pV; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 148 // [, line 149 ket = cursor; // substring, line 149 among_var = find_among_b(a_7, 87); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 149 bra = cursor; switch(among_var) { case 0: limit_backward = v_2; return false; case 1: // (, line 163 // delete, line 163 slice_del(); break; } limit_backward = v_2; return true; } private boolean r_vowel_suffix() { int v_1; int v_2; // (, line 170 // try, line 171 v_1 = limit - cursor; lab0: do { // (, line 171 // [, line 172 ket = cursor; if (!(in_grouping_b(g_AEIO, 97, 242))) { cursor = limit - v_1; break lab0; } // ], line 172 bra = cursor; // call RV, line 172 if (!r_RV()) { cursor = limit - v_1; break lab0; } // delete, line 172 slice_del(); // [, line 173 ket = cursor; // literal, line 173 if (!(eq_s_b(1, "i"))) { cursor = limit - v_1; break lab0; } // ], line 173 bra = cursor; // call RV, line 173 if (!r_RV()) { cursor = limit - v_1; break lab0; } // delete, line 173 slice_del(); } while (false); // try, line 175 v_2 = limit - cursor; lab1: do { // (, line 175 // [, line 176 ket = cursor; // literal, line 176 if (!(eq_s_b(1, "h"))) { cursor = limit - v_2; break lab1; } // ], line 176 bra = cursor; if (!(in_grouping_b(g_CG, 99, 103))) { cursor = limit - v_2; break lab1; } // call RV, line 176 if (!r_RV()) { cursor = limit - v_2; break lab1; } // delete, line 176 slice_del(); } while (false); return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; // (, line 181 // do, line 182 v_1 = cursor; lab0: do { // call prelude, line 182 if (!r_prelude()) { break lab0; } } while (false); cursor = v_1; // do, line 183 v_2 = cursor; lab1: do { // call mark_regions, line 183 if (!r_mark_regions()) { break lab1; } } while (false); cursor = v_2; // backwards, line 184 limit_backward = cursor; cursor = limit; // (, line 184 // do, line 185 v_3 = limit - cursor; lab2: do { // call attached_pronoun, line 185 if (!r_attached_pronoun()) { break lab2; } } while (false); cursor = limit - v_3; // do, line 186 v_4 = limit - cursor; lab3: do { // (, line 186 // or, line 186 lab4: do { v_5 = limit - cursor; lab5: do { // call standard_suffix, line 186 if (!r_standard_suffix()) { break lab5; } break lab4; } while (false); cursor = limit - v_5; // call verb_suffix, line 186 if (!r_verb_suffix()) { break lab3; } } while (false); } while (false); cursor = limit - v_4; // do, line 187 v_6 = limit - cursor; lab6: do { // call vowel_suffix, line 187 if (!r_vowel_suffix()) { break lab6; } } while (false); cursor = limit - v_6; cursor = limit_backward; // do, line 189 v_7 = cursor; lab7: do { // call postlude, line 189 if (!r_postlude()) { break lab7; } } while (false); cursor = v_7; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/ext/hungarianStemmer.java0000644000175000017500000011304411625126512033152 0ustar drazzibdrazzib// This file was generated automatically by the Snowball to Java compiler package org.tartarus.snowball.ext; import org.tartarus.snowball.SnowballProgram; import org.tartarus.snowball.Among; /** * Generated class implementing code defined by a snowball script. */ public class hungarianStemmer extends SnowballProgram { private Among a_0[] = { new Among ( "cs", -1, -1, "", this), new Among ( "dzs", -1, -1, "", this), new Among ( "gy", -1, -1, "", this), new Among ( "ly", -1, -1, "", this), new Among ( "ny", -1, -1, "", this), new Among ( "sz", -1, -1, "", this), new Among ( "ty", -1, -1, "", this), new Among ( "zs", -1, -1, "", this) }; private Among a_1[] = { new Among ( "\u00E1", -1, 1, "", this), new Among ( "\u00E9", -1, 2, "", this) }; private Among a_2[] = { new Among ( "bb", -1, -1, "", this), new Among ( "cc", -1, -1, "", this), new Among ( "dd", -1, -1, "", this), new Among ( "ff", -1, -1, "", this), new Among ( "gg", -1, -1, "", this), new Among ( "jj", -1, -1, "", this), new Among ( "kk", -1, -1, "", this), new Among ( "ll", -1, -1, "", this), new Among ( "mm", -1, -1, "", this), new Among ( "nn", -1, -1, "", this), new Among ( "pp", -1, -1, "", this), new Among ( "rr", -1, -1, "", this), new Among ( "ccs", -1, -1, "", this), new Among ( "ss", -1, -1, "", this), new Among ( "zzs", -1, -1, "", this), new Among ( "tt", -1, -1, "", this), new Among ( "vv", -1, -1, "", this), new Among ( "ggy", -1, -1, "", this), new Among ( "lly", -1, -1, "", this), new Among ( "nny", -1, -1, "", this), new Among ( "tty", -1, -1, "", this), new Among ( "ssz", -1, -1, "", this), new Among ( "zz", -1, -1, "", this) }; private Among a_3[] = { new Among ( "al", -1, 1, "", this), new Among ( "el", -1, 2, "", this) }; private Among a_4[] = { new Among ( "ba", -1, -1, "", this), new Among ( "ra", -1, -1, "", this), new Among ( "be", -1, -1, "", this), new Among ( "re", -1, -1, "", this), new Among ( "ig", -1, -1, "", this), new Among ( "nak", -1, -1, "", this), new Among ( "nek", -1, -1, "", this), new Among ( "val", -1, -1, "", this), new Among ( "vel", -1, -1, "", this), new Among ( "ul", -1, -1, "", this), new Among ( "n\u00E1l", -1, -1, "", this), new Among ( "n\u00E9l", -1, -1, "", this), new Among ( "b\u00F3l", -1, -1, "", this), new Among ( "r\u00F3l", -1, -1, "", this), new Among ( "t\u00F3l", -1, -1, "", this), new Among ( "b\u00F5l", -1, -1, "", this), new Among ( "r\u00F5l", -1, -1, "", this), new Among ( "t\u00F5l", -1, -1, "", this), new Among ( "\u00FCl", -1, -1, "", this), new Among ( "n", -1, -1, "", this), new Among ( "an", 19, -1, "", this), new Among ( "ban", 20, -1, "", this), new Among ( "en", 19, -1, "", this), new Among ( "ben", 22, -1, "", this), new Among ( "k\u00E9ppen", 22, -1, "", this), new Among ( "on", 19, -1, "", this), new Among ( "\u00F6n", 19, -1, "", this), new Among ( "k\u00E9pp", -1, -1, "", this), new Among ( "kor", -1, -1, "", this), new Among ( "t", -1, -1, "", this), new Among ( "at", 29, -1, "", this), new Among ( "et", 29, -1, "", this), new Among ( "k\u00E9nt", 29, -1, "", this), new Among ( "ank\u00E9nt", 32, -1, "", this), new Among ( "enk\u00E9nt", 32, -1, "", this), new Among ( "onk\u00E9nt", 32, -1, "", this), new Among ( "ot", 29, -1, "", this), new Among ( "\u00E9rt", 29, -1, "", this), new Among ( "\u00F6t", 29, -1, "", this), new Among ( "hez", -1, -1, "", this), new Among ( "hoz", -1, -1, "", this), new Among ( "h\u00F6z", -1, -1, "", this), new Among ( "v\u00E1", -1, -1, "", this), new Among ( "v\u00E9", -1, -1, "", this) }; private Among a_5[] = { new Among ( "\u00E1n", -1, 2, "", this), new Among ( "\u00E9n", -1, 1, "", this), new Among ( "\u00E1nk\u00E9nt", -1, 3, "", this) }; private Among a_6[] = { new Among ( "stul", -1, 2, "", this), new Among ( "astul", 0, 1, "", this), new Among ( "\u00E1stul", 0, 3, "", this), new Among ( "st\u00FCl", -1, 2, "", this), new Among ( "est\u00FCl", 3, 1, "", this), new Among ( "\u00E9st\u00FCl", 3, 4, "", this) }; private Among a_7[] = { new Among ( "\u00E1", -1, 1, "", this), new Among ( "\u00E9", -1, 2, "", this) }; private Among a_8[] = { new Among ( "k", -1, 7, "", this), new Among ( "ak", 0, 4, "", this), new Among ( "ek", 0, 6, "", this), new Among ( "ok", 0, 5, "", this), new Among ( "\u00E1k", 0, 1, "", this), new Among ( "\u00E9k", 0, 2, "", this), new Among ( "\u00F6k", 0, 3, "", this) }; private Among a_9[] = { new Among ( "\u00E9i", -1, 7, "", this), new Among ( "\u00E1\u00E9i", 0, 6, "", this), new Among ( "\u00E9\u00E9i", 0, 5, "", this), new Among ( "\u00E9", -1, 9, "", this), new Among ( "k\u00E9", 3, 4, "", this), new Among ( "ak\u00E9", 4, 1, "", this), new Among ( "ek\u00E9", 4, 1, "", this), new Among ( "ok\u00E9", 4, 1, "", this), new Among ( "\u00E1k\u00E9", 4, 3, "", this), new Among ( "\u00E9k\u00E9", 4, 2, "", this), new Among ( "\u00F6k\u00E9", 4, 1, "", this), new Among ( "\u00E9\u00E9", 3, 8, "", this) }; private Among a_10[] = { new Among ( "a", -1, 18, "", this), new Among ( "ja", 0, 17, "", this), new Among ( "d", -1, 16, "", this), new Among ( "ad", 2, 13, "", this), new Among ( "ed", 2, 13, "", this), new Among ( "od", 2, 13, "", this), new Among ( "\u00E1d", 2, 14, "", this), new Among ( "\u00E9d", 2, 15, "", this), new Among ( "\u00F6d", 2, 13, "", this), new Among ( "e", -1, 18, "", this), new Among ( "je", 9, 17, "", this), new Among ( "nk", -1, 4, "", this), new Among ( "unk", 11, 1, "", this), new Among ( "\u00E1nk", 11, 2, "", this), new Among ( "\u00E9nk", 11, 3, "", this), new Among ( "\u00FCnk", 11, 1, "", this), new Among ( "uk", -1, 8, "", this), new Among ( "juk", 16, 7, "", this), new Among ( "\u00E1juk", 17, 5, "", this), new Among ( "\u00FCk", -1, 8, "", this), new Among ( "j\u00FCk", 19, 7, "", this), new Among ( "\u00E9j\u00FCk", 20, 6, "", this), new Among ( "m", -1, 12, "", this), new Among ( "am", 22, 9, "", this), new Among ( "em", 22, 9, "", this), new Among ( "om", 22, 9, "", this), new Among ( "\u00E1m", 22, 10, "", this), new Among ( "\u00E9m", 22, 11, "", this), new Among ( "o", -1, 18, "", this), new Among ( "\u00E1", -1, 19, "", this), new Among ( "\u00E9", -1, 20, "", this) }; private Among a_11[] = { new Among ( "id", -1, 10, "", this), new Among ( "aid", 0, 9, "", this), new Among ( "jaid", 1, 6, "", this), new Among ( "eid", 0, 9, "", this), new Among ( "jeid", 3, 6, "", this), new Among ( "\u00E1id", 0, 7, "", this), new Among ( "\u00E9id", 0, 8, "", this), new Among ( "i", -1, 15, "", this), new Among ( "ai", 7, 14, "", this), new Among ( "jai", 8, 11, "", this), new Among ( "ei", 7, 14, "", this), new Among ( "jei", 10, 11, "", this), new Among ( "\u00E1i", 7, 12, "", this), new Among ( "\u00E9i", 7, 13, "", this), new Among ( "itek", -1, 24, "", this), new Among ( "eitek", 14, 21, "", this), new Among ( "jeitek", 15, 20, "", this), new Among ( "\u00E9itek", 14, 23, "", this), new Among ( "ik", -1, 29, "", this), new Among ( "aik", 18, 26, "", this), new Among ( "jaik", 19, 25, "", this), new Among ( "eik", 18, 26, "", this), new Among ( "jeik", 21, 25, "", this), new Among ( "\u00E1ik", 18, 27, "", this), new Among ( "\u00E9ik", 18, 28, "", this), new Among ( "ink", -1, 20, "", this), new Among ( "aink", 25, 17, "", this), new Among ( "jaink", 26, 16, "", this), new Among ( "eink", 25, 17, "", this), new Among ( "jeink", 28, 16, "", this), new Among ( "\u00E1ink", 25, 18, "", this), new Among ( "\u00E9ink", 25, 19, "", this), new Among ( "aitok", -1, 21, "", this), new Among ( "jaitok", 32, 20, "", this), new Among ( "\u00E1itok", -1, 22, "", this), new Among ( "im", -1, 5, "", this), new Among ( "aim", 35, 4, "", this), new Among ( "jaim", 36, 1, "", this), new Among ( "eim", 35, 4, "", this), new Among ( "jeim", 38, 1, "", this), new Among ( "\u00E1im", 35, 2, "", this), new Among ( "\u00E9im", 35, 3, "", this) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 52, 14 }; private int I_p1; private void copy_from(hungarianStemmer other) { I_p1 = other.I_p1; super.copy_from(other); } private boolean r_mark_regions() { int v_1; int v_2; int v_3; // (, line 44 I_p1 = limit; // or, line 51 lab0: do { v_1 = cursor; lab1: do { // (, line 48 if (!(in_grouping(g_v, 97, 252))) { break lab1; } // goto, line 48 golab2: while(true) { v_2 = cursor; lab3: do { if (!(out_grouping(g_v, 97, 252))) { break lab3; } cursor = v_2; break golab2; } while (false); cursor = v_2; if (cursor >= limit) { break lab1; } cursor++; } // or, line 49 lab4: do { v_3 = cursor; lab5: do { // among, line 49 if (find_among(a_0, 8) == 0) { break lab5; } break lab4; } while (false); cursor = v_3; // next, line 49 if (cursor >= limit) { break lab1; } cursor++; } while (false); // setmark p1, line 50 I_p1 = cursor; break lab0; } while (false); cursor = v_1; // (, line 53 if (!(out_grouping(g_v, 97, 252))) { return false; } // gopast, line 53 golab6: while(true) { lab7: do { if (!(in_grouping(g_v, 97, 252))) { break lab7; } break golab6; } while (false); if (cursor >= limit) { return false; } cursor++; } // setmark p1, line 53 I_p1 = cursor; } while (false); return true; } private boolean r_R1() { if (!(I_p1 <= cursor)) { return false; } return true; } private boolean r_v_ending() { int among_var; // (, line 60 // [, line 61 ket = cursor; // substring, line 61 among_var = find_among_b(a_1, 2); if (among_var == 0) { return false; } // ], line 61 bra = cursor; // call R1, line 61 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 62 // <-, line 62 slice_from("a"); break; case 2: // (, line 63 // <-, line 63 slice_from("e"); break; } return true; } private boolean r_double() { int v_1; // (, line 67 // test, line 68 v_1 = limit - cursor; // among, line 68 if (find_among_b(a_2, 23) == 0) { return false; } cursor = limit - v_1; return true; } private boolean r_undouble() { // (, line 72 // next, line 73 if (cursor <= limit_backward) { return false; } cursor--; // [, line 73 ket = cursor; // hop, line 73 { int c = cursor - 1; if (limit_backward > c || c > limit) { return false; } cursor = c; } // ], line 73 bra = cursor; // delete, line 73 slice_del(); return true; } private boolean r_instrum() { int among_var; // (, line 76 // [, line 77 ket = cursor; // substring, line 77 among_var = find_among_b(a_3, 2); if (among_var == 0) { return false; } // ], line 77 bra = cursor; // call R1, line 77 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 78 // call double, line 78 if (!r_double()) { return false; } break; case 2: // (, line 79 // call double, line 79 if (!r_double()) { return false; } break; } // delete, line 81 slice_del(); // call undouble, line 82 if (!r_undouble()) { return false; } return true; } private boolean r_case() { // (, line 86 // [, line 87 ket = cursor; // substring, line 87 if (find_among_b(a_4, 44) == 0) { return false; } // ], line 87 bra = cursor; // call R1, line 87 if (!r_R1()) { return false; } // delete, line 111 slice_del(); // call v_ending, line 112 if (!r_v_ending()) { return false; } return true; } private boolean r_case_special() { int among_var; // (, line 115 // [, line 116 ket = cursor; // substring, line 116 among_var = find_among_b(a_5, 3); if (among_var == 0) { return false; } // ], line 116 bra = cursor; // call R1, line 116 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 117 // <-, line 117 slice_from("e"); break; case 2: // (, line 118 // <-, line 118 slice_from("a"); break; case 3: // (, line 119 // <-, line 119 slice_from("a"); break; } return true; } private boolean r_case_other() { int among_var; // (, line 123 // [, line 124 ket = cursor; // substring, line 124 among_var = find_among_b(a_6, 6); if (among_var == 0) { return false; } // ], line 124 bra = cursor; // call R1, line 124 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 125 // delete, line 125 slice_del(); break; case 2: // (, line 126 // delete, line 126 slice_del(); break; case 3: // (, line 127 // <-, line 127 slice_from("a"); break; case 4: // (, line 128 // <-, line 128 slice_from("e"); break; } return true; } private boolean r_factive() { int among_var; // (, line 132 // [, line 133 ket = cursor; // substring, line 133 among_var = find_among_b(a_7, 2); if (among_var == 0) { return false; } // ], line 133 bra = cursor; // call R1, line 133 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 134 // call double, line 134 if (!r_double()) { return false; } break; case 2: // (, line 135 // call double, line 135 if (!r_double()) { return false; } break; } // delete, line 137 slice_del(); // call undouble, line 138 if (!r_undouble()) { return false; } return true; } private boolean r_plural() { int among_var; // (, line 141 // [, line 142 ket = cursor; // substring, line 142 among_var = find_among_b(a_8, 7); if (among_var == 0) { return false; } // ], line 142 bra = cursor; // call R1, line 142 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 143 // <-, line 143 slice_from("a"); break; case 2: // (, line 144 // <-, line 144 slice_from("e"); break; case 3: // (, line 145 // delete, line 145 slice_del(); break; case 4: // (, line 146 // delete, line 146 slice_del(); break; case 5: // (, line 147 // delete, line 147 slice_del(); break; case 6: // (, line 148 // delete, line 148 slice_del(); break; case 7: // (, line 149 // delete, line 149 slice_del(); break; } return true; } private boolean r_owned() { int among_var; // (, line 153 // [, line 154 ket = cursor; // substring, line 154 among_var = find_among_b(a_9, 12); if (among_var == 0) { return false; } // ], line 154 bra = cursor; // call R1, line 154 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 155 // delete, line 155 slice_del(); break; case 2: // (, line 156 // <-, line 156 slice_from("e"); break; case 3: // (, line 157 // <-, line 157 slice_from("a"); break; case 4: // (, line 158 // delete, line 158 slice_del(); break; case 5: // (, line 159 // <-, line 159 slice_from("e"); break; case 6: // (, line 160 // <-, line 160 slice_from("a"); break; case 7: // (, line 161 // delete, line 161 slice_del(); break; case 8: // (, line 162 // <-, line 162 slice_from("e"); break; case 9: // (, line 163 // delete, line 163 slice_del(); break; } return true; } private boolean r_sing_owner() { int among_var; // (, line 167 // [, line 168 ket = cursor; // substring, line 168 among_var = find_among_b(a_10, 31); if (among_var == 0) { return false; } // ], line 168 bra = cursor; // call R1, line 168 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 169 // delete, line 169 slice_del(); break; case 2: // (, line 170 // <-, line 170 slice_from("a"); break; case 3: // (, line 171 // <-, line 171 slice_from("e"); break; case 4: // (, line 172 // delete, line 172 slice_del(); break; case 5: // (, line 173 // <-, line 173 slice_from("a"); break; case 6: // (, line 174 // <-, line 174 slice_from("e"); break; case 7: // (, line 175 // delete, line 175 slice_del(); break; case 8: // (, line 176 // delete, line 176 slice_del(); break; case 9: // (, line 177 // delete, line 177 slice_del(); break; case 10: // (, line 178 // <-, line 178 slice_from("a"); break; case 11: // (, line 179 // <-, line 179 slice_from("e"); break; case 12: // (, line 180 // delete, line 180 slice_del(); break; case 13: // (, line 181 // delete, line 181 slice_del(); break; case 14: // (, line 182 // <-, line 182 slice_from("a"); break; case 15: // (, line 183 // <-, line 183 slice_from("e"); break; case 16: // (, line 184 // delete, line 184 slice_del(); break; case 17: // (, line 185 // delete, line 185 slice_del(); break; case 18: // (, line 186 // delete, line 186 slice_del(); break; case 19: // (, line 187 // <-, line 187 slice_from("a"); break; case 20: // (, line 188 // <-, line 188 slice_from("e"); break; } return true; } private boolean r_plur_owner() { int among_var; // (, line 192 // [, line 193 ket = cursor; // substring, line 193 among_var = find_among_b(a_11, 42); if (among_var == 0) { return false; } // ], line 193 bra = cursor; // call R1, line 193 if (!r_R1()) { return false; } switch(among_var) { case 0: return false; case 1: // (, line 194 // delete, line 194 slice_del(); break; case 2: // (, line 195 // <-, line 195 slice_from("a"); break; case 3: // (, line 196 // <-, line 196 slice_from("e"); break; case 4: // (, line 197 // delete, line 197 slice_del(); break; case 5: // (, line 198 // delete, line 198 slice_del(); break; case 6: // (, line 199 // delete, line 199 slice_del(); break; case 7: // (, line 200 // <-, line 200 slice_from("a"); break; case 8: // (, line 201 // <-, line 201 slice_from("e"); break; case 9: // (, line 202 // delete, line 202 slice_del(); break; case 10: // (, line 203 // delete, line 203 slice_del(); break; case 11: // (, line 204 // delete, line 204 slice_del(); break; case 12: // (, line 205 // <-, line 205 slice_from("a"); break; case 13: // (, line 206 // <-, line 206 slice_from("e"); break; case 14: // (, line 207 // delete, line 207 slice_del(); break; case 15: // (, line 208 // delete, line 208 slice_del(); break; case 16: // (, line 209 // delete, line 209 slice_del(); break; case 17: // (, line 210 // delete, line 210 slice_del(); break; case 18: // (, line 211 // <-, line 211 slice_from("a"); break; case 19: // (, line 212 // <-, line 212 slice_from("e"); break; case 20: // (, line 214 // delete, line 214 slice_del(); break; case 21: // (, line 215 // delete, line 215 slice_del(); break; case 22: // (, line 216 // <-, line 216 slice_from("a"); break; case 23: // (, line 217 // <-, line 217 slice_from("e"); break; case 24: // (, line 218 // delete, line 218 slice_del(); break; case 25: // (, line 219 // delete, line 219 slice_del(); break; case 26: // (, line 220 // delete, line 220 slice_del(); break; case 27: // (, line 221 // <-, line 221 slice_from("a"); break; case 28: // (, line 222 // <-, line 222 slice_from("e"); break; case 29: // (, line 223 // delete, line 223 slice_del(); break; } return true; } public boolean stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; int v_10; // (, line 228 // do, line 229 v_1 = cursor; lab0: do { // call mark_regions, line 229 if (!r_mark_regions()) { break lab0; } } while (false); cursor = v_1; // backwards, line 230 limit_backward = cursor; cursor = limit; // (, line 230 // do, line 231 v_2 = limit - cursor; lab1: do { // call instrum, line 231 if (!r_instrum()) { break lab1; } } while (false); cursor = limit - v_2; // do, line 232 v_3 = limit - cursor; lab2: do { // call case, line 232 if (!r_case()) { break lab2; } } while (false); cursor = limit - v_3; // do, line 233 v_4 = limit - cursor; lab3: do { // call case_special, line 233 if (!r_case_special()) { break lab3; } } while (false); cursor = limit - v_4; // do, line 234 v_5 = limit - cursor; lab4: do { // call case_other, line 234 if (!r_case_other()) { break lab4; } } while (false); cursor = limit - v_5; // do, line 235 v_6 = limit - cursor; lab5: do { // call factive, line 235 if (!r_factive()) { break lab5; } } while (false); cursor = limit - v_6; // do, line 236 v_7 = limit - cursor; lab6: do { // call owned, line 236 if (!r_owned()) { break lab6; } } while (false); cursor = limit - v_7; // do, line 237 v_8 = limit - cursor; lab7: do { // call sing_owner, line 237 if (!r_sing_owner()) { break lab7; } } while (false); cursor = limit - v_8; // do, line 238 v_9 = limit - cursor; lab8: do { // call plur_owner, line 238 if (!r_plur_owner()) { break lab8; } } while (false); cursor = limit - v_9; // do, line 239 v_10 = limit - cursor; lab9: do { // call plural, line 239 if (!r_plural()) { break lab9; } } while (false); cursor = limit - v_10; cursor = limit_backward; return true; } } uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/Among.java0000644000175000017500000000177111625126512030105 0ustar drazzibdrazzib package org.tartarus.snowball; import java.lang.reflect.Method; public class Among { public Among (String s, int substring_i, int result, String methodname, SnowballProgram methodobject) { this.s_size = s.length(); this.s = s; this.substring_i = substring_i; this.result = result; this.methodobject = methodobject; if (methodname.length() == 0) { this.method = null; } else { try { this.method = methodobject.getClass(). getDeclaredMethod(methodname, new Class[0]); } catch (NoSuchMethodException e) { // FIXME - debug message this.method = null; } } } public int s_size; /* search string */ public String s; /* search string */ public int substring_i; /* index to longest matching substring */ public int result; /* result of the lookup */ public Method method; /* method to use if substring matches */ public SnowballProgram methodobject; /* object to invoke method on */ }; uima-addons-2.3.1/SnowballAnnotator/src/main/java/org/tartarus/snowball/TestApp.java0000644000175000017500000000412311625126512030416 0ustar drazzibdrazzib package org.tartarus.snowball; import java.lang.reflect.Method; import java.io.Reader; import java.io.Writer; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.OutputStream; import java.io.FileOutputStream; public class TestApp { private static void usage() { System.err.println("Usage: TestApp [-o ]"); } public static void main(String [] args) throws Throwable { if (args.length < 2) { usage(); return; } Class stemClass = Class.forName("org.tartarus.snowball.ext." + args[0] + "Stemmer"); SnowballProgram stemmer = (SnowballProgram) stemClass.newInstance(); Method stemMethod = stemClass.getMethod("stem", new Class[0]); Reader reader; reader = new InputStreamReader(new FileInputStream(args[1])); reader = new BufferedReader(reader); StringBuffer input = new StringBuffer(); OutputStream outstream; if (args.length > 2) { if (args.length == 4 && args[2].equals("-o")) { outstream = new FileOutputStream(args[3]); } else { usage(); return; } } else { outstream = System.out; } Writer output = new OutputStreamWriter(outstream); output = new BufferedWriter(output); int repeat = 1; if (args.length > 4) { repeat = Integer.parseInt(args[4]); } Object [] emptyArgs = new Object[0]; int character; while ((character = reader.read()) != -1) { char ch = (char) character; if (Character.isWhitespace((char) ch)) { if (input.length() > 0) { stemmer.setCurrent(input.toString()); for (int i = repeat; i != 0; i--) { stemMethod.invoke(stemmer, emptyArgs); } output.write(stemmer.getCurrent()); output.write('\n'); input.delete(0, input.length()); } } else { input.append(Character.toLowerCase(ch)); } } output.flush(); } } uima-addons-2.3.1/SnowballAnnotator/src/test/0000755000175000017500000000000011625126512021030 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/test/resources/0000755000175000017500000000000011625126512023042 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/test/resources/typesystem.xml0000644000175000017500000000775411625126512026027 0ustar drazzibdrazzib uima.tcas.Annotation uima.cas.AnnotationBase sofa uima.cas.Sofa begin uima.cas.Integer end uima.cas.Integer uima.tcas.DocumentAnnotation uima.tcas.Annotation sofa uima.cas.Sofa begin uima.cas.Integer end uima.cas.Integer language uima.cas.String org.apache.uima.TokenAnnotation uima.tcas.Annotation sofa uima.cas.Sofa begin uima.cas.Integer end uima.cas.Integer tokenType uima.cas.String stem stem uima.cas.String org.apache.uima.SentenceAnnotation uima.tcas.Annotation sofa uima.cas.Sofa begin uima.cas.Integer end uima.cas.Integer uima-addons-2.3.1/SnowballAnnotator/src/test/resources/englishRef.txt0000644000175000017500000007074011625126512025701 0ustar drazzibdrazzibTokenAnnotation(0,6): Apache { stem=Apach } TokenAnnotation(7,14): License { stem=Licens } TokenAnnotation(42,49): Version { stem=Version } TokenAnnotation(50,51): 2 { stem=2 } TokenAnnotation(51,52): . { stem=. } TokenAnnotation(52,53): 0 { stem=0 } TokenAnnotation(53,54): , { stem=, } TokenAnnotation(55,62): January { stem=Januari } TokenAnnotation(63,67): 2004 { stem=2004 } TokenAnnotation(92,96): http { stem=http } TokenAnnotation(96,97): : { stem=: } TokenAnnotation(97,98): / { stem=/ } TokenAnnotation(98,99): / { stem=/ } TokenAnnotation(99,102): www { stem=www } TokenAnnotation(102,103): . { stem=. } TokenAnnotation(103,109): apache { stem=apach } TokenAnnotation(109,110): . { stem=. } TokenAnnotation(110,113): org { stem=org } TokenAnnotation(113,114): / { stem=/ } TokenAnnotation(114,122): licenses { stem=licens } TokenAnnotation(122,123): / { stem=/ } TokenAnnotation(128,133): TERMS { stem=TERMS } TokenAnnotation(134,137): AND { stem=AND } TokenAnnotation(138,148): CONDITIONS { stem=CONDITIONS } TokenAnnotation(149,152): FOR { stem=FOR } TokenAnnotation(153,156): USE { stem=USE } TokenAnnotation(156,157): , { stem=, } TokenAnnotation(158,170): REPRODUCTION { stem=REPRODUCTION } TokenAnnotation(170,171): , { stem=, } TokenAnnotation(172,175): AND { stem=AND } TokenAnnotation(176,188): DISTRIBUTION { stem=DISTRIBUTION } TokenAnnotation(193,194): 1 { stem=1 } TokenAnnotation(194,195): . { stem=. } TokenAnnotation(196,207): Definitions { stem=Definit } TokenAnnotation(207,208): . { stem=. } TokenAnnotation(216,217): " { stem=" } TokenAnnotation(217,224): License { stem=Licens } TokenAnnotation(224,225): " { stem=" } TokenAnnotation(226,231): shall { stem=shall } TokenAnnotation(232,236): mean { stem=mean } TokenAnnotation(237,240): the { stem=the } TokenAnnotation(241,246): terms { stem=term } TokenAnnotation(247,250): and { stem=and } TokenAnnotation(251,261): conditions { stem=condit } TokenAnnotation(262,265): for { stem=for } TokenAnnotation(266,269): use { stem=use } TokenAnnotation(269,270): , { stem=, } TokenAnnotation(271,283): reproduction { stem=reproduct } TokenAnnotation(283,284): , { stem=, } TokenAnnotation(291,294): and { stem=and } TokenAnnotation(295,307): distribution { stem=distribut } TokenAnnotation(308,310): as { stem=as } TokenAnnotation(311,318): defined { stem=defin } TokenAnnotation(319,321): by { stem=by } TokenAnnotation(322,330): Sections { stem=Section } TokenAnnotation(331,332): 1 { stem=1 } TokenAnnotation(333,340): through { stem=through } TokenAnnotation(341,342): 9 { stem=9 } TokenAnnotation(343,345): of { stem=of } TokenAnnotation(346,350): this { stem=this } TokenAnnotation(351,359): document { stem=document } TokenAnnotation(359,360): . { stem=. } TokenAnnotation(368,369): " { stem=" } TokenAnnotation(369,377): Licensor { stem=Licensor } TokenAnnotation(377,378): " { stem=" } TokenAnnotation(379,384): shall { stem=shall } TokenAnnotation(385,389): mean { stem=mean } TokenAnnotation(390,393): the { stem=the } TokenAnnotation(394,403): copyright { stem=copyright } TokenAnnotation(404,409): owner { stem=owner } TokenAnnotation(410,412): or { stem=or } TokenAnnotation(413,419): entity { stem=entiti } TokenAnnotation(420,430): authorized { stem=author } TokenAnnotation(431,433): by { stem=by } TokenAnnotation(440,443): the { stem=the } TokenAnnotation(444,453): copyright { stem=copyright } TokenAnnotation(454,459): owner { stem=owner } TokenAnnotation(460,464): that { stem=that } TokenAnnotation(465,467): is { stem=is } TokenAnnotation(468,476): granting { stem=grant } TokenAnnotation(477,480): the { stem=the } TokenAnnotation(481,488): License { stem=Licens } TokenAnnotation(488,489): . { stem=. } TokenAnnotation(497,498): " { stem=" } TokenAnnotation(498,503): Legal { stem=Legal } TokenAnnotation(504,510): Entity { stem=Entiti } TokenAnnotation(510,511): " { stem=" } TokenAnnotation(512,517): shall { stem=shall } TokenAnnotation(518,522): mean { stem=mean } TokenAnnotation(523,526): the { stem=the } TokenAnnotation(527,532): union { stem=union } TokenAnnotation(533,535): of { stem=of } TokenAnnotation(536,539): the { stem=the } TokenAnnotation(540,546): acting { stem=act } TokenAnnotation(547,553): entity { stem=entiti } TokenAnnotation(554,557): and { stem=and } TokenAnnotation(558,561): all { stem=all } TokenAnnotation(568,573): other { stem=other } TokenAnnotation(574,582): entities { stem=entiti } TokenAnnotation(583,587): that { stem=that } TokenAnnotation(588,595): control { stem=control } TokenAnnotation(595,596): , { stem=, } TokenAnnotation(597,600): are { stem=are } TokenAnnotation(601,611): controlled { stem=control } TokenAnnotation(612,614): by { stem=by } TokenAnnotation(614,615): , { stem=, } TokenAnnotation(616,618): or { stem=or } TokenAnnotation(619,622): are { stem=are } TokenAnnotation(623,628): under { stem=under } TokenAnnotation(629,635): common { stem=common } TokenAnnotation(642,649): control { stem=control } TokenAnnotation(650,654): with { stem=with } TokenAnnotation(655,659): that { stem=that } TokenAnnotation(660,666): entity { stem=entiti } TokenAnnotation(666,667): . { stem=. } TokenAnnotation(668,671): For { stem=For } TokenAnnotation(672,675): the { stem=the } TokenAnnotation(676,684): purposes { stem=purpos } TokenAnnotation(685,687): of { stem=of } TokenAnnotation(688,692): this { stem=this } TokenAnnotation(693,703): definition { stem=definit } TokenAnnotation(703,704): , { stem=, } TokenAnnotation(711,712): " { stem=" } TokenAnnotation(712,719): control { stem=control } TokenAnnotation(719,720): " { stem=" } TokenAnnotation(721,726): means { stem=mean } TokenAnnotation(727,728): ( { stem=( } TokenAnnotation(728,729): i { stem=i } TokenAnnotation(729,730): ) { stem=) } TokenAnnotation(731,734): the { stem=the } TokenAnnotation(735,740): power { stem=power } TokenAnnotation(740,741): , { stem=, } TokenAnnotation(742,748): direct { stem=direct } TokenAnnotation(749,751): or { stem=or } TokenAnnotation(752,760): indirect { stem=indirect } TokenAnnotation(760,761): , { stem=, } TokenAnnotation(762,764): to { stem=to } TokenAnnotation(765,770): cause { stem=caus } TokenAnnotation(771,774): the { stem=the } TokenAnnotation(781,790): direction { stem=direct } TokenAnnotation(791,793): or { stem=or } TokenAnnotation(794,804): management { stem=manag } TokenAnnotation(805,807): of { stem=of } TokenAnnotation(808,812): such { stem=such } TokenAnnotation(813,819): entity { stem=entiti } TokenAnnotation(819,820): , { stem=, } TokenAnnotation(821,828): whether { stem=whether } TokenAnnotation(829,831): by { stem=by } TokenAnnotation(832,840): contract { stem=contract } TokenAnnotation(841,843): or { stem=or } TokenAnnotation(850,859): otherwise { stem=otherwis } TokenAnnotation(859,860): , { stem=, } TokenAnnotation(861,863): or { stem=or } TokenAnnotation(864,865): ( { stem=( } TokenAnnotation(865,867): ii { stem=ii } TokenAnnotation(867,868): ) { stem=) } TokenAnnotation(869,878): ownership { stem=ownership } TokenAnnotation(879,881): of { stem=of } TokenAnnotation(882,887): fifty { stem=fifti } TokenAnnotation(888,895): percent { stem=percent } TokenAnnotation(896,897): ( { stem=( } TokenAnnotation(897,899): 50 { stem=50 } TokenAnnotation(899,900): % { stem=% } TokenAnnotation(900,901): ) { stem=) } TokenAnnotation(902,904): or { stem=or } TokenAnnotation(905,909): more { stem=more } TokenAnnotation(910,912): of { stem=of } TokenAnnotation(913,916): the { stem=the } TokenAnnotation(923,934): outstanding { stem=outstand } TokenAnnotation(935,941): shares { stem=share } TokenAnnotation(941,942): , { stem=, } TokenAnnotation(943,945): or { stem=or } TokenAnnotation(946,947): ( { stem=( } TokenAnnotation(947,950): iii { stem=iii } TokenAnnotation(950,951): ) { stem=) } TokenAnnotation(952,962): beneficial { stem=benefici } TokenAnnotation(963,972): ownership { stem=ownership } TokenAnnotation(973,975): of { stem=of } TokenAnnotation(976,980): such { stem=such } TokenAnnotation(981,987): entity { stem=entiti } TokenAnnotation(987,988): . { stem=. } TokenAnnotation(996,997): " { stem=" } TokenAnnotation(997,1000): You { stem=You } TokenAnnotation(1000,1001): " { stem=" } TokenAnnotation(1002,1003): ( { stem=( } TokenAnnotation(1003,1005): or { stem=or } TokenAnnotation(1006,1007): " { stem=" } TokenAnnotation(1007,1011): Your { stem=Your } TokenAnnotation(1011,1012): " { stem=" } TokenAnnotation(1012,1013): ) { stem=) } TokenAnnotation(1014,1019): shall { stem=shall } TokenAnnotation(1020,1024): mean { stem=mean } TokenAnnotation(1025,1027): an { stem=an } TokenAnnotation(1028,1038): individual { stem=individu } TokenAnnotation(1039,1041): or { stem=or } TokenAnnotation(1042,1047): Legal { stem=Legal } TokenAnnotation(1048,1054): Entity { stem=Entiti } TokenAnnotation(1061,1071): exercising { stem=exercis } TokenAnnotation(1072,1083): permissions { stem=permiss } TokenAnnotation(1084,1091): granted { stem=grant } TokenAnnotation(1092,1094): by { stem=by } TokenAnnotation(1095,1099): this { stem=this } TokenAnnotation(1100,1107): License { stem=Licens } TokenAnnotation(1107,1108): . { stem=. } TokenAnnotation(1116,1117): " { stem=" } TokenAnnotation(1117,1123): Source { stem=Sourc } TokenAnnotation(1123,1124): " { stem=" } TokenAnnotation(1125,1129): form { stem=form } TokenAnnotation(1130,1135): shall { stem=shall } TokenAnnotation(1136,1140): mean { stem=mean } TokenAnnotation(1141,1144): the { stem=the } TokenAnnotation(1145,1154): preferred { stem=prefer } TokenAnnotation(1155,1159): form { stem=form } TokenAnnotation(1160,1163): for { stem=for } TokenAnnotation(1164,1170): making { stem=make } TokenAnnotation(1171,1184): modifications { stem=modif } TokenAnnotation(1184,1185): , { stem=, } TokenAnnotation(1192,1201): including { stem=includ } TokenAnnotation(1202,1205): but { stem=but } TokenAnnotation(1206,1209): not { stem=not } TokenAnnotation(1210,1217): limited { stem=limit } TokenAnnotation(1218,1220): to { stem=to } TokenAnnotation(1221,1229): software { stem=softwar } TokenAnnotation(1230,1236): source { stem=sourc } TokenAnnotation(1237,1241): code { stem=code } TokenAnnotation(1241,1242): , { stem=, } TokenAnnotation(1243,1256): documentation { stem=document } TokenAnnotation(1263,1269): source { stem=sourc } TokenAnnotation(1269,1270): , { stem=, } TokenAnnotation(1271,1274): and { stem=and } TokenAnnotation(1275,1288): configuration { stem=configur } TokenAnnotation(1289,1294): files { stem=file } TokenAnnotation(1294,1295): . { stem=. } TokenAnnotation(1303,1304): " { stem=" } TokenAnnotation(1304,1310): Object { stem=Object } TokenAnnotation(1310,1311): " { stem=" } TokenAnnotation(1312,1316): form { stem=form } TokenAnnotation(1317,1322): shall { stem=shall } TokenAnnotation(1323,1327): mean { stem=mean } TokenAnnotation(1328,1331): any { stem=ani } TokenAnnotation(1332,1336): form { stem=form } TokenAnnotation(1337,1346): resulting { stem=result } TokenAnnotation(1347,1351): from { stem=from } TokenAnnotation(1352,1362): mechanical { stem=mechan } TokenAnnotation(1369,1383): transformation { stem=transform } TokenAnnotation(1384,1386): or { stem=or } TokenAnnotation(1387,1398): translation { stem=translat } TokenAnnotation(1399,1401): of { stem=of } TokenAnnotation(1402,1403): a { stem=a } TokenAnnotation(1404,1410): Source { stem=Sourc } TokenAnnotation(1411,1415): form { stem=form } TokenAnnotation(1415,1416): , { stem=, } TokenAnnotation(1417,1426): including { stem=includ } TokenAnnotation(1427,1430): but { stem=but } TokenAnnotation(1437,1440): not { stem=not } TokenAnnotation(1441,1448): limited { stem=limit } TokenAnnotation(1449,1451): to { stem=to } TokenAnnotation(1452,1460): compiled { stem=compil } TokenAnnotation(1461,1467): object { stem=object } TokenAnnotation(1468,1472): code { stem=code } TokenAnnotation(1472,1473): , { stem=, } TokenAnnotation(1474,1483): generated { stem=generat } TokenAnnotation(1484,1497): documentation { stem=document } TokenAnnotation(1497,1498): , { stem=, } TokenAnnotation(1505,1508): and { stem=and } TokenAnnotation(1509,1520): conversions { stem=convers } TokenAnnotation(1521,1523): to { stem=to } TokenAnnotation(1524,1529): other { stem=other } TokenAnnotation(1530,1535): media { stem=media } TokenAnnotation(1536,1541): types { stem=type } TokenAnnotation(1541,1542): . { stem=. } TokenAnnotation(1550,1551): " { stem=" } TokenAnnotation(1551,1555): Work { stem=Work } TokenAnnotation(1555,1556): " { stem=" } TokenAnnotation(1557,1562): shall { stem=shall } TokenAnnotation(1563,1567): mean { stem=mean } TokenAnnotation(1568,1571): the { stem=the } TokenAnnotation(1572,1576): work { stem=work } TokenAnnotation(1577,1579): of { stem=of } TokenAnnotation(1580,1590): authorship { stem=authorship } TokenAnnotation(1590,1591): , { stem=, } TokenAnnotation(1592,1599): whether { stem=whether } TokenAnnotation(1600,1602): in { stem=in } TokenAnnotation(1603,1609): Source { stem=Sourc } TokenAnnotation(1610,1612): or { stem=or } TokenAnnotation(1619,1625): Object { stem=Object } TokenAnnotation(1626,1630): form { stem=form } TokenAnnotation(1630,1631): , { stem=, } TokenAnnotation(1632,1636): made { stem=made } TokenAnnotation(1637,1646): available { stem=avail } TokenAnnotation(1647,1652): under { stem=under } TokenAnnotation(1653,1656): the { stem=the } TokenAnnotation(1657,1664): License { stem=Licens } TokenAnnotation(1664,1665): , { stem=, } TokenAnnotation(1666,1668): as { stem=as } TokenAnnotation(1669,1678): indicated { stem=indic } TokenAnnotation(1679,1681): by { stem=by } TokenAnnotation(1682,1683): a { stem=a } TokenAnnotation(1690,1699): copyright { stem=copyright } TokenAnnotation(1700,1706): notice { stem=notic } TokenAnnotation(1707,1711): that { stem=that } TokenAnnotation(1712,1714): is { stem=is } TokenAnnotation(1715,1723): included { stem=includ } TokenAnnotation(1724,1726): in { stem=in } TokenAnnotation(1727,1729): or { stem=or } TokenAnnotation(1730,1738): attached { stem=attach } TokenAnnotation(1739,1741): to { stem=to } TokenAnnotation(1742,1745): the { stem=the } TokenAnnotation(1746,1750): work { stem=work } TokenAnnotation(1757,1758): ( { stem=( } TokenAnnotation(1758,1760): an { stem=an } TokenAnnotation(1761,1768): example { stem=exampl } TokenAnnotation(1769,1771): is { stem=is } TokenAnnotation(1772,1780): provided { stem=provid } TokenAnnotation(1781,1783): in { stem=in } TokenAnnotation(1784,1787): the { stem=the } TokenAnnotation(1788,1796): Appendix { stem=Appendix } TokenAnnotation(1797,1802): below { stem=below } TokenAnnotation(1802,1803): ) { stem=) } TokenAnnotation(1803,1804): . { stem=. } TokenAnnotation(1812,1813): " { stem=" } TokenAnnotation(1813,1823): Derivative { stem=Deriv } TokenAnnotation(1824,1829): Works { stem=Work } TokenAnnotation(1829,1830): " { stem=" } TokenAnnotation(1831,1836): shall { stem=shall } TokenAnnotation(1837,1841): mean { stem=mean } TokenAnnotation(1842,1845): any { stem=ani } TokenAnnotation(1846,1850): work { stem=work } TokenAnnotation(1850,1851): , { stem=, } TokenAnnotation(1852,1859): whether { stem=whether } TokenAnnotation(1860,1862): in { stem=in } TokenAnnotation(1863,1869): Source { stem=Sourc } TokenAnnotation(1870,1872): or { stem=or } TokenAnnotation(1873,1879): Object { stem=Object } TokenAnnotation(1886,1890): form { stem=form } TokenAnnotation(1890,1891): , { stem=, } TokenAnnotation(1892,1896): that { stem=that } TokenAnnotation(1897,1899): is { stem=is } TokenAnnotation(1900,1905): based { stem=base } TokenAnnotation(1906,1908): on { stem=on } TokenAnnotation(1909,1910): ( { stem=( } TokenAnnotation(1910,1912): or { stem=or } TokenAnnotation(1913,1920): derived { stem=deriv } TokenAnnotation(1921,1925): from { stem=from } TokenAnnotation(1925,1926): ) { stem=) } TokenAnnotation(1927,1930): the { stem=the } TokenAnnotation(1931,1935): Work { stem=Work } TokenAnnotation(1936,1939): and { stem=and } TokenAnnotation(1940,1943): for { stem=for } TokenAnnotation(1944,1949): which { stem=which } TokenAnnotation(1950,1953): the { stem=the } TokenAnnotation(1960,1969): editorial { stem=editori } TokenAnnotation(1970,1979): revisions { stem=revis } TokenAnnotation(1979,1980): , { stem=, } TokenAnnotation(1981,1992): annotations { stem=annot } TokenAnnotation(1992,1993): , { stem=, } TokenAnnotation(1994,2006): elaborations { stem=elabor } TokenAnnotation(2006,2007): , { stem=, } TokenAnnotation(2008,2010): or { stem=or } TokenAnnotation(2011,2016): other { stem=other } TokenAnnotation(2017,2030): modifications { stem=modif } TokenAnnotation(2037,2046): represent { stem=repres } TokenAnnotation(2046,2047): , { stem=, } TokenAnnotation(2048,2050): as { stem=as } TokenAnnotation(2051,2052): a { stem=a } TokenAnnotation(2053,2058): whole { stem=whole } TokenAnnotation(2058,2059): , { stem=, } TokenAnnotation(2060,2062): an { stem=an } TokenAnnotation(2063,2071): original { stem=origin } TokenAnnotation(2072,2076): work { stem=work } TokenAnnotation(2077,2079): of { stem=of } TokenAnnotation(2080,2090): authorship { stem=authorship } TokenAnnotation(2090,2091): . { stem=. } TokenAnnotation(2092,2095): For { stem=For } TokenAnnotation(2096,2099): the { stem=the } TokenAnnotation(2100,2108): purposes { stem=purpos } TokenAnnotation(2115,2117): of { stem=of } TokenAnnotation(2118,2122): this { stem=this } TokenAnnotation(2123,2130): License { stem=Licens } TokenAnnotation(2130,2131): , { stem=, } TokenAnnotation(2132,2142): Derivative { stem=Deriv } TokenAnnotation(2143,2148): Works { stem=Work } TokenAnnotation(2149,2154): shall { stem=shall } TokenAnnotation(2155,2158): not { stem=not } TokenAnnotation(2159,2166): include { stem=includ } TokenAnnotation(2167,2172): works { stem=work } TokenAnnotation(2173,2177): that { stem=that } TokenAnnotation(2178,2184): remain { stem=remain } TokenAnnotation(2191,2200): separable { stem=separ } TokenAnnotation(2201,2205): from { stem=from } TokenAnnotation(2205,2206): , { stem=, } TokenAnnotation(2207,2209): or { stem=or } TokenAnnotation(2210,2216): merely { stem=mere } TokenAnnotation(2217,2221): link { stem=link } TokenAnnotation(2222,2223): ( { stem=( } TokenAnnotation(2223,2225): or { stem=or } TokenAnnotation(2226,2230): bind { stem=bind } TokenAnnotation(2231,2233): by { stem=by } TokenAnnotation(2234,2238): name { stem=name } TokenAnnotation(2238,2239): ) { stem=) } TokenAnnotation(2240,2242): to { stem=to } TokenAnnotation(2243,2246): the { stem=the } TokenAnnotation(2247,2257): interfaces { stem=interfac } TokenAnnotation(2258,2260): of { stem=of } TokenAnnotation(2260,2261): , { stem=, } TokenAnnotation(2268,2271): the { stem=the } TokenAnnotation(2272,2276): Work { stem=Work } TokenAnnotation(2277,2280): and { stem=and } TokenAnnotation(2281,2291): Derivative { stem=Deriv } TokenAnnotation(2292,2297): Works { stem=Work } TokenAnnotation(2298,2305): thereof { stem=thereof } TokenAnnotation(2305,2306): . { stem=. } TokenAnnotation(2314,2315): " { stem=" } TokenAnnotation(2315,2327): Contribution { stem=Contribut } TokenAnnotation(2327,2328): " { stem=" } TokenAnnotation(2329,2334): shall { stem=shall } TokenAnnotation(2335,2339): mean { stem=mean } TokenAnnotation(2340,2343): any { stem=ani } TokenAnnotation(2344,2348): work { stem=work } TokenAnnotation(2349,2351): of { stem=of } TokenAnnotation(2352,2362): authorship { stem=authorship } TokenAnnotation(2362,2363): , { stem=, } TokenAnnotation(2364,2373): including { stem=includ } TokenAnnotation(2380,2383): the { stem=the } TokenAnnotation(2384,2392): original { stem=origin } TokenAnnotation(2393,2400): version { stem=version } TokenAnnotation(2401,2403): of { stem=of } TokenAnnotation(2404,2407): the { stem=the } TokenAnnotation(2408,2412): Work { stem=Work } TokenAnnotation(2413,2416): and { stem=and } TokenAnnotation(2417,2420): any { stem=ani } TokenAnnotation(2421,2434): modifications { stem=modif } TokenAnnotation(2435,2437): or { stem=or } TokenAnnotation(2438,2447): additions { stem=addit } TokenAnnotation(2454,2456): to { stem=to } TokenAnnotation(2457,2461): that { stem=that } TokenAnnotation(2462,2466): Work { stem=Work } TokenAnnotation(2467,2469): or { stem=or } TokenAnnotation(2470,2480): Derivative { stem=Deriv } TokenAnnotation(2481,2486): Works { stem=Work } TokenAnnotation(2487,2494): thereof { stem=thereof } TokenAnnotation(2494,2495): , { stem=, } TokenAnnotation(2496,2500): that { stem=that } TokenAnnotation(2501,2503): is { stem=is } TokenAnnotation(2504,2517): intentionally { stem=intent } TokenAnnotation(2524,2533): submitted { stem=submit } TokenAnnotation(2534,2536): to { stem=to } TokenAnnotation(2537,2545): Licensor { stem=Licensor } TokenAnnotation(2546,2549): for { stem=for } TokenAnnotation(2550,2559): inclusion { stem=inclus } TokenAnnotation(2560,2562): in { stem=in } TokenAnnotation(2563,2566): the { stem=the } TokenAnnotation(2567,2571): Work { stem=Work } TokenAnnotation(2572,2574): by { stem=by } TokenAnnotation(2575,2578): the { stem=the } TokenAnnotation(2579,2588): copyright { stem=copyright } TokenAnnotation(2589,2594): owner { stem=owner } TokenAnnotation(2601,2603): or { stem=or } TokenAnnotation(2604,2606): by { stem=by } TokenAnnotation(2607,2609): an { stem=an } TokenAnnotation(2610,2620): individual { stem=individu } TokenAnnotation(2621,2623): or { stem=or } TokenAnnotation(2624,2629): Legal { stem=Legal } TokenAnnotation(2630,2636): Entity { stem=Entiti } TokenAnnotation(2637,2647): authorized { stem=author } TokenAnnotation(2648,2650): to { stem=to } TokenAnnotation(2651,2657): submit { stem=submit } TokenAnnotation(2658,2660): on { stem=on } TokenAnnotation(2661,2667): behalf { stem=behalf } TokenAnnotation(2668,2670): of { stem=of } TokenAnnotation(2677,2680): the { stem=the } TokenAnnotation(2681,2690): copyright { stem=copyright } TokenAnnotation(2691,2696): owner { stem=owner } TokenAnnotation(2696,2697): . { stem=. } TokenAnnotation(2698,2701): For { stem=For } TokenAnnotation(2702,2705): the { stem=the } TokenAnnotation(2706,2714): purposes { stem=purpos } TokenAnnotation(2715,2717): of { stem=of } TokenAnnotation(2718,2722): this { stem=this } TokenAnnotation(2723,2733): definition { stem=definit } TokenAnnotation(2733,2734): , { stem=, } TokenAnnotation(2735,2736): " { stem=" } TokenAnnotation(2736,2745): submitted { stem=submit } TokenAnnotation(2745,2746): " { stem=" } TokenAnnotation(2753,2758): means { stem=mean } TokenAnnotation(2759,2762): any { stem=ani } TokenAnnotation(2763,2767): form { stem=form } TokenAnnotation(2768,2770): of { stem=of } TokenAnnotation(2771,2781): electronic { stem=electron } TokenAnnotation(2781,2782): , { stem=, } TokenAnnotation(2783,2789): verbal { stem=verbal } TokenAnnotation(2789,2790): , { stem=, } TokenAnnotation(2791,2793): or { stem=or } TokenAnnotation(2794,2801): written { stem=written } TokenAnnotation(2802,2815): communication { stem=communic } TokenAnnotation(2816,2820): sent { stem=sent } TokenAnnotation(2827,2829): to { stem=to } TokenAnnotation(2830,2833): the { stem=the } TokenAnnotation(2834,2842): Licensor { stem=Licensor } TokenAnnotation(2843,2845): or { stem=or } TokenAnnotation(2846,2849): its { stem=it } TokenAnnotation(2850,2865): representatives { stem=repres } TokenAnnotation(2865,2866): , { stem=, } TokenAnnotation(2867,2876): including { stem=includ } TokenAnnotation(2877,2880): but { stem=but } TokenAnnotation(2881,2884): not { stem=not } TokenAnnotation(2885,2892): limited { stem=limit } TokenAnnotation(2893,2895): to { stem=to } TokenAnnotation(2902,2915): communication { stem=communic } TokenAnnotation(2916,2918): on { stem=on } TokenAnnotation(2919,2929): electronic { stem=electron } TokenAnnotation(2930,2937): mailing { stem=mail } TokenAnnotation(2938,2943): lists { stem=list } TokenAnnotation(2943,2944): , { stem=, } TokenAnnotation(2945,2951): source { stem=sourc } TokenAnnotation(2952,2956): code { stem=code } TokenAnnotation(2957,2964): control { stem=control } TokenAnnotation(2965,2972): systems { stem=system } TokenAnnotation(2972,2973): , { stem=, } TokenAnnotation(2980,2983): and { stem=and } TokenAnnotation(2984,2989): issue { stem=issu } TokenAnnotation(2990,2998): tracking { stem=track } TokenAnnotation(2999,3006): systems { stem=system } TokenAnnotation(3007,3011): that { stem=that } TokenAnnotation(3012,3015): are { stem=are } TokenAnnotation(3016,3023): managed { stem=manag } TokenAnnotation(3024,3026): by { stem=by } TokenAnnotation(3026,3027): , { stem=, } TokenAnnotation(3028,3030): or { stem=or } TokenAnnotation(3031,3033): on { stem=on } TokenAnnotation(3034,3040): behalf { stem=behalf } TokenAnnotation(3041,3043): of { stem=of } TokenAnnotation(3043,3044): , { stem=, } TokenAnnotation(3045,3048): the { stem=the } TokenAnnotation(3055,3063): Licensor { stem=Licensor } TokenAnnotation(3064,3067): for { stem=for } TokenAnnotation(3068,3071): the { stem=the } TokenAnnotation(3072,3079): purpose { stem=purpos } TokenAnnotation(3080,3082): of { stem=of } TokenAnnotation(3083,3093): discussing { stem=discuss } TokenAnnotation(3094,3097): and { stem=and } TokenAnnotation(3098,3107): improving { stem=improv } TokenAnnotation(3108,3111): the { stem=the } TokenAnnotation(3112,3116): Work { stem=Work } TokenAnnotation(3116,3117): , { stem=, } TokenAnnotation(3118,3121): but { stem=but } TokenAnnotation(3128,3137): excluding { stem=exclud } TokenAnnotation(3138,3151): communication { stem=communic } TokenAnnotation(3152,3156): that { stem=that } TokenAnnotation(3157,3159): is { stem=is } TokenAnnotation(3160,3173): conspicuously { stem=conspicu } TokenAnnotation(3174,3180): marked { stem=mark } TokenAnnotation(3181,3183): or { stem=or } TokenAnnotation(3184,3193): otherwise { stem=otherwis } TokenAnnotation(3200,3210): designated { stem=design } TokenAnnotation(3211,3213): in { stem=in } TokenAnnotation(3214,3221): writing { stem=write } TokenAnnotation(3222,3224): by { stem=by } TokenAnnotation(3225,3228): the { stem=the } TokenAnnotation(3229,3238): copyright { stem=copyright } TokenAnnotation(3239,3244): owner { stem=owner } TokenAnnotation(3245,3247): as { stem=as } TokenAnnotation(3248,3249): " { stem=" } TokenAnnotation(3249,3252): Not { stem=Not } TokenAnnotation(3253,3254): a { stem=a } TokenAnnotation(3255,3267): Contribution { stem=Contribut } TokenAnnotation(3267,3268): . { stem=. } TokenAnnotation(3268,3269): " { stem=" } TokenAnnotation(3277,3278): " { stem=" } TokenAnnotation(3278,3289): Contributor { stem=Contributor } TokenAnnotation(3289,3290): " { stem=" } TokenAnnotation(3291,3296): shall { stem=shall } TokenAnnotation(3297,3301): mean { stem=mean } TokenAnnotation(3302,3310): Licensor { stem=Licensor } TokenAnnotation(3311,3314): and { stem=and } TokenAnnotation(3315,3318): any { stem=ani } TokenAnnotation(3319,3329): individual { stem=individu } TokenAnnotation(3330,3332): or { stem=or } TokenAnnotation(3333,3338): Legal { stem=Legal } TokenAnnotation(3339,3345): Entity { stem=Entiti } TokenAnnotation(3352,3354): on { stem=on } TokenAnnotation(3355,3361): behalf { stem=behalf } TokenAnnotation(3362,3364): of { stem=of } TokenAnnotation(3365,3369): whom { stem=whom } TokenAnnotation(3370,3371): a { stem=a } TokenAnnotation(3372,3384): Contribution { stem=Contribut } TokenAnnotation(3385,3388): has { stem=has } TokenAnnotation(3389,3393): been { stem=been } TokenAnnotation(3394,3402): received { stem=receiv } TokenAnnotation(3403,3405): by { stem=by } TokenAnnotation(3406,3414): Licensor { stem=Licensor } TokenAnnotation(3415,3418): and { stem=and } TokenAnnotation(3425,3437): subsequently { stem=subsequ } TokenAnnotation(3438,3450): incorporated { stem=incorpor } TokenAnnotation(3451,3457): within { stem=within } TokenAnnotation(3458,3461): the { stem=the } TokenAnnotation(3462,3466): Work { stem=Work } TokenAnnotation(3466,3467): . { stem=. } TokenAnnotation(3469,3470): . { stem=. } TokenAnnotation(3470,3471): . { stem=. } TokenAnnotation(3471,3472): . { stem=. } uima-addons-2.3.1/SnowballAnnotator/src/test/resources/englishXCAS.xml0000644000175000017500000020317511625126512025704 0ustar drazzibdrazzib uima-addons-2.3.1/SnowballAnnotator/src/test/java/0000755000175000017500000000000011625126512021751 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/test/java/org/0000755000175000017500000000000011625126512022540 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/test/java/org/apache/0000755000175000017500000000000011625126512023761 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/test/java/org/apache/uima/0000755000175000017500000000000011625126512024714 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/src/test/java/org/apache/uima/annotator/0000755000175000017500000000000011625126512026721 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/SnowballAnnotator/src/test/java/org/apache/uima/annotator/SnowballAnnotatorTest.javauima-addons-2.3.1/SnowballAnnotator/src/test/java/org/apache/uima/annotator/SnowballAnnotatorTest.ja0000644000175000017500000000601411625126512033545 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator; import java.io.File; import junit.framework.TestCase; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.cas.CAS; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.util.XMLInputSource; /** * Testclass for the SnowballAnnotator. */ public class SnowballAnnotatorTest extends TestCase { private AnnotatorTester annotTester; /** * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { this.annotTester = new AnnotatorTester(JUnitExtension.getFile("SnowballAnnotator.xml")); } /* * (non-Javadoc) * * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); this.annotTester = null; } public void testAnnotatorEnglish() throws Exception { // get cas from xcas file CAS cas = AnnotatorTester.getCASfromXCAS(JUnitExtension.getFile("typesystem.xml"), JUnitExtension.getFile("englishXCAS.xml")); // execute sample text this.annotTester.performTest(cas); // define result interested in String[] tofs = { "org.apache.uima.TokenAnnotation", "org.apache.uima.TokenAnnotation:stem" }; // compare results File outputFile = new File(JUnitExtension.getFile("englishRef.txt").getParent(), "englishRef_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension.getFile("englishRef.txt"), outputFile); } public void testReconfigure() { try { XMLInputSource in = new XMLInputSource("desc/SnowballAnnotator.xml"); ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in); AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier); CAS cas = AnnotatorTester.getCASfromXCAS(JUnitExtension.getFile("typesystem.xml"), JUnitExtension.getFile("englishXCAS.xml")); ae.process(cas); ae.reconfigure(); } catch (Exception e) { fail(); } } } uima-addons-2.3.1/SnowballAnnotator/desc/0000755000175000017500000000000011625126512020200 5ustar drazzibdrazzibuima-addons-2.3.1/SnowballAnnotator/desc/SnowballAnnotator.xml0000644000175000017500000000522111625126512024371 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.SnowballAnnotator SnowballAnnotator 1.0 org.apache.uima.TokenAnnotation Single token annotation uima.tcas.Annotation stem stem uima.cas.String org.apache.uima.SentenceAnnotation sentence annotation uima.tcas.Annotation x-unspecified uima-addons-2.3.1/FsVariables/0000755000175000017500000000000011625127222016013 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/pom.xml0000644000175000017500000000733011625126466017344 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent FsVariables 2.3.1 UIMA Addon: ${project.artifactId} Adds capability to base UIMA framework for conveniently creating and accessing named FeatureStructure instances in the CAS ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 fsVariablesUserGuide desc/fsvars_descriptor.xml org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.uima uimaj-test-util ${uimaDependencyVersion} provided org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} provided uimaj-fsvars src/asm/desc src/test/resources uima-addons-2.3.1/FsVariables/LICENSE.txt0000644000175000017500000002644611625126466017663 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/FsVariables/marker-file-identifying-single-project0000644000175000017500000000000011625126466025365 0ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/NOTICE.txt0000644000175000017500000000027711625126466017554 0ustar drazzibdrazzibApache UIMA FsVariable component Copyright 2006-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). uima-addons-2.3.1/FsVariables/src/0000755000175000017500000000000011625126466016613 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/0000755000175000017500000000000011625126466017537 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/resources/0000755000175000017500000000000011625126466021551 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/resources/org/0000755000175000017500000000000011625126466022340 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/resources/org/apache/0000755000175000017500000000000011625126466023561 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/resources/org/apache/uima/0000755000175000017500000000000011625126466024514 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/resources/org/apache/uima/fsvars/0000755000175000017500000000000011625126466026020 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/resources/org/apache/uima/fsvars/messages.properties0000644000175000017500000000374011625126466031751 0ustar drazzibdrazzib# *************************************************************** # * Licensed to the Apache Software Foundation (ASF) under one # * or more contributor license agreements. See the NOTICE file # * distributed with this work for additional information # * regarding copyright ownership. The ASF licenses this file # * to you under the Apache License, Version 2.0 (the # * "License"); you may not use this file except in compliance # * with the License. You may obtain a copy of the License at # * # * http://www.apache.org/licenses/LICENSE-2.0 # * # * Unless required by applicable law or agreed to in writing, # * software distributed under the License is distributed on an # * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # * KIND, either express or implied. See the License for the # * specific language governing permissions and limitations # * under the License. # *************************************************************** fsvars_index_doesnt_exist = The FsVariable index "{0}" doesn't exist. The index needs to be created in \ some analysis engine descriptor. See the FsVariable documentation for more information. fsvars_type_doesnt_exist = The FsVariable type "{0}" doesn't exist. The type needs to be declared \ in some analysis engine descriptor. See the FsVariable documentation for more information. fsvars_feature_doesnt_exist = The FsVariable feature "{0}" doesn't exist. The type needs to be declared \ in some analysis engine descriptor. See the FsVariable documentation for more information. fsvars_variable_already_defined = The FsVariable "{0}" has already been defined. no_such_fsvar = No FsVariable "{0}" exists. bad_typename_in_fsvar = Bad FsVariable type "{0}" in variable "{1}". illegal_fsvar_value = Trying to assign FS of type "{0}" to FsVariable "{1}" of type "{2}". This is \ invalid, as "{2}" does not subsume "{0}". uima-addons-2.3.1/FsVariables/src/main/java/0000755000175000017500000000000011625126466020460 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/java/org/0000755000175000017500000000000011625126466021247 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/java/org/apache/0000755000175000017500000000000011625126466022470 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/java/org/apache/uima/0000755000175000017500000000000011625126466023423 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/java/org/apache/uima/fsvars/0000755000175000017500000000000011625126466024727 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/java/org/apache/uima/fsvars/FsVariablesException.java0000644000175000017500000000425211625126466031655 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.fsvars; import org.apache.uima.UIMARuntimeException; /** * Exceptions for fsvars package. */ public class FsVariablesException extends UIMARuntimeException { public static final String fsvars_index_doesnt_exist = "fsvars_index_doesnt_exist"; public static final String fsvars_type_doesnt_exist = "fsvars_type_doesnt_exist"; public static final String fsvars_feature_doesnt_exist = "fsvars_feature_doesnt_exist"; public static final String fsvars_variable_already_defined = "fsvars_variable_already_defined"; public static final String no_such_fsvar = "no_such_fsvar"; public static final String bad_typename_in_fsvar = "bad_typename_in_fsvar"; public static final String illegal_fsvar_value = "illegal_fsvar_value"; public FsVariablesException() { super(); } public FsVariablesException(Throwable arg0) { super(arg0); } public FsVariablesException(String arg0, Object[] arg1) { super(arg0, arg1); } public FsVariablesException(String arg0, String arg1, Object[] arg2) { super(arg0, arg1, arg2); } public FsVariablesException(String arg0, Object[] arg1, Throwable arg2) { super(arg0, arg1, arg2); } public FsVariablesException(String arg0, String arg1, Object[] arg2, Throwable arg3) { super(arg0, arg1, arg2, arg3); } } uima-addons-2.3.1/FsVariables/src/main/java/org/apache/uima/fsvars/Annotator.java0000644000175000017500000000235611625126466027545 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.fsvars; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.cas.CAS; /** * TODO: Create type commment. */ public class Annotator extends CasAnnotator_ImplBase { FsVariables fsvars; public Annotator() { super(); this.fsvars = FsVariableFactory.newInstance(); } public void process(CAS aCAS) { // Do nothing ATM } } uima-addons-2.3.1/FsVariables/src/main/java/org/apache/uima/fsvars/FsVariableFactory.java0000644000175000017500000000210411625126466031135 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.fsvars; import org.apache.uima.fsvars.impl.FsVariablesImpl; /** * TODO: Create type commment. */ public class FsVariableFactory { public static FsVariables newInstance() { return new FsVariablesImpl(); } } uima-addons-2.3.1/FsVariables/src/main/java/org/apache/uima/fsvars/FsVariables.java0000644000175000017500000001150211625126466027772 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.fsvars; import java.util.List; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; /** * Implements cross-annotator named feature structure variables. * *

To use, a certain type and index must be declared in the processing pipeline. Use the type * system and index declaration that come with this package. There's also an annotator descriptor * that shows you how to import the type system and index specification into your own descriptor. * *

Use {@link FsVariableFactory#newInstance() FsVariableFactory.newInstance()} to create a * FsVariables object. On every process call to your annotator (or whenever there's * a new CAS; you can use this in other places than just annotators), you need to call * {@link #init(CAS) init(CAS)} to re-initialize the object to the next CAS. */ public interface FsVariables { static final String INDEX_NAME = "org.apache.uima.fsvars"; static final String TYPE_NAME = "org.apache.uima.FsVariable"; static final String NAME_FEATURE_NAME = "name"; static final String TYPE_FEATURE_NAME = "type"; static final String VALUE_FEATURE_NAME = "value"; /** * Check a CAS for FsVariable type system and index definition. If this return true, * {@link #init(CAS) init(CAS)} will not throw an exception. * @param cas The CAS to check. * @return true iff CAS contains required type and index. */ boolean checkCas(CAS cas); /** * Initialize this with current CAS. This needs to be called on every process, before * any other APIs are called! * @param cas The current CAS. * @throws FsVariablesException When the CAS does not contain FsVariable type or index. */ void init(CAS cas) throws FsVariablesException; /** * Declare a new FsVariable. The variable must not yet exist, or an exception is thrown. Use * {@link #isFsVariable(String) isFsVariable(String)} to check if a variable with the same name * already exists. * @param name The name of the variable. * @param type The type of the variable. * @throws FsVariablesException When FsVariable name already exists. */ void declareFsVariable(String name, Type type) throws FsVariablesException; /** * Check if a variable of that name exists. * @param name The name of the variable. * @return true iff a FsVariable of that name exists. */ boolean isFsVariable(String name); /** * Get the type of an FsVariable. * @param name The name of the variable. * @return The type of the variable, if it exists. * @throws FsVariablesException If no variable of that name exists, or somehow the name of the * variable's type does not resolve to a type in the type system. */ Type getFsVariableType(String name) throws FsVariablesException; /** * Return a list of all variable names that are currently declared. * @return A (sorted) list of strings of all variable names. */ List listFsVariables(); /** * Return a list of all variable names of those variables whose type is a subtype of the type * parameter. * @param type The type of variables we want to see. * @return A (sorted) list of strings of variable names. */ List listFsVariables(Type type); /** * Get the FeatureStructure value of a variable. * @param name The name of the variable. * @return The FS value of the variable. * @throws FsVariablesException When no variable of name exists. */ FeatureStructure getVariableValue(String name) throws FsVariablesException; /** * Set the value of an existing variable. * @param name The name of the variable. * @param fs The value to set. * @throws FsVariablesException When no variable of name exists. */ void setVariable(String name, FeatureStructure fs) throws FsVariablesException; } uima-addons-2.3.1/FsVariables/src/main/java/org/apache/uima/fsvars/impl/0000755000175000017500000000000011625126466025670 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/main/java/org/apache/uima/fsvars/impl/FsVariablesImpl.java0000644000175000017500000002110611625126466031556 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.fsvars.impl; import java.util.ArrayList; import java.util.List; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIndex; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.fsvars.FsVariables; import org.apache.uima.fsvars.FsVariablesException; /** * TODO: Create type commment. */ public class FsVariablesImpl implements FsVariables { private static final String messageCatalog = "org.apache.uima.fsvars.messages"; private CAS cas; private FSIndex index; private Type fsVariableType; private Feature nameFeature; private Feature typeFeature; private Feature valueFeature; public FsVariablesImpl() { super(); } public void declareFsVariable(String name, Type type) { // If a fsvar of that name already exists, throw an exception. if (isFsVariable(name)) { throw new FsVariablesException(messageCatalog, FsVariablesException.fsvars_variable_already_defined, new Object[] { name }); } // Create the FS. FeatureStructure fs = this.cas.createFS(this.fsVariableType); // Set name and type features. fs.setStringValue(this.nameFeature, name); fs.setStringValue(this.typeFeature, type.getName()); // Add to the index. this.cas.addFsToIndexes(fs); } public Type getFsVariableType(String name) { // Try to retrieve the fsvar of "name". Will throw exception if fsvar doesn't exist. FeatureStructure fs = getFsVarForName(name); // Get the type name, and corresponding type. String typeName = fs.getStringValue(this.typeFeature); Type type = this.cas.getTypeSystem().getType(typeName); // Check that the type name is valid. if (type == null) { throw new FsVariablesException(messageCatalog, FsVariablesException.bad_typename_in_fsvar, new Object[] { typeName, name }); } return type; } public FeatureStructure getVariableValue(String name) { // Try to retrieve the fsvar of "name". FeatureStructure fsvar = getFsVarForName(name); return fsvar.getFeatureValue(this.valueFeature); } public boolean isFsVariable(String name) { // Get candidate FS. FeatureStructure fs = getFsVarNoExc(name); // Check that candidate is valid. return ((fs != null) && fs.getStringValue(this.nameFeature).equals(name)); } public List listFsVariables() { List list = new ArrayList(); // Iterate over fsvars and add names to list. for (FSIterator it = this.index.iterator(); it.isValid(); it.moveToNext()) { list.add(it.get().getStringValue(this.nameFeature)); } return list; } public List listFsVariables(Type type) { List list = new ArrayList(); TypeSystem ts = this.cas.getTypeSystem(); // Iterate over fsvars and add names to list. for (FSIterator it = this.index.iterator(); it.isValid(); it.moveToNext()) { String typeName = it.get().getStringValue(this.typeFeature); if (ts.subsumes(type, ts.getType(typeName))) { list.add(it.get().getStringValue(this.nameFeature)); } } return list; } public void setVariable(String name, FeatureStructure fs) { // Get fsvar (must exist). FeatureStructure fsvar = getFsVarForName(name); // Get type of fsvar. Type type = this.cas.getTypeSystem().getType(fsvar.getStringValue(this.typeFeature)); if (type == null) { throw new FsVariablesException(messageCatalog, FsVariablesException.bad_typename_in_fsvar, new Object[] { fsvar.getStringValue(this.nameFeature), name }); } if (this.cas.getTypeSystem().subsumes(type, fs.getType())) { // Set variable value if type of var subsumes type of FS. fsvar.setFeatureValue(this.valueFeature, fs); } else { // If var type does not subsume value type, throw an exception. throw new FsVariablesException(messageCatalog, FsVariablesException.illegal_fsvar_value, new Object[] { fs.getType().getName(), name, type.getName() }); } } public void init(CAS cas) { // Need to keep the CAS around. this.cas = cas; if (this.cas == null) { throw new NullPointerException("CAS"); } // Get the fsvars index. this.index = this.cas.getIndexRepository().getIndex(FsVariables.INDEX_NAME); if (this.index == null) { throw new FsVariablesException(messageCatalog, FsVariablesException.fsvars_index_doesnt_exist, new Object[] { FsVariables.INDEX_NAME }); } // Get the fsvars type. this.fsVariableType = this.cas.getTypeSystem().getType(FsVariables.TYPE_NAME); if (this.fsVariableType == null) { throw new FsVariablesException(messageCatalog, FsVariablesException.fsvars_type_doesnt_exist, new Object[] { FsVariables.TYPE_NAME }); } // Get the name, type, and value features. this.nameFeature = this.fsVariableType.getFeatureByBaseName(FsVariables.NAME_FEATURE_NAME); if (this.nameFeature == null) { throw new FsVariablesException(messageCatalog, FsVariablesException.fsvars_feature_doesnt_exist, new Object[] { FsVariables.NAME_FEATURE_NAME }); } this.typeFeature = this.fsVariableType.getFeatureByBaseName(FsVariables.TYPE_FEATURE_NAME); if (this.typeFeature == null) { throw new FsVariablesException(messageCatalog, FsVariablesException.fsvars_feature_doesnt_exist, new Object[] { FsVariables.TYPE_FEATURE_NAME }); } this.valueFeature = this.fsVariableType.getFeatureByBaseName(FsVariables.VALUE_FEATURE_NAME); if (this.valueFeature == null) { throw new FsVariablesException(messageCatalog, FsVariablesException.fsvars_feature_doesnt_exist, new Object[] { FsVariables.VALUE_FEATURE_NAME }); } } public boolean checkCas(CAS cas) { FSIndex variableIndex = cas.getIndexRepository().getIndex(FsVariables.INDEX_NAME); if (variableIndex == null) { return false; } TypeSystem ts = cas.getTypeSystem(); Type type = ts.getType(FsVariables.TYPE_NAME); if (type == null) { return false; } if (type.getFeatureByBaseName(FsVariables.NAME_FEATURE_NAME) == null) { return false; } if (type.getFeatureByBaseName(FsVariables.VALUE_FEATURE_NAME) == null) { return false; } return true; } private final FeatureStructure getFsVarForName(String name) { // Get candidate FS. FeatureStructure fs = getFsVarNoExc(name); // Check that the fsvar FS is valid (not null and correct name) if ((fs != null) && fs.getStringValue(this.nameFeature).equals(name)) { return fs; } // If fsvar with "name" exists, throw an exception. throw new FsVariablesException(messageCatalog, FsVariablesException.no_such_fsvar, new Object[] { name }); } private final FeatureStructure getFsVarNoExc(String name) { // Get an iterator over the fsvar index. FSIterator it = this.index.iterator(); // Create a temp FS with which to search for the variable. We do this every time we retrieve // a variable, so this is sort of a CAS memory leak as the storage is not reclaimed. The // assumption is that annotators won't do this a lot. FeatureStructure fs = this.cas.createFS(this.fsVariableType); // Set the name of the temp var to the name we're looking for. fs.setStringValue(this.nameFeature, name); // Move the iterator, hopefully to the already existing var of that name. it.moveTo(fs); // Get the fsvar. if (it.isValid()) { return it.get(); } return null; } } uima-addons-2.3.1/FsVariables/src/test/0000755000175000017500000000000011625126464017570 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/test/resources/0000755000175000017500000000000011625126466021604 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/test/resources/fsvars1.xml0000644000175000017500000000502111625126466023711 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.fsvars.Annotator aeDescriptor Descriptor that can be used for declaring FsVariables 1.0 Apache Software Foundation org.apache.uima.fsvars.TestAnnot1 uima.tcas.Annotation org.apache.uima.fsvars.TestAnnot2 uima.tcas.Annotation org.apache.uima.fsvars.TestAnnot3 uima.tcas.Annotation uima-addons-2.3.1/FsVariables/src/test/resources/fsvars_typesystem.xml0000644000175000017500000000406111625126466026141 0ustar drazzibdrazzib FsVarsTypeSystem FsVariables type system 0.1 The Apache Software Foundation org.apache.uima.FsVariable The type whose instances represent FS variables uima.tcas.Annotation name The name of the variable uima.cas.String type The type of the variable uima.cas.String value The value of the variable uima.cas.TOP uima-addons-2.3.1/FsVariables/src/test/resources/fsvars_index.xml0000644000175000017500000000233611625126466025025 0ustar drazzibdrazzib org.apache.uima.FsVariable set name standard uima-addons-2.3.1/FsVariables/src/test/java/0000755000175000017500000000000011625126464020511 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/test/java/org/0000755000175000017500000000000011625126464021300 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/test/java/org/apache/0000755000175000017500000000000011625126464022521 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/test/java/org/apache/uima/0000755000175000017500000000000011625126464023454 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/test/java/org/apache/uima/fsvars/0000755000175000017500000000000011625126464024760 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/test/java/org/apache/uima/fsvars/test/0000755000175000017500000000000011625126464025737 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/test/java/org/apache/uima/fsvars/test/FsVariableTest.java0000644000175000017500000002504111625126464031462 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.fsvars.test; import java.io.File; import java.util.HashSet; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.fsvars.FsVariableFactory; import org.apache.uima.fsvars.FsVariables; import org.apache.uima.fsvars.FsVariablesException; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.util.XMLInputSource; import org.apache.uima.util.XMLParser; public class FsVariableTest extends TestCase { private static final String annotTypeName1 = "org.apache.uima.fsvars.TestAnnot1"; private static final String annotTypeName2 = "org.apache.uima.fsvars.TestAnnot2"; private static final String annotTypeName3 = "org.apache.uima.fsvars.TestAnnot3"; private static final String name1 = "name1"; private static final String name2 = "name2"; private static final String name3 = "name3"; private static final String name4 = "name4"; private static final String name5 = "name5"; private static final String name6 = "name6"; private Type annotType1; private Type annotType2; private Type annotType3; private Feature beginFeat; private CAS cas; public FsVariableTest(String arg0) { super(arg0); try { XMLParser parser = UIMAFramework.getXMLParser(); File descriptorFile = JUnitExtension.getFile("fsvars1.xml"); AnalysisEngineDescription aeDesc = (AnalysisEngineDescription) parser .parse(new XMLInputSource(descriptorFile)); this.cas = UIMAFramework.produceAnalysisEngine(aeDesc).newCAS(); TypeSystem ts = this.cas.getTypeSystem(); this.annotType1 = ts.getType(annotTypeName1); this.annotType2 = ts.getType(annotTypeName2); this.annotType3 = ts.getType(annotTypeName3); this.beginFeat = ts.getFeatureByFullName(CAS.FEATURE_FULL_NAME_END); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); } public void testInit() throws Exception { boolean caughtException = false; FsVariables fsvars = FsVariableFactory.newInstance(); // Initialize with null try { fsvars.init(null); } catch (NullPointerException e) { caughtException = true; } assertTrue(caughtException); this.cas.reset(); // Check CAS assertTrue(fsvars.checkCas(this.cas)); // Initialize with a proper CAS caughtException = false; try { fsvars.init(this.cas); } catch (Exception e) { e.printStackTrace(); caughtException = true; } assertFalse(caughtException); } public void testDeclare() { this.cas.reset(); FsVariables fsvars = FsVariableFactory.newInstance(); fsvars.init(this.cas); fsvars.declareFsVariable(name1, this.annotType1); fsvars.declareFsVariable(name2, this.annotType2); fsvars.declareFsVariable(name3, this.annotType3); boolean caughtExc = false; try { fsvars.declareFsVariable(name1, this.annotType1); } catch (FsVariablesException e) { caughtExc = true; } assertTrue(caughtExc); caughtExc = false; try { fsvars.declareFsVariable(name2, this.annotType1); } catch (FsVariablesException e) { caughtExc = true; } assertTrue(caughtExc); caughtExc = false; try { fsvars.declareFsVariable(name3, this.annotType3); } catch (FsVariablesException e) { caughtExc = true; } assertTrue(caughtExc); } public void testIsVariable() { this.cas.reset(); FsVariables fsvars = FsVariableFactory.newInstance(); fsvars.init(this.cas); // Check that no variable is declared. assertFalse(fsvars.isFsVariable(name1)); assertFalse(fsvars.isFsVariable(name2)); assertFalse(fsvars.isFsVariable(name3)); // Declare first variable. fsvars.declareFsVariable(name1, this.annotType1); // Check that only first variable is declared. assertTrue(fsvars.isFsVariable(name1)); assertFalse(fsvars.isFsVariable(name2)); assertFalse(fsvars.isFsVariable(name3)); // Declare second var, check. fsvars.declareFsVariable(name2, this.annotType2); assertTrue(fsvars.isFsVariable(name1)); assertTrue(fsvars.isFsVariable(name2)); assertFalse(fsvars.isFsVariable(name3)); // Declare third var, check. fsvars.declareFsVariable(name3, this.annotType3); assertTrue(fsvars.isFsVariable(name1)); assertTrue(fsvars.isFsVariable(name2)); assertTrue(fsvars.isFsVariable(name3)); } public void testGetFsVariableType() { this.cas.reset(); FsVariables fsvars = FsVariableFactory.newInstance(); fsvars.init(this.cas); boolean caughtExc = false; try { fsvars.getFsVariableType(name1); } catch (FsVariablesException e) { caughtExc = true; } assertTrue(caughtExc); fsvars.declareFsVariable(name1, this.annotType1); fsvars.declareFsVariable(name2, this.annotType2); fsvars.declareFsVariable(name3, this.annotType3); assertTrue(fsvars.getFsVariableType(name1).equals(this.annotType1)); assertTrue(fsvars.getFsVariableType(name2).equals(this.annotType2)); assertTrue(fsvars.getFsVariableType(name3).equals(this.annotType3)); } public void testListVariables() { this.cas.reset(); FsVariables fsvars = FsVariableFactory.newInstance(); fsvars.init(this.cas); // Declare some variables. fsvars.declareFsVariable(name1, this.annotType1); fsvars.declareFsVariable(name2, this.annotType2); fsvars.declareFsVariable(name3, this.annotType3); fsvars.declareFsVariable(name4, this.annotType1); fsvars.declareFsVariable(name5, this.annotType2); fsvars.declareFsVariable(name6, this.annotType3); // Test with no parameters. List list = fsvars.listFsVariables(); assertTrue(list.size() == 6); // Check that all names are different. Set set = new HashSet(); set.addAll(list); assertTrue(set.size() == 6); // Test with annotation type as parameter, which should be the same as without param. list = fsvars.listFsVariables(this.cas.getTypeSystem().getType(CAS.TYPE_NAME_ANNOTATION)); assertTrue(list.size() == 6); // Check that all names are different. set = new HashSet(); set.addAll(list); assertTrue(set.size() == 6); // Check with a specific annotation type. list = fsvars.listFsVariables(this.annotType1); assertTrue(list.size() == 2); assertTrue(list.contains(name1)); assertTrue(list.contains(name4)); } public void testSetAndGet() { this.cas.reset(); FsVariables fsvars = FsVariableFactory.newInstance(); fsvars.init(this.cas); // Declare some variables. fsvars.declareFsVariable(name1, this.annotType1); fsvars.declareFsVariable(name2, this.annotType2); fsvars.declareFsVariable(name3, this.annotType3); fsvars.declareFsVariable(name4, this.annotType1); fsvars.declareFsVariable(name5, this.annotType2); fsvars.declareFsVariable(name6, this.annotType3); // Create some values. AnnotationFS annot1 = this.cas.createAnnotation(this.annotType1, 1, 1); AnnotationFS annot2 = this.cas.createAnnotation(this.annotType2, 2, 2); AnnotationFS annot3 = this.cas.createAnnotation(this.annotType3, 3, 3); AnnotationFS annot4 = this.cas.createAnnotation(this.annotType1, 4, 4); AnnotationFS annot5 = this.cas.createAnnotation(this.annotType2, 5, 5); AnnotationFS annot6 = this.cas.createAnnotation(this.annotType3, 6, 6); // Check that values are null, set value, check it's not null. assertNull(fsvars.getVariableValue(name1)); assertNull(fsvars.getVariableValue(name2)); assertNull(fsvars.getVariableValue(name3)); assertNull(fsvars.getVariableValue(name4)); assertNull(fsvars.getVariableValue(name5)); assertNull(fsvars.getVariableValue(name6)); fsvars.setVariable(name1, annot1); assertNotNull(fsvars.getVariableValue(name1)); fsvars.setVariable(name2, annot2); assertNotNull(fsvars.getVariableValue(name2)); fsvars.setVariable(name3, annot3); assertNotNull(fsvars.getVariableValue(name3)); fsvars.setVariable(name4, annot4); assertNotNull(fsvars.getVariableValue(name4)); fsvars.setVariable(name5, annot5); assertNotNull(fsvars.getVariableValue(name5)); fsvars.setVariable(name6, annot6); assertNotNull(fsvars.getVariableValue(name6)); AnnotationFS annot = (AnnotationFS) fsvars.getVariableValue(name1); assertTrue(annot.getIntValue(this.beginFeat) == 1); annot1.setIntValue(this.beginFeat, 42); assertTrue(annot.getIntValue(this.beginFeat) == 42); annot = (AnnotationFS) fsvars.getVariableValue(name1); assertTrue(annot.getIntValue(this.beginFeat) == 42); fsvars.setVariable(name1, annot4); annot = (AnnotationFS) fsvars.getVariableValue(name1); assertTrue(annot.getIntValue(this.beginFeat) == 4); boolean caughtExc = false; try { fsvars.setVariable(name2, annot1); } catch (FsVariablesException e) { caughtExc = true; } assertTrue(caughtExc); annot = (AnnotationFS) fsvars.getVariableValue(name2); assertNotNull(annot); assertTrue(annot.getIntValue(this.beginFeat) == 2); } } uima-addons-2.3.1/FsVariables/src/docbook/0000755000175000017500000000000011625126466020233 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/docbook/images/0000755000175000017500000000000011625126466021500 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/src/docbook/fsVariablesUserGuide.xml0000644000175000017500000000301211625126466025027 0ustar drazzibdrazzib ]> Feature Structure Variables User Guide Feature Structure Variables This is a package that allows you to create named feature structure instances. It allows you to refer to individual feature structures or annotations across annotators, without creating a special index. uima-addons-2.3.1/FsVariables/desc/0000755000175000017500000000000011625126466016742 5ustar drazzibdrazzibuima-addons-2.3.1/FsVariables/desc/fsvars_descriptor.xml0000644000175000017500000000364311625126466023234 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.fsvars.Annotator aeDescriptor Descriptor that can be used for declaring FsVariables 1.0 Apache Software Foundation uima-addons-2.3.1/FsVariables/desc/fsvars_typesystem.xml0000644000175000017500000000406111625126466023277 0ustar drazzibdrazzib FsVarsTypeSystem FsVariables type system 0.1 The Apache Software Foundation org.apache.uima.FsVariable The type whose instances represent FS variables uima.tcas.Annotation name The name of the variable uima.cas.String type The type of the variable uima.cas.String value The value of the variable uima.cas.TOP uima-addons-2.3.1/FsVariables/desc/fsvars_index.xml0000644000175000017500000000233611625126466022163 0ustar drazzibdrazzib org.apache.uima.FsVariable set name standard uima-addons-2.3.1/LICENSE0000644000175000017500000002645111625126554014636 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/Lucas/0000755000175000017500000000000011625127242014663 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/pom.xml0000644000175000017500000001501111625126534016201 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent Lucas 2.3.1 UIMA Annotator: ${project.artifactId} Writes information contained in CAS objects to fields of a Lucene search index; mapping is done in a mapping file. ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/LuceneCASIndexer.xml LuceneCASConsumerUserGuide org.apache.lucene lucene-core 2.9.3 log4j log4j 1.2.14 org.apache.lucene lucene-snowball 2.9.3 org.apache.lucene lucene-memory 2.9.3 org.apache.lucene lucene-highlighter 2.9.3 org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.easymock easymockclassextension 3.0 test junit junit 4.8.2 test com.google.collections google-collections 0.9 uima-lucas org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/test/java/org/apache/uima/lucas/indexer/types/test/Annotation1*.java src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure1*.java src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure2*.java src/test/resources/hypernyms.txt src/test/resources/stopwords.txt src/test/resources/tokenMapping.txt org.apache.maven.plugins maven-surefire-plugin **/TestableLuceneCASIndexer.java uima-addons-2.3.1/Lucas/LICENSE.txt0000644000175000017500000004103611625126534016515 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Some code in src/java/org/apache/lucene/util/UnicodeUtil.java was derived from unicode conversion examples available at http://www.unicode.org/Public/PROGRAMS/CVTUTF. Here is the copyright from those sources: /* * Copyright 2001-2004 Unicode, Inc. * * Disclaimer * * This source code is provided as is by Unicode, Inc. No claims are * made as to fitness for any particular purpose. No warranties of any * kind are expressed or implied. The recipient agrees to determine * applicability of information provided. If this file has been * purchased on magnetic or optical media from Unicode, Inc., the * sole remedy for any claim will be exchange of defective media * within 90 days of receipt. * * Limitations on Rights to Redistribute This Code * * Unicode, Inc. hereby grants the right to freely use the information * supplied in this file in the creation of products supporting the * Unicode Standard, and to make copies of this file in any form * for internal or external distribution as long as this notice * remains attached. */ Some code in src/java/org/apache/lucene/util/ArrayUtil.java was derived from Python 2.4.2 sources available at http://www.python.org. Full license is here: http://www.python.org/download/releases/2.4.2/license/ PSF LICENSE AGREEMENT FOR PYTHON 2.4 ------------------------------------ 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 2.4 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 2.4 alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004 Python Software Foundation; All Rights Reserved" are retained in Python 2.4 alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.4 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.4. 4. PSF is making Python 2.4 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.4 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.4 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.4, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python 2.4, Licensee agrees to be bound by the terms and conditions of this License Agreement. for snowball: Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. uima-addons-2.3.1/Lucas/marker-file-identifying-single-project0000644000175000017500000000000011625126534024227 0ustar drazzibdrazzibuima-addons-2.3.1/Lucas/marker-file-identifying-standard-pear0000644000175000017500000000000011625126534024027 0ustar drazzibdrazzibuima-addons-2.3.1/Lucas/marker-file-identifying-osgi-project0000644000175000017500000000000011625126534023707 0ustar drazzibdrazzibuima-addons-2.3.1/Lucas/NOTICE.txt0000644000175000017500000000271711625126534016417 0ustar drazzibdrazzibApache UIMA Lucene CAS Indexer component Copyright 2009-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). This product includes the Google Collections Library from http://code.google.com/p/google-collections/. The snowball stemmers in contrib/snowball/src/java/net/sf/snowball were developed by Martin Porter and Richard Boulton. The full snowball package is available from http://snowball.tartarus.org/ The Arabic stemmer (contrib/analyzers) comes with a default stopword list that is BSD-licensed created by Jacques Savoy. The file resides in contrib/analyzers/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt. See http://members.unine.ch/jacques.savoy/clef/index.html. The Persian analyzer (contrib/analyzers) comes with a default stopword list that is BSD-licensed created by Jacques Savoy. The file resides in contrib/analyzers/common/src/resources/org/apache/lucene/analysis/fa/stopwords.txt. See http://members.unine.ch/jacques.savoy/clef/index.html. Includes lib/servlet-api-2.4.jar from Apache Tomcat The SmartChineseAnalyzer source code (under contrib/analyzers) was provided by Xiaoping Gao and copyright 2009 by www.imdict.net. ICU4J, (under contrib/collation) is licensed under an MIT styles license (contrib/collation/lib/ICU-LICENSE.txt) and Copyright (c) 1995-2008 International Business Machines Corporation and others uima-addons-2.3.1/Lucas/src/0000755000175000017500000000000011625126526015456 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/0000755000175000017500000000000011625126534016401 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/resources/0000755000175000017500000000000011625126534020413 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/resources/lucas.xsd0000644000175000017500000001071111625126534022242 0ustar drazzibdrazzib uima-addons-2.3.1/Lucas/src/main/java/0000755000175000017500000000000011625126526017323 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/java/org/0000755000175000017500000000000011625126526020112 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/java/org/apache/0000755000175000017500000000000011625126526021333 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/0000755000175000017500000000000011625126526022266 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/0000755000175000017500000000000011625126534023374 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/consumer/0000755000175000017500000000000011625126526025230 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/consumer/LuceneCASIndexer.java0000644000175000017500000000571611625126526031165 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.consumer; import java.io.IOException; import org.apache.log4j.Logger; import org.apache.lucene.index.IndexWriter; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.lucas.LuceneDocumentAE; import org.apache.uima.lucas.indexer.IndexWriterProvider; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; /** * Reads CAS object and writes the particular information in fields of a Lucene index. * requires a mapping file */ public class LuceneCASIndexer extends LuceneDocumentAE { private static final String RESOURCE_INDEX_WRITER_PROVIDER = "indexWriterProvider"; private static final Logger logger = Logger .getLogger(LuceneCASIndexer.class); protected IndexWriter indexWriter; @Override public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); getIndexWriterInstance(); } private void getIndexWriterInstance() throws ResourceInitializationException { UimaContext uimaContext = getContext(); IndexWriterProvider indexWriterProvider; try { indexWriterProvider = (IndexWriterProvider) uimaContext .getResourceObject(RESOURCE_INDEX_WRITER_PROVIDER); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } indexWriter = indexWriterProvider.getIndexWriter(); } public void process(CAS cas) throws AnalysisEngineProcessException { try { indexWriter.addDocument(createDocument(cas)); } catch (IOException e) { logger.error("processCas(CAS)", e); throw new AnalysisEngineProcessException(e); } } @Override public void destroy() { logger.info("destroy " + LuceneCASIndexer.class); optimizeIndex(); super.destroy(); } public void optimizeIndex() { try { logger.info("optimizing the index now!"); indexWriter.optimize(); indexWriter.close(); } catch (IOException e) { logger.error("exception while closing index", e); } } }uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/SearchQueryProvider.java0000644000175000017500000000331511625126534030207 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas; import java.util.Collection; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; /** * The {@link SearchQueryProvider} is responsible to provide access to * the {@link SearchQuery}s. */ public interface SearchQueryProvider { /** * Retrieves all {@link SearchQuery}s for the given CAS. * The returned search queries may depend on the given CAS. *

* This method is called for every processed CAS and should be * fast enough to not slow down the search. *

* Note: The implementation must be thread safe. * * @param cas * @return all {@link SearchQuery}s for the given CAS. * @throws AnalysisEngineProcessException */ Collection getSearchQueries(CAS cas) throws AnalysisEngineProcessException; } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/SearchQuery.java0000644000175000017500000000263411625126534026477 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas; import org.apache.lucene.search.Query; /** * A SearchQuery defines a "search request" which is monitored * against a stream of text. The SearchQuery is a combinition of * a lucene {@link Query} and a long id to identify the query. The id is later * needed to map the search result to the search query. */ public interface SearchQuery { /** * Id of the search query. * * @return Id of the search query. */ long id(); /** * The Lucene query. * * @return The Lucene query. */ Query query(); } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/0000755000175000017500000000000011625126534025032 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/FilterBuildingException.java0000644000175000017500000000237311625126534032464 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; public class FilterBuildingException extends Exception { /** * */ private static final long serialVersionUID = 1L; public FilterBuildingException(String message) { super(message); } public FilterBuildingException(String message, Throwable cause) { super(message, cause); } public FilterBuildingException(Throwable cause) { super(cause); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/AnnotationTokenStreamBuilder.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/AnnotationTokenStreamBuilder.jav0000644000175000017500000001110711625126534033332 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import java.text.DecimalFormat; import java.text.Format; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.apache.uima.cas.CAS; import org.apache.uima.jcas.JCas; import org.apache.uima.lucas.indexer.analysis.AnnotationTokenStream; import org.apache.uima.lucas.indexer.analysis.InvalidTokenSourceException; import org.apache.uima.lucas.indexer.mapping.AnnotationDescription; import org.apache.uima.lucas.indexer.mapping.FeatureDescription; /** * Builds annotation token streams wrapped with filters according to annotation descriptions. */ public class AnnotationTokenStreamBuilder { private static final Logger LOGGER = Logger.getLogger(AnnotationTokenStreamBuilder.class); public AnnotationTokenStream createAnnotationTokenStream(JCas jCas, AnnotationDescription annotationDescription) throws AnnotationTokenStreamBuildingException { String sofaName = annotationDescription.getSofa(); sofaName = sofaName == null ? CAS.NAME_DEFAULT_SOFA : sofaName; // create tokenstream from annotations AnnotationTokenStream annotationTokenStream = null; String typeName = annotationDescription.getType(); if (annotationDescription.getFeatureDescriptions().size() == 0) try { annotationTokenStream = new AnnotationTokenStream(jCas, sofaName, typeName); } catch (InvalidTokenSourceException e) { throw createException(annotationDescription, e); } else { String featurePath = annotationDescription.getFeaturePath(); String delimiter = annotationDescription.getFeatureValueDelimiterString(); Collection featureDescriptions = annotationDescription.getFeatureDescriptions(); List featureNames = extractFeatureNames(featureDescriptions); Map featureFormats = extractFeatureFormats(featureDescriptions); if (featurePath != null) try { annotationTokenStream = new AnnotationTokenStream(jCas, sofaName, typeName, featurePath, featureNames, delimiter, featureFormats); } catch (InvalidTokenSourceException e) { throw createException(annotationDescription, e); } else try { annotationTokenStream = new AnnotationTokenStream(jCas, sofaName, typeName, featureNames, delimiter, featureFormats); } catch (InvalidTokenSourceException e) { throw createException(annotationDescription, e); } } return annotationTokenStream; } private List extractFeatureNames(Collection featureDescriptions){ List featureNames = new ArrayList(); for (FeatureDescription featureDescription : featureDescriptions) { featureNames.add(featureDescription.getFeatureName()); } return featureNames; } private Map extractFeatureFormats(Collection featureDescriptions){ Map featureFormats = new HashMap(); for (FeatureDescription featureDescription : featureDescriptions) { if (featureDescription.getNumberFormat() != null) { Format format = new DecimalFormat(featureDescription.getNumberFormat()); featureFormats.put(featureDescription.getFeatureName(), format); } } return featureFormats; } private AnnotationTokenStreamBuildingException createException(AnnotationDescription annotationDescription, InvalidTokenSourceException e) { String message = "Can't build TokenStream from annotation at line " + annotationDescription.getLineNumber(); return new AnnotationTokenStreamBuildingException(message, e); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/0000755000175000017500000000000011625126530026651 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/AdditionFilter.java0000644000175000017500000000375311625126530032425 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class AdditionFilter extends TokenFilter { public static final Integer PREFIX = 0; public static final Integer POSTFIX = 1; private Integer position; private String addition; public AdditionFilter(TokenStream input, String addition, Integer position) { super(input); this.position = position; this.addition = addition; } @Override public Token next(Token aToken) throws IOException { Token token = input.next(aToken); if (token == null) return null; String tokenText = new String(token.termBuffer(), 0, token.termLength()); if (position.equals(PREFIX)) tokenText = addition.concat(tokenText); else tokenText = tokenText.concat(addition); token.setTermBuffer(tokenText.toCharArray(), 0, tokenText.length()); return token; } public Integer getPosition() { return position; } public String getAddition() { return addition; } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/StopwordFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/StopwordFilterFactory.j0000644000175000017500000000570111625126530033346 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.lucene.analysis.StopFilter; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.util.PlainFileReaderFactory; public class StopwordFilterFactory implements TokenFilterFactory { private static final String TRUE = "true"; private static final String FALSE = "false"; public static final String FILE_PATH_PARAMETER = "filePath"; public static final String IGRNORE_CASE_PARAMETER = "ignoreCase"; private PlainFileReaderFactory plainFileReaderFactory; private Map cachedStopwords; private static Logger LOGGER = Logger.getLogger(StopwordFilterFactory.class); public StopwordFilterFactory(PlainFileReaderFactory plainFileReaderFactory) { this.plainFileReaderFactory = plainFileReaderFactory; cachedStopwords = new HashMap(); } public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { String filePath = properties.getProperty(FILE_PATH_PARAMETER); String ignoreCase = properties.getProperty(IGRNORE_CASE_PARAMETER); ignoreCase = ignoreCase == null ? FALSE : ignoreCase; String[] stopwords = getStopwords(filePath ); return new StopFilter(tokenStream, stopwords, ignoreCase.equals(TRUE)); } private String[] getStopwords(String filePath) throws IOException { String[] stopwords = cachedStopwords.get(filePath); if( stopwords == null ){ stopwords = plainFileReaderFactory.createPlainFileReader(filePath).readLines(); LOGGER.info("file " + filePath + " loaded with " + stopwords.length + " stopwords"); cachedStopwords.put(filePath, stopwords); } return stopwords; } public void preloadResources(Properties properties) throws IOException { String filePath = properties.getProperty(FILE_PATH_PARAMETER); String[] stopwords = getStopwords(filePath ); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/HypernymFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/HypernymFilterFactory.j0000644000175000017500000000544711625126530033347 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.util.MultimapFileReaderFactory; public class HypernymFilterFactory implements TokenFilterFactory { public static final String FILE_PATH_PARAMETER = "filePath"; private Map>> cachedMappings; private MultimapFileReaderFactory multimapFileReaderFactory; private static Logger LOGGER = Logger.getLogger(HypernymFilterFactory.class); public HypernymFilterFactory(MultimapFileReaderFactory multimapFileReaderFactory) { this.multimapFileReaderFactory = multimapFileReaderFactory; cachedMappings = new HashMap>>(); } public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { String filePath = properties.getProperty(FILE_PATH_PARAMETER); Map> hypernyms = getHypernyms(filePath); return new HypernymFilter(tokenStream, hypernyms); } private Map> getHypernyms(String filePath) throws IOException { Map> hypernyms = cachedMappings.get(filePath); if( hypernyms == null ) { hypernyms = multimapFileReaderFactory.createMultimapFileReader(filePath).readMultimap(); LOGGER.info("file " + filePath + " loaded with " + hypernyms.size()); cachedMappings.put(filePath, hypernyms); } return hypernyms; } public void preloadResources(Properties properties) throws IOException { String filePath = properties.getProperty(FILE_PATH_PARAMETER); Map> hypernyms = getHypernyms(filePath); } public Map>> getCachedMappings() { return cachedMappings; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/TokenStreamConcatenator.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/TokenStreamConcatenator0000644000175000017500000000512611625126530033375 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Collection; import java.util.Iterator; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; /** * A TokenStreamStringConcatenator takes a {@link java.util.Collection Collection} of * {@link org.apache.lucene.analysis.TokenStream tokenstreams} and concats them. */ public class TokenStreamConcatenator extends TokenStream { private Collection tokenStreams; private Iterator tokenStreamIterator; private TokenStream currentTokenStream; public TokenStreamConcatenator(Collection tokenStreams) { super(); this.tokenStreams = tokenStreams; this.tokenStreamIterator = tokenStreams.iterator(); if (tokenStreamIterator.hasNext()) currentTokenStream = tokenStreamIterator.next(); } @Override public Token next(Token inputToken) throws IOException { if (currentTokenStream == null) if (tokenStreamIterator.hasNext()) currentTokenStream = tokenStreamIterator.next(); else return null; Token nextToken = currentTokenStream.next(inputToken); while (nextToken == null) { if (tokenStreamIterator.hasNext()) { currentTokenStream = tokenStreamIterator.next(); nextToken = currentTokenStream.next(inputToken); } else return null; } return nextToken; } public void reset() throws IOException { for (TokenStream tokenStream : tokenStreams) tokenStream.reset(); tokenStreamIterator = tokenStreams.iterator(); if (tokenStreamIterator.hasNext()) currentTokenStream = tokenStreamIterator.next(); else currentTokenStream = null; } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/AnnotationTokenStream.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/AnnotationTokenStream.j0000644000175000017500000004727311625126530033330 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.text.Format; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASException; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.cas.StringArray; import org.apache.uima.jcas.tcas.Annotation; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.Iterators; import com.google.common.collect.Lists; /** * * AnnotationTokenStream represents a TokenStream which extracts tokens from feature values of * annotations of a given type from a JCas object. Each token has the start and end offset from the * annotation object. This class supports only the following UIMA JCas types of features: *

    *
  1. String
  2. *
  3. StringArray
  4. *
  5. FSArray
  6. *
  7. Number types
  8. *
*/ public class AnnotationTokenStream extends TokenStream { private JCas jCas; private String featurePath; private List featureNames; private String delimiter; private Iterator annotationIterator; // iterates over annotations private Iterator featureStructureIterator; // iterates over feature structures // stored in feature arrays of an // annotation private Iterator featureValueIterator; // iterates over the features of a feature // structure private Annotation currentAnnotation; private Type annotationType; private Map featureFormats; // a optional map of format object for each feature private static Logger logger = Logger.getLogger(AnnotationTokenStream.class); private class NotNullPredicate implements Predicate { public boolean apply(T object) { return object != null; } } /** * Creates a TokenStream which extracts all coveredText feature values of annotations of a given * type from a JCas object. Each token has the start and end offset of the annotation and takes * the covered text value as termText. * * @param jCas * the jCas * @param sofaName the name of the subject of analysis (sofa) * @param typeName * the type of the annotation * @throws CASException */ public AnnotationTokenStream(JCas jCas, String sofaName, String typeName) throws InvalidTokenSourceException { this(jCas, sofaName, typeName, null, Collections.emptyList(), null, Collections.emptyMap()); } /** * Creates a TokenStream which extracts all feature values of a given feature name from * annotations with a given type from a given JCas object. Each token has the start and end offset * of the annotation and uses the feature value as term text. * * @param jCas * the JCas object * @param sofaName the name of the subject of analysis (sofa) * @param typeName * the type of the annotation * @param featureName * the name of the feature from which the token text is build * @param featureFormat * optional format object to convert feature values to strings * @throws InvalidTokenSourceException */ public AnnotationTokenStream(JCas jCas, String sofaName, String typeName, String featureName, Format featureFormat) throws InvalidTokenSourceException { this(jCas, sofaName, typeName, null, Lists.newArrayList(featureName), null, featureFormat != null ? ImmutableBiMap.of(featureName, featureFormat): Collections.emptyMap()); } /** * Creates a TokenStream which extracts all feature values of a given feature name list from * annotations with a given type from a given JCas object. Each token has the start and end offset * of the annotation and uses the concatenation of all the feature values as term text. Optionally * the different feature values of an annotation can be concatenated with a delimiter. * * @param jCas * the JCas object * @param sofaName the name of the Subject Of Analysis (sofa) * @param typeName * the type of the annotation * @param featureNames * the name of the feature from which the token text is build * @param delimiter * a delimiter for concatenating the different feature values of an annotation object. If * null a white space will be used. * @param featureFormats * optional map of format objects to convert feature values to strings - the key must be * the feature name * @throws InvalidTokenSourceException */ public AnnotationTokenStream(JCas jCas, String sofaName, String typeName, List featureNames, String delimiter, Map featureFormats) throws InvalidTokenSourceException { this(jCas, sofaName, typeName, null, featureNames, delimiter, featureFormats); } /** * Creates a TokenStream which extracts all feature values of a given feature name list from * annotations with a given type from a given JCas object. Each token has the start and end offset * of the annotation and uses the concatenation of all the feature values as term text. * * @param jCas * the JCas object * @param sofaName the name of the Subject Of Analysis (sofa) * @param typeName * the type of the annotation * @param featureNames * the name of the feature from which the token text is build * @param featureFormats * optional map of format objects to convert feature values to strings - the key must be * the feature name * @throws InvalidTokenSourceException */ public AnnotationTokenStream(JCas jCas, String sofaName, String typeName, List featureNames, Map featureFormats) throws InvalidTokenSourceException { this(jCas, sofaName, typeName, null, featureNames, null, featureFormats); } /** * Creates a TokenStream which extracts all feature values of a given feature name list from * annotations with a given type from a given JCas object. The addressed features are part of * direct or indirect feature structure value of a annotation. For example a annotation of type * person has a feature address which values are address feature structures with features for the * street, postal code and city . To create tokens with postal code and city of a persons address, * the featurePath must be "address" and the featureNames "postalCode" and * "city". Each token has the start and end offset of the annotation and uses the * concatenation of all the feature values as term text. * * @param jCas * the JCas object * @param sofaName the name of the Subject of Analysis (sofa) * @param typeName * the type of the annotation * @param featurePath * the path to the feature structures which features should be used for tokens Path * entries should be separated by ".". Example: * "affiliation.address.country" * @param featureNames * the name of the feature from which the token text is build * @param featureFormats * optional map of format objects to convert feature values to strings - the key must be * the feature name * @throws InvalidTokenSourceException */ public AnnotationTokenStream(JCas jCas, String sofaName, String typeName, String featurePath, List featureNames, Map featureFormats) throws InvalidTokenSourceException { this(jCas, sofaName, typeName, featurePath, featureNames, null, featureFormats); } /** * Creates a TokenStream which extracts all feature values of a given feature name list from * annotations with a given type from a given JCas object. The addressed features are part of * direct or indirect feature structure value of a annotation. For example a annotation of type * person has a feature address which values are address feature structures with features for the * street, postal code and city . To create tokens with postal code and city of a persons address, * the featurePath must be "address" and the featureNames "postalCode" and * "city". Each token has the start and end offset of the annotation and uses the * concatenation of all the feature values as term text. Optionally the different feature values * of an annotation can be concatenated with a delimiter. * * @param jCas * the JCas object * @param sofaName the name of the Subject of Analysis (sofa) * @param typeName * the type of the annotation * @param featurePath * the path to the feature structures which features should be used for tokens Path * entries should be separated by ".". Example: * "affiliation.address.country" * @param featureNames * the name of the feature from which the token text is build * @param delimiter * a delimiter for concatenating the different feature values of an annotation object. If * null a white space will be used. * @param featureFormats * optional map of format objects to convert feature values to strings - the key must be * the feature name * @throws InvalidTokenSourceException */ public AnnotationTokenStream(JCas jCas, String sofaName, String typeName, String featurePath, List featureNames, String delimiter, Map featureFormats) throws InvalidTokenSourceException { super(); this.featurePath = featurePath; this.featureNames = featureNames; this.delimiter = delimiter; if (featureFormats == null) this.featureFormats = Collections.emptyMap(); else this.featureFormats = featureFormats; getSofaCas(jCas, sofaName); getTypeForName(typeName); validate(annotationType, featureNames, featurePath); initializeIterators(); } private void getTypeForName(String typeName) throws InvalidTokenSourceException{ annotationType = jCas.getTypeSystem().getType(typeName); if( annotationType == null ) throw new InvalidTokenSourceException("Type " + typeName + " not found!"); } private void getSofaCas(JCas cas, String sofaName) throws InvalidTokenSourceException { try { jCas = cas.getView(sofaName); } catch (CASException e) { throw new InvalidTokenSourceException(e); } } void validate(Type type, Collection featureNames, String featurePath) throws InvalidTokenSourceException{ Type typeToValidate = findTypeWithPath(type, featurePath); for( String featureName: featureNames ){ Feature feature = typeToValidate.getFeatureByBaseName(featureName); if( feature == null ) throw new InvalidTokenSourceException("Type " + typeToValidate.getName() + " has no feature " + featureName + ". featurePath: " + featurePath); } } private Type findTypeWithPath(Type type, String featurePath) throws InvalidTokenSourceException{ if( featurePath == null ) return type; String[] featurePathElements = featurePath.split("\\."); Type currentType = type; for( String featurePathElement: featurePathElements ){ Feature feature = currentType.getFeatureByBaseName(featurePathElement); if (feature == null) throw new InvalidTokenSourceException("Type " + currentType.getName() + " has no feature " + featurePathElement); currentType = feature.getRange(); if (currentType.isArray()) currentType = currentType.getComponentType(); } return currentType; } @Override public Token next(Token token) throws IOException { while (!featureValueIterator.hasNext()) { while (!featureStructureIterator.hasNext()) { if (!annotationIterator.hasNext()) return null; currentAnnotation = (Annotation) annotationIterator.next(); featureStructureIterator = createFeatureStructureIterator(currentAnnotation, featurePath); } featureValueIterator = createFeatureValueIterator(featureStructureIterator.next(), featureNames); } token.setStartOffset(currentAnnotation.getBegin()); token.setEndOffset(currentAnnotation.getEnd()); char[] value = featureValueIterator.next().toCharArray(); token.setTermBuffer(value, 0, value.length); return token; } /* * (non-Javadoc) * * @see org.apache.lucene.analysis.TokenStream#next() */ @Override public Token next() throws IOException { return next(new Token()); } protected void initializeIterators() { annotationIterator = Iterators.filter(jCas.getAnnotationIndex(annotationType).iterator(), new NotNullPredicate()); if (!annotationIterator.hasNext()) { featureStructureIterator = Iterators.emptyIterator(); featureValueIterator = Iterators.emptyIterator(); return; } currentAnnotation = (Annotation) annotationIterator.next(); featureStructureIterator = createFeatureStructureIterator(currentAnnotation, featurePath); if (!featureStructureIterator.hasNext()) { featureValueIterator = Iterators.emptyIterator(); return; } FeatureStructure featureStructure = featureStructureIterator.next(); featureValueIterator = createFeatureValueIterator(featureStructure, featureNames); } protected Iterator createFeatureStructureIterator(Annotation annotation, String featurePath) { Collection featureStructures = new LinkedList(); Collection childs = new LinkedList(); if (featurePath == null) { featureStructures.add(annotation); return featureStructures.iterator(); } Type currentType = annotation.getType(); if (currentType.isArray()) currentType = currentType.getComponentType(); String[] pathEntries = featurePath.split("\\."); featureStructures.add(annotation); for (String pathEntry : pathEntries) { Feature feature = currentType.getFeatureByBaseName(pathEntry); childs.clear(); if (feature.getRange().isArray()) { for (FeatureStructure featureStructureItem : featureStructures) { FSArray fsArray = (FSArray) featureStructureItem.getFeatureValue(feature); if (fsArray == null) continue; for (int i = 0; i < fsArray.size(); i++) childs.add(fsArray.get(i)); } } else for (FeatureStructure featureStructureItem : featureStructures) childs.add(featureStructureItem.getFeatureValue(feature)); currentType = feature.getRange(); if (currentType.isArray()) currentType = currentType.getComponentType(); featureStructures.clear(); featureStructures.addAll(childs); } return Iterators.filter(featureStructures.iterator(), new NotNullPredicate()); } protected Iterator createFeatureValueIterator(FeatureStructure srcFeatureStructure, Collection featureNames) { List values = new LinkedList(); Type featureType = srcFeatureStructure.getType(); if (featureNames.size() == 0) values.add(currentAnnotation.getCoveredText()); for (String featureName : featureNames) { Feature feature = featureType.getFeatureByBaseName(featureName); if (feature.getRange().isArray()) { StringArray fsArray = (StringArray) srcFeatureStructure.getFeatureValue(feature); if (featureNames.size() == 1) { for (int i = 0; i < fsArray.size(); i++) values.add(fsArray.get(i).toString()); } else { String value = ""; for (int i = 0; i < fsArray.size(); i++) { value = value.concat(fsArray.get(i).toString()); if (i < fsArray.size() - 1) value = value.concat(delimiter); } values.add(value); } } else values.add(getValueForFeature(srcFeatureStructure, feature, featureFormats.get(feature .getShortName()))); } String value = ""; if (delimiter != null) { for (int i = 0; i < values.size(); i++) { if (values.get(i) == null) continue; value = value.concat(values.get(i)); if (i < values.size() - 1) value = value.concat(delimiter); } values.clear(); values.add(value); } return Iterators.filter(values.iterator(), new NotNullPredicate()); } public String getValueForFeature(FeatureStructure featureStructure, Feature feature, Format format) { if (format == null) return featureStructure.getFeatureValueAsString(feature); else { Object value = null; if (feature.getRange().getName().equals(CAS.TYPE_NAME_DOUBLE)) value = featureStructure.getDoubleValue(feature); else if (feature.getRange().getName().equals(CAS.TYPE_NAME_FLOAT)) value = featureStructure.getFloatValue(feature); else if (feature.getRange().getName().equals(CAS.TYPE_NAME_LONG)) value = featureStructure.getLongValue(feature); else if (feature.getRange().getName().equals(CAS.TYPE_NAME_INTEGER)) value = featureStructure.getIntValue(feature); else if (feature.getRange().getName().equals(CAS.TYPE_NAME_SHORT)) value = featureStructure.getShortValue(feature); return format.format(value); } } public void reset() { featureStructureIterator = null; currentAnnotation = null; featureFormats = Collections.emptyMap(); initializeIterators(); } public Map getFeatureFormats() { return featureFormats; } public JCas getJCas() { return jCas; } public String getFeaturePath() { return featurePath; } public List getFeatureNames() { return featureNames; } public String getDelimiter() { return delimiter; } public Type getAnnotationType() { return annotationType; } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/PositionFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/PositionFilterFactory.j0000644000175000017500000000422111625126530033325 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class PositionFilterFactory implements TokenFilterFactory { public static final String POSITION_PARAMETER = "position"; public static final String FIRST_POSITION_PARAMETER_VALUE = "first"; public static final String LAST_POSITION_PARAMETER_VALUE = "last"; public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { String positionAttribute = properties.getProperty(POSITION_PARAMETER); Integer position = -1; if( positionAttribute == null ) throw new IllegalArgumentException("no position information provided"); if( positionAttribute.equals(FIRST_POSITION_PARAMETER_VALUE) ) position = PositionFilter.FIRST_POSITION; else if( positionAttribute.equals(LAST_POSITION_PARAMETER_VALUE) ) position = PositionFilter.LAST_POSITION; else throw new IllegalArgumentException("unknown position value: " + positionAttribute); return new PositionFilter(tokenStream, position); } public void preloadResources(Properties properties) throws IOException { // we have no resources } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/UniqueFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/UniqueFilterFactory.jav0000644000175000017500000000256311625126530033325 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class UniqueFilterFactory implements TokenFilterFactory { public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { return new UniqueFilter(tokenStream); } public void preloadResources(Properties properties) throws IOException { // TODO Auto-generated method stub } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/ConcatFilter.java0000644000175000017500000000660011625126530032073 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.analysis.tokenattributes.TermAttribute; import java.io.IOException; public class ConcatFilter extends TokenFilter { private int startOffset; private String concatString; private Token lastToken; private TermAttribute termAtt; private OffsetAttribute offsetAtt; protected ConcatFilter(TokenStream input, String concatString) { super(input); this.concatString = concatString; startOffset = -1; termAtt = (TermAttribute)addAttribute(TermAttribute.class); offsetAtt = (OffsetAttribute)addAttribute(OffsetAttribute.class); } @Override public boolean incrementToken() throws IOException { StringBuffer result = new StringBuffer(); TermAttribute inputTermAtt = (TermAttribute)input.getAttribute(TermAttribute.class); OffsetAttribute inputOffsetAtt = (OffsetAttribute)input.getAttribute(OffsetAttribute.class); int endOffset = -1; int startOffset = -1; if (input.incrementToken()) { startOffset = inputOffsetAtt.startOffset(); result.append(inputTermAtt.term()); while (input.incrementToken()) { result.append(concatString); result.append(inputTermAtt.term()); endOffset = inputOffsetAtt.endOffset(); } termAtt.setTermBuffer(result.toString()); offsetAtt.setOffset(startOffset, endOffset); return true; } return false; } @Override @Deprecated public Token next(Token reusableToken) throws IOException { String tokenText = concatenatedInputTokenTerms(reusableToken); reusableToken.setTermBuffer(tokenText.toCharArray(), 0, tokenText.length()); reusableToken.setStartOffset(startOffset); reusableToken.setEndOffset(lastToken.endOffset()); return reusableToken; } @Deprecated private String concatenatedInputTokenTerms(Token reusableToken) throws IOException { StringBuffer stringBuffer = new StringBuffer(); Token nextToken = input.next(reusableToken); lastToken = null; if( startOffset == -1 ) startOffset = nextToken.startOffset(); while( nextToken != null ){ lastToken = nextToken; stringBuffer.append(nextToken.term()); nextToken = input.next(reusableToken); if( nextToken != null ) stringBuffer.append(concatString); } return stringBuffer.toString(); } protected String getConcatString() { return concatString; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/HypernymFilter.java0000644000175000017500000000617511625126530032506 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; /** * TokenFilter subclass which adds hypernyms to a TokenStream based on a map. */ public class HypernymFilter extends TokenFilter { private static Logger logger = Logger.getLogger(HypernymFilter.class); private Map> hypernyms; private TokenStream tokenStream; private int currentHypernymIndex; private List currentHypernyms; private Token inputToken; /** * Constructor. * * @param input * the input TokenStream * @param hypernyms * the hypernym map. key: token text, value: list of hypernyms */ public HypernymFilter(TokenStream input, Map> hypernyms) { super(input); this.hypernyms = hypernyms; this.tokenStream = input; this.currentHypernymIndex = -1; } @Override public Token next(Token nextToken) throws IOException { if (currentHypernymIndex >= 0 && currentHypernymIndex < currentHypernyms.size()) { nextToken.reinit(currentHypernyms.get(currentHypernymIndex), inputToken .startOffset(), inputToken.endOffset()); nextToken.setPositionIncrement(0); logger .debug("adding hypernym " + nextToken.term() + " for :" + inputToken.term()); currentHypernymIndex++; return nextToken; } else if (currentHypernymIndex >= 0 && currentHypernymIndex == currentHypernyms.size()) { currentHypernymIndex = -1; currentHypernyms = null; } inputToken = tokenStream.next(nextToken); if (inputToken != null) { currentHypernyms = hypernyms.get(inputToken.term()); if (currentHypernyms != null) currentHypernymIndex = 0; } return inputToken; } @Override public void reset() throws IOException { inputToken = null; currentHypernymIndex = -1; if (currentHypernyms != null) currentHypernyms = null; tokenStream.reset(); } public Map> getHypernyms() { return hypernyms; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/ReplaceFilter.java0000644000175000017500000000350211625126530032235 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Map; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class ReplaceFilter extends TokenFilter { private TokenStream input; private Map mapping; public ReplaceFilter(TokenStream input, Map mapping) { super(input); this.input = input; this.mapping = mapping; } @Override public Token next(Token inputToken) throws IOException { Token token = input.next(inputToken); if (token == null) return null; String termText = new String(token.termBuffer(), 0, token.termLength()); String replaceText = mapping.get(termText); if (replaceText != null) token.setTermBuffer(replaceText.toCharArray(), 0, replaceText.length()); return token; } public Map getMapping() { return mapping; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/LowerCaseFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/LowerCaseFilterFactory.0000644000175000017500000000262611625126530033242 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.LowerCaseFilter; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class LowerCaseFilterFactory implements TokenFilterFactory { public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { return new LowerCaseFilter(tokenStream); } public void preloadResources(Properties properties) throws IOException { } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/SnowballFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/SnowballFilterFactory.j0000644000175000017500000000327011625126530033305 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.snowball.SnowballFilter; public class SnowballFilterFactory implements TokenFilterFactory { public static final String STEMMER_NAME_PARAMETER = "stemmerName"; private static final String DEFAULT_STEMMER_NAME = "English"; public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { String stemmerName = properties.getProperty(STEMMER_NAME_PARAMETER); if( stemmerName == null ) stemmerName = DEFAULT_STEMMER_NAME; return new SnowballFilter(tokenStream, stemmerName); } public void preloadResources(Properties properties) throws IOException { } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/InvalidTokenSourceException.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/InvalidTokenSourceExcep0000644000175000017500000000240111625126530033326 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; public class InvalidTokenSourceException extends Exception { private static final long serialVersionUID = 1L; public InvalidTokenSourceException(Throwable cause) { super(cause); } public InvalidTokenSourceException(String message) { super(message); } public InvalidTokenSourceException(String message, Throwable cause) { super(message, cause); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/TokenStreamMerger.java0000644000175000017500000001010711625126530033111 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute; import org.apache.lucene.util.Attribute; import java.io.IOException; import java.util.*; /** * A TokenStreamMerger merges a {@link java.util.List list} of * {@link org.apache.lucene.analysis.TokenStream token streams} by the means of * their token offsets. Adapts positionIncrement of tokens if their startOffset * is exactly the same. */ public class TokenStreamMerger extends TokenStream { private class TokenStreamComparator implements Comparator { public int compare(TokenStream stream1, TokenStream stream2) { OffsetAttribute attr1 = (OffsetAttribute) stream1 .getAttribute(OffsetAttribute.class); OffsetAttribute attr2 = (OffsetAttribute) stream2 .getAttribute(OffsetAttribute.class); return attr2.startOffset() - attr1.startOffset(); } } private Collection streams; private int currentOffset; private TokenStreamComparator comparator; private Stack sortedStreams; private boolean initialized; private PositionIncrementAttribute posIncAtt; public TokenStreamMerger(Collection streams) throws IOException { super(); this.streams = streams; this.comparator = new TokenStreamComparator(); currentOffset = -1; sortedStreams = new Stack(); // add all attributes which are contained in any input token stream for (TokenStream stream : streams) { Iterator> attIt = stream.getAttributeClassesIterator(); while (attIt.hasNext()) { Class attClass = attIt.next(); addAttribute(attClass); } } // we need a PositionIncrementAttribute in any case posIncAtt = (PositionIncrementAttribute)addAttribute(PositionIncrementAttribute.class); } private void init() throws IOException { for (TokenStream stream : streams) { stream.reset(); stream.incrementToken(); sortedStreams.add(stream); } rebuildSortedTokens(); initialized = true; } public void reset() throws IOException { for (TokenStream stream : streams) stream.reset(); currentOffset = -1; sortedStreams.clear(); initialized = false; } @Override public boolean incrementToken() throws IOException { if (!initialized) init(); if (sortedStreams.size() == 0) return false; TokenStream currentTokenStream = sortedStreams.pop(); restoreState(currentTokenStream.captureState()); OffsetAttribute offsetAttr = (OffsetAttribute)currentTokenStream.getAttribute(OffsetAttribute.class); if (offsetAttr.startOffset() == currentOffset) posIncAtt.setPositionIncrement(0); else posIncAtt.setPositionIncrement(1); currentOffset = offsetAttr.startOffset(); // proceed the token stream to its next token and resort the stack if(currentTokenStream.incrementToken()) sortedStreams.add(currentTokenStream); rebuildSortedTokens(); return true; } private void rebuildSortedTokens() throws IOException { Collections.sort(sortedStreams, comparator); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/ConcatFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/ConcatFilterFactory.jav0000644000175000017500000000302411625126530033257 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class ConcatFilterFactory implements TokenFilterFactory { public static final String CONCAT_STRING_PARAMETER = "concatString"; public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { String concatString = properties.getProperty(CONCAT_STRING_PARAMETER); return new ConcatFilter(tokenStream, concatString); } public void preloadResources(Properties properties) throws IOException { // TODO Auto-generated method stub } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/DelimiterTokenizer.java0000644000175000017500000000235611625126530033333 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.Reader; import org.apache.lucene.analysis.CharTokenizer; public class DelimiterTokenizer extends CharTokenizer { private char delimiter; public DelimiterTokenizer(Reader arg0, char delimiter) { super(arg0); this.delimiter = delimiter; } @Override protected boolean isTokenChar(char c) { return !(c == delimiter); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/AdditionFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/AdditionFilterFactory.j0000644000175000017500000000403511625126530033257 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class AdditionFilterFactory implements TokenFilterFactory { public static final String POSTFIX_POSITION = "postfix"; public static final String PREFIX_POSITION = "prefix"; public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { String postfix = properties.getProperty(POSTFIX_POSITION); String addition = null; Integer position = null; if( postfix != null ){ position = AdditionFilter.POSTFIX; addition = postfix; } else { String prefix = properties.getProperty(PREFIX_POSITION); if( prefix != null ){ position = AdditionFilter.PREFIX; addition = prefix; } else throw new IllegalArgumentException("no postfix or prefix attribute provided"); } return new AdditionFilter(tokenStream, addition, position); } public void preloadResources(Properties properties) throws IOException { // TODO Auto-generated method stub } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/UpperCaseFilter.java0000644000175000017500000000330111625126530032546 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class UpperCaseFilter extends TokenFilter { private TokenStream input; public UpperCaseFilter(TokenStream input) { super(input); this.input = input; } @Override public Token next(Token inputToken) throws IOException { Token nextToken = input.next(inputToken); if (nextToken == null) return null; String termText = new String(nextToken.termBuffer(), 0, nextToken.termLength()); termText = termText.toUpperCase(); nextToken.setTermBuffer(termText.toCharArray(), 0, termText.length()); return nextToken; } @Override public void reset() throws IOException { input.reset(); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/SplitterFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/SplitterFilterFactory.j0000644000175000017500000000302711625126530033332 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class SplitterFilterFactory implements TokenFilterFactory { public static final String SPLIT_STRING_PARAMETER = "splitString"; public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { String splitString = properties.getProperty(SPLIT_STRING_PARAMETER); return new SplitterFilter(tokenStream, splitString); } public void preloadResources(Properties properties) throws IOException { // TODO Auto-generated method stub } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/PositionFilter.java0000644000175000017500000000371011625126530032467 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class PositionFilter extends TokenFilter { public final static Integer FIRST_POSITION = 0; public final static Integer LAST_POSITION = 1; private TokenStream input; private Token token; private Integer position; public PositionFilter(TokenStream input, Integer position) { super(input); this.input = input; this.position = position; } @Override public Token next(Token nextToken) throws IOException { Token newToken = input.next(nextToken); if (position.equals(FIRST_POSITION)) { if (token != null) return null; else { token = newToken; return newToken; } } else if (position.equals(LAST_POSITION)) { Token lastToken = null; while (newToken != null) { lastToken = newToken; newToken = input.next(nextToken); } return lastToken; } else return newToken; } public Integer getPosition() { return position; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/SplitterFilter.java0000644000175000017500000000452311625126530032474 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Iterator; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import com.google.common.collect.Iterators; public class SplitterFilter extends TokenFilter { private String splitString; private Iterator splitIterator; private Token currentToken; public SplitterFilter(TokenStream input, String splitString) { super(input); this.splitString = splitString; this.splitIterator = Iterators.emptyIterator(); } @Override public Token next(Token token) throws IOException { if (!splitIterator.hasNext()) { currentToken = input.next(token); if (currentToken == null) return null; String tokenText = new String(currentToken.termBuffer(), 0, currentToken.termLength()); String[] splitts = tokenText.split(splitString); splitIterator = Iterators.forArray(splitts, 0, splitts.length); } if (!splitIterator.hasNext()) return null; token.setStartOffset(currentToken.startOffset()); token.setEndOffset(currentToken.endOffset()); char[] termBuffer = splitIterator.next().toCharArray(); token.setTermBuffer(termBuffer, 0, termBuffer.length); return token; } @Override public Token next() throws IOException { return next(new Token()); } public String getSplitString() { return splitString; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/ReplaceFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/ReplaceFilterFactory.ja0000644000175000017500000000523511625126530033243 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.util.MapFileReaderFactory; public class ReplaceFilterFactory implements TokenFilterFactory { public static final String FILE_PATH_PARAMETER = "filePath"; private MapFileReaderFactory mapFileReaderFactory; private Map> cachedMappings; private static Logger LOGGER = Logger.getLogger(ReplaceFilterFactory.class); public ReplaceFilterFactory(MapFileReaderFactory mapFileReaderFactory) { this.mapFileReaderFactory = mapFileReaderFactory; cachedMappings = new HashMap>(); } public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { String filePath = properties.getProperty(FILE_PATH_PARAMETER); return new ReplaceFilter(tokenStream, getMapping(filePath)); } public void preloadResources(Properties properties) throws IOException { String filePath = properties.getProperty(FILE_PATH_PARAMETER); Map mapping = getMapping(filePath); } public Map getMapping(String filePath) throws IOException{ Map mapping = cachedMappings.get(filePath); if( mapping == null ) { mapping = mapFileReaderFactory.createMapFileReader(filePath).readMap(); LOGGER.info("file " + filePath + " loaded with " + mapping.size() + " entries"); cachedMappings.put(filePath, mapping); } return mapping; } Map> getCachedMappings(){ return cachedMappings; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/TokenFilterFactory.java0000644000175000017500000000236311625126530033276 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public interface TokenFilterFactory { public void preloadResources(Properties properties) throws IOException; public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException; } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/DefaultFilterFactoryRegistry.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/DefaultFilterFactoryReg0000644000175000017500000000616311625126530033322 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.util.HashMap; import java.util.Map; import org.apache.uima.lucas.indexer.util.MapFileReaderFactory; import org.apache.uima.lucas.indexer.util.MultimapFileReaderFactory; import org.apache.uima.lucas.indexer.util.PlainFileReaderFactory; public class DefaultFilterFactoryRegistry { public static final String ADDITION_FILTER_FACTORY_NAME = "addition"; public static final String HYPERNYM_FILTER_FACTORY_NAME = "hypernyms"; public static final String POSITION_FILTER_FACTORY_NAME = "position"; public static final String REPLACE_FILTER_FACTORY_NAME = "replace"; public static final String SNOWBALL_FILTER_FACTORY_NAME = "snowball"; public static final String SPLITTER_FILTER_FACTORY_NAME = "splitter"; public static final String STOPWORD_FILTER_FACTORY_NAME = "stopwords"; public static final String UNIQUE_FILTER_FACTORY_NAME = "unique"; public static final String UPPERCASE_FILTER_FACTORY_NAME = "uppercase"; public static final String LOWERCASE_FILTER_FACTORY_NAME = "lowercase"; public static final String UEA_FILTER_FACTORY_NAME = "uea-stemmer"; public static final String CONCAT_FILTER_FACTORY_NAME = "concatenate"; public Map getDefaultRegistry(){ Map registry = new HashMap(); registry.put(ADDITION_FILTER_FACTORY_NAME, new AdditionFilterFactory()); registry.put(HYPERNYM_FILTER_FACTORY_NAME, new HypernymFilterFactory(new MultimapFileReaderFactory())); registry.put(POSITION_FILTER_FACTORY_NAME, new PositionFilterFactory()); registry.put(REPLACE_FILTER_FACTORY_NAME, new ReplaceFilterFactory(new MapFileReaderFactory())); registry.put(SNOWBALL_FILTER_FACTORY_NAME, new SnowballFilterFactory()); registry.put(SPLITTER_FILTER_FACTORY_NAME, new SplitterFilterFactory()); registry.put(CONCAT_FILTER_FACTORY_NAME, new ConcatFilterFactory()); registry.put(STOPWORD_FILTER_FACTORY_NAME, new StopwordFilterFactory(new PlainFileReaderFactory())); registry.put(UNIQUE_FILTER_FACTORY_NAME, new UniqueFilterFactory()); registry.put(UPPERCASE_FILTER_FACTORY_NAME, new UpperCaseFilterFactory()); registry.put(LOWERCASE_FILTER_FACTORY_NAME, new LowerCaseFilterFactory()); return registry; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/UniqueFilter.java0000644000175000017500000000441211625126530032131 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Collection; import java.util.HashSet; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; /** * A UniqueFilter filters multiple occurrences of {@link org.apache.lucene.analysis.Token tokens} * tokens with the same token text and removes them. */ public class UniqueFilter extends TokenFilter { private TokenStream input; private Collection termTexts; private Token currentToken; public UniqueFilter(TokenStream input) { super(input); this.input = input; termTexts = new HashSet(); } @Override public Token next(Token inputToken) throws IOException { currentToken = input.next(inputToken); if (currentToken == null) return null; String termText = new String(currentToken.termBuffer(), 0, currentToken.termLength()); while (termTexts.contains(termText)) { currentToken = input.next(inputToken); if (currentToken != null) termText = new String(currentToken.termBuffer(), 0, currentToken.termLength()); else termText = null; } if (currentToken == null) return null; termTexts.add(termText); return currentToken; } @Override public void reset() throws IOException { input.reset(); termTexts.clear(); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/UpperCaseFilterFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/analysis/UpperCaseFilterFactory.0000644000175000017500000000257111625126530033244 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; public class UpperCaseFilterFactory implements TokenFilterFactory { public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) throws IOException { return new UpperCaseFilter(tokenStream); } public void preloadResources(Properties properties) throws IOException { // TODO Auto-generated method stub } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/Tokenizer.java0000644000175000017500000000502011625126534027644 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.WhitespaceTokenizer; import org.apache.lucene.analysis.standard.StandardTokenizer; import org.apache.uima.lucas.indexer.mapping.AnnotationDescription; import org.apache.uima.lucas.indexer.util.TokenStreamStringConcatenator; public class Tokenizer { public static final String TOKENIZER_WHITESPACE = "whitespace"; public static final String TOKENIZER_CAS = "cas"; public static final String TOKENIZER_STANDARD = "standard"; private TokenStreamStringConcatenator tokenStreamStringConcatenator; public Tokenizer() { tokenStreamStringConcatenator = new TokenStreamStringConcatenator(); } public boolean needsTokenization(AnnotationDescription annotationDescription) { String tokenizer = annotationDescription.getTokenizer(); return tokenizer != null && !tokenizer.equals(TOKENIZER_CAS); } public TokenStream tokenize(TokenStream tokenStream, AnnotationDescription description) throws IOException { String tokenizer = description.getTokenizer(); if (tokenizer != null && !tokenizer.equals(TOKENIZER_CAS)) { String tokenStreamAsString = tokenStreamStringConcatenator.tokenStreamToStringWithDelimiter( tokenStream, " "); StringReader stringReader = new StringReader(tokenStreamAsString); if (tokenizer.equals(TOKENIZER_WHITESPACE)) tokenStream = new WhitespaceTokenizer(stringReader); else if (tokenizer.equals(TOKENIZER_STANDARD)) tokenStream = new StandardTokenizer(stringReader); } return tokenStream; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/IndexWriterProvider.java0000644000175000017500000000176011625126534031660 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import org.apache.lucene.index.IndexWriter; public interface IndexWriterProvider { public IndexWriter getIndexWriter(); } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/IndexWriterProviderImpl.java0000644000175000017500000001576111625126534032510 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import java.io.IOException; import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.HashSet; import java.util.Properties; import java.util.Random; import java.util.Set; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriter.MaxFieldLength; import org.apache.lucene.store.LockObtainFailedException; import org.apache.uima.resource.DataResource; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.SharedResourceObject; public class IndexWriterProviderImpl implements IndexWriterProvider, SharedResourceObject{ public static final String USE_COMPOUND_FILE_FORMAT_PROPERTY = "useCompoundFileFormat"; public static final String RAMBUFFER_SIZE_PROPERTY = "RAMBufferSize"; public static final String INDEX_PATH_PROPERTY = "indexPath"; public static final String CREATE_INDEX_PROPERTY = "createIndex"; public static final String MAX_FIELD_LENGTH_PROPERTY = "maxFieldLength"; public static final String UNIQUE_INDEX_PROPERTY = "uniqueIndex"; private static Set randomNumbers = new HashSet(); public IndexWriter indexWriter; public IndexWriter getIndexWriter() { return indexWriter; } public void load(DataResource dataResource) throws ResourceInitializationException { Properties properties = loadProperties(dataResource); String indexPath = getIndexPath(properties); if (getUniqueIndexOrDefault(properties)) indexPath = createUniqueIndexPath(indexPath); MaxFieldLength maxFieldLength = getMaxFieldLengthOrDefault(properties); boolean createIndex = getCreateIndexOrDefault(properties); createIndexWriter(indexPath, maxFieldLength, createIndex); Double ramBufferSize = getRAMBufferSizeOrDefault(properties); Boolean useCompoundFileFormat = getUseCompoundFormatOrDefault(properties); configureIndexWriter(ramBufferSize, useCompoundFileFormat); } private Properties loadProperties(DataResource dataResource) throws ResourceInitializationException { Properties properties = new Properties(); try { properties.load(dataResource.getInputStream()); } catch (IOException e) { throw new ResourceInitializationException(e); } return properties; } private Boolean getUseCompoundFormatOrDefault(Properties properties) { String useCompoundFileFormatAsString = properties.getProperty(USE_COMPOUND_FILE_FORMAT_PROPERTY); Boolean useCompoundFileFormat = true; if( useCompoundFileFormatAsString != null ) useCompoundFileFormat = new Boolean(useCompoundFileFormatAsString); return useCompoundFileFormat; } private String getIndexPath(Properties properties){ return properties.getProperty(INDEX_PATH_PROPERTY); } private synchronized int createRandom() { Random randomGenerator = new Random(); int randomInt = randomGenerator.nextInt(1000000); while (randomNumbers.contains(randomInt)) { randomInt = randomGenerator.nextInt(1000000); } randomNumbers.add(randomInt); return randomInt; } private String createUniqueIndexPath(String indexPath){ String uniqueIndexPath = indexPath + "-" + getHostName() + "-" + getPID() + "-" + createRandom(); return uniqueIndexPath; } private Boolean getUniqueIndexOrDefault(Properties properties) { String uniqueIndexAsString = properties.getProperty(UNIQUE_INDEX_PROPERTY); Boolean uniqueIndex = false; if( uniqueIndexAsString != null ) uniqueIndex = new Boolean(uniqueIndexAsString); return uniqueIndex; } private Double getRAMBufferSizeOrDefault(Properties properties) { String ramBufferSizeAsString = properties.getProperty(RAMBUFFER_SIZE_PROPERTY); Double ramBufferSize = IndexWriter.DEFAULT_RAM_BUFFER_SIZE_MB; if( ramBufferSizeAsString != null ) ramBufferSize = new Double(ramBufferSizeAsString); return ramBufferSize; } private MaxFieldLength getMaxFieldLengthOrDefault(Properties properties) { String maxFieldLengthAsString = properties.getProperty(MAX_FIELD_LENGTH_PROPERTY); if( maxFieldLengthAsString == null ) return IndexWriter.MaxFieldLength.UNLIMITED; else{ Integer maxFieldLength = new Integer(maxFieldLengthAsString); return new MaxFieldLength(maxFieldLength); } } private boolean getCreateIndexOrDefault(Properties properties) { String createIndexAsString = properties.getProperty(CREATE_INDEX_PROPERTY); if (createIndexAsString != null) { return Boolean.parseBoolean(createIndexAsString); } else { // Thats the default before this property was introduced return true; } } private void createIndexWriter(String indexPath, MaxFieldLength maxFieldLength, boolean create) throws ResourceInitializationException { try { indexWriter = new IndexWriter(indexPath, new StandardAnalyzer(), create, maxFieldLength); } catch (CorruptIndexException e) { throw new ResourceInitializationException(e); } catch (LockObtainFailedException e) { throw new ResourceInitializationException(e); } catch (IOException e) { throw new ResourceInitializationException(e); } } private void configureIndexWriter(Double ramBufferSize, Boolean useCompoundFileFormat) { indexWriter.setRAMBufferSizeMB(ramBufferSize); indexWriter.setUseCompoundFile(true); } private String getPID() { String id = ManagementFactory.getRuntimeMXBean().getName(); return id.substring(0, id.indexOf("@")); } private String getHostName() { InetAddress address; String hostName; try { address = InetAddress.getLocalHost(); hostName = address.getHostName(); } catch (UnknownHostException e) { throw new IllegalStateException(e); } return hostName; } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/AnnotationTokenStreamBuildingException.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/AnnotationTokenStreamBuildingExc0000644000175000017500000000233511625126534033365 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; public class AnnotationTokenStreamBuildingException extends Exception { public AnnotationTokenStreamBuildingException(String message){ super(message); } public AnnotationTokenStreamBuildingException(String message, Throwable cause){ super(message, cause); } public AnnotationTokenStreamBuildingException(Throwable cause){ super(cause); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/FieldBuildingException.java0000644000175000017500000000236511625126534032263 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; public class FieldBuildingException extends Exception { /** * */ private static final long serialVersionUID = 1L; public FieldBuildingException(String message) { super(message); } public FieldBuildingException(String message, Throwable cause) { super(message, cause); } public FieldBuildingException(Throwable cause) { super(cause); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/FilterBuilder.java0000644000175000017500000001601211625126534030431 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Map; import org.apache.log4j.Logger; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.TokenFilterFactory; import org.apache.uima.lucas.indexer.mapping.FilterDescription; import org.apache.uima.lucas.indexer.mapping.Locateable; public class FilterBuilder { public static final Logger LOGGER = Logger.getLogger(FilterBuilder.class); private Map cachedFactories; private Locateable currentLocateable; public FilterBuilder(Map predefinedFactories) { cachedFactories = predefinedFactories; } public TokenStream filter(TokenStream tokenStream, Collection filterDescriptions) throws FilterBuildingException { TokenStream filteredTokenStream = tokenStream; for (FilterDescription filterDescription : filterDescriptions) { String filterName = filterDescription.getName(); String factoryClassName = filterDescription.getFactoryClassName(); String className = filterDescription.getClassName(); currentLocateable = filterDescription; // use cached factory to create filter if (filterName != null && factoryClassName == null) { TokenFilterFactory tokenFilterFactory = cachedFactories.get(filterName); if (tokenFilterFactory == null) throw createException("No factory registered for " + filterName + ". Please provide a factory"); filteredTokenStream = createTokenFilter(filteredTokenStream, filterDescription, tokenFilterFactory); } // use single argument constructor of a token filter else if (className != null) { filteredTokenStream = createTokenFilterWithClassName(filteredTokenStream, className); } // use factory for creating the filter and cache it if needed else if (factoryClassName != null) { TokenFilterFactory tokenFilterFactory = createTokenFilterFactory(factoryClassName); filteredTokenStream = createTokenFilter(filteredTokenStream, filterDescription, tokenFilterFactory); if( filterDescription.isReuseFactory() ){ if( filterName == null ) throw createException("Provide a name for factory reuse "); cachedFactories.put(filterName, tokenFilterFactory); } } } return filteredTokenStream; } private TokenFilter createTokenFilter(TokenStream filteredTokenStream, FilterDescription filterDescription, TokenFilterFactory tokenFilterFactory) throws FilterBuildingException { try { return tokenFilterFactory.createTokenFilter(filteredTokenStream, filterDescription.getProperties()); } catch (IOException e) { throw createException("Can't build filter with description", e); } } private TokenFilterFactory createTokenFilterFactory(String factoryClassName) throws FilterBuildingException { try { Class clazz = Class.forName(factoryClassName); Constructor[] constructors = clazz.getConstructors(); for (Constructor constructor : constructors) { Class[] parameters = constructor.getParameterTypes(); if (parameters.length == 0) return (TokenFilterFactory) constructor.newInstance(); } } catch (ClassNotFoundException e) { throw createException("Can't instantiate TokenFilterFactory " + factoryClassName); } catch (IllegalArgumentException e) { throw createException("Can't instantiate TokenFilterFactory " + factoryClassName); } catch (InstantiationException e) { throw createException("Can't instantiate TokenFilterFactory " + factoryClassName); } catch (IllegalAccessException e) { throw createException("Can't instantiate TokenFilterFactory " + factoryClassName); } catch (InvocationTargetException e) { throw createException("Can't instantiate TokenFilterFactory " + factoryClassName); } throw new FilterBuildingException("Class " + factoryClassName + " has no public no argument constructor!"); } private TokenFilter createTokenFilterWithClassName(TokenStream tokenStream, String className) throws FilterBuildingException { try { Class clazz = Class.forName(className); Constructor[] constructors = clazz.getConstructors(); for (Constructor constructor : constructors) { Class[] parameters = constructor.getParameterTypes(); if (parameters.length == 1 && parameters[0].equals(TokenStream.class)) return (TokenFilter) constructor.newInstance(tokenStream); } } catch (ClassNotFoundException e) { throw new FilterBuildingException("Can't instantiate TokenFilter " + className, e); } catch (IllegalArgumentException e) { throw new FilterBuildingException("Can't instantiate TokenFilter " + className, e); } catch (InstantiationException e) { throw new FilterBuildingException("Can't instantiate TokenFilter " + className, e); } catch (IllegalAccessException e) { throw new FilterBuildingException("Can't instantiate TokenFilter " + className, e); } catch (InvocationTargetException e) { throw new FilterBuildingException("Can't instantiate TokenFilter " + className, e); } throw createException("Class " + className + " has no public single argument constructor!"); } private FilterBuildingException createException(String message, Throwable cause){ String extendedMessage = message + " at line " + currentLocateable.getLineNumber(); return new FilterBuildingException(extendedMessage, cause); } private FilterBuildingException createException(String message){ String extendedMessage = message + " at line " + currentLocateable.getLineNumber(); return new FilterBuildingException(extendedMessage); } Map getCachedFactories() { return cachedFactories; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/DocumentBuilder.java0000644000175000017500000000240411625126534030762 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import java.util.Collection; public class DocumentBuilder { public DocumentBuilder() { super(); } public Document createDocument(Collection fields) { Document document = new Document(); for (Field field : fields) { document.add(field); } return document; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/FieldBuilder.java0000644000175000017500000002267711625126534030245 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.document.Field.TermVector; import org.apache.uima.lucas.indexer.analysis.TokenStreamConcatenator; import org.apache.uima.lucas.indexer.analysis.TokenStreamMerger; import org.apache.uima.lucas.indexer.mapping.FieldDescription; import org.apache.uima.lucas.indexer.mapping.FilterDescription; import org.apache.uima.lucas.indexer.util.TokenStreamStringConcatenator; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; public class FieldBuilder { public static final String FIELD_INDEX_NO = "no"; public static final String FIELD_INDEX_YES = "yes"; public static final String FIELD_INDEX_NO_NORMS = "no_norms"; public static final String FIELD_INDEX_NO_TF = "no_tf"; public static final String FIELD_INDEX_NO_NORMS_TF = "no_norms_tf"; public static final String FIELD_TERM_VECTOR_NO = "no"; public static final String FIELD_TERM_VECTOR_YES = "yes"; public static final String FIELD_TERM_VECTOR_WITH_OFFSETS = "offsets"; public static final String FIELD_TERM_VECTOR_WITH_POSITIONS = "positions"; public static final String FIELD_TERM_VECTOR_WITH_POSITIONS_OFFSETS = "positions_offsets"; public static final String FIELD_STORE_NO = "no"; public static final String FIELD_STORE_YES = "yes"; public static final String FIELD_STORE_COMPRESS = "compress"; protected TokenStreamStringConcatenator tokenStreamStringConcatenator; private FilterBuilder filterBuilder; protected FieldDescription fieldDescription; public FieldBuilder(FilterBuilder filterBuilder) { tokenStreamStringConcatenator = new TokenStreamStringConcatenator(); this.filterBuilder = filterBuilder; } public Collection createFields(Collection tokenStreams, FieldDescription fieldDescription) throws FieldBuildingException { TokenStream tokenStream = createFieldTokenStream(tokenStreams, fieldDescription); this.fieldDescription = fieldDescription; String fieldName = fieldDescription.getName(); String delimiter = fieldDescription.getDelimiter(); Collection fields = new ArrayList(); Collection filterDescriptions = fieldDescription .getFilterDescriptions(); tokenStream = getFilteredTokenStream(fieldName, tokenStream, filterDescriptions); // The unique flag means we only want ONE field instance with the // name fieldName. Boolean unique = fieldDescription.getUnique(); Field.Store fieldStore = getFieldStore(fieldDescription.getStored()); Field.Index fieldIndex = getFieldIndex(fieldDescription.getIndex()); Field.TermVector fieldTermVector = getFieldTermVector(fieldDescription .getTermVector()); boolean omitTF = fieldDescription.getIndex().equals(FIELD_INDEX_NO_TF) || fieldDescription.getIndex().equals(FIELD_INDEX_NO_NORMS_TF); boolean store = fieldStore == Field.Store.YES || fieldStore == Field.Store.COMPRESS; // Created stored fields. The parameters unique, fieldIndex and omitTF // are only necessary in case of a stored and indexed unique field. Then, // the field is instanced stored and indexed, thus only one instance // of the field is necessary. This only works with TokenStreams which // contain exactly one token (if a TokenStream emits more tokens, // several fields will be instanced). if (store) fields.addAll(createStoredFields(fieldName, tokenStream, fieldStore, delimiter, unique, fieldIndex, omitTF)); // Create indexed fields. If the field is unique and has been stored, // there already is an instance of the field and we don't create another. if (fieldIndex != Field.Index.NO && (!unique || !store)) fields.add(createIndexedField(fieldName, tokenStream, fieldIndex, fieldTermVector, omitTF)); return fields; } protected TokenStream createFieldTokenStream( Collection tokenStreams, FieldDescription fieldDescription) throws FieldBuildingException { TokenStream tokenStream = null; if (fieldDescription.getMerge()) tokenStream = getTokenStreamMerger(tokenStreams); else if (tokenStreams.size() > 1) tokenStream = new TokenStreamConcatenator(tokenStreams); else if (tokenStreams.size() == 1) tokenStream = tokenStreams.iterator().next(); return tokenStream; } protected TokenStream getFilteredTokenStream(String fieldName, TokenStream tokenStream, Collection filterDescriptions) throws FieldBuildingException { try { return filterBuilder.filter(tokenStream, filterDescriptions); } catch (FilterBuildingException e) { throw createException(e); } } protected FieldBuildingException createException(Exception e) { String message = "Can't build field " + fieldDescription.getName() + " at line " + fieldDescription.getLineNumber(); return new FieldBuildingException(message, e); } private TokenStream getTokenStreamMerger( Collection tokenStreams) throws FieldBuildingException { try { return new TokenStreamMerger(tokenStreams); } catch (IOException e) { throw createException(e); } } protected Field createIndexedField(String fieldName, TokenStream tokenStream, Index fieldIndex, TermVector fieldTermVector, boolean omitTF) { Field field = new Field(fieldName, tokenStream, fieldTermVector); if (fieldIndex == Field.Index.NOT_ANALYZED_NO_NORMS) field.setOmitNorms(true); field.setOmitTermFreqAndPositions(omitTF); return field; } protected Collection createStoredFields(String fieldName, TokenStream tokenStream, Store fieldStore, String delimiter, Boolean unique, Index fieldIndex, Boolean omitTF) throws FieldBuildingException { Collection fields = new ArrayList(); // Only do indexing if we need a unique, indexed AND stored field. Index index = unique ? fieldIndex : Field.Index.NO; try { Field field; if (delimiter != null) { String value = tokenStreamStringConcatenator .tokenStreamToStringWithDelimiter(tokenStream, delimiter); field = new Field(fieldName, value, fieldStore, index); if (unique) field.setOmitTermFreqAndPositions(omitTF); fields.add(field); } else { Token nextToken = tokenStream.next(new Token()); while (nextToken != null) { String value = new String(nextToken.termBuffer(), 0, nextToken.termLength()); field = new Field(fieldName, value, fieldStore, index); if (unique) field.setOmitTermFreqAndPositions(omitTF); fields.add(field); nextToken = tokenStream.next(nextToken); } } tokenStream.reset(); } catch (IOException e) { throw createException(e); } return fields; } protected Field.Index getFieldIndex(String index) throws FieldBuildingException { if (index.equals(FIELD_INDEX_NO)) return Field.Index.NO; else if (index.equals(FIELD_INDEX_YES)) return Field.Index.NOT_ANALYZED; else if (index.equals(FIELD_INDEX_NO_NORMS)) return Field.Index.NOT_ANALYZED_NO_NORMS; else if (index.equals(FIELD_INDEX_NO_NORMS_TF)) return Field.Index.NOT_ANALYZED_NO_NORMS; else if (index.equals(FIELD_INDEX_NO_TF)) return Field.Index.NOT_ANALYZED; throw createException(new IllegalArgumentException( "unknown index parameter: " + index)); } protected Field.TermVector getFieldTermVector(String termVector) throws FieldBuildingException { if (termVector.equals(FIELD_TERM_VECTOR_NO)) return Field.TermVector.NO; else if (termVector.equals(FIELD_TERM_VECTOR_YES)) return Field.TermVector.YES; else if (termVector.equals(FIELD_TERM_VECTOR_WITH_OFFSETS)) return Field.TermVector.WITH_OFFSETS; else if (termVector.equals(FIELD_TERM_VECTOR_WITH_POSITIONS)) return Field.TermVector.WITH_POSITIONS; else if (termVector.equals(FIELD_TERM_VECTOR_WITH_POSITIONS_OFFSETS)) return Field.TermVector.WITH_POSITIONS_OFFSETS; throw createException(new IllegalArgumentException( "unknown termVector parameter: " + termVector)); } protected Field.Store getFieldStore(String store) throws FieldBuildingException { if (store.equals(FIELD_STORE_NO)) return Field.Store.NO; else if (store.equals(FIELD_STORE_YES)) return Field.Store.YES; else if (store.equals(FIELD_STORE_COMPRESS)) return Field.Store.COMPRESS; throw createException(new IllegalArgumentException( "unknown stored parameter: " + store)); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/0000755000175000017500000000000011625126534026465 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/FeatureMapper.java0000644000175000017500000000310411625126534032066 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import org.xml.sax.Attributes; public class FeatureMapper implements ElementMapper { private final String FEATURE_NAME = "name"; private final String FEATURE_NUMBER_FORMAT = "numberFormat"; public FeatureDescription mapElement(Attributes attributes) { FeatureDescription featureDescription = new FeatureDescription(); for (int i=0; i< attributes.getLength(); i++){ String name = attributes.getQName(i); String value = attributes.getValue(i); if (name.equals(FEATURE_NAME)) featureDescription.setFeatureName(value); else if (name.equals(FEATURE_NUMBER_FORMAT)) featureDescription.setNumberFormat(value); } return featureDescription; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/Locateable.java0000644000175000017500000000206311625126534031364 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; public interface Locateable { public void setLineNumber(int lineNumber); public int getLineNumber(); public void setColumnNumber(int columnNumber); public int getColumnNumber(); } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/MappingFileReader.java0000644000175000017500000001253111625126534032650 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Map; import javax.xml.parsers.SAXParser; import org.xml.sax.Attributes; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * Build Object out of the Index Mapping File (XML) */ public class MappingFileReader extends DefaultHandler { public final static String FIELD = "field"; // the tag name for field definitions public final static String FILTER = "filter"; // filter element name public final static String ANNOTATION = "annotation"; // the tag name for // annotation definitions public final static String FEATURE = "feature"; // the tag name for feature // definitions private Collection fieldDescriptions; private SAXParser parser; private FieldDescription currentFieldDescription; private AnnotationDescription currentAnnotationDescription; private Locator currentLocator; private Map> elementMappers; public MappingFileReader(SAXParser parser, Map> elementMappers) throws IOException { super(); fieldDescriptions = new ArrayList(); this.parser = parser; this.elementMappers = elementMappers; } public Collection readFieldDescriptionsFromFile( File mappingFile) throws IOException, SAXException { parseFile(mappingFile); return fieldDescriptions; } private void parseFile(File mappingFile) throws IOException, SAXException { // try { parser.parse(mappingFile, this); // } catch (SAXException e) { // throw new IOException(e); // } } @Override public void setDocumentLocator(Locator locator) { currentLocator = locator; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equals(FIELD)) addFieldDescription(attributes); else if (qName.equals(FILTER)) addFilterDescription(attributes); else if (qName.equals(ANNOTATION)) addAnnotationDescription(attributes); else if (qName.equals(FEATURE)) addFeatureDescription(attributes); } private void addFieldDescription(Attributes attributes) { ElementMapper elementMapper = (ElementMapper) elementMappers.get(FIELD); currentFieldDescription = elementMapper.mapElement(attributes); currentAnnotationDescription = null; mapLocator(currentFieldDescription); fieldDescriptions.add(currentFieldDescription); } private void addFilterDescription(Attributes attributes) { ElementMapper filterMapper = (ElementMapper) elementMappers.get(FILTER); FilterDescription filterDescription = filterMapper.mapElement(attributes); mapLocator(filterDescription); if (currentAnnotationDescription != null ){ Collection filterDescriptions = currentAnnotationDescription.getFilterDescriptions(); filterDescriptions.add(filterDescription); } else{ Collection filterDescriptions = currentFieldDescription.getFilterDescriptions(); filterDescriptions.add(filterDescription); } } private void addAnnotationDescription(Attributes attributes) { ElementMapper annotationMapper = (ElementMapper) elementMappers.get(ANNOTATION); currentAnnotationDescription = annotationMapper.mapElement(attributes); mapLocator(currentAnnotationDescription); Collection annotationDescriptions = currentFieldDescription.getAnnotationDescriptions(); annotationDescriptions.add(currentAnnotationDescription); } private void addFeatureDescription(Attributes attributes) { ElementMapper featureMapper = (ElementMapper) elementMappers.get(FEATURE); FeatureDescription featureDescription = featureMapper.mapElement(attributes); mapLocator(featureDescription); Collection featureDescriptions = currentAnnotationDescription.getFeatureDescriptions(); featureDescriptions.add(featureDescription); } private void mapLocator(Locateable locateable) { if (currentLocator!=null){ int lineNumber = currentLocator.getLineNumber(); locateable.setLineNumber(lineNumber); int columnNumber = currentLocator.getColumnNumber(); locateable.setColumnNumber(columnNumber); } } }uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/FilterDescription.java0000644000175000017500000000511511625126534032763 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import java.util.Properties; public class FilterDescription implements Locateable{ private String className; private Properties properties; private String factoryClassName; private String name; private boolean reuseFactory; private int line; private int column; public FilterDescription() { properties = new Properties(); } public FilterDescription(String className, String factoryClassName, String factoryId, boolean reuseFactory, Properties properties) { super(); this.className = className; this.factoryClassName = factoryClassName; this.name = factoryId; this.reuseFactory = reuseFactory; this.properties = properties; } public String getClassName() { return className; } public Properties getProperties() { return properties; } public String getFactoryClassName() { return factoryClassName; } public String getName() { return name; } public boolean isReuseFactory() { return reuseFactory; } protected void setClassName(String className) { this.className = className; } protected void setProperties(Properties properties) { this.properties = properties; } protected void setFactoryClassName(String factoryClassName) { this.factoryClassName = factoryClassName; } protected void setName(String name) { this.name = name; } protected void setReuseFactory(boolean reuseFactory) { this.reuseFactory = reuseFactory; } public int getColumnNumber() { return column; } public int getLineNumber() { return line; } public void setColumnNumber(int columnNumber) { this.column = columnNumber; } public void setLineNumber(int lineNumber) { this.line = lineNumber; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/FieldDescription.java0000644000175000017500000000700111625126534032555 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import java.util.ArrayList; import java.util.Collection; /** * Instances of this class represent field descriptions in the mapping file. */ public class FieldDescription implements Locateable{ private String name; private String index = "no"; // limited to no, no_norms, no_tf, no_norms_tf, // and yes private String stored = "no"; private String delimiter; private Boolean merge = false; private String termVector = "no";// limited to no, offsets, positions, // positions_offset and yes private Boolean unique = false; private Collection annotationDescriptions; private Collection filterDescriptions; private int line; private int column; public FieldDescription(String name) { this(); this.name = name; } public FieldDescription() { annotationDescriptions = new ArrayList(); filterDescriptions = new ArrayList(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Collection getAnnotationDescriptions() { return annotationDescriptions; } public void setAnnotationDescriptions( Collection annotationDefinitionAL) { this.annotationDescriptions = annotationDefinitionAL; } public String getIndex() { return index; } public void setIndex(String index) { this.index = index; } public Boolean getMerge() { return merge; } public void setMerge(Boolean merge) { this.merge = merge; } public String getTermVector() { return termVector; } public void setTermVector(String termVector) { this.termVector = termVector; } public String getStored() { return stored; } public void setStored(String stored) { this.stored = stored; } public String getDelimiter() { return delimiter; } public void setDelimiter(String delimiter) { this.delimiter = delimiter; } public Collection getFilterDescriptions() { return filterDescriptions; } public void setFilterDescriptions( Collection filterDescriptions) { this.filterDescriptions = filterDescriptions; } public int getColumnNumber() { return column; } public int getLineNumber() { return line; } public void setColumnNumber(int columnNumber) { column = columnNumber; } public void setLineNumber(int lineNumber) { line = lineNumber; } public Boolean getUnique() { return unique; } public void setUnique(Boolean unique) { this.unique = unique; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/ElementMapper.java0000644000175000017500000000174311625126534032073 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import org.xml.sax.Attributes; public interface ElementMapper { T mapElement(Attributes attributes); } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/FilterMapper.java0000644000175000017500000000470711625126534031732 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import java.util.Properties; import org.xml.sax.Attributes; public class FilterMapper implements ElementMapper { private static final String TRUE = "true"; private final String FILTER_CLASS_NAME = "className"; // filter attribute // for class name of // a // {@link // org.apache.lucene.analysis.TokenFilter} private final String FILTER_FACTORY_CLASS_NAME = "factoryClassName"; // filter // attribute // for // factory class name of a // {@link // org.apache.lucene.analysis.TokenFilter} private final String FILTER_NAME = "name"; // filter attribute for factory // id, needed // for factory reuse private final String FILTER_REUSE_FACTORY = "reuseFactory"; // filter // attribute for // factory id, public FilterDescription mapElement(Attributes attributes) { FilterDescription filterDescription = new FilterDescription(); for (int i = 0; i < attributes.getLength(); i++) { String name = attributes.getQName(i); String value = attributes.getValue(i); if (name.equals(FILTER_NAME)) filterDescription.setName(value); else if (name.equals(FILTER_CLASS_NAME)) filterDescription.setClassName(value); else if (name.equals(FILTER_FACTORY_CLASS_NAME)) filterDescription.setFactoryClassName(value); else if (name.equals(FILTER_REUSE_FACTORY)) { if (value != null && value.equals(TRUE)) filterDescription.setReuseFactory(true); } else { Properties properties = filterDescription.getProperties(); properties.setProperty(name, value); } } return filterDescription; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/FieldMapper.java0000644000175000017500000000517611625126534031531 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import org.xml.sax.Attributes; public class FieldMapper implements ElementMapper { private static final String TRUE = "true"; private final String FIELD_NAME = "name"; // defines the name of the field private final String FIELD_INDEX = "index"; // defines if the field should // be tokenized or not private final String FIELD_TERM_VECTOR = "termVector"; private final String FIELD_STORED = "stored"; // yes if the field should be // stored (returnable); // no: false private final String FIELD_DELIMITER = "delimiter"; // use special // characters to limit // the tokens private final String FIELD_UNIQUE = "unique"; // and build one string private final String FIELD_MERGE = "merge"; // use the tokenstream merger public FieldDescription mapElement(Attributes attributes) { FieldDescription fieldDescription = new FieldDescription(); for (int i=0; i< attributes.getLength(); i++){ String name = attributes.getQName(i); String value = attributes.getValue(i); if (name.equals(FIELD_INDEX)) fieldDescription.setIndex(value); else if (name.equals(FIELD_MERGE)) { if (value != null && value.equals(TRUE)) fieldDescription.setMerge(true); } else if (name.equals(FIELD_DELIMITER)) fieldDescription.setDelimiter(value); else if (name.equals(FIELD_NAME)) fieldDescription.setName(value); else if (name.equals(FIELD_STORED)) fieldDescription.setStored(value); else if (name.equals(FIELD_TERM_VECTOR)) fieldDescription.setTermVector(value); else if (name.equals(FIELD_UNIQUE)) { if (value != null && value.equals(TRUE)) fieldDescription.setUnique(true); } } return fieldDescription; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/FeatureDescription.java0000644000175000017500000000351711625126534033135 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; /** * Instances of this class represent feature descriptions in the mapping file. */ public class FeatureDescription implements Locateable{ private String featureName; private String numberFormat; private int line; private int column; public FeatureDescription(String featureName) { super(); this.featureName = featureName; } public FeatureDescription() { } public String getFeatureName() { return featureName; } public void setFeatureName(String featureName) { this.featureName = featureName; } public String getNumberFormat() { return numberFormat; } public void setNumberFormat(String numberFormat) { this.numberFormat = numberFormat; } public int getColumnNumber() { return column; } public int getLineNumber() { return line; } public void setColumnNumber(int columnNumber) { column = columnNumber; } public void setLineNumber(int lineNumber) { line = lineNumber; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/AnnotationMapper.java0000644000175000017500000000462611625126534032617 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import org.xml.sax.Attributes; public class AnnotationMapper implements ElementMapper { private final String ANNOTATION_TYPE = "type"; // defines the CAS annotation // type to be indexed private final String ANNOTATION_VALUE_DELIMITER_STRING = "featureValueDelimiterString"; // use // special // characters // to // concatenate the feature values // the feature values private final String ANNOTATION_FEATURE_PATH = "featurePath"; // path to the // featurestructure // which contains the features private final String ANNOTATION_SOFA = "sofa"; // source sofa of annotations private final String ANNOTATION_TOKENIZER = "tokenizer"; // defines the // tokenizer to // be used public AnnotationDescription mapElement(Attributes attributes) { AnnotationDescription annotationDescription = new AnnotationDescription(); for (int i = 0; i < attributes.getLength(); i++) { String name = attributes.getQName(i); String value = attributes.getValue(i); if (name.equals(ANNOTATION_SOFA)) annotationDescription.setSofa(value); else if (name.equals(ANNOTATION_TYPE)) annotationDescription.setType(value); else if (name.equals(ANNOTATION_TOKENIZER)) annotationDescription.setTokenizer(value); else if (name.equals(ANNOTATION_FEATURE_PATH)) annotationDescription.setFeaturePath(value); else if (name.equals(ANNOTATION_VALUE_DELIMITER_STRING)) annotationDescription.setFeatureValueDelimiterString(value); } return annotationDescription; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/AnnotationDescription.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/mapping/AnnotationDescription.ja0000644000175000017500000001315111625126534033320 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import java.util.ArrayList; import java.util.Collection; /** * Instances of this class represent annotation descriptions in the mapping * file. */ public class AnnotationDescription implements Locateable { private String type; private String featureValueDelimiterString = null; private String featurePath; private String position; private Boolean lowercase = false; private Boolean uppercase = false; private Boolean stopwordRemove = false; private Boolean addHypernyms = false; private Boolean unique = false; private String mappingFile; private String prefix; private String postfix; private String tokenizer; private Collection featureDescriptions; private Collection filterDescriptions; private String snowballFilter; private String sofa; public final static String FIRST_POSITION = "first"; public final static String LAST_POSITION = "last"; private int line; private int column; public AnnotationDescription(String type) { this(); this.type = type; } public AnnotationDescription() { featureDescriptions = new ArrayList(); filterDescriptions = new ArrayList(); } public String getType() { return type; } public void setType(String type) { this.type = type; } public Collection getFeatureDescriptions() { return featureDescriptions; } public void setFeatureDescriptions( Collection featureDefinitionAL) { this.featureDescriptions = featureDefinitionAL; } public String getFeatureValueDelimiterString() { return featureValueDelimiterString; } public void setFeatureValueDelimiterString(String concatString) { this.featureValueDelimiterString = concatString; } public Boolean getLowercase() { return lowercase; } public void setLowercase(Boolean lowercase) { this.lowercase = lowercase; } public Boolean getStopwordRemove() { return stopwordRemove; } public void setStopwordRemove(Boolean stopwordRemove) { this.stopwordRemove = stopwordRemove; } public String getSnowballFilter() { return snowballFilter; } public void setSnowballFilter(String snowballFilter) { this.snowballFilter = snowballFilter; } public Boolean getAddHypernyms() { return addHypernyms; } public void setAddHypernyms(Boolean addHypernyms) { this.addHypernyms = addHypernyms; } public String getFeaturePath() { return featurePath; } public void setFeaturePath(String featurePath) { this.featurePath = featurePath; } public String getSofa() { return sofa; } public void setSofa(String sofa) { this.sofa = sofa; } @Override public String toString() { String string = "{"; string += "type: " + type + "; "; string += "concatString: " + featureValueDelimiterString + "; "; string += "featurePath: " + featurePath + "; "; string += "lowercase: " + lowercase + "; "; string += "stopwordRemove: " + stopwordRemove + "; "; string += "addHypernyms: " + addHypernyms + "; "; string += "featureDescriptions" + featureDescriptions + "; "; string += "snowballFilter: " + snowballFilter + "; "; string += "sofa: " + sofa + "; "; string += "}"; return string; } public Boolean getUppercase() { return uppercase; } public void setUppercase(Boolean uppercase) { this.uppercase = uppercase; } public String getMappingFile() { return mappingFile; } public void setMappingFile(String mappingFile) { this.mappingFile = mappingFile; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public String getPrefix() { return prefix; } public void setPrefix(String prefix) { this.prefix = prefix; } public String getPostfix() { return postfix; } public void setPostfix(String postfix) { this.postfix = postfix; } public Boolean getUnique() { return unique; } public void setUnique(Boolean unique) { this.unique = unique; } public String getTokenizer() { return tokenizer; } public void setTokenizer(String tokenizer) { this.tokenizer = tokenizer; } public Collection getFilterDescriptions() { return filterDescriptions; } public void setFilterDescriptions( Collection filterDescriptions) { this.filterDescriptions = filterDescriptions; } public int getColumnNumber() { return column; } public int getLineNumber() { return line; } public void setColumnNumber(int columnNumber) { column = columnNumber; } public void setLineNumber(int lineNumber) { line = lineNumber; } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/0000755000175000017500000000000011625126534026007 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/TokenStreamStringConcatenator.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/TokenStreamStringConcatenat0000644000175000017500000000360411625126534033360 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import java.io.IOException; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; public class TokenStreamStringConcatenator { /** * builds a string from the tokens that can be found in tokenStream and delimites the tokens with * a given delimiter * * @param ts * @return a sting made of tokens * @throws IOException */ public String tokenStreamToStringWithDelimiter(TokenStream ts, String delimiter) throws IOException { String tokenString = ""; Token newToken = new Token(); while (true) { Token token = ts.next(newToken); if (token != null) { tokenString = tokenString.concat(new String(token.termBuffer(), 0, token.termLength())) .concat(delimiter); } else { int lastIndex = tokenString.lastIndexOf(delimiter); if (lastIndex >= 0) { tokenString = tokenString.substring(0, lastIndex); } break; } } return tokenString; } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/MultimapFileReaderFactory.javauima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/MultimapFileReaderFactory.j0000644000175000017500000000237711625126534033236 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class MultimapFileReaderFactory { public MultimapFileReader createMultimapFileReader(String filePath) throws IOException{ FileReader fileReader = new FileReader(filePath); BufferedReader bufferedReader = new BufferedReader(fileReader); return new MultimapFileReader(bufferedReader); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/PlainFileReader.java0000644000175000017500000000336411625126534031646 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.List; public class PlainFileReader extends Reader { private BufferedReader reader; public PlainFileReader(BufferedReader reader) { super(); this.reader = reader; } public String[] readLines() throws IOException { List lines = new ArrayList(); String line = reader.readLine(); while (line != null) { lines.add(line.trim()); line = reader.readLine(); } String[] stopwords = new String[lines.size()]; lines.toArray(stopwords); return stopwords; } @Override public void close() throws IOException { reader.close(); } @Override public int read(char[] cbuf, int off, int len) throws IOException { return reader.read(cbuf, off, len); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/PlainFileReaderFactory.java0000644000175000017500000000236411625126534033175 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class PlainFileReaderFactory { public PlainFileReader createPlainFileReader(String filePath) throws IOException{ FileReader fileReader = new FileReader(filePath); BufferedReader bufferedReader = new BufferedReader(fileReader); return new PlainFileReader(bufferedReader); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/MultimapFileReader.java0000644000175000017500000000401711625126534032367 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MultimapFileReader extends Reader { private BufferedReader reader; public MultimapFileReader(BufferedReader reader) { super(); this.reader = reader; } public Map> readMultimap() throws IOException { Map> multimap = new HashMap>(); String line = reader.readLine(); while (line != null) { String[] keyValue = line.split("="); String term = keyValue[0]; String[] values = keyValue[1].split("\\|"); List valueList = new ArrayList(); for (String hypernym : values) valueList.add(hypernym); multimap.put(term, valueList); line = reader.readLine(); } return multimap; } @Override public void close() throws IOException { reader.close(); } @Override public int read(char[] cbuf, int off, int len) throws IOException { return reader.read(cbuf, off, len); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/MapFileReader.java0000644000175000017500000000344111625126534031314 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.util.HashMap; import java.util.Map; public class MapFileReader extends Reader { private BufferedReader reader; public MapFileReader(BufferedReader reader) { super(); this.reader = reader; } public Map readMap() throws IOException { Map mapping = new HashMap(); String line = reader.readLine(); while (line != null) { String[] keyValue = line.split("="); String key = keyValue[0]; String value = keyValue[1]; mapping.put(key, value); line = reader.readLine(); } return mapping; } @Override public void close() throws IOException { reader.close(); } @Override public int read(char[] cbuf, int off, int len) throws IOException { return reader.read(cbuf, off, len); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/indexer/util/MapFileReaderFactory.java0000644000175000017500000000235511625126534032647 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class MapFileReaderFactory { public MapFileReader createMapFileReader(String filePath) throws IOException{ FileReader fileReader = new FileReader(filePath); BufferedReader bufferedReader = new BufferedReader(fileReader); return new MapFileReader(bufferedReader); } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/ProspectiveSearchAE.java0000644000175000017500000001751311625126534030105 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.document.Field; import org.apache.lucene.index.memory.MemoryIndex; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.TextFragment; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.*; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import java.io.IOException; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * The ProspectiveSearchAE monitors if one of the defined * search queries occurs in the processed document, for each matching * search query a FS is inserted into the CAS. *

* Optionally the matched text can be marked by a set of annotations, the most * common use case for this is search term highlighting. *

* The defined search queries are provided by a user implemented * {@link SearchQueryProvider}, which could for example retrieve * the search queries from a database or a web service. *

* The implementation first indexes the document and then searches all defined * queries against this one document index, for indexing the Lucene {@link MemoryIndex} * is used. Notes about the runtime performance can be found in the javadoc of the * MemoryIndex class. * * @see SearchQueryProvider * @see SearchQuery * @see MemoryIndex */ public class ProspectiveSearchAE extends LuceneDocumentAE { private SearchQueryProvider searchQueryProvider; /** * The search result type. For each matching query one search result feature * structure will be inserted into the CAS. *

* The FS must have one long feature to identify the matching query. *

* Optionally the FS has an array feature which contains annotations which * mark the matching text of the query in the document to enable hit * highlighting. */ private Type searchResultType; /** * The id feature of the search result type. */ private Feature searchResultIdFeature; /** * The array feature which contains annotations which mark the matching * text. */ private Feature searchResultMatchingTextFeature; /** * The type used to mark the matching text. */ private Type matchingTextType; private float matchingThreshold = 0.0f; @Override public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); try { searchQueryProvider = (SearchQueryProvider) aContext .getResourceObject("searchQueryProvider"); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } } @Override public void typeSystemInit(TypeSystem aTypeSystem) throws AnalysisEngineProcessException { super.typeSystemInit(aTypeSystem); String searchResultTypeString = (String) getContext().getConfigParameterValue( "org.apache.uima.lucas.SearchResultType"); searchResultType = aTypeSystem.getType(searchResultTypeString); String searchResultIdFeatureString = (String) getContext().getConfigParameterValue( "org.apache.uima.lucas.SearchResultIdFeature"); searchResultIdFeature = searchResultType.getFeatureByBaseName(searchResultIdFeatureString); String searchResultMatchingTextFeatureString = (String) getContext().getConfigParameterValue( "org.apache.uima.lucas.SearchResulMatchingTextFeature"); if (searchResultMatchingTextFeatureString != null) { searchResultMatchingTextFeature = searchResultType.getFeatureByBaseName(searchResultMatchingTextFeatureString); String matchingTextTypeString = (String) getContext().getConfigParameterValue( "org.apache.uima.lucas.MatchingTextType"); if (matchingTextTypeString != null) { matchingTextType = aTypeSystem.getType(matchingTextTypeString); } else { matchingTextType = aTypeSystem.getType(CAS.TYPE_NAME_ANNOTATION); } } } @Override public void process(CAS aCAS) throws AnalysisEngineProcessException { // First create the index of the document text MemoryIndex index = new MemoryIndex(); List fields = createDocument(aCAS).getFields(); for (Iterator it = fields.iterator(); it.hasNext(); ) { Field field = (Field) it.next(); if (field.isIndexed() && field.tokenStreamValue() != null) { index.addField(field.name(), field.tokenStreamValue()); } } // Search all queries against the one document index for (SearchQuery query : searchQueryProvider.getSearchQueries(aCAS)) { float score = index.search(query.query()); if (score > matchingThreshold) { // Add a FS to the CAS with the search result FeatureStructure searchResult = aCAS.createFS(searchResultType); searchResult.setLongValue(searchResultIdFeature, query.id()); aCAS.addFsToIndexes(searchResult); // Find matching tokens and link their annotations // in case the user wants search term highlighting if (searchResultMatchingTextFeature != null) { fields = createDocument(aCAS).getFields(); for (Iterator it = fields.iterator(); it.hasNext(); ) { Field field = (Field) it.next(); if (field.isIndexed() && field.tokenStreamValue() != null) { TokenStream tokenStream = field.tokenStreamValue(); Collection matchingTextAnnotations = new LinkedList(); QueryScorer scorer = new QueryScorer(query.query(), field.name()); scorer.startFragment(new TextFragment( new StringBuffer(aCAS.getDocumentText()), 0, 0)); try { scorer.init(tokenStream); OffsetAttribute offsetAttr = null; while (tokenStream.incrementToken()) { offsetAttr = (OffsetAttribute)tokenStream.getAttribute(OffsetAttribute.class); float tokenScore = scorer.getTokenScore(); if (tokenScore > 0) { AnnotationFS annotation = aCAS.createAnnotation(matchingTextType, offsetAttr.startOffset(), offsetAttr.endOffset()); matchingTextAnnotations.add(annotation); } } } catch (IOException e) { throw new AnalysisEngineProcessException(e); } ArrayFS matchtingTextArray = aCAS.createArrayFS(matchingTextAnnotations.size()); int matchtingTextArrayIndex = 0; for (AnnotationFS matchingTextAnnotation: matchingTextAnnotations) { matchtingTextArray.set(matchtingTextArrayIndex++, matchingTextAnnotation); } searchResult.setFeatureValue(searchResultMatchingTextFeature, matchtingTextArray); } } } } } } } uima-addons-2.3.1/Lucas/src/main/java/org/apache/uima/lucas/LuceneDocumentAE.java0000644000175000017500000001774111625126534027371 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas; import org.apache.log4j.Logger; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASException; import org.apache.uima.jcas.JCas; import org.apache.uima.lucas.indexer.*; import org.apache.uima.lucas.indexer.analysis.DefaultFilterFactoryRegistry; import org.apache.uima.lucas.indexer.analysis.TokenFilterFactory; import org.apache.uima.lucas.indexer.mapping.*; import org.apache.uima.resource.ResourceInitializationException; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; /** * Abstract base class for AEs which need to process Lucene {@link Document} * objects. */ public abstract class LuceneDocumentAE extends CasAnnotator_ImplBase { private static final Logger log = Logger .getLogger(LuceneDocumentAE.class); public final static String PARAM_MAPPINGFILE = "mappingFile"; protected Collection fieldDescriptions; private DocumentBuilder documentBuilder; protected FieldBuilder fieldBuilder; protected FilterBuilder filterBuilder; protected AnnotationTokenStreamBuilder annotationTokenStreamBuilder; protected Tokenizer tokenizer; private Map defaultFilterFactoryRegistry; /** * initializes the analyzer */ @Override public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); createFieldDescriptions(); createFilterBuilderWithPreloadedResources(); annotationTokenStreamBuilder = new AnnotationTokenStreamBuilder(); tokenizer = new Tokenizer(); fieldBuilder = new FieldBuilder(filterBuilder); documentBuilder = new DocumentBuilder(); } private void createFieldDescriptions() throws ResourceInitializationException { String mappingFilePath = (String) getContext().getConfigParameterValue(PARAM_MAPPINGFILE); try { MappingFileReader indexMappingFileReader = createMappingFileReader(); File mappingFile = new File(mappingFilePath); fieldDescriptions = indexMappingFileReader .readFieldDescriptionsFromFile(mappingFile); } catch (IOException e) { throw new ResourceInitializationException(e); } catch (SAXException e) { throw new ResourceInitializationException(e); } } private MappingFileReader createMappingFileReader() throws IOException{ try { SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); Map> elementMappers = new HashMap>(); elementMappers.put(MappingFileReader.ANNOTATION, new AnnotationMapper()); elementMappers.put(MappingFileReader.FILTER, new FilterMapper()); elementMappers.put(MappingFileReader.FIELD, new FieldMapper()); elementMappers.put(MappingFileReader.FEATURE, new FeatureMapper()); return new MappingFileReader(parser, elementMappers); } catch (ParserConfigurationException e) { throw new IOException("Can't build SAXParser: " + e.getMessage()); } catch (SAXException e) { throw new IOException("Can't build SAXParser: " + e.getMessage()); } } private void createFilterBuilderWithPreloadedResources() throws ResourceInitializationException { defaultFilterFactoryRegistry = new DefaultFilterFactoryRegistry() .getDefaultRegistry(); try { preloadResources(fieldDescriptions, defaultFilterFactoryRegistry); } catch (IOException e) { throw new ResourceInitializationException(e); } filterBuilder = new FilterBuilder(defaultFilterFactoryRegistry); } protected void preloadResources(Collection fieldDescriptions, Map defaultFilterFactoryRegistry) throws IOException { for (FieldDescription fieldDescription : fieldDescriptions) { for (FilterDescription filterDescription : fieldDescription .getFilterDescriptions()) { TokenFilterFactory tokenFilterFactory = defaultFilterFactoryRegistry .get(filterDescription.getName()); if (tokenFilterFactory != null) tokenFilterFactory.preloadResources(filterDescription .getProperties()); } for (AnnotationDescription annotationDescription : fieldDescription .getAnnotationDescriptions()) { for (FilterDescription filterDescription : annotationDescription .getFilterDescriptions()) { TokenFilterFactory tokenFilterFactory = defaultFilterFactoryRegistry .get(filterDescription.getName()); if (tokenFilterFactory != null) tokenFilterFactory.preloadResources(filterDescription .getProperties()); } } } } public Document createDocument(CAS cas) throws AnalysisEngineProcessException { try { JCas jCas = cas.getJCas(); Collection fields = new ArrayList(); // iterate over field descriptions from mapping file for (FieldDescription fieldDescription : fieldDescriptions) { Collection tokenStreams = new ArrayList(); // iterate over annotation descriptions for (AnnotationDescription annotationDescription : fieldDescription .getAnnotationDescriptions()) { // create annotation token stream TokenStream tokenStream = annotationTokenStreamBuilder .createAnnotationTokenStream(jCas, annotationDescription); // needs (re)tokenization ? if (tokenizer.needsTokenization(annotationDescription)) tokenStream = tokenizer.tokenize(tokenStream, annotationDescription); // wrap with filters tokenStream = filterBuilder.filter(tokenStream, annotationDescription.getFilterDescriptions()); tokenStreams.add(tokenStream); } // create fields fields.addAll(fieldBuilder.createFields(tokenStreams, fieldDescription)); } // create document and add to index Document document = documentBuilder.createDocument(fields); return document; } catch (AnnotationTokenStreamBuildingException e) { log.error("processCas(CAS)", e); throw new AnalysisEngineProcessException(e); } catch (IOException e) { log.error("processCas(CAS)", e); throw new AnalysisEngineProcessException(e); } catch (FieldBuildingException e) { log.error("processCas(CAS)", e); throw new AnalysisEngineProcessException(e); } catch (FilterBuildingException e) { log.error("processCas(CAS)", e); throw new AnalysisEngineProcessException(e); } catch (CASException e) { log.error("processCas(CAS)", e); throw new AnalysisEngineProcessException(e); } } FilterBuilder getFilterBuilder() { return filterBuilder; } Collection getFieldDescriptions() { return fieldDescriptions; } } uima-addons-2.3.1/Lucas/src/test/0000755000175000017500000000000011625126526016435 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/resources/0000755000175000017500000000000011625127254020446 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/resources/LuceneCASIndexer.xml0000644000175000017500000000631411625126526024256 0ustar drazzibdrazzib true org.apache.uima.java org.apache.uima.lucas.consumer.TestableLuceneCASIndexer LuceneCASIndexer 0.6 apache mappingFile path to the mapping file String false true mappingFile src/test/resources/lucas.xml false true false LucasIndexWriterProvider Provides a index writer instance. file:src/test/resources/IndexWriter.properties org.apache.uima.lucas.indexer.IndexWriterProviderImpl indexWriterProvider LucasIndexWriterProvider uima-addons-2.3.1/Lucas/src/test/resources/MappingFileReaderTest.xml0000644000175000017500000000331511625126526025351 0ustar drazzibdrazzib uima-addons-2.3.1/Lucas/src/test/resources/tokenMapping.txt0000644000175000017500000000002611625126526023642 0ustar drazzibdrazzibtoken1=id1 token2=id2uima-addons-2.3.1/Lucas/src/test/resources/lucas.xsd0000644000175000017500000001154711625126526022306 0ustar drazzibdrazzib uima-addons-2.3.1/Lucas/src/test/resources/stopwords.txt0000644000175000017500000000001311625126526023246 0ustar drazzibdrazzibna und nuuima-addons-2.3.1/Lucas/src/test/resources/IndexWriter.properties0000644000175000017500000000171511625126526025035 0ustar drazzibdrazzib# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # only for testing purposes ! indexPath = src/test/resources/test-index RAMBufferSize = 513 useCompoundFileFormat = false maxFieldLength = 9999 uniqueIndex = trueuima-addons-2.3.1/Lucas/src/test/resources/AnnotationTokenStreamTestTypeSystem.xml0000644000175000017500000001126011625126526030367 0ustar drazzibdrazzib TestTypeSystem Type System Definition for the tutorial examples - as of Exercise 1 1.0 The Apache Software Foundation org.apache.uima.lucas.indexer.types.test.Annotation1 uima.tcas.Annotation featureString uima.cas.String featureStringArray uima.cas.StringArray featureInteger uima.cas.Integer featureFloat uima.cas.Float featureStructure1 org.apache.uima.lucas.indexer.types.test.FeatureStructure1 featureStructures1 uima.cas.FSArray org.apache.uima.lucas.indexer.types.test.FeatureStructure1 true org.apache.uima.lucas.indexer.types.test.FeatureStructure1 uima.cas.TOP feature1 uima.cas.String feature2 uima.cas.String feature3 org.apache.uima.lucas.indexer.types.test.FeatureStructure2 featureStructures2 uima.cas.FSArray org.apache.uima.lucas.indexer.types.test.FeatureStructure2 true org.apache.uima.lucas.indexer.types.test.FeatureStructure2 uima.cas.TOP feature1 uima.cas.String feature2 uima.cas.String feature3 uima.cas.StringArray true uima-addons-2.3.1/Lucas/src/test/resources/AnnotationTokenStreamTestDummyCollectionReader.xml0000644000175000017500000000460411625126526032477 0ustar drazzibdrazzib org.apache.uima.java org.apache.uima.lucas.indexer.test.util.MockCollectionReader MockCollectionReader Descriptor Mock collection reader. Does nothing 1.0 The Apache Software Foundation InputDirectory Directory containing input files String false true InputDirectory C:/Program Files/apache-uima/examples/data true false true uima-addons-2.3.1/Lucas/src/test/resources/lucas.xml0000644000175000017500000000325311625126526022303 0ustar drazzibdrazzib uima-addons-2.3.1/Lucas/src/test/resources/prospectiveSearchTest.xml0000644000175000017500000000240611625126526025524 0ustar drazzibdrazzib uima-addons-2.3.1/Lucas/src/test/resources/ProspectiveSearchAEDescriptor.xml0000644000175000017500000001241111625126526027066 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.lucas.ProspectiveSearchAE ProspectiveSearchAE 0.6 apache mappingFile path to the mapping file String false true org.apache.uima.lucas.SearchResultType String false true org.apache.uima.lucas.SearchResultIdFeature String false true org.apache.uima.lucas.SearchResulMatchingTextFeature String false false org.apache.uima.lucas.MatchingTextType String false false mappingFile src/test/resources/prospectiveSearchTest.xml org.apache.uima.lucas.SearchResultType org.apache.uima.lucas.SearchResult org.apache.uima.lucas.SearchResultIdFeature id org.apache.uima.lucas.SearchResulMatchingTextFeature matchingText org.apache.uima.lucas.indexer.types.test.Annotation1 uima.tcas.Annotation featureString uima.cas.String org.apache.uima.lucas.SearchResult uima.cas.TOP id uima.cas.Long matchingText uima.cas.FSArray true true false searchQueryProvider org.apache.uima.lucas.SearchQueryProvider SampleSearchQueryProvider org.apache.uima.lucas.SampleSearchQueryProvider searchQueryProvider SampleSearchQueryProvider uima-addons-2.3.1/Lucas/src/test/resources/hypernyms.txt0000644000175000017500000000005411625126526023245 0ustar drazzibdrazzibid1=id1111|id111|id11 id2=id2222|id222|id22uima-addons-2.3.1/Lucas/src/test/java/0000755000175000017500000000000011625126522017352 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/0000755000175000017500000000000011625126522020141 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/0000755000175000017500000000000011625126522021362 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/0000755000175000017500000000000011625126522022315 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/0000755000175000017500000000000011625126526023430 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/consumer/0000755000175000017500000000000011625126522025257 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/consumer/TestableLuceneCASIndexer.java0000644000175000017500000000353011625126522032670 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.consumer; import java.io.IOException; import java.util.Collection; import java.util.Map; import org.apache.lucene.index.IndexWriter; import org.apache.uima.lucas.indexer.FilterBuilder; import org.apache.uima.lucas.indexer.analysis.TokenFilterFactory; import org.apache.uima.lucas.indexer.mapping.FieldDescription; public class TestableLuceneCASIndexer extends LuceneCASIndexer { static TestableLuceneCASIndexer instance; public TestableLuceneCASIndexer() { instance = this; } FilterBuilder getFilterBuilder() { return filterBuilder; } Collection getFieldDescriptions() { return fieldDescriptions; } IndexWriter getIndexWriter() { return indexWriter; } public void preloadResources(Collection fieldDescriptions, Map defaultFilterFactoryRegistry) throws IOException { super.preloadResources(fieldDescriptions, defaultFilterFactoryRegistry); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/consumer/LuceneCASIndexerTest.java0000644000175000017500000001355211625126522032051 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.consumer; import static org.easymock.EasyMock.capture; import static org.easymock.classextension.EasyMock.createMock; import static org.easymock.classextension.EasyMock.replay; import static org.easymock.classextension.EasyMock.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.Properties; import org.apache.lucene.store.FSDirectory; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.lucas.indexer.analysis.TokenFilterFactory; import org.apache.uima.lucas.indexer.mapping.FieldDescription; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.XMLInputSource; import org.easymock.Capture; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.google.common.collect.ImmutableBiMap; public class LuceneCASIndexerTest { private static final String pathSep = System.getProperty("file.separator"); private static final String TEST_FILTER_ANNOTATION = "stopwords"; private static final String TEST_FILTER_FIELD = "hypernyms"; private static final String FIELD_NAME = "annotation1"; private static final String DESCRIPTOR_FILE = "src/test/resources/LuceneCASIndexer.xml"; private static final String INDEX_DIRECTORY = "src" + pathSep + "test" + pathSep + "resources" + pathSep + "test-index"; private AnalysisEngine analysisEngine; private TestableLuceneCASIndexer luceneCASIndexer; @Before public void setUp() throws InvalidXMLException, IOException, ResourceInitializationException { AnalysisEngineDescription analysisEngineDescription = (AnalysisEngineDescription) UIMAFramework .getXMLParser().parseAnalysisEngineDescription(new XMLInputSource(DESCRIPTOR_FILE)); analysisEngine = UIMAFramework.produceAnalysisEngine(analysisEngineDescription); luceneCASIndexer = TestableLuceneCASIndexer.instance; assertNotNull(luceneCASIndexer); } @After public void tearDown() throws Exception { if (luceneCASIndexer == null) return; FSDirectory directory = (FSDirectory) luceneCASIndexer.getIndexWriter().getDirectory(); File directoryFile = directory.getFile(); luceneCASIndexer.destroy(); directory = FSDirectory.getDirectory(directoryFile); for (String file : directory.list()) directory.deleteFile(file); directory.getFile().delete(); } @Test public void testIndexOutDir() { FSDirectory directory = (FSDirectory) luceneCASIndexer.getIndexWriter().getDirectory(); String path = directory.getFile().getPath(); assertTrue(path.contains(INDEX_DIRECTORY)); } @Test public void testMappingFile() { Collection fieldDescriptions = luceneCASIndexer.getFieldDescriptions(); assertEquals(1, fieldDescriptions.size()); FieldDescription fieldDescription = fieldDescriptions.iterator().next(); assertEquals(FIELD_NAME, fieldDescription.getName()); assertEquals(2, fieldDescription.getAnnotationDescriptions().size()); } @Test public void testPreloadResources() throws IOException { Collection fieldDescriptions = luceneCASIndexer.getFieldDescriptions(); TokenFilterFactory testFactoryField = createMock(TokenFilterFactory.class); TokenFilterFactory testFactoryAnnotation = createMock(TokenFilterFactory.class); Capture propertiesCaptureField = new Capture(); Capture propertiesCaptureAnnotation = new Capture(); testFactoryField.preloadResources(capture(propertiesCaptureField)); testFactoryAnnotation.preloadResources(capture(propertiesCaptureAnnotation)); replay(testFactoryField); replay(testFactoryAnnotation); luceneCASIndexer.preloadResources(fieldDescriptions, ImmutableBiMap.of(TEST_FILTER_ANNOTATION, testFactoryAnnotation, TEST_FILTER_FIELD, testFactoryField)); verify(testFactoryField); verify(testFactoryAnnotation); Properties fieldFilterProperties = propertiesCaptureField.getValue(); assertEquals("src/test/resources/hypernyms.txt", fieldFilterProperties.getProperty("filePath")); Properties annotationFilterProperties = propertiesCaptureAnnotation.getValue(); assertEquals("src/test/resources/stopwords.txt", annotationFilterProperties.getProperty("filePath")); } @Test public void testIndexOneDocument() throws ResourceInitializationException, AnalysisEngineProcessException { CAS cas = analysisEngine.newCAS(); cas.setDocumentText("test document text"); analysisEngine.process(cas); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/SampleSearchQueryProvider.java0000644000175000017500000000357311625126526031413 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas; import java.util.Collection; import java.util.LinkedList; import org.apache.lucene.analysis.SimpleAnalyzer; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Query; import org.apache.uima.cas.CAS; import org.apache.uima.resource.Resource_ImplBase; public class SampleSearchQueryProvider extends Resource_ImplBase implements SearchQueryProvider { public Collection getSearchQueries(CAS cas) { Collection searchQueries = new LinkedList(); searchQueries.add(new SearchQuery() { public Query query() { QueryParser parser = new QueryParser("text", new SimpleAnalyzer()); try { return parser.parse("quick fox"); } catch (ParseException e) { // TODO: Not nice, how should the error handling look like ? e.printStackTrace(); } return null; } public long id() { return 0; } }); return searchQueries; } }uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/0000755000175000017500000000000011625126526025066 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/0000755000175000017500000000000011625126524026707 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/ConcatFilterTest.java0000644000175000017500000000530211625126524032767 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.analysis.tokenattributes.TermAttribute; import org.junit.Before; import org.junit.Test; import java.io.IOException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class ConcatFilterTest { private ConcatFilter concatFilter; private TokenStream tokenStream; @Before public void setUp() throws IOException{ tokenStream = new TestTokenStream(); concatFilter = new ConcatFilter(tokenStream, "|"); } @Test public void testNext() throws IOException{ assertTrue(concatFilter.incrementToken()); TermAttribute termAtt = (TermAttribute)concatFilter.getAttribute(TermAttribute.class); OffsetAttribute offsetAtt = (OffsetAttribute)concatFilter.getAttribute(OffsetAttribute.class); assertEquals(0, offsetAtt.startOffset()); assertEquals(17, offsetAtt.endOffset()); assertEquals("token1|token2|token3", termAtt.term()); } private class TestTokenStream extends TokenStream { private TermAttribute termAtt; private OffsetAttribute offsetAtt; private int offset = 0; private String[] tokens = {"token1", "token2", "token3"}; private int tokenIndex = 0; public TestTokenStream() { termAtt = (TermAttribute) addAttribute(TermAttribute.class); offsetAtt = (OffsetAttribute) addAttribute(OffsetAttribute.class); } @Override public boolean incrementToken() throws IOException { if (tokenIndex < tokens.length) { String currentToken = tokens[tokenIndex++]; termAtt.setTermBuffer(currentToken); offsetAtt.setOffset(offset, offset + currentToken.length() - 1); offset += currentToken.length(); return true; } return false; } } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/SplitterFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/SplitterFilterFactoryTe0000644000175000017500000000337511625126524033437 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.junit.Before; import org.junit.Test; import java.util.Properties; import static org.junit.Assert.assertEquals; public class SplitterFilterFactoryTest { private SplitterFilterFactory splitterFilterFactory; private TokenStream tokenStream; @Before public void setUp(){ tokenStream = new DummyTokenStream("dummy", 1, 1, 0); splitterFilterFactory = new SplitterFilterFactory(); } @Test public void testCreateTokenFilter() throws Exception{ Properties properties = new Properties(); properties.setProperty(SplitterFilterFactory.SPLIT_STRING_PARAMETER, ","); SplitterFilter splitterFilter = (SplitterFilter) splitterFilterFactory.createTokenFilter(tokenStream, properties ); assertEquals("," , splitterFilter.getSplitString()); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/ConcatFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/ConcatFilterFactoryTest0000644000175000017500000000352311625126524033402 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.util.Properties; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; public class ConcatFilterFactoryTest { private ConcatFilterFactory concatFilterFactory; private TokenStream tokenStream; @Before public void setUp(){ tokenStream = new DummyTokenStream("dummy", 1, 1, 0); concatFilterFactory = new ConcatFilterFactory(); } @Test public void testCreateTokenFilter() throws IOException{ Properties properties = new Properties(); properties.setProperty(ConcatFilterFactory.CONCAT_STRING_PARAMETER, "|"); ConcatFilter concatFilter = (ConcatFilter) concatFilterFactory.createTokenFilter(tokenStream, properties ); assertNotNull(concatFilter); assertEquals("|", concatFilter.getConcatString()); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/AdditionFilterTest.java0000644000175000017500000000626011625126524033317 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.util.ArrayList; import java.util.Collection; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.AdditionFilter; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import org.junit.Test; import static org.junit.Assert.*; import static org.apache.uima.lucas.indexer.util.TokenFactory.*; ; public class AdditionFilterTest { @Test public void testNext() throws Exception{ Collection tokens = new ArrayList(); tokens.add(newToken("token1", 0, 6)); tokens.add(newToken("token2", 7, 13)); tokens.add(newToken("token3", 14, 20)); tokens.add(newToken("token4", 21, 27)); TokenStream tokenStream = new CollectionTokenStream(tokens); AdditionFilter filter = new AdditionFilter(tokenStream, "prefix_", AdditionFilter.PREFIX); Token nextToken = new Token(); filter.next(nextToken); assertEquals("prefix_token1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertEquals("prefix_token2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertEquals("prefix_token3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertEquals("prefix_token4", new String(nextToken.termBuffer(), 0, nextToken.termLength())); tokens = new ArrayList(); tokens.add(newToken("token1", 0, 6)); tokens.add(newToken("token2", 7, 13)); tokens.add(newToken("token3", 14, 20)); tokens.add(newToken("token4", 21, 27)); tokenStream = new CollectionTokenStream(tokens); filter = new AdditionFilter(tokenStream, "_postfix", AdditionFilter.POSTFIX); nextToken = filter.next(nextToken); assertEquals("token1_postfix", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertEquals("token2_postfix", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertEquals("token3_postfix", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertEquals("token4_postfix", new String(nextToken.termBuffer(), 0, nextToken.termLength())); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/HypernymFilterTest.java0000644000175000017500000001043211625126524033373 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.apache.lucene.analysis.Token; import org.apache.uima.lucas.indexer.analysis.HypernymFilter; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import static org.apache.uima.lucas.indexer.util.TokenFactory.*; public class HypernymFilterTest extends TestCase { public void testNext() throws IOException{ List tokens = new ArrayList(); tokens.add(newToken("token1", 0, 6)); tokens.add(newToken("token2", 6, 11)); tokens.add(newToken("token3", 11, 17)); tokens.add(newToken("token4", 17, 23)); CollectionTokenStream tokenStream = new CollectionTokenStream(tokens); Map> hypernyms = new HashMap>(); List tokenHypernyms = new ArrayList(); tokenHypernyms.add("token21"); tokenHypernyms.add("token22"); tokenHypernyms.add("token23"); hypernyms.put("token2", tokenHypernyms); tokenHypernyms = new ArrayList(); tokenHypernyms.add("token41"); tokenHypernyms.add("token42"); hypernyms.put("token4", tokenHypernyms); HypernymFilter tokenFilter = new HypernymFilter(tokenStream, hypernyms); Token nextToken = new Token(); tokenFilter.next(nextToken); assertEquals("token1", nextToken.term()); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); assertEquals(1, nextToken.getPositionIncrement()); nextToken = tokenFilter.next(nextToken); assertEquals("token2", nextToken.term()); assertEquals(6, nextToken.startOffset()); assertEquals(11, nextToken.endOffset()); assertEquals(1, nextToken.getPositionIncrement()); nextToken = tokenFilter.next(nextToken); assertEquals("token21", nextToken.term()); assertEquals(6, nextToken.startOffset()); assertEquals(11, nextToken.endOffset()); assertEquals(0, nextToken.getPositionIncrement()); nextToken = tokenFilter.next(nextToken); assertEquals("token22", nextToken.term()); assertEquals(6, nextToken.startOffset()); assertEquals(11, nextToken.endOffset()); assertEquals(0, nextToken.getPositionIncrement()); nextToken = tokenFilter.next(nextToken); assertEquals("token23", nextToken.term()); assertEquals(6, nextToken.startOffset()); assertEquals(11, nextToken.endOffset()); assertEquals(0, nextToken.getPositionIncrement()); nextToken = tokenFilter.next(nextToken); assertEquals("token3", nextToken.term()); assertEquals(11, nextToken.startOffset()); assertEquals(17, nextToken.endOffset()); assertEquals(1, nextToken.getPositionIncrement()); nextToken = tokenFilter.next(nextToken); assertEquals("token4", nextToken.term()); assertEquals(17, nextToken.startOffset()); assertEquals(23, nextToken.endOffset()); assertEquals(1, nextToken.getPositionIncrement()); nextToken = tokenFilter.next(nextToken); assertEquals("token41", nextToken.term()); assertEquals(17, nextToken.startOffset()); assertEquals(23, nextToken.endOffset()); assertEquals(0, nextToken.getPositionIncrement()); nextToken = tokenFilter.next(nextToken); assertEquals("token42", nextToken.term()); assertEquals(17, nextToken.startOffset()); assertEquals(23, nextToken.endOffset()); assertEquals(0, nextToken.getPositionIncrement()); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/LowerCaseFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/LowerCaseFilterFactoryT0000644000175000017500000000332111625126524033337 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.LowerCaseFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.junit.Before; import org.junit.Test; import java.io.IOException; import static org.junit.Assert.assertNotNull; public class LowerCaseFilterFactoryTest { private LowerCaseFilterFactory lowercaseFilterFactory; private TokenStream tokenStream; @Before public void setUp() throws Exception { this.lowercaseFilterFactory = new LowerCaseFilterFactory(); this.tokenStream = new DummyTokenStream("dummy", 1, 1, 0); } @Test public void testCreateTokenFilter() throws IOException { LowerCaseFilter lowercaseFilter = (LowerCaseFilter) lowercaseFilterFactory.createTokenFilter(tokenStream, null); assertNotNull(lowercaseFilter); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/StopwordFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/StopwordFilterFactoryTe0000644000175000017500000001121511625126524033442 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import junit.framework.TestCase; import org.apache.lucene.analysis.StopFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.apache.uima.lucas.indexer.util.PlainFileReader; import org.apache.uima.lucas.indexer.util.PlainFileReaderFactory; import org.junit.Before; import org.junit.Test; import java.util.Properties; import java.util.Set; import static org.easymock.EasyMock.*; public class StopwordFilterFactoryTest extends TestCase { private static final String TRUE = "true"; private static final String TEST_FILE_1 = "src/test/resources/ReplaceFilterFactoryTest1.txt"; private StopwordFilterFactory stopwordFilterFactory; private PlainFileReaderFactory plainFileReaderFactory; private PlainFileReader plainFileReader; private TokenStream tokenStream; private String[] lines; private Properties properties; @Before public void setUp(){ plainFileReaderFactory = createMock(PlainFileReaderFactory.class); plainFileReader= createMock(PlainFileReader.class); stopwordFilterFactory = new StopwordFilterFactory(plainFileReaderFactory); tokenStream = new DummyTokenStream("dummy", 1, 1, 0); lines = new String[]{"WORD"}; properties = new Properties(); properties.setProperty(StopwordFilterFactory.FILE_PATH_PARAMETER, TEST_FILE_1); properties.setProperty(StopwordFilterFactory.IGRNORE_CASE_PARAMETER, TRUE); } @Test public void testCreateTokenFilter() throws Exception{ expect(plainFileReaderFactory.createPlainFileReader(TEST_FILE_1)).andReturn(plainFileReader); expect(plainFileReader.readLines()).andReturn(lines); replay(plainFileReaderFactory); replay(plainFileReader); StopFilter stopFilter = (StopFilter) stopwordFilterFactory.createTokenFilter(tokenStream, properties); assertNotNull(stopFilter); verify(plainFileReaderFactory); verify(plainFileReader); reset(plainFileReaderFactory); reset(plainFileReader); replay(plainFileReaderFactory); replay(plainFileReader); // test caching (no calls of buffered reader) stopFilter = (StopFilter) stopwordFilterFactory.createTokenFilter(tokenStream, properties); verify(plainFileReaderFactory); verify(plainFileReader); } @Test public void testIgnoreCase() throws Exception{ expect(plainFileReaderFactory.createPlainFileReader(TEST_FILE_1)).andReturn(plainFileReader); expect(plainFileReader.readLines()).andReturn(lines); replay(plainFileReaderFactory); replay(plainFileReader); String[] stopWords = {"sTOp", "STop"}; Set stopSet = StopFilter.makeStopSet(stopWords, true); assertEquals(1, stopSet.size()); } @Test public void testPreloadResources() throws Exception{ Properties properties = new Properties(); properties.setProperty(ReplaceFilterFactory.FILE_PATH_PARAMETER, TEST_FILE_1); expect(plainFileReaderFactory.createPlainFileReader(TEST_FILE_1)).andReturn(plainFileReader); expect(plainFileReader.readLines()).andReturn(lines); replay(plainFileReaderFactory); replay(plainFileReader); stopwordFilterFactory.preloadResources(properties); verify(plainFileReaderFactory); verify(plainFileReader); reset(plainFileReaderFactory); reset(plainFileReader); replay(plainFileReaderFactory); replay(plainFileReader); // test caching (no calls of buffered reader) stopwordFilterFactory.preloadResources(properties); verify(plainFileReaderFactory); verify(plainFileReader); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/UppercaseFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/UppercaseFilterFactoryT0000644000175000017500000000311511625126524033403 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertNotNull; public class UppercaseFilterFactoryTest { private TokenStream tokenStream; private UpperCaseFilterFactory upperCaseFilterFactory; @Before public void setUp(){ tokenStream = new DummyTokenStream("dummy", 1, 1, 0); upperCaseFilterFactory = new UpperCaseFilterFactory(); } @Test public void testCreateTokenFilter() throws Exception{ UpperCaseFilter upperCaseFilter = (UpperCaseFilter) upperCaseFilterFactory.createTokenFilter(tokenStream, null); assertNotNull(upperCaseFilter); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/AnnotationTokenStreamTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/AnnotationTokenStreamTe0000644000175000017500000016577111625126524033433 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.ArrayList; import java.util.List; import org.apache.lucene.analysis.Token; import org.apache.uima.UIMAFramework; import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASException; import org.apache.uima.cas.Type; import org.apache.uima.collection.CollectionReader; import org.apache.uima.collection.CollectionReaderDescription; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.cas.StringArray; import org.apache.uima.lucas.indexer.types.test.Annotation1; import org.apache.uima.lucas.indexer.types.test.FeatureStructure1; import org.apache.uima.lucas.indexer.types.test.FeatureStructure2; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.CasCreationUtils; import org.apache.uima.util.XMLInputSource; import org.junit.Before; import org.junit.Test; import com.google.common.collect.Lists; public class AnnotationTokenStreamTest { private final static String READER_DESCRIPTOR = "src/test/resources/AnnotationTokenStreamTestDummyCollectionReader.xml"; private CollectionReader reader; @Before public void setUp() throws Exception { CollectionReaderDescription readerDescription = (CollectionReaderDescription) UIMAFramework.getXMLParser().parseCollectionReaderDescription(new XMLInputSource(READER_DESCRIPTOR)); reader = UIMAFramework.produceCollectionReader(readerDescription); } public JCas createCasWithText(String documentText) throws ResourceInitializationException, CASException{ JCas cas = CasCreationUtils.createCas(reader.getProcessingResourceMetaData()).getJCas(); cas.setDocumentText(documentText); return cas; } @Test public void testCreateDocumentTextTokens() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setBegin(7); annotation2.setEnd(13); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setBegin(14); annotation3.setEnd(20); annotation3.addToIndexes(); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1"); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testCreateFeatureTokens() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); annotation1.setFeatureString("token1Feature1"); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setFeatureString("token2Feature1"); annotation2.setBegin(7); annotation2.setEnd(13); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setFeatureString("token3Feature1"); annotation3.setBegin(14); annotation3.setEnd(20); annotation3.addToIndexes(); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureString", null); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testCreateMultipleFeatureTokens() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); annotation1.setFeatureString("token1Feature1"); annotation1.setFeatureInteger(1); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setFeatureString("token2Feature1"); annotation2.setFeatureInteger(2); annotation2.setBegin(7); annotation2.setEnd(13); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setFeatureString("token3Feature1"); annotation3.setFeatureInteger(3); annotation3.setBegin(14); annotation3.setEnd(20); annotation3.addToIndexes(); List featureNames = new ArrayList(); featureNames.add("featureString"); featureNames.add("featureInteger"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", featureNames, "_", null); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1Feature1_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2Feature1_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3Feature1_3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testCreateArrayFeatureTokensWithoutDelimiter() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); StringArray stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token1FeatureStringArray1"); stringArray1.set(1, "token1FeatureStringArray2"); stringArray1.set(2, "token1FeatureStringArray3"); annotation1.setFeatureStringArray(stringArray1); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setBegin(7); annotation2.setEnd(13); StringArray stringArray2 = new StringArray(cas, 3); stringArray2.set(0, "token2FeatureStringArray1"); stringArray2.set(1, "token2FeatureStringArray2"); stringArray2.set(2, "token2FeatureStringArray3"); annotation2.setFeatureStringArray(stringArray2); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setBegin(14); annotation3.setEnd(20); StringArray stringArray3 = new StringArray(cas, 3); stringArray3.set(0, "token3FeatureStringArray1"); stringArray3.set(1, "token3FeatureStringArray2"); stringArray3.set(2, "token3FeatureStringArray3"); annotation3.setFeatureStringArray(stringArray3); annotation3.addToIndexes(); List featureNames = new ArrayList(); featureNames.add("featureStringArray"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", featureNames, null); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStringArray1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStringArray2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStringArray1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStringArray2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStringArray1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStringArray2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testCreateArrayFeatureTokensWithDelimiter() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); StringArray stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token1FeatureStringArray1"); stringArray1.set(1, "token1FeatureStringArray2"); stringArray1.set(2, "token1FeatureStringArray3"); annotation1.setFeatureStringArray(stringArray1); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setBegin(7); annotation2.setEnd(13); StringArray stringArray2 = new StringArray(cas, 3); stringArray2.set(0, "token2FeatureStringArray1"); stringArray2.set(1, "token2FeatureStringArray2"); stringArray2.set(2, "token2FeatureStringArray3"); annotation2.setFeatureStringArray(stringArray2); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setBegin(14); annotation3.setEnd(20); StringArray stringArray3 = new StringArray(cas, 3); stringArray3.set(0, "token3FeatureStringArray1"); stringArray3.set(1, "token3FeatureStringArray2"); stringArray3.set(2, "token3FeatureStringArray3"); annotation3.setFeatureStringArray(stringArray3); annotation3.addToIndexes(); List featureNames = new ArrayList(); featureNames.add("featureStringArray"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", featureNames, " ", null); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStringArray1 token1FeatureStringArray2 token1FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStringArray1 token2FeatureStringArray2 token2FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStringArray1 token3FeatureStringArray2 token3FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testCreateFeatureStructureTokens() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); FeatureStructure1 featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token1Feature1"); FeatureStructure2 featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token1Feature3Feature1"); featureStructure1.setFeature3(featureStructure2); annotation1.setFeatureStructure1(featureStructure1); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setBegin(7); annotation2.setEnd(13); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token2Feature1"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token2Feature3Feature1"); featureStructure1.setFeature3(featureStructure2); annotation2.setFeatureStructure1(featureStructure1); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setBegin(14); annotation3.setEnd(20); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token3Feature1"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token3Feature3Feature1"); featureStructure1.setFeature3(featureStructure2); annotation3.setFeatureStructure1(featureStructure1); annotation3.addToIndexes(); List featureNames = new ArrayList(); featureNames.add("feature1"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructure1", featureNames, null); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructure1.feature3", featureNames, null); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1Feature3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2Feature3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3Feature3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testCreateArrayFeatureStructuresWithDelimterTokens() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); FSArray featureStructure1Array = new FSArray(cas, 3); FeatureStructure1 featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token1FeatureStructures1Feature10"); featureStructure1.setFeature2("token1FeatureStructures1Feature20"); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token1FeatureStructures1Feature11"); featureStructure1.setFeature2("token1FeatureStructures1Feature21"); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token1FeatureStructures1Feature12"); featureStructure1.setFeature2("token1FeatureStructures1Feature22"); featureStructure1Array.set(2, featureStructure1); annotation1.setFeatureStructures1(featureStructure1Array); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setBegin(7); annotation2.setEnd(13); featureStructure1Array = new FSArray(cas, 3); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token2FeatureStructures1Feature10"); featureStructure1.setFeature2("token2FeatureStructures1Feature20"); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token2FeatureStructures1Feature11"); featureStructure1.setFeature2("token2FeatureStructures1Feature21"); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token2FeatureStructures1Feature12"); featureStructure1.setFeature2("token2FeatureStructures1Feature22"); featureStructure1Array.set(2, featureStructure1); annotation2.setFeatureStructures1(featureStructure1Array); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setBegin(14); annotation3.setEnd(20); featureStructure1Array = new FSArray(cas, 3); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token3FeatureStructures1Feature10"); featureStructure1.setFeature2("token3FeatureStructures1Feature20"); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token3FeatureStructures1Feature11"); featureStructure1.setFeature2("token3FeatureStructures1Feature21"); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token3FeatureStructures1Feature12"); featureStructure1.setFeature2("token3FeatureStructures1Feature22"); featureStructure1Array.set(2, featureStructure1); annotation3.setFeatureStructures1(featureStructure1Array); annotation3.addToIndexes(); List featureNames = new ArrayList(); featureNames.add("feature1"); featureNames.add("feature2"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1", featureNames, ", ", null); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature10, token1FeatureStructures1Feature20", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature11, token1FeatureStructures1Feature21", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature12, token1FeatureStructures1Feature22", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature10, token2FeatureStructures1Feature20", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature11, token2FeatureStructures1Feature21", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature12, token2FeatureStructures1Feature22", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature10, token3FeatureStructures1Feature20", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature11, token3FeatureStructures1Feature21", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature12, token3FeatureStructures1Feature22", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } // public void testCreateArrayFeatureStructuresWithoutDelimterTokens() throws Exception{ // JCas cas = createCasWithText("token1 token2 token3"); // Annotation1 annotation1 = new Annotation1(cas); // annotation1.setBegin(0); // annotation1.setEnd(6); // // FSArray featureStructure1Array = new FSArray(cas, 3); // FeatureStructure1 featureStructure1 = new FeatureStructure1(cas); // featureStructure1.setFeature1("token1FeatureStructures1Feature10"); // featureStructure1.setFeature2("token1FeatureStructures1Feature20"); // // featureStructure1Array.set(0, featureStructure1); // // featureStructure1 = new FeatureStructure1(cas); // featureStructure1.setFeature1("token1FeatureStructures1Feature11"); // featureStructure1.setFeature2("token1FeatureStructures1Feature21"); // // featureStructure1Array.set(1, featureStructure1); // // featureStructure1 = new FeatureStructure1(cas); // featureStructure1.setFeature1("token1FeatureStructures1Feature12"); // featureStructure1.setFeature2("token1FeatureStructures1Feature22"); // // featureStructure1Array.set(2, featureStructure1); // // annotation1.setFeatureStructures1(featureStructure1Array); // annotation1.addToIndexes(); // // Annotation1 annotation2 = new Annotation1(cas); // annotation2.setBegin(7); // annotation2.setEnd(13); // // featureStructure1Array = new FSArray(cas, 3); // featureStructure1 = new FeatureStructure1(cas); // featureStructure1.setFeature1("token2FeatureStructures1Feature10"); // featureStructure1.setFeature2("token2FeatureStructures1Feature20"); // // featureStructure1Array.set(0, featureStructure1); // // featureStructure1 = new FeatureStructure1(cas); // featureStructure1.setFeature1("token2FeatureStructures1Feature11"); // featureStructure1.setFeature2("token2FeatureStructures1Feature21"); // // featureStructure1Array.set(1, featureStructure1); // // featureStructure1 = new FeatureStructure1(cas); // featureStructure1.setFeature1("token2FeatureStructures1Feature12"); // featureStructure1.setFeature2("token2FeatureStructures1Feature22"); // // featureStructure1Array.set(2, featureStructure1); // // annotation2.setFeatureStructures1(featureStructure1Array); // annotation2.addToIndexes(); // // Annotation1 annotation3 = new Annotation1(cas); // annotation3.setBegin(14); // annotation3.setEnd(20); // // featureStructure1Array = new FSArray(cas, 3); // featureStructure1 = new FeatureStructure1(cas); // featureStructure1.setFeature1("token3FeatureStructures1Feature10"); // featureStructure1.setFeature2("token3FeatureStructures1Feature20"); // // featureStructure1Array.set(0, featureStructure1); // // featureStructure1 = new FeatureStructure1(cas); // featureStructure1.setFeature1("token3FeatureStructures1Feature11"); // featureStructure1.setFeature2("token3FeatureStructures1Feature21"); // // featureStructure1Array.set(1, featureStructure1); // // featureStructure1 = new FeatureStructure1(cas); // featureStructure1.setFeature1("token3FeatureStructures1Feature12"); // featureStructure1.setFeature2("token3FeatureStructures1Feature22"); // // featureStructure1Array.set(2, featureStructure1); // // annotation3.setFeatureStructures1(featureStructure1Array); // annotation3.addToIndexes(); // // List featureNames = new ArrayList(); // featureNames.add("feature1"); // featureNames.add("feature2"); // // // AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1", featureNames, null); // Token nextToken = annotationTokenStream.next(); // assertNotNull(nextToken); // assertEquals("token1FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength())); // assertEquals(0, nextToken.startOffset()); // assertEquals(6, nextToken.endOffset()); // // nextToken = annotationTokenStream.next(); // assertNotNull(nextToken); // assertEquals("token1FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength())); // assertEquals(0, nextToken.startOffset()); // assertEquals(6, nextToken.endOffset()); // // nextToken = annotationTokenStream.next(); // assertNotNull(nextToken); // assertEquals("token1FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength())); // assertEquals(0, nextToken.startOffset()); // assertEquals(6, nextToken.endOffset()); // // nextToken = annotationTokenStream.next(); // assertNotNull(nextToken); // assertEquals("token2FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength())); // assertEquals(7, nextToken.startOffset()); // assertEquals(13, nextToken.endOffset()); // // nextToken = annotationTokenStream.next(); // assertNotNull(nextToken); // assertEquals("token2FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength())); // assertEquals(7, nextToken.startOffset()); // assertEquals(13, nextToken.endOffset()); // // nextToken = annotationTokenStream.next(); // assertNotNull(nextToken); // assertEquals("token2FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength())); // assertEquals(7, nextToken.startOffset()); // assertEquals(13, nextToken.endOffset()); // // nextToken = annotationTokenStream.next(); // assertNotNull(nextToken); // assertEquals("token3FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength())); // assertEquals(14, nextToken.startOffset()); // assertEquals(20, nextToken.endOffset()); // // nextToken = annotationTokenStream.next(); // assertNotNull(nextToken); // assertEquals("token3FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength())); // assertEquals(14, nextToken.startOffset()); // assertEquals(20, nextToken.endOffset()); // // nextToken = annotationTokenStream.next(); // assertNotNull(nextToken); // assertEquals("token3FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength())); // assertEquals(14, nextToken.startOffset()); // assertEquals(20, nextToken.endOffset()); // } @Test public void testCreateArrayFeatureStructuresWithSinleFeature() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); FSArray featureStructure1Array = new FSArray(cas, 3); FeatureStructure1 featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token1FeatureStructures1Feature10"); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token1FeatureStructures1Feature11"); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token1FeatureStructures1Feature12"); featureStructure1Array.set(2, featureStructure1); annotation1.setFeatureStructures1(featureStructure1Array); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setBegin(7); annotation2.setEnd(13); featureStructure1Array = new FSArray(cas, 3); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token2FeatureStructures1Feature10"); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token2FeatureStructures1Feature11"); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token2FeatureStructures1Feature12"); featureStructure1Array.set(2, featureStructure1); annotation2.setFeatureStructures1(featureStructure1Array); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setBegin(14); annotation3.setEnd(20); featureStructure1Array = new FSArray(cas, 3); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token3FeatureStructures1Feature10"); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token3FeatureStructures1Feature11"); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token3FeatureStructures1Feature12"); featureStructure1Array.set(2, featureStructure1); annotation3.setFeatureStructures1(featureStructure1Array); annotation3.addToIndexes(); List featureNames = new ArrayList(); featureNames.add("feature1"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1", featureNames, null); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testCreateArrayFeatureWithFeaturePath() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); FSArray featureStructure1Array = new FSArray(cas, 3); FeatureStructure1 featureStructure1 = new FeatureStructure1(cas); FeatureStructure2 featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token1FeatureStructures1Feature3Feature10"); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token1FeatureStructures1Feature3Feature11"); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token1FeatureStructures1Feature3Feature12"); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(2, featureStructure1); annotation1.setFeatureStructures1(featureStructure1Array); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setBegin(7); annotation2.setEnd(13); featureStructure1Array = new FSArray(cas, 3); featureStructure1 = new FeatureStructure1(cas); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token2FeatureStructures1Feature3Feature10"); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token2FeatureStructures1Feature3Feature11"); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token2FeatureStructures1Feature3Feature12"); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(2, featureStructure1); annotation2.setFeatureStructures1(featureStructure1Array); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setBegin(14); annotation3.setEnd(20); featureStructure1Array = new FSArray(cas, 3); featureStructure1 = new FeatureStructure1(cas); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token3FeatureStructures1Feature3Feature10"); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token3FeatureStructures1Feature3Feature11"); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token3FeatureStructures1Feature12"); featureStructure1.setFeature2("token3FeatureStructures1Feature22"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token3FeatureStructures1Feature3Feature12"); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(2, featureStructure1); annotation3.setFeatureStructures1(featureStructure1Array); annotation3.addToIndexes(); List featureNames = new ArrayList(); featureNames.add("feature1"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1.feature3", featureNames, null); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testCreateArrayFeaturesWithFeaturePathAndStringArray() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); FSArray featureStructure1Array = new FSArray(cas, 3); FeatureStructure1 featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token1FeatureStructures1Feature10"); featureStructure1.setFeature2("token1FeatureStructures1Feature20"); StringArray stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token1FeatureStructures1Feature3Feature3_0_0"); stringArray1.set(1, "token1FeatureStructures1Feature3Feature3_0_1"); stringArray1.set(2, "token1FeatureStructures1Feature3Feature3_0_2"); FeatureStructure2 featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token1FeatureStructures1Feature3Feature10"); featureStructure2.setFeature3(stringArray1); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token1FeatureStructures1Feature3Feature3_1_0"); stringArray1.set(1, "token1FeatureStructures1Feature3Feature3_1_1"); stringArray1.set(2, "token1FeatureStructures1Feature3Feature3_1_2"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature3(stringArray1); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token1FeatureStructures1Feature3Feature3_2_0"); stringArray1.set(1, "token1FeatureStructures1Feature3Feature3_2_1"); stringArray1.set(2, "token1FeatureStructures1Feature3Feature3_2_2"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature3(stringArray1); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(2, featureStructure1); annotation1.setFeatureStructures1(featureStructure1Array); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setBegin(7); annotation2.setEnd(13); featureStructure1Array = new FSArray(cas, 3); featureStructure1 = new FeatureStructure1(cas); stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token2FeatureStructures1Feature3Feature3_0_0"); stringArray1.set(1, "token2FeatureStructures1Feature3Feature3_0_1"); stringArray1.set(2, "token2FeatureStructures1Feature3Feature3_0_2"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature3(stringArray1); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token2FeatureStructures1Feature3Feature3_1_0"); stringArray1.set(1, "token2FeatureStructures1Feature3Feature3_1_1"); stringArray1.set(2, "token2FeatureStructures1Feature3Feature3_1_2"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature3(stringArray1); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(1, featureStructure1); stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token2FeatureStructures1Feature3Feature3_2_0"); stringArray1.set(1, "token2FeatureStructures1Feature3Feature3_2_1"); stringArray1.set(2, "token2FeatureStructures1Feature3Feature3_2_2"); featureStructure1 = new FeatureStructure1(cas); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature3(stringArray1); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(2, featureStructure1); annotation2.setFeatureStructures1(featureStructure1Array); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setBegin(14); annotation3.setEnd(20); featureStructure1Array = new FSArray(cas, 3); featureStructure1 = new FeatureStructure1(cas); stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token3FeatureStructures1Feature3Feature3_0_0"); stringArray1.set(1, "token3FeatureStructures1Feature3Feature3_0_1"); stringArray1.set(2, "token3FeatureStructures1Feature3Feature3_0_2"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature3(stringArray1); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(0, featureStructure1); featureStructure1 = new FeatureStructure1(cas); stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token3FeatureStructures1Feature3Feature3_1_0"); stringArray1.set(1, "token3FeatureStructures1Feature3Feature3_1_1"); stringArray1.set(2, "token3FeatureStructures1Feature3Feature3_1_2"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature3(stringArray1); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(1, featureStructure1); featureStructure1 = new FeatureStructure1(cas); stringArray1 = new StringArray(cas, 3); stringArray1.set(0, "token3FeatureStructures1Feature3Feature3_2_0"); stringArray1.set(1, "token3FeatureStructures1Feature3Feature3_2_1"); stringArray1.set(2, "token3FeatureStructures1Feature3Feature3_2_2"); featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature3(stringArray1); featureStructure1.setFeature3(featureStructure2); featureStructure1Array.set(2, featureStructure1); annotation3.setFeatureStructures1(featureStructure1Array); annotation3.addToIndexes(); List featureNames = new ArrayList(); featureNames.add("feature3"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1.feature3", featureNames, null); Token nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature3_0_0", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature3_0_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature3_0_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature3_1_0", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature3_1_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature3_1_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature3_2_0", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature3_2_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1FeatureStructures1Feature3Feature3_2_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature3_0_0", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature3_0_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature3_0_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature3_1_0", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature3_1_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature3_1_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature3_2_0", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature3_2_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2FeatureStructures1Feature3Feature3_2_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature3_0_0", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature3_0_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature3_0_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature3_1_0", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature3_1_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature3_1_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature3_2_0", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature3_2_1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3FeatureStructures1Feature3Feature3_2_2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testReset() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); Annotation1 annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); annotation1.addToIndexes(); Annotation1 annotation2 = new Annotation1(cas); annotation2.setBegin(7); annotation2.setEnd(13); annotation2.addToIndexes(); Annotation1 annotation3 = new Annotation1(cas); annotation3.setBegin(14); annotation3.setEnd(20); annotation3.addToIndexes(); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1"); Token nextToken = annotationTokenStream.next(); nextToken = annotationTokenStream.next(); nextToken = annotationTokenStream.next(); annotationTokenStream.reset(); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = annotationTokenStream.next(); assertNotNull(nextToken); assertEquals("token3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(14, nextToken.startOffset()); assertEquals(20, nextToken.endOffset()); } @Test public void testValidate() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1"); Type annotation1Type = (Type) cas.getTypeSystem().getType(Annotation1.class.getCanonicalName()); annotationTokenStream.validate(annotation1Type, Lists.newArrayList("featureString"), null); } @Test(expected= InvalidTokenSourceException.class) public void testValidateFail() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1"); Type annotation1Type = (Type) cas.getTypeSystem().getType(Annotation1.class.getCanonicalName()); annotationTokenStream.validate(annotation1Type, Lists.newArrayList("featureStringss"), null); } @Test(expected= InvalidTokenSourceException.class) public void testValidateFailWithWrongType() throws Exception{ JCas cas = createCasWithText("token1 token2 token3"); new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation3"); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/UniqueFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/UniqueFilterFactoryTest0000644000175000017500000000306211625126524033437 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertNotNull; public class UniqueFilterFactoryTest { private TokenStream tokenStream; private UniqueFilterFactory uniqueFilterFactory; @Before public void setUp(){ tokenStream = new DummyTokenStream("dummy", 1, 1, 0); uniqueFilterFactory = new UniqueFilterFactory(); } @Test public void testCreateTokenFilter() throws Exception{ UniqueFilter uniqueFilter = (UniqueFilter) uniqueFilterFactory.createTokenFilter(tokenStream, null); assertNotNull(uniqueFilter); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/DefaultFilterFactoryRegistryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/DefaultFilterFactoryReg0000644000175000017500000000644311625126524033361 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import static org.junit.Assert.*; import java.util.Map; import org.junit.Before; import org.junit.Test; public class DefaultFilterFactoryRegistryTest { private DefaultFilterFactoryRegistry defaultFilterFactoryRegistry; @Before public void setUp() throws Exception { this.defaultFilterFactoryRegistry = new DefaultFilterFactoryRegistry(); } @Test public void testGetDefaultFilterFactories() { Map registry = defaultFilterFactoryRegistry.getDefaultRegistry(); assertEquals(11, registry.size()); TokenFilterFactory filterFactory = registry.get(DefaultFilterFactoryRegistry.ADDITION_FILTER_FACTORY_NAME); assertEquals(AdditionFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.HYPERNYM_FILTER_FACTORY_NAME); assertEquals(HypernymFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.POSITION_FILTER_FACTORY_NAME); assertEquals(PositionFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.REPLACE_FILTER_FACTORY_NAME); assertEquals(ReplaceFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.SNOWBALL_FILTER_FACTORY_NAME); assertEquals(SnowballFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.SPLITTER_FILTER_FACTORY_NAME); assertEquals(SplitterFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.CONCAT_FILTER_FACTORY_NAME); assertEquals(ConcatFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.STOPWORD_FILTER_FACTORY_NAME); assertEquals(StopwordFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.UNIQUE_FILTER_FACTORY_NAME); assertEquals(UniqueFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.UPPERCASE_FILTER_FACTORY_NAME); assertEquals(UpperCaseFilterFactory.class, filterFactory.getClass()); filterFactory = registry.get(DefaultFilterFactoryRegistry.LOWERCASE_FILTER_FACTORY_NAME); assertEquals(LowerCaseFilterFactory.class, filterFactory.getClass()); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/UniqueFilterTest.java0000644000175000017500000000501211625126524033024 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.util.ArrayList; import java.util.Collection; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.UniqueFilter; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import junit.framework.TestCase; import static org.apache.uima.lucas.indexer.util.TokenFactory.*; public class UniqueFilterTest extends TestCase { public void testUniqueFilter() throws Exception{ Collection tokens = new ArrayList(); tokens.add(newToken("token1", 0, 6)); tokens.add(newToken("token1", 7, 13)); tokens.add(newToken("token2", 14, 20)); tokens.add(newToken("token2", 21, 27)); tokens.add(newToken("token3", 28, 33)); tokens.add(newToken("token4", 34, 40)); TokenStream tokenStream = new CollectionTokenStream(tokens); TokenFilter filter = new UniqueFilter(tokenStream); Token nextToken = new Token(); filter.next(nextToken); assertNotNull(nextToken); assertEquals("token1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertNotNull(nextToken); assertEquals("token2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertNotNull(nextToken); assertEquals("token3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertNotNull(nextToken); assertEquals("token4", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertNull(filter.next(nextToken)); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/ReplaceFilterTest.java0000644000175000017500000000464411625126524033143 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.ReplaceFilter; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import static org.apache.uima.lucas.indexer.util.TokenFactory.*; public class ReplaceFilterTest extends TestCase{ public void testNext() throws Exception{ Map mapping = new HashMap(); mapping.put("token1", "replacement1"); mapping.put("token2", "replacement2"); mapping.put("token3", "replacement3"); Collection tokens = new ArrayList(); tokens.add(newToken("token1", 0, 6)); tokens.add(newToken("token2", 7, 13)); tokens.add(newToken("token3", 14, 20)); tokens.add(newToken("token4", 21, 27)); TokenStream tokenStream = new CollectionTokenStream(tokens); ReplaceFilter filter = new ReplaceFilter(tokenStream, mapping); Token next = new Token(); filter.next(next); assertEquals("replacement1", new String(next.termBuffer(), 0, next.termLength())); next = filter.next(next); assertEquals("replacement2", new String(next.termBuffer(), 0, next.termLength())); next = filter.next(next); assertEquals("replacement3", new String(next.termBuffer(), 0, next.termLength())); next = filter.next(next); assertEquals("token4", new String(next.termBuffer(), 0, next.termLength())); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/AdditionFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/AdditionFilterFactoryTe0000644000175000017500000000360211625126524033355 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.junit.Before; import org.junit.Test; import java.util.Properties; import static org.junit.Assert.assertEquals; public class AdditionFilterFactoryTest { private static final String TEST_STRING = "test"; private AdditionFilterFactory additionFilterFactory; private TokenStream tokenStream; @Before public void setUp(){ tokenStream = new DummyTokenStream("dummy", 1, 1, 0); additionFilterFactory = new AdditionFilterFactory(); } @Test public void testCreateTokenFilter() throws Exception{ Properties properties = new Properties(); properties.setProperty(AdditionFilterFactory.POSTFIX_POSITION, TEST_STRING); AdditionFilter additionFilter = (AdditionFilter) additionFilterFactory.createTokenFilter(tokenStream, properties); assertEquals(AdditionFilter.POSTFIX, additionFilter.getPosition()); assertEquals(TEST_STRING, additionFilter.getAddition()); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/TokenStreamMergerTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/TokenStreamMergerTest.j0000644000175000017500000000707511625126524033331 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import junit.framework.TestCase; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute; import org.apache.lucene.analysis.tokenattributes.TermAttribute; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class TokenStreamMergerTest extends TestCase { private TokenStreamMerger merger; @Override protected void setUp() throws Exception { List streams = new ArrayList(); streams.add(new DummyTokenStream("1111", 1, 4, 0)); streams.add(new DummyTokenStream("2222", 2, 2, 1)); streams.add(new DummyTokenStream("3333", 3, 1, 2)); merger = new TokenStreamMerger(streams); } public void testNext() throws IOException { TermAttribute termAtt = (TermAttribute)merger.getAttribute(TermAttribute.class); OffsetAttribute offsetAtt = (OffsetAttribute)merger.getAttribute(OffsetAttribute.class); PositionIncrementAttribute posIncAtt = (PositionIncrementAttribute)merger.getAttribute(PositionIncrementAttribute.class); merger.incrementToken(); assertEquals("1111", termAtt.term()); assertEquals(0, offsetAtt.startOffset()); assertEquals(4, offsetAtt.endOffset()); assertEquals(1, posIncAtt.getPositionIncrement()); merger.incrementToken(); assertEquals("1111", termAtt.term()); assertEquals(5, offsetAtt.startOffset()); assertEquals(9, offsetAtt.endOffset()); assertEquals(1, posIncAtt.getPositionIncrement()); merger.incrementToken(); assertEquals("2222", termAtt.term()); assertEquals(5, offsetAtt.startOffset()); assertEquals(9, offsetAtt.endOffset()); assertEquals(0, posIncAtt.getPositionIncrement()); merger.incrementToken(); assertEquals("1111", termAtt.term()); assertEquals(10, offsetAtt.startOffset()); assertEquals(14, offsetAtt.endOffset()); assertEquals(1, posIncAtt.getPositionIncrement()); merger.incrementToken(); assertEquals("3333", termAtt.term()); assertEquals(10, offsetAtt.startOffset()); assertEquals(14, offsetAtt.endOffset()); assertEquals(0, posIncAtt.getPositionIncrement()); merger.incrementToken(); assertEquals("1111", termAtt.term()); assertEquals(15, offsetAtt.startOffset()); assertEquals(19, offsetAtt.endOffset()); assertEquals(1, posIncAtt.getPositionIncrement()); merger.incrementToken(); assertEquals("2222", termAtt.term()); assertEquals(15, offsetAtt.startOffset()); assertEquals(19, offsetAtt.endOffset()); assertEquals(0, posIncAtt.getPositionIncrement()); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/HypernymFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/HypernymFilterFactoryTe0000644000175000017500000001117511625126524033441 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import com.google.common.collect.Lists; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.apache.uima.lucas.indexer.util.MultimapFileReader; import org.apache.uima.lucas.indexer.util.MultimapFileReaderFactory; import org.junit.Before; import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import static org.easymock.EasyMock.*; import static org.junit.Assert.assertEquals; public class HypernymFilterFactoryTest { private static final String FILE_ENTRY = "token1=id1,id2,id3"; private static final String HYPERNYM_FILE = "src/test/resources/hypernyms.txt"; private HypernymFilterFactory hypernymFilterFactory; private TokenStream tokenStream; private MultimapFileReaderFactory multimapFileReaderFactory; private MultimapFileReader multimapFileReader; private Map> hypernyms; @Before public void setUp(){ tokenStream = new DummyTokenStream("dummy", 1, 1, 0); hypernyms = new HashMap>(); hypernyms.put("token1", Lists.newArrayList("id1", "id2", "id3")); multimapFileReader = createMock(MultimapFileReader.class); multimapFileReaderFactory = createMock(MultimapFileReaderFactory.class); hypernymFilterFactory = new HypernymFilterFactory(multimapFileReaderFactory); } @Test public void testCreateTokenFilter() throws Exception{ Properties properties = new Properties(); properties.setProperty(HypernymFilterFactory.FILE_PATH_PARAMETER, HYPERNYM_FILE); expect(multimapFileReaderFactory.createMultimapFileReader(HYPERNYM_FILE)).andReturn(multimapFileReader); expect(multimapFileReader.readMultimap()).andReturn(hypernyms); replay(multimapFileReaderFactory); replay(multimapFileReader); HypernymFilter hypernymFilter = (HypernymFilter) hypernymFilterFactory.createTokenFilter(tokenStream, properties); Map>> mappings = hypernymFilterFactory.getCachedMappings(); verify(multimapFileReaderFactory); verify(multimapFileReader); Map> mapping = mappings.get(HYPERNYM_FILE); assertEquals(hypernyms, mapping); assertEquals(hypernyms, hypernymFilter.getHypernyms()); // test caching reset(multimapFileReaderFactory); reset(multimapFileReader); replay(multimapFileReaderFactory); replay(multimapFileReader); hypernymFilter = (HypernymFilter) hypernymFilterFactory.createTokenFilter(tokenStream, properties); verify(multimapFileReaderFactory); verify(multimapFileReader); assertEquals(hypernyms, hypernymFilter.getHypernyms()); } public void testPreloadResources() throws Exception{ Properties properties = new Properties(); properties.setProperty(HypernymFilterFactory.FILE_PATH_PARAMETER, HYPERNYM_FILE); expect(multimapFileReaderFactory.createMultimapFileReader(FILE_ENTRY)).andReturn(multimapFileReader); expect(multimapFileReader.readMultimap()).andReturn(hypernyms); hypernymFilterFactory.preloadResources(properties); Map>> mappings = hypernymFilterFactory.getCachedMappings(); verify(multimapFileReaderFactory); verify(multimapFileReader); Map> mapping = mappings.get(HYPERNYM_FILE); assertEquals(hypernyms, mapping); // test caching reset(multimapFileReaderFactory); reset(multimapFileReader); replay(multimapFileReaderFactory); replay(multimapFileReader); hypernymFilterFactory.preloadResources(properties); mappings = hypernymFilterFactory.getCachedMappings(); verify(multimapFileReaderFactory); verify(multimapFileReader); mapping = mappings.get(HYPERNYM_FILE); assertEquals(hypernyms, mapping); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/PositionFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/PositionFilterFactoryTe0000644000175000017500000000435411625126524033433 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.util.Properties; import static org.junit.Assert.assertEquals; public class PositionFilterFactoryTest { private TokenFilterFactory positionFilterFactory; private TokenStream tokenStream; @Before public void setUp(){ positionFilterFactory = new PositionFilterFactory(); tokenStream = new DummyTokenStream("dummy", 1, 1, 0); } @Test public void testCreateTokenFilter() throws IOException{ Properties properties = new Properties(); properties.setProperty(PositionFilterFactory.POSITION_PARAMETER, PositionFilterFactory.FIRST_POSITION_PARAMETER_VALUE); PositionFilter positionTokenFilter = (PositionFilter) positionFilterFactory.createTokenFilter(tokenStream, properties); assertEquals(PositionFilter.FIRST_POSITION, positionTokenFilter.getPosition()); properties = new Properties(); properties.setProperty(PositionFilterFactory.POSITION_PARAMETER, PositionFilterFactory.LAST_POSITION_PARAMETER_VALUE); positionTokenFilter = (PositionFilter) positionFilterFactory.createTokenFilter(tokenStream, properties); assertEquals(PositionFilter.LAST_POSITION, positionTokenFilter.getPosition()); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/UppercaseFilterTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/UppercaseFilterTest.jav0000644000175000017500000000422211625126524033346 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.UpperCaseFilter; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import static org.apache.uima.lucas.indexer.util.TokenFactory.*; public class UppercaseFilterTest extends TestCase { public void testNext() throws Exception{ List tokens = new ArrayList(); tokens.add(newToken("token1", 0, 6)); tokens.add(newToken("token2", 7, 13)); tokens.add(newToken("token3", 14, 20)); TokenStream tokenStream = new CollectionTokenStream(tokens ); UpperCaseFilter upperCaseTokenFilter = new UpperCaseFilter(tokenStream); Token next = new Token(); upperCaseTokenFilter.next(next); String nextString = new String(next.termBuffer(), 0, next.termLength()); assertEquals("TOKEN1", nextString); next = upperCaseTokenFilter.next(next); nextString = new String(next.termBuffer(), 0, next.termLength()); assertEquals("TOKEN2", nextString); next = upperCaseTokenFilter.next(next); nextString = new String(next.termBuffer(), 0, next.termLength()); assertEquals("TOKEN3", nextString); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/SnowballFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/SnowballFilterFactoryTe0000644000175000017500000000356611625126524033414 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.snowball.SnowballFilter; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.junit.Before; import org.junit.Test; import java.util.Properties; import static org.junit.Assert.assertNotNull; public class SnowballFilterFactoryTest { private static final String PORTER = "Porter"; private TokenStream tokenStream; private SnowballFilterFactory snowballFilterFactory; @Before public void setUp(){ tokenStream = new DummyTokenStream("dummy", 1, 1, 0); snowballFilterFactory = new SnowballFilterFactory(); } @Test public void testCreateTokenFilter() throws Exception{ Properties properties = new Properties(); properties.setProperty(SnowballFilterFactory.STEMMER_NAME_PARAMETER, PORTER); SnowballFilter snowballFilter = (SnowballFilter) snowballFilterFactory.createTokenFilter(tokenStream, properties ); assertNotNull(snowballFilter); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/PositionFilterTest.java0000644000175000017500000000467611625126524033401 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Collection; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.PositionFilter; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import org.junit.Test; import static org.apache.uima.lucas.indexer.util.TokenFactory.*; public class PositionFilterTest { @Test public void testNext() throws Exception{ Collection tokens = new ArrayList(); tokens.add(newToken("token1", 0, 6)); tokens.add(newToken("token1", 7, 13)); tokens.add(newToken("token2", 14, 20)); tokens.add(newToken("token2", 21, 27)); tokens.add(newToken("token3", 28, 33)); tokens.add(newToken("token4", 34, 40)); TokenStream tokenStream = new CollectionTokenStream(tokens); TokenFilter filter = new PositionFilter(tokenStream, PositionFilter.FIRST_POSITION); Token nextToken = new Token(); filter.next(nextToken); assertNotNull(nextToken); assertEquals("token1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertNull(nextToken); nextToken = new Token(); filter = new PositionFilter(tokenStream, PositionFilter.LAST_POSITION); nextToken = filter.next(nextToken); assertNotNull(nextToken); assertEquals("token4", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = filter.next(nextToken); assertNull(nextToken); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/ReplaceFilterFactoryTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/ReplaceFilterFactoryTes0000644000175000017500000001065511625126524033366 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.test.util.DummyTokenStream; import org.apache.uima.lucas.indexer.util.MapFileReader; import org.apache.uima.lucas.indexer.util.MapFileReaderFactory; import org.junit.Before; import org.junit.Test; import java.util.HashMap; import java.util.Map; import java.util.Properties; import static org.easymock.EasyMock.expect; import static org.easymock.classextension.EasyMock.*; import static org.junit.Assert.assertEquals; public class ReplaceFilterFactoryTest { private static final String TEST_FILE_1 = "src/test/resources/ReplaceFilterFactoryTest1.txt"; private ReplaceFilterFactory replaceFilterFactory; private MapFileReaderFactory mapFileReaderFactory; private MapFileReader mapFileReader; private TokenStream tokenStream; private Map mapping; @Before public void setUp(){ mapFileReaderFactory = createMock(MapFileReaderFactory.class); mapFileReader= createMock(MapFileReader.class); replaceFilterFactory = new ReplaceFilterFactory(mapFileReaderFactory); tokenStream = new DummyTokenStream("dummy", 1, 1, 0); mapping = new HashMap(); } @Test public void testCreateTokenFilter() throws Exception{ Properties properties = new Properties(); properties.setProperty(ReplaceFilterFactory.FILE_PATH_PARAMETER, TEST_FILE_1); expect(mapFileReaderFactory.createMapFileReader(TEST_FILE_1)).andReturn(mapFileReader); expect(mapFileReader.readMap()).andReturn(mapping); replay(mapFileReaderFactory); replay(mapFileReader); TokenFilter tokenFilter = replaceFilterFactory.createTokenFilter(tokenStream, properties); assertEquals(ReplaceFilter.class, tokenFilter.getClass()); ReplaceFilter replaceFilter = (ReplaceFilter) tokenFilter; assertEquals(mapping, replaceFilter.getMapping()); verify(mapFileReaderFactory); verify(mapFileReader); reset(mapFileReaderFactory); reset(mapFileReader); replay(mapFileReaderFactory); replay(mapFileReader); // test caching (no calls of buffered reader) tokenFilter = replaceFilterFactory.createTokenFilter(tokenStream, properties); verify(mapFileReaderFactory); verify(mapFileReader); replaceFilter = (ReplaceFilter) tokenFilter; assertEquals(mapping, replaceFilter.getMapping()); } @Test public void testPreloadResources() throws Exception{ Properties properties = new Properties(); properties.setProperty(ReplaceFilterFactory.FILE_PATH_PARAMETER, TEST_FILE_1); expect(mapFileReaderFactory.createMapFileReader(TEST_FILE_1)).andReturn(mapFileReader); expect(mapFileReader.readMap()).andReturn(mapping); replay(mapFileReaderFactory); replay(mapFileReader); replaceFilterFactory.preloadResources(properties); Map cachedMapping = replaceFilterFactory.getCachedMappings().get(TEST_FILE_1); assertEquals(mapping, cachedMapping); verify(mapFileReaderFactory); verify(mapFileReader); reset(mapFileReaderFactory); reset(mapFileReader); replay(mapFileReaderFactory); replay(mapFileReader); // test caching (no calls of buffered reader) replaceFilterFactory.preloadResources(properties); cachedMapping = replaceFilterFactory.getCachedMappings().get(TEST_FILE_1); assertEquals(mapping, cachedMapping); verify(mapFileReaderFactory); verify(mapFileReader); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/SplitterFilterTest.java0000644000175000017500000000635711625126524033401 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.ArrayList; import java.util.Collection; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.SplitterFilter; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import org.junit.Test; import static org.apache.uima.lucas.indexer.util.TokenFactory.*; public class SplitterFilterTest { @Test public void testNext() throws Exception{ Collection tokens = new ArrayList(); tokens.add(newToken("token1 token2 token3", 0, 6)); tokens.add(newToken("token4 token5 token6", 7, 13)); TokenStream tokenStream = new CollectionTokenStream(tokens); TokenFilter filter = new SplitterFilter(tokenStream, " "); Token nextToken = new Token(); filter.next(nextToken); assertNotNull(nextToken); assertEquals("token1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = filter.next(nextToken); assertNotNull(nextToken); assertEquals("token2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = filter.next(nextToken); assertNotNull(nextToken); assertEquals("token3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(0, nextToken.startOffset()); assertEquals(6, nextToken.endOffset()); nextToken = filter.next(nextToken); assertNotNull(nextToken); assertEquals("token4", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = filter.next(nextToken); assertNotNull(nextToken); assertEquals("token5", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); nextToken = filter.next(nextToken); assertNotNull(nextToken); assertEquals("token6", new String(nextToken.termBuffer(), 0, nextToken.termLength())); assertEquals(7, nextToken.startOffset()); assertEquals(13, nextToken.endOffset()); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/TokenStreamConcatenatorTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/analysis/TokenStreamConcatenator0000644000175000017500000000731611625126524033436 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.analysis; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.TokenStreamConcatenator; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import junit.framework.TestCase; import static org.apache.uima.lucas.indexer.util.TokenFactory.*; public class TokenStreamConcatenatorTest extends TestCase { public void testNext() throws Exception{ Collection tokenStreams = new ArrayList(); List tokens = new ArrayList(); tokens.add(newToken("token1", 0, 6)); tokens.add(newToken("token2", 7, 13)); tokens.add(newToken("token3", 14, 20)); TokenStream tokenStream = new CollectionTokenStream(tokens ); tokenStreams.add(tokenStream); tokens = new ArrayList(); tokens.add(newToken("token4", 21, 27)); tokens.add(newToken("token5", 28, 33)); tokens.add(newToken("token6", 34, 40)); tokenStream = new CollectionTokenStream(tokens ); tokenStreams.add(tokenStream); TokenStreamConcatenator concatenator = new TokenStreamConcatenator(tokenStreams); Token nextToken = new Token(); concatenator.next(nextToken); assertEquals("token1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token4", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token5", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token6", new String(nextToken.termBuffer(), 0, nextToken.termLength())); concatenator.reset(); nextToken = concatenator.next(nextToken); assertEquals("token1", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token2", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token3", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token4", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token5", new String(nextToken.termBuffer(), 0, nextToken.termLength())); nextToken = concatenator.next(nextToken); assertEquals("token6", new String(nextToken.termBuffer(), 0, nextToken.termLength())); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/DocumentBuilderTest.java0000644000175000017500000000405011625126526031655 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import static org.easymock.classextension.EasyMock.createMock; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.uima.cas.CASException; import org.apache.uima.lucas.indexer.DocumentBuilder; import org.junit.Before; import org.junit.Test; public class DocumentBuilderTest { private Field field1; private Field field2; private DocumentBuilder documentBuilder; private Collection fields; @Before public void setUp(){ documentBuilder = new DocumentBuilder(); field1 = new Field("field1", createMock(TokenStream.class)); field2 = new Field("field2", createMock(TokenStream.class)); fields = new ArrayList(); fields.add(field1); fields.add(field2); } @Test public void testCreateDocument() throws CASException, IOException{ Document document = documentBuilder.createDocument(fields); assertEquals(field1, document.getField("field1")); assertEquals(field2, document.getField("field2")); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/DummyTokenFilterFactory.java0000644000175000017500000000266111625126526032530 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.LowerCaseFilter; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.TokenFilterFactory; public class DummyTokenFilterFactory implements TokenFilterFactory { public TokenFilter createTokenFilter(TokenStream tokenStream, Properties properties) { return new LowerCaseFilter(tokenStream); } public void preloadResources(Properties properties) throws IOException { } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/TokenizerTest.java0000644000175000017500000000531111625126526030543 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Collection; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.WhitespaceTokenizer; import org.apache.lucene.analysis.standard.StandardTokenizer; import org.apache.uima.lucas.indexer.Tokenizer; import org.apache.uima.lucas.indexer.mapping.AnnotationDescription; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import org.junit.Before; import org.junit.Test; public class TokenizerTest { private Tokenizer tokenizer; private AnnotationDescription annotationDescription; private TokenStream tokenStream; @Before public void setUp(){ tokenizer = new Tokenizer(); annotationDescription = new AnnotationDescription(null); Collection tokens = new ArrayList(); tokens.add(new Token("token1".toCharArray(),0,6,0,6)); tokens.add(new Token("token2".toCharArray(),0,6,7,13)); tokens.add(new Token("token3".toCharArray(),0,6,14,20)); tokenStream = new CollectionTokenStream(tokens); } @Test public void testTokenizeWhiteSpace() throws Exception{ annotationDescription.setTokenizer(Tokenizer.TOKENIZER_WHITESPACE); assertTrue(tokenizer.needsTokenization(annotationDescription)); TokenStream reTokenizedTokenStream = tokenizer.tokenize(tokenStream, annotationDescription); assertTrue(reTokenizedTokenStream instanceof WhitespaceTokenizer ); } @Test public void testTokenizeStandard() throws Exception{ annotationDescription.setTokenizer(Tokenizer.TOKENIZER_STANDARD); assertTrue(tokenizer.needsTokenization(annotationDescription)); TokenStream reTokenizedTokenStream = tokenizer.tokenize(tokenStream, annotationDescription); assertTrue(reTokenizedTokenStream instanceof StandardTokenizer ); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/AnnotationTokenStreamBuilderTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/AnnotationTokenStreamBuilderTest0000644000175000017500000001411111625126526033445 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import static org.junit.Assert.*; import java.text.DecimalFormat; import org.apache.lucene.analysis.Token; import org.apache.uima.UIMAFramework; import org.apache.uima.cas.Type; import org.apache.uima.collection.CollectionReader; import org.apache.uima.collection.CollectionReaderDescription; import org.apache.uima.lucas.indexer.AnnotationTokenStreamBuilder; import org.apache.uima.lucas.indexer.analysis.AnnotationTokenStream; import org.apache.uima.lucas.indexer.mapping.AnnotationDescription; import org.apache.uima.lucas.indexer.mapping.FeatureDescription; import org.apache.uima.lucas.indexer.types.test.Annotation1; import org.apache.uima.lucas.indexer.types.test.FeatureStructure1; import org.apache.uima.lucas.indexer.types.test.FeatureStructure2; import org.apache.uima.jcas.JCas; import org.apache.uima.util.CasCreationUtils; import org.apache.uima.util.XMLInputSource; import org.junit.Before; import org.junit.Test; public class AnnotationTokenStreamBuilderTest { private final static String READER_DESCRIPTOR = "src/test/resources/AnnotationTokenStreamTestDummyCollectionReader.xml"; private static final String DOCUMENT_TEXT = "token1 token2 token3"; private CollectionReader reader; private JCas cas; private AnnotationDescription annotationDescription; private AnnotationTokenStreamBuilder annotationTokenStreamBuilder; private Type annotation1Type; private Annotation1 annotation1; @Before public void setUp() throws Exception { CollectionReaderDescription readerDescription = (CollectionReaderDescription) UIMAFramework.getXMLParser().parseCollectionReaderDescription(new XMLInputSource(READER_DESCRIPTOR)); reader = UIMAFramework.produceCollectionReader(readerDescription); cas = CasCreationUtils.createCas(reader.getProcessingResourceMetaData()).getJCas(); cas.setDocumentText(DOCUMENT_TEXT); annotation1 = new Annotation1(cas); annotation1.setBegin(0); annotation1.setEnd(6); annotation1.addToIndexes(); annotation1Type = annotation1.getType(); annotationDescription = new AnnotationDescription(); annotationDescription.setType(annotation1Type.getName()); annotationTokenStreamBuilder = new AnnotationTokenStreamBuilder(); } @Test public void testBuildCoveredTextAnnotationTokenStream() throws Exception{ AnnotationTokenStream annotationTokenStream = annotationTokenStreamBuilder.createAnnotationTokenStream(cas, annotationDescription); assertEquals(annotation1Type, annotationTokenStream.getAnnotationType()); assertEquals(0, annotationTokenStream.getFeatureNames().size()); assertEquals(0, annotationTokenStream.getFeatureFormats().size()); assertEquals("token1", annotationTokenStream.next(new Token()).term()); } @Test public void testBuildFeatureAnnotationTokenStream() throws Exception{ annotation1.setFeatureString("token1Feature1"); annotationDescription.getFeatureDescriptions().add(new FeatureDescription("featureString")); AnnotationTokenStream annotationTokenStream = annotationTokenStreamBuilder.createAnnotationTokenStream(cas, annotationDescription); assertEquals(annotation1Type, annotationTokenStream.getAnnotationType()); assertEquals(1, annotationTokenStream.getFeatureNames().size()); assertEquals(0, annotationTokenStream.getFeatureFormats().size()); assertEquals("token1Feature1", annotationTokenStream.next(new Token()).term()); } @Test public void testBuildFeatureAnnotationTokenStreamWithFormat() throws Exception{ annotation1.setFeatureInteger(3); FeatureDescription featureDescription = new FeatureDescription("featureInteger"); featureDescription.setNumberFormat("##"); annotationDescription.getFeatureDescriptions().add(featureDescription); AnnotationTokenStream annotationTokenStream = annotationTokenStreamBuilder.createAnnotationTokenStream(cas, annotationDescription); assertEquals(annotation1Type, annotationTokenStream.getAnnotationType()); assertEquals(1, annotationTokenStream.getFeatureNames().size()); assertEquals(1, annotationTokenStream.getFeatureFormats().size()); assertTrue(annotationTokenStream.getFeatureFormats().get("featureInteger") instanceof DecimalFormat); assertEquals("3", annotationTokenStream.next(new Token()).term()); } @Test public void testBuildFeaturePathAnnotationTokenStream() throws Exception{ FeatureStructure1 featureStructure1 = new FeatureStructure1(cas); featureStructure1.setFeature1("token1Feature1"); FeatureStructure2 featureStructure2 = new FeatureStructure2(cas); featureStructure2.setFeature1("token1Feature3Feature1"); featureStructure1.setFeature3(featureStructure2); annotation1.setFeatureStructure1(featureStructure1); annotationDescription.getFeatureDescriptions().add(new FeatureDescription("feature1")); annotationDescription.setFeaturePath("featureStructure1"); AnnotationTokenStream annotationTokenStream = annotationTokenStreamBuilder.createAnnotationTokenStream(cas, annotationDescription); assertEquals(annotation1Type, annotationTokenStream.getAnnotationType()); assertEquals(1, annotationTokenStream.getFeatureNames().size()); assertEquals(0, annotationTokenStream.getFeatureFormats().size()); assertEquals("token1Feature1", annotationTokenStream.next(new Token()).term()); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/test/0000755000175000017500000000000011625126524026043 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/test/util/0000755000175000017500000000000011625126524027020 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/test/util/DummyTokenStream.java0000644000175000017500000000535611625126524033144 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.test.util; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.analysis.tokenattributes.TermAttribute; import java.io.IOException; public class DummyTokenStream extends TokenStream{ private int count = 0; private String tokenValue; private int distance; private int number; private int begin; private int end; private int offset; private boolean firstToken = true; private OffsetAttribute offsetAtt; private TermAttribute termAtt; public DummyTokenStream(String tokenValue, int distance, int number, int offset) { this.tokenValue = tokenValue; this.distance = distance; this.number = number; this.offset = offset; if( offset > 0 ){ count = offset; begin = count * (tokenValue.length() + 1); end = count * (tokenValue.length() + 1) + tokenValue.length(); } else{ begin = 0; end = tokenValue.length(); } // set initial attributes offsetAtt = (OffsetAttribute)addAttribute(OffsetAttribute.class); offsetAtt.setOffset(begin, end); termAtt = (TermAttribute)addAttribute(TermAttribute.class); termAtt.setTermBuffer(tokenValue); } @Override public boolean incrementToken() throws IOException { if( number <= count / distance ) return false; // for the first token just return the initial values if (firstToken) { firstToken = false; return true; } count += distance; begin+= distance* (tokenValue.length() + 1); end+= distance* (tokenValue.length() + 1); offsetAtt.setOffset(begin, end); return begin < (offset * (tokenValue.length() + 1) + (number - 1) * distance * (tokenValue.length() + 1) + tokenValue.length()); } public String toString() { return "tokenValue: " + tokenValue + ", distance: " + distance + ", number: " + number + ", offset: " + offset; } }././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/test/util/CollectionTokenStream.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/test/util/CollectionTokenStream.0000644000175000017500000000330711625126524033274 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.test.util; import java.io.IOException; import java.util.Collection; import java.util.Iterator; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; public class CollectionTokenStream extends TokenStream{ private Iterator tokenIterator; private Collection tokens; public CollectionTokenStream(Collection tokens) { super(); this.tokenIterator = tokens.iterator(); this.tokens = tokens; } @Override public Token next(Token nextToken) throws IOException { if( tokenIterator.hasNext() ){ Token nextCollectionToken = tokenIterator.next(); nextToken.reinit(nextCollectionToken); return nextToken; } else return null; } @Override public void reset() throws IOException { super.reset(); this.tokenIterator = tokens.iterator(); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/test/util/MockCollectionReader.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/test/util/MockCollectionReader.j0000644000175000017500000000312011625126524033217 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.test.util; import java.io.IOException; import org.apache.uima.cas.CAS; import org.apache.uima.collection.CollectionException; import org.apache.uima.collection.CollectionReader_ImplBase; import org.apache.uima.util.Progress; public class MockCollectionReader extends CollectionReader_ImplBase { public void getNext(CAS arg0) throws IOException, CollectionException { // TODO Auto-generated method stub } public void close() throws IOException { // TODO Auto-generated method stub } public Progress[] getProgress() { // TODO Auto-generated method stub return null; } public boolean hasNext() throws IOException, CollectionException { // TODO Auto-generated method stub return false; } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/FilterBuilderTest.java0000644000175000017500000001216011625126526031325 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.LowerCaseFilter; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.uima.lucas.indexer.analysis.TokenFilterFactory; import org.apache.uima.lucas.indexer.mapping.FilterDescription; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import org.junit.Before; import org.junit.Test; public class FilterBuilderTest { private static final String LOWER_CASE_FACTORY_ID = "lowerCaseFactory"; private FilterBuilder filterBuilder; private TokenStream tokenStream; @Before public void setUp(){ Collection tokens = new ArrayList(); tokens.add(new Token("token1".toCharArray(),0,6,0,6)); tokens.add(new Token("token2".toCharArray(),0,6,7,13)); tokens.add(new Token("token3".toCharArray(),0,6,14,20)); tokenStream = new CollectionTokenStream(tokens); filterBuilder = new FilterBuilder(new HashMap()); } @Test public void testFilterWithoutFactory() throws Exception{ Collection filterDescriptions = new ArrayList(); filterDescriptions.add(new FilterDescription(LowerCaseFilter.class.getCanonicalName(), null, null, false, null)); TokenStream filteredTokenStream = filterBuilder.filter(tokenStream, filterDescriptions); assertEquals(LowerCaseFilter.class, filteredTokenStream.getClass()); } @Test public void testFilterWithFactory() throws Exception{ Collection filterDescriptions = new ArrayList(); filterDescriptions.add(new FilterDescription(null, DummyTokenFilterFactory.class.getCanonicalName(), null, false, null)); TokenStream filteredTokenStream = filterBuilder.filter(tokenStream, filterDescriptions); assertEquals(LowerCaseFilter.class, filteredTokenStream.getClass()); } @Test public void testFilterWithNamedAndCachedFactory() throws Exception{ Collection filterDescriptions = new ArrayList(); filterDescriptions.add(new FilterDescription(null, DummyTokenFilterFactory.class.getCanonicalName(), LOWER_CASE_FACTORY_ID, true, null)); TokenStream filteredTokenStream = filterBuilder.filter(tokenStream, filterDescriptions); assertEquals(LowerCaseFilter.class, filteredTokenStream.getClass()); Map cachedFactories = filterBuilder.getCachedFactories(); assertEquals(LOWER_CASE_FACTORY_ID, cachedFactories.keySet().iterator().next()); assertTrue(cachedFactories.get(LOWER_CASE_FACTORY_ID) instanceof DummyTokenFilterFactory); // test caching filterDescriptions = new ArrayList(); filterDescriptions.add(new FilterDescription(null, null, LOWER_CASE_FACTORY_ID, true, null)); TokenFilterFactory factory = createMock(TokenFilterFactory.class); expect(factory.createTokenFilter(tokenStream, null)).andReturn(null); replay(factory); cachedFactories.put(LOWER_CASE_FACTORY_ID, factory); filterBuilder.filter(tokenStream, filterDescriptions); verify(factory); } @Test public void testFilterWithPredefinedFactory() throws Exception{ Map predifinedFactories = new HashMap(); // test caching Collection filterDescriptions = new ArrayList(); filterDescriptions.add(new FilterDescription(null, null, LOWER_CASE_FACTORY_ID, true, null)); TokenFilterFactory factory = createMock(TokenFilterFactory.class); expect(factory.createTokenFilter(tokenStream, null)).andReturn(null); replay(factory); predifinedFactories.put(LOWER_CASE_FACTORY_ID, factory); filterBuilder = new FilterBuilder(predifinedFactories); filterBuilder.filter(tokenStream, filterDescriptions); verify(factory); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/FieldBuilderTest.java0000644000175000017500000003533111625126526031130 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.isA; import static org.easymock.classextension.EasyMock.createMock; import static org.easymock.classextension.EasyMock.replay; import static org.easymock.classextension.EasyMock.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.document.Field; import org.apache.uima.jcas.JCas; import org.apache.uima.lucas.indexer.analysis.TokenStreamConcatenator; import org.apache.uima.lucas.indexer.analysis.TokenStreamMerger; import org.apache.uima.lucas.indexer.mapping.AnnotationDescription; import org.apache.uima.lucas.indexer.mapping.FieldDescription; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import org.junit.Before; import org.junit.Test; import com.google.common.collect.Lists; public class FieldBuilderTest { private FieldBuilder fieldBuilder; private FieldDescription fieldDescription; private AnnotationDescription annotationDescription1; private AnnotationDescription annotationDescription2; private JCas cas; private TokenStream tokenStream1; private TokenStream tokenStream2; private List tokenStreams; private FilterBuilder filterBuilder; @Before public void setUp(){ annotationDescription1= new AnnotationDescription("uima.cas.Annotation"); annotationDescription2= new AnnotationDescription("uima.cas.Annotation"); filterBuilder = createMock(FilterBuilder.class); fieldBuilder = new FieldBuilder(filterBuilder); cas = createMock(JCas.class); Collection tokens1 = new ArrayList(); tokens1.add(new Token("token1".toCharArray(),0,6,0,6)); tokens1.add(new Token("token2".toCharArray(),0,6,7,13)); tokens1.add(new Token("token3".toCharArray(),0,6,14,20)); Collection tokens2 = new ArrayList(); tokens2.add(new Token("token4".toCharArray(),0,6,0,6)); tokens2.add(new Token("token5".toCharArray(),0,6,7,13)); tokens2.add(new Token("token6".toCharArray(),0,6,14,20)); tokenStream1 = new CollectionTokenStream(tokens1); tokenStream2 = new CollectionTokenStream(tokens2); tokenStreams = Lists.newArrayList(tokenStream1, tokenStream2); fieldDescription = new FieldDescription("field1"); fieldDescription.getAnnotationDescriptions().add(annotationDescription1); fieldDescription.getAnnotationDescriptions().add(annotationDescription2); fieldDescription.setFilterDescriptions(Collections.EMPTY_LIST); } @Test public void testCreateFieldConcatenated() throws Exception{ fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_YES); TokenStream tokenStream = createMock(TokenStream.class); expect(filterBuilder.filter(isA(TokenStreamConcatenator.class), isA(Collection.class))).andReturn(tokenStream); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertEquals(tokenStream, field1.tokenStreamValue()); } @Test public void testCreateFieldMerged() throws Exception{ fieldDescription.setMerge(true); fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_YES); TokenStream tokenStream = createMock(TokenStream.class); expect(filterBuilder.filter(isA(TokenStreamMerger.class), isA(Collection.class))).andReturn(tokenStream); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertEquals(tokenStream, field1.tokenStreamValue()); } @Test public void testCreateFieldNoIndex() throws Exception{ fieldDescription.setMerge(true); fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_NO); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); assertEquals(0, fields.size()); } @Test public void testCreateFieldNoNorms() throws Exception{ fieldDescription.setMerge(true); fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_NO_NORMS); TokenStream tokenStream = createMock(TokenStream.class); expect(filterBuilder.filter(isA(TokenStreamMerger.class), isA(Collection.class))).andReturn(tokenStream); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertTrue(field1.getOmitNorms()); assertTrue(field1.isIndexed()); assertFalse(field1.isStored()); } @Test public void testCreateFieldNoTF() throws Exception{ fieldDescription.setMerge(true); fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_NO_TF); TokenStream tokenStream = createMock(TokenStream.class); expect(filterBuilder.filter(isA(TokenStreamMerger.class), isA(Collection.class))).andReturn(tokenStream); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertTrue(field1.getOmitTf()); assertFalse(field1.getOmitNorms()); assertTrue(field1.isIndexed()); assertFalse(field1.isStored()); } @Test public void testCreateFieldNoNormsTF() throws Exception{ fieldDescription.setMerge(true); fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_NO_NORMS_TF); TokenStream tokenStream = createMock(TokenStream.class); expect(filterBuilder.filter(isA(TokenStreamMerger.class), isA(Collection.class))).andReturn(tokenStream); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertTrue(field1.getOmitTf()); assertTrue(field1.getOmitNorms()); assertTrue(field1.isIndexed()); assertFalse(field1.isStored()); } @Test public void testCreateFieldTermVector() throws Exception{ fieldDescription.setMerge(true); fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_YES); fieldDescription.setTermVector(FieldBuilder.FIELD_TERM_VECTOR_YES); tokenStreams.remove(1); TokenStream tokenStream = createMock(TokenStream.class); expect(filterBuilder.filter(isA(TokenStreamMerger.class), isA(Collection.class))).andReturn(tokenStream); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertFalse(field1.isStoreOffsetWithTermVector()); assertTrue(field1.isTermVectorStored()); assertFalse(field1.isStorePositionWithTermVector()); } @Test public void testCreateFieldTermVectorOffset() throws Exception{ fieldDescription.setMerge(true); fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_YES); fieldDescription.setTermVector(FieldBuilder.FIELD_TERM_VECTOR_WITH_OFFSETS); tokenStreams.remove(1); TokenStream tokenStream = createMock(TokenStream.class); expect(filterBuilder.filter(isA(TokenStreamMerger.class), isA(Collection.class))).andReturn(tokenStream); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertTrue(field1.isStoreOffsetWithTermVector()); assertTrue(field1.isTermVectorStored()); assertFalse(field1.isStorePositionWithTermVector()); } @Test public void testCreateFieldTermVectorPositions() throws Exception{ fieldDescription.setMerge(true); fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_YES); fieldDescription.setTermVector(FieldBuilder.FIELD_TERM_VECTOR_WITH_POSITIONS); tokenStreams.remove(1); TokenStream tokenStream = createMock(TokenStream.class); expect(filterBuilder.filter(isA(TokenStreamMerger.class), isA(Collection.class))).andReturn(tokenStream); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertFalse(field1.isStoreOffsetWithTermVector()); assertTrue(field1.isTermVectorStored()); assertTrue(field1.isStorePositionWithTermVector()); } @Test public void testCreateFieldTermVectorOffsetPositions() throws Exception{ fieldDescription.setMerge(true); fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_YES); fieldDescription.setTermVector(FieldBuilder.FIELD_TERM_VECTOR_WITH_POSITIONS_OFFSETS); tokenStreams.remove(1); TokenStream tokenStream = createMock(TokenStream.class); expect(filterBuilder.filter(isA(TokenStreamMerger.class), isA(Collection.class))).andReturn(tokenStream); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertTrue(field1.isStoreOffsetWithTermVector()); assertTrue(field1.isTermVectorStored()); assertTrue(field1.isStorePositionWithTermVector()); } @Test public void testCreateFieldIndexStored() throws Exception{ fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_YES); fieldDescription.setStored(FieldBuilder.FIELD_STORE_YES); tokenStreams.remove(1); expect(filterBuilder.filter(isA(TokenStream.class), isA(Collection.class))).andReturn(tokenStream1); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); assertEquals(4, fields.size()); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertFalse(field1.isIndexed()); assertTrue(field1.isStored()); assertEquals("token1", field1.stringValue()); Field field2 = fieldIterator.next(); assertEquals("field1", field2.name()); assertFalse(field2.isIndexed()); assertTrue(field2.isStored()); assertEquals("token2", field2.stringValue()); Field field3 = fieldIterator.next(); assertEquals("field1", field3.name()); assertFalse(field3.isIndexed()); assertTrue(field3.isStored()); assertEquals("token3", field3.stringValue()); Field field4 = fieldIterator.next(); assertEquals("field1", field4.name()); assertTrue(field4.isIndexed()); assertFalse(field4.isStored()); } @Test public void testCreateFieldIndexStoredDelimiter() throws Exception{ fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_YES); fieldDescription.setStored(FieldBuilder.FIELD_STORE_YES); fieldDescription.setDelimiter(" "); tokenStreams.remove(1); expect(filterBuilder.filter(isA(TokenStream.class), isA(Collection.class))).andReturn(tokenStream1); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); assertEquals(2, fields.size()); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertFalse(field1.isIndexed()); assertTrue(field1.isStored()); assertEquals("token1 token2 token3", field1.stringValue()); Field field2 = fieldIterator.next(); assertEquals("field1", field2.name()); assertTrue(field2.isIndexed()); assertFalse(field2.isStored()); } @Test public void testCreateFieldIndexStoredCompress() throws Exception{ fieldDescription.setIndex(FieldBuilder.FIELD_INDEX_YES); fieldDescription.setStored(FieldBuilder.FIELD_STORE_COMPRESS); tokenStreams.remove(1); expect(filterBuilder.filter(isA(TokenStream.class), isA(Collection.class))).andReturn(tokenStream1); replay(filterBuilder); Collection fields = fieldBuilder.createFields(tokenStreams, fieldDescription); verify(filterBuilder); assertEquals(4, fields.size()); Iterator fieldIterator = fields.iterator(); Field field1 = fieldIterator.next(); assertEquals("field1", field1.name()); assertFalse(field1.isIndexed()); assertTrue(field1.isStored()); assertTrue(field1.isCompressed()); assertEquals("token1", field1.stringValue()); Field field2 = fieldIterator.next(); assertEquals("field1", field2.name()); assertFalse(field2.isIndexed()); assertTrue(field2.isStored()); assertTrue(field2.isCompressed()); assertEquals("token2", field2.stringValue()); Field field3 = fieldIterator.next(); assertEquals("field1", field3.name()); assertFalse(field3.isIndexed()); assertTrue(field3.isStored()); assertTrue(field3.isCompressed()); assertEquals("token3", field3.stringValue()); Field field4 = fieldIterator.next(); assertEquals("field1", field4.name()); assertTrue(field4.isIndexed()); assertFalse(field4.isStored()); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/mapping/0000755000175000017500000000000011625126526026521 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/mapping/MappingFileReaderTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/mapping/MappingFileReaderTest.ja0000644000175000017500000001422311625126526033215 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.mapping; import static org.junit.Assert.*; import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Properties; import javax.xml.parsers.SAXParserFactory; import org.junit.Before; import org.junit.Test; import org.xml.sax.SAXException; public class MappingFileReaderTest { private static final String FACTORY_NAME = "myFactory"; private static final String TESTFACTORY = "testfactory"; private static final String NUMBER_FORMAT = "##"; private static final String FEATURE_NAME = "featureInteger"; private static final String TOKENIZER = "cas"; private static final String VALUE_DELIMITER_STRING = "aValueDelimiterString"; private static final String FEATURE_PATH = "aFeaturePath"; private static final String SOFA = "aSofa"; private static final String ANNOTATION1_TYPE = "de.julielab.jules.types.test.Annotation1"; private static final String VALUE = "value"; private static final String KEY = "key"; private static final String TESTCLASS = "testfilter"; private static final String NO = "no"; private static final String YES = "yes"; private static final String FIELD_NAME = "annotation1"; private static final String MAPPING_FILE = "src/test/resources/MappingFileReaderTest.xml"; private MappingFileReader mappingFileReader; @Before public void setUp() throws Exception{ Map> elementMappers = new HashMap>(); elementMappers.put(MappingFileReader.ANNOTATION, new AnnotationMapper()); elementMappers.put(MappingFileReader.FILTER, new FilterMapper()); elementMappers.put(MappingFileReader.FIELD, new FieldMapper()); elementMappers.put(MappingFileReader.FEATURE, new FeatureMapper()); mappingFileReader = new MappingFileReader(SAXParserFactory.newInstance().newSAXParser(), elementMappers); } @Test public void testCreateFieldDescriptions() throws IOException, SAXException{ Collection fieldDescriptions = mappingFileReader.readFieldDescriptionsFromFile(new File(MAPPING_FILE)); assertEquals(1, fieldDescriptions.size()); FieldDescription fieldDescription = fieldDescriptions.iterator().next(); assertEquals(FIELD_NAME, fieldDescription.getName()); assertEquals(YES, fieldDescription.getIndex()); assertEquals(NO, fieldDescription.getTermVector()); assertEquals(YES, fieldDescription.getStored()); assertEquals(true, fieldDescription.getMerge()); assertEquals(26, fieldDescription.getLineNumber()); assertEquals(16, fieldDescription.getColumnNumber()); Collection filterDescriptions = fieldDescription.getFilterDescriptions(); assertEquals(1, filterDescriptions.size()); FilterDescription filterDescription = filterDescriptions.iterator().next(); assertEquals(TESTCLASS, filterDescription.getClassName()); assertEquals(TESTFACTORY, filterDescription.getFactoryClassName()); assertEquals(FACTORY_NAME, filterDescription.getName()); assertTrue(filterDescription.isReuseFactory()); assertEquals(29, filterDescription.getLineNumber()); assertEquals(56, filterDescription.getColumnNumber()); Properties properties = filterDescription.getProperties(); assertEquals(VALUE, properties.getProperty(KEY)); Collection annotationDescriptions = fieldDescription.getAnnotationDescriptions(); assertEquals(1, annotationDescriptions.size()); Iterator annotationDescriptionIterator = annotationDescriptions.iterator(); AnnotationDescription annotationDescription = annotationDescriptionIterator.next(); assertEquals(ANNOTATION1_TYPE, annotationDescription.getType()); assertEquals(SOFA, annotationDescription.getSofa()); assertEquals(FEATURE_PATH, annotationDescription.getFeaturePath()); assertEquals(VALUE_DELIMITER_STRING, annotationDescription.getFeatureValueDelimiterString()); assertEquals(TOKENIZER, annotationDescription.getTokenizer()); assertEquals(33, annotationDescription.getLineNumber()); assertEquals(113, annotationDescription.getColumnNumber()); filterDescriptions = annotationDescription.getFilterDescriptions(); assertEquals(1, filterDescriptions.size()); filterDescription = filterDescriptions.iterator().next(); assertEquals(TESTCLASS, filterDescription.getClassName()); assertEquals(TESTFACTORY, filterDescription.getFactoryClassName()); assertEquals(FACTORY_NAME, filterDescription.getName()); assertTrue(filterDescription.isReuseFactory()); assertEquals(36, filterDescription.getLineNumber()); assertEquals(58, filterDescription.getColumnNumber()); properties = filterDescription.getProperties(); assertEquals(VALUE, properties.getProperty(KEY)); Collection featureDescriptions = annotationDescription.getFeatureDescriptions(); assertEquals(1, featureDescriptions.size()); FeatureDescription featureDescription = featureDescriptions.iterator().next(); assertEquals(FEATURE_NAME, featureDescription.getFeatureName()); assertEquals(NUMBER_FORMAT, featureDescription.getNumberFormat()); assertEquals(39, featureDescription.getLineNumber()); assertEquals(57, featureDescription.getColumnNumber()); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/0000755000175000017500000000000011625126524026230 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/0000755000175000017500000000000011625126526027211 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure1_Type.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure1_Typ0000644000175000017500000001575311625126526033400 0ustar drazzibdrazzib /* First created by JCasGen Sat Jul 25 21:50:44 CEST 2009 */ package org.apache.uima.lucas.indexer.types.test; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Sat Jul 25 21:50:44 CEST 2009 * @generated */ public class FeatureStructure1_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (FeatureStructure1_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = FeatureStructure1_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new FeatureStructure1(addr, FeatureStructure1_Type.this); FeatureStructure1_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new FeatureStructure1(addr, FeatureStructure1_Type.this); } }; /** @generated */ public final static int typeIndexID = FeatureStructure1.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); /** @generated */ final Feature casFeat_feature1; /** @generated */ final int casFeatCode_feature1; /** @generated */ public String getFeature1(int addr) { if (featOkTst && casFeat_feature1 == null) jcas.throwFeatMissing("feature1", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); return ll_cas.ll_getStringValue(addr, casFeatCode_feature1); } /** @generated */ public void setFeature1(int addr, String v) { if (featOkTst && casFeat_feature1 == null) jcas.throwFeatMissing("feature1", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); ll_cas.ll_setStringValue(addr, casFeatCode_feature1, v);} /** @generated */ final Feature casFeat_feature2; /** @generated */ final int casFeatCode_feature2; /** @generated */ public String getFeature2(int addr) { if (featOkTst && casFeat_feature2 == null) jcas.throwFeatMissing("feature2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); return ll_cas.ll_getStringValue(addr, casFeatCode_feature2); } /** @generated */ public void setFeature2(int addr, String v) { if (featOkTst && casFeat_feature2 == null) jcas.throwFeatMissing("feature2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); ll_cas.ll_setStringValue(addr, casFeatCode_feature2, v);} /** @generated */ final Feature casFeat_feature3; /** @generated */ final int casFeatCode_feature3; /** @generated */ public int getFeature3(int addr) { if (featOkTst && casFeat_feature3 == null) jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); return ll_cas.ll_getRefValue(addr, casFeatCode_feature3); } /** @generated */ public void setFeature3(int addr, int v) { if (featOkTst && casFeat_feature3 == null) jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); ll_cas.ll_setRefValue(addr, casFeatCode_feature3, v);} /** @generated */ final Feature casFeat_featureStructures2; /** @generated */ final int casFeatCode_featureStructures2; /** @generated */ public int getFeatureStructures2(int addr) { if (featOkTst && casFeat_featureStructures2 == null) jcas.throwFeatMissing("featureStructures2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); return ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures2); } /** @generated */ public void setFeatureStructures2(int addr, int v) { if (featOkTst && casFeat_featureStructures2 == null) jcas.throwFeatMissing("featureStructures2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); ll_cas.ll_setRefValue(addr, casFeatCode_featureStructures2, v);} /** @generated */ public int getFeatureStructures2(int addr, int i) { if (featOkTst && casFeat_featureStructures2 == null) jcas.throwFeatMissing("featureStructures2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); if (lowLevelTypeChecks) return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures2), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures2), i); return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures2), i); } /** @generated */ public void setFeatureStructures2(int addr, int i, int v) { if (featOkTst && casFeat_featureStructures2 == null) jcas.throwFeatMissing("featureStructures2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); if (lowLevelTypeChecks) ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures2), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures2), i); ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures2), i, v); } /** initialize variables to correspond with Cas Type and Features * @generated */ public FeatureStructure1_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_feature1 = jcas.getRequiredFeatureDE(casType, "feature1", "uima.cas.String", featOkTst); casFeatCode_feature1 = (null == casFeat_feature1) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_feature1).getCode(); casFeat_feature2 = jcas.getRequiredFeatureDE(casType, "feature2", "uima.cas.String", featOkTst); casFeatCode_feature2 = (null == casFeat_feature2) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_feature2).getCode(); casFeat_feature3 = jcas.getRequiredFeatureDE(casType, "feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2", featOkTst); casFeatCode_feature3 = (null == casFeat_feature3) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_feature3).getCode(); casFeat_featureStructures2 = jcas.getRequiredFeatureDE(casType, "featureStructures2", "uima.cas.FSArray", featOkTst); casFeatCode_featureStructures2 = (null == casFeat_featureStructures2) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_featureStructures2).getCode(); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/Annotation1_Type.java0000644000175000017500000002454011625126526033255 0ustar drazzibdrazzib /* First created by JCasGen Sat Jul 25 21:50:44 CEST 2009 */ package org.apache.uima.lucas.indexer.types.test; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Sat Jul 25 21:50:44 CEST 2009 * @generated */ public class Annotation1_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Annotation1_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Annotation1_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Annotation1(addr, Annotation1_Type.this); Annotation1_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Annotation1(addr, Annotation1_Type.this); } }; /** @generated */ public final static int typeIndexID = Annotation1.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.lucas.indexer.types.test.Annotation1"); /** @generated */ final Feature casFeat_featureString; /** @generated */ final int casFeatCode_featureString; /** @generated */ public String getFeatureString(int addr) { if (featOkTst && casFeat_featureString == null) jcas.throwFeatMissing("featureString", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return ll_cas.ll_getStringValue(addr, casFeatCode_featureString); } /** @generated */ public void setFeatureString(int addr, String v) { if (featOkTst && casFeat_featureString == null) jcas.throwFeatMissing("featureString", "org.apache.uima.lucas.indexer.types.test.Annotation1"); ll_cas.ll_setStringValue(addr, casFeatCode_featureString, v);} /** @generated */ final Feature casFeat_featureStringArray; /** @generated */ final int casFeatCode_featureStringArray; /** @generated */ public int getFeatureStringArray(int addr) { if (featOkTst && casFeat_featureStringArray == null) jcas.throwFeatMissing("featureStringArray", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return ll_cas.ll_getRefValue(addr, casFeatCode_featureStringArray); } /** @generated */ public void setFeatureStringArray(int addr, int v) { if (featOkTst && casFeat_featureStringArray == null) jcas.throwFeatMissing("featureStringArray", "org.apache.uima.lucas.indexer.types.test.Annotation1"); ll_cas.ll_setRefValue(addr, casFeatCode_featureStringArray, v);} /** @generated */ public String getFeatureStringArray(int addr, int i) { if (featOkTst && casFeat_featureStringArray == null) jcas.throwFeatMissing("featureStringArray", "org.apache.uima.lucas.indexer.types.test.Annotation1"); if (lowLevelTypeChecks) return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStringArray), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_featureStringArray), i); return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStringArray), i); } /** @generated */ public void setFeatureStringArray(int addr, int i, String v) { if (featOkTst && casFeat_featureStringArray == null) jcas.throwFeatMissing("featureStringArray", "org.apache.uima.lucas.indexer.types.test.Annotation1"); if (lowLevelTypeChecks) ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStringArray), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_featureStringArray), i); ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStringArray), i, v); } /** @generated */ final Feature casFeat_featureInteger; /** @generated */ final int casFeatCode_featureInteger; /** @generated */ public int getFeatureInteger(int addr) { if (featOkTst && casFeat_featureInteger == null) jcas.throwFeatMissing("featureInteger", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return ll_cas.ll_getIntValue(addr, casFeatCode_featureInteger); } /** @generated */ public void setFeatureInteger(int addr, int v) { if (featOkTst && casFeat_featureInteger == null) jcas.throwFeatMissing("featureInteger", "org.apache.uima.lucas.indexer.types.test.Annotation1"); ll_cas.ll_setIntValue(addr, casFeatCode_featureInteger, v);} /** @generated */ final Feature casFeat_featureFloat; /** @generated */ final int casFeatCode_featureFloat; /** @generated */ public float getFeatureFloat(int addr) { if (featOkTst && casFeat_featureFloat == null) jcas.throwFeatMissing("featureFloat", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return ll_cas.ll_getFloatValue(addr, casFeatCode_featureFloat); } /** @generated */ public void setFeatureFloat(int addr, float v) { if (featOkTst && casFeat_featureFloat == null) jcas.throwFeatMissing("featureFloat", "org.apache.uima.lucas.indexer.types.test.Annotation1"); ll_cas.ll_setFloatValue(addr, casFeatCode_featureFloat, v);} /** @generated */ final Feature casFeat_featureStructure1; /** @generated */ final int casFeatCode_featureStructure1; /** @generated */ public int getFeatureStructure1(int addr) { if (featOkTst && casFeat_featureStructure1 == null) jcas.throwFeatMissing("featureStructure1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return ll_cas.ll_getRefValue(addr, casFeatCode_featureStructure1); } /** @generated */ public void setFeatureStructure1(int addr, int v) { if (featOkTst && casFeat_featureStructure1 == null) jcas.throwFeatMissing("featureStructure1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); ll_cas.ll_setRefValue(addr, casFeatCode_featureStructure1, v);} /** @generated */ final Feature casFeat_featureStructures1; /** @generated */ final int casFeatCode_featureStructures1; /** @generated */ public int getFeatureStructures1(int addr) { if (featOkTst && casFeat_featureStructures1 == null) jcas.throwFeatMissing("featureStructures1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures1); } /** @generated */ public void setFeatureStructures1(int addr, int v) { if (featOkTst && casFeat_featureStructures1 == null) jcas.throwFeatMissing("featureStructures1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); ll_cas.ll_setRefValue(addr, casFeatCode_featureStructures1, v);} /** @generated */ public int getFeatureStructures1(int addr, int i) { if (featOkTst && casFeat_featureStructures1 == null) jcas.throwFeatMissing("featureStructures1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); if (lowLevelTypeChecks) return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures1), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures1), i); return ll_cas.ll_getRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures1), i); } /** @generated */ public void setFeatureStructures1(int addr, int i, int v) { if (featOkTst && casFeat_featureStructures1 == null) jcas.throwFeatMissing("featureStructures1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); if (lowLevelTypeChecks) ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures1), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures1), i); ll_cas.ll_setRefArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_featureStructures1), i, v); } /** initialize variables to correspond with Cas Type and Features * @generated */ public Annotation1_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_featureString = jcas.getRequiredFeatureDE(casType, "featureString", "uima.cas.String", featOkTst); casFeatCode_featureString = (null == casFeat_featureString) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_featureString).getCode(); casFeat_featureStringArray = jcas.getRequiredFeatureDE(casType, "featureStringArray", "uima.cas.StringArray", featOkTst); casFeatCode_featureStringArray = (null == casFeat_featureStringArray) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_featureStringArray).getCode(); casFeat_featureInteger = jcas.getRequiredFeatureDE(casType, "featureInteger", "uima.cas.Integer", featOkTst); casFeatCode_featureInteger = (null == casFeat_featureInteger) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_featureInteger).getCode(); casFeat_featureFloat = jcas.getRequiredFeatureDE(casType, "featureFloat", "uima.cas.Float", featOkTst); casFeatCode_featureFloat = (null == casFeat_featureFloat) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_featureFloat).getCode(); casFeat_featureStructure1 = jcas.getRequiredFeatureDE(casType, "featureStructure1", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1", featOkTst); casFeatCode_featureStructure1 = (null == casFeat_featureStructure1) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_featureStructure1).getCode(); casFeat_featureStructures1 = jcas.getRequiredFeatureDE(casType, "featureStructures1", "uima.cas.FSArray", featOkTst); casFeatCode_featureStructures1 = (null == casFeat_featureStructures1) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_featureStructures1).getCode(); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure2_Type.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure2_Typ0000644000175000017500000001344011625126524033366 0ustar drazzibdrazzib /* First created by JCasGen Sat Jul 25 21:50:44 CEST 2009 */ package org.apache.uima.lucas.indexer.types.test; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Sat Jul 25 21:50:44 CEST 2009 * @generated */ public class FeatureStructure2_Type extends TOP_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (FeatureStructure2_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = FeatureStructure2_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new FeatureStructure2(addr, FeatureStructure2_Type.this); FeatureStructure2_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new FeatureStructure2(addr, FeatureStructure2_Type.this); } }; /** @generated */ public final static int typeIndexID = FeatureStructure2.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); /** @generated */ final Feature casFeat_feature1; /** @generated */ final int casFeatCode_feature1; /** @generated */ public String getFeature1(int addr) { if (featOkTst && casFeat_feature1 == null) jcas.throwFeatMissing("feature1", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); return ll_cas.ll_getStringValue(addr, casFeatCode_feature1); } /** @generated */ public void setFeature1(int addr, String v) { if (featOkTst && casFeat_feature1 == null) jcas.throwFeatMissing("feature1", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); ll_cas.ll_setStringValue(addr, casFeatCode_feature1, v);} /** @generated */ final Feature casFeat_feature2; /** @generated */ final int casFeatCode_feature2; /** @generated */ public String getFeature2(int addr) { if (featOkTst && casFeat_feature2 == null) jcas.throwFeatMissing("feature2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); return ll_cas.ll_getStringValue(addr, casFeatCode_feature2); } /** @generated */ public void setFeature2(int addr, String v) { if (featOkTst && casFeat_feature2 == null) jcas.throwFeatMissing("feature2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); ll_cas.ll_setStringValue(addr, casFeatCode_feature2, v);} /** @generated */ final Feature casFeat_feature3; /** @generated */ final int casFeatCode_feature3; /** @generated */ public int getFeature3(int addr) { if (featOkTst && casFeat_feature3 == null) jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); return ll_cas.ll_getRefValue(addr, casFeatCode_feature3); } /** @generated */ public void setFeature3(int addr, int v) { if (featOkTst && casFeat_feature3 == null) jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); ll_cas.ll_setRefValue(addr, casFeatCode_feature3, v);} /** @generated */ public String getFeature3(int addr, int i) { if (featOkTst && casFeat_feature3 == null) jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); if (lowLevelTypeChecks) return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_feature3), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_feature3), i); return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_feature3), i); } /** @generated */ public void setFeature3(int addr, int i, String v) { if (featOkTst && casFeat_feature3 == null) jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); if (lowLevelTypeChecks) ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_feature3), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_feature3), i); ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_feature3), i, v); } /** initialize variables to correspond with Cas Type and Features * @generated */ public FeatureStructure2_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_feature1 = jcas.getRequiredFeatureDE(casType, "feature1", "uima.cas.String", featOkTst); casFeatCode_feature1 = (null == casFeat_feature1) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_feature1).getCode(); casFeat_feature2 = jcas.getRequiredFeatureDE(casType, "feature2", "uima.cas.String", featOkTst); casFeatCode_feature2 = (null == casFeat_feature2) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_feature2).getCode(); casFeat_feature3 = jcas.getRequiredFeatureDE(casType, "feature3", "uima.cas.StringArray", featOkTst); casFeatCode_feature3 = (null == casFeat_feature3) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_feature3).getCode(); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/Annotation1.java0000644000175000017500000002402611625126524032251 0ustar drazzibdrazzib /* First created by JCasGen Sat Jul 25 21:50:44 CEST 2009 */ package org.apache.uima.lucas.indexer.types.test; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.jcas.cas.StringArray; /** * Updated by JCasGen Sat Jul 25 21:50:44 CEST 2009 * XML source: /home/landefeld/workspace/lucas/src/test/resources/AnnotationTokenStreamTestTypeSystem.xml * @generated */ public class Annotation1 extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Annotation1.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Annotation1() {} /** Internal - constructor used by generator * @generated */ public Annotation1(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Annotation1(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Annotation1(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: featureString /** getter for featureString - gets * @generated */ public String getFeatureString() { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureString == null) jcasType.jcas.throwFeatMissing("featureString", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return jcasType.ll_cas.ll_getStringValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureString);} /** setter for featureString - sets * @generated */ public void setFeatureString(String v) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureString == null) jcasType.jcas.throwFeatMissing("featureString", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.ll_cas.ll_setStringValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureString, v);} //*--------------* //* Feature: featureStringArray /** getter for featureStringArray - gets * @generated */ public StringArray getFeatureStringArray() { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStringArray == null) jcasType.jcas.throwFeatMissing("featureStringArray", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return (StringArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStringArray)));} /** setter for featureStringArray - sets * @generated */ public void setFeatureStringArray(StringArray v) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStringArray == null) jcasType.jcas.throwFeatMissing("featureStringArray", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.ll_cas.ll_setRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStringArray, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for featureStringArray - gets an indexed value - * @generated */ public String getFeatureStringArray(int i) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStringArray == null) jcasType.jcas.throwFeatMissing("featureStringArray", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStringArray), i); return jcasType.ll_cas.ll_getStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStringArray), i);} /** indexed setter for featureStringArray - sets an indexed value - * @generated */ public void setFeatureStringArray(int i, String v) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStringArray == null) jcasType.jcas.throwFeatMissing("featureStringArray", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStringArray), i); jcasType.ll_cas.ll_setStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStringArray), i, v);} //*--------------* //* Feature: featureInteger /** getter for featureInteger - gets * @generated */ public int getFeatureInteger() { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureInteger == null) jcasType.jcas.throwFeatMissing("featureInteger", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return jcasType.ll_cas.ll_getIntValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureInteger);} /** setter for featureInteger - sets * @generated */ public void setFeatureInteger(int v) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureInteger == null) jcasType.jcas.throwFeatMissing("featureInteger", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.ll_cas.ll_setIntValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureInteger, v);} //*--------------* //* Feature: featureFloat /** getter for featureFloat - gets * @generated */ public float getFeatureFloat() { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureFloat == null) jcasType.jcas.throwFeatMissing("featureFloat", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return jcasType.ll_cas.ll_getFloatValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureFloat);} /** setter for featureFloat - sets * @generated */ public void setFeatureFloat(float v) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureFloat == null) jcasType.jcas.throwFeatMissing("featureFloat", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.ll_cas.ll_setFloatValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureFloat, v);} //*--------------* //* Feature: featureStructure1 /** getter for featureStructure1 - gets * @generated */ public FeatureStructure1 getFeatureStructure1() { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStructure1 == null) jcasType.jcas.throwFeatMissing("featureStructure1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return (FeatureStructure1)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStructure1)));} /** setter for featureStructure1 - sets * @generated */ public void setFeatureStructure1(FeatureStructure1 v) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStructure1 == null) jcasType.jcas.throwFeatMissing("featureStructure1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.ll_cas.ll_setRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStructure1, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: featureStructures1 /** getter for featureStructures1 - gets * @generated */ public FSArray getFeatureStructures1() { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStructures1 == null) jcasType.jcas.throwFeatMissing("featureStructures1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); return (FSArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStructures1)));} /** setter for featureStructures1 - sets * @generated */ public void setFeatureStructures1(FSArray v) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStructures1 == null) jcasType.jcas.throwFeatMissing("featureStructures1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.ll_cas.ll_setRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStructures1, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for featureStructures1 - gets an indexed value - * @generated */ public FeatureStructure1 getFeatureStructures1(int i) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStructures1 == null) jcasType.jcas.throwFeatMissing("featureStructures1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStructures1), i); return (FeatureStructure1)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStructures1), i)));} /** indexed setter for featureStructures1 - sets an indexed value - * @generated */ public void setFeatureStructures1(int i, FeatureStructure1 v) { if (Annotation1_Type.featOkTst && ((Annotation1_Type)jcasType).casFeat_featureStructures1 == null) jcasType.jcas.throwFeatMissing("featureStructures1", "org.apache.uima.lucas.indexer.types.test.Annotation1"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStructures1), i); jcasType.ll_cas.ll_setRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((Annotation1_Type)jcasType).casFeatCode_featureStructures1), i, jcasType.ll_cas.ll_getFSRef(v));} } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure2.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure2.jav0000644000175000017500000001261411625126526033315 0ustar drazzibdrazzib /* First created by JCasGen Sat Jul 25 21:50:44 CEST 2009 */ package org.apache.uima.lucas.indexer.types.test; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.TOP; import org.apache.uima.jcas.cas.StringArray; /** * Updated by JCasGen Sat Jul 25 21:50:44 CEST 2009 * XML source: /home/landefeld/workspace/lucas/src/test/resources/AnnotationTokenStreamTestTypeSystem.xml * @generated */ public class FeatureStructure2 extends TOP { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(FeatureStructure2.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected FeatureStructure2() {} /** Internal - constructor used by generator * @generated */ public FeatureStructure2(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public FeatureStructure2(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: feature1 /** getter for feature1 - gets * @generated */ public String getFeature1() { if (FeatureStructure2_Type.featOkTst && ((FeatureStructure2_Type)jcasType).casFeat_feature1 == null) jcasType.jcas.throwFeatMissing("feature1", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); return jcasType.ll_cas.ll_getStringValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature1);} /** setter for feature1 - sets * @generated */ public void setFeature1(String v) { if (FeatureStructure2_Type.featOkTst && ((FeatureStructure2_Type)jcasType).casFeat_feature1 == null) jcasType.jcas.throwFeatMissing("feature1", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); jcasType.ll_cas.ll_setStringValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature1, v);} //*--------------* //* Feature: feature2 /** getter for feature2 - gets * @generated */ public String getFeature2() { if (FeatureStructure2_Type.featOkTst && ((FeatureStructure2_Type)jcasType).casFeat_feature2 == null) jcasType.jcas.throwFeatMissing("feature2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); return jcasType.ll_cas.ll_getStringValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature2);} /** setter for feature2 - sets * @generated */ public void setFeature2(String v) { if (FeatureStructure2_Type.featOkTst && ((FeatureStructure2_Type)jcasType).casFeat_feature2 == null) jcasType.jcas.throwFeatMissing("feature2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); jcasType.ll_cas.ll_setStringValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature2, v);} //*--------------* //* Feature: feature3 /** getter for feature3 - gets * @generated */ public StringArray getFeature3() { if (FeatureStructure2_Type.featOkTst && ((FeatureStructure2_Type)jcasType).casFeat_feature3 == null) jcasType.jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); return (StringArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature3)));} /** setter for feature3 - sets * @generated */ public void setFeature3(StringArray v) { if (FeatureStructure2_Type.featOkTst && ((FeatureStructure2_Type)jcasType).casFeat_feature3 == null) jcasType.jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); jcasType.ll_cas.ll_setRefValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature3, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for feature3 - gets an indexed value - * @generated */ public String getFeature3(int i) { if (FeatureStructure2_Type.featOkTst && ((FeatureStructure2_Type)jcasType).casFeat_feature3 == null) jcasType.jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature3), i); return jcasType.ll_cas.ll_getStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature3), i);} /** indexed setter for feature3 - sets an indexed value - * @generated */ public void setFeature3(int i, String v) { if (FeatureStructure2_Type.featOkTst && ((FeatureStructure2_Type)jcasType).casFeat_feature3 == null) jcasType.jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure2"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature3), i); jcasType.ll_cas.ll_setStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure2_Type)jcasType).casFeatCode_feature3), i, v);} } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure1.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/types/test/FeatureStructure1.jav0000644000175000017500000001526311625126526033317 0ustar drazzibdrazzib /* First created by JCasGen Sat Jul 25 21:50:44 CEST 2009 */ package org.apache.uima.lucas.indexer.types.test; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.cas.TOP; /** * Updated by JCasGen Sat Jul 25 21:50:44 CEST 2009 * XML source: /home/landefeld/workspace/lucas/src/test/resources/AnnotationTokenStreamTestTypeSystem.xml * @generated */ public class FeatureStructure1 extends TOP { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(FeatureStructure1.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected FeatureStructure1() {} /** Internal - constructor used by generator * @generated */ public FeatureStructure1(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public FeatureStructure1(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: feature1 /** getter for feature1 - gets * @generated */ public String getFeature1() { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_feature1 == null) jcasType.jcas.throwFeatMissing("feature1", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); return jcasType.ll_cas.ll_getStringValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_feature1);} /** setter for feature1 - sets * @generated */ public void setFeature1(String v) { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_feature1 == null) jcasType.jcas.throwFeatMissing("feature1", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); jcasType.ll_cas.ll_setStringValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_feature1, v);} //*--------------* //* Feature: feature2 /** getter for feature2 - gets * @generated */ public String getFeature2() { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_feature2 == null) jcasType.jcas.throwFeatMissing("feature2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); return jcasType.ll_cas.ll_getStringValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_feature2);} /** setter for feature2 - sets * @generated */ public void setFeature2(String v) { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_feature2 == null) jcasType.jcas.throwFeatMissing("feature2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); jcasType.ll_cas.ll_setStringValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_feature2, v);} //*--------------* //* Feature: feature3 /** getter for feature3 - gets * @generated */ public FeatureStructure2 getFeature3() { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_feature3 == null) jcasType.jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); return (FeatureStructure2)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_feature3)));} /** setter for feature3 - sets * @generated */ public void setFeature3(FeatureStructure2 v) { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_feature3 == null) jcasType.jcas.throwFeatMissing("feature3", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); jcasType.ll_cas.ll_setRefValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_feature3, jcasType.ll_cas.ll_getFSRef(v));} //*--------------* //* Feature: featureStructures2 /** getter for featureStructures2 - gets * @generated */ public FSArray getFeatureStructures2() { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_featureStructures2 == null) jcasType.jcas.throwFeatMissing("featureStructures2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); return (FSArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_featureStructures2)));} /** setter for featureStructures2 - sets * @generated */ public void setFeatureStructures2(FSArray v) { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_featureStructures2 == null) jcasType.jcas.throwFeatMissing("featureStructures2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); jcasType.ll_cas.ll_setRefValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_featureStructures2, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for featureStructures2 - gets an indexed value - * @generated */ public FeatureStructure2 getFeatureStructures2(int i) { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_featureStructures2 == null) jcasType.jcas.throwFeatMissing("featureStructures2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_featureStructures2), i); return (FeatureStructure2)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_featureStructures2), i)));} /** indexed setter for featureStructures2 - sets an indexed value - * @generated */ public void setFeatureStructures2(int i, FeatureStructure2 v) { if (FeatureStructure1_Type.featOkTst && ((FeatureStructure1_Type)jcasType).casFeat_featureStructures2 == null) jcasType.jcas.throwFeatMissing("featureStructures2", "org.apache.uima.lucas.indexer.types.test.FeatureStructure1"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_featureStructures2), i); jcasType.ll_cas.ll_setRefArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((FeatureStructure1_Type)jcasType).casFeatCode_featureStructures2), i, jcasType.ll_cas.ll_getFSRef(v));} } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/util/0000755000175000017500000000000011625126526026043 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/util/MapFileReaderTest.java0000644000175000017500000000417111625126526032211 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import java.io.BufferedReader; import java.util.Map; import static org.easymock.classextension.EasyMock.*; import static org.junit.Assert.*; import org.apache.uima.lucas.indexer.util.MapFileReader; import org.junit.Before; import org.junit.Test; public class MapFileReaderTest { private BufferedReader reader; private MapFileReader mapFileReader; private static final String LINE_1 = "term1=id1"; private static final String LINE_2 = "term2=id2"; private static final String LINE_3 = "term3=id3"; @Before public void setUp(){ reader = createMock(BufferedReader.class); mapFileReader = new MapFileReader(reader); } @Test public void testReadMap() throws Exception{ expect(reader.readLine()).andReturn(LINE_1); expect(reader.readLine()).andReturn(LINE_2); expect(reader.readLine()).andReturn(LINE_3); expect(reader.readLine()).andReturn(null); replay(reader); Map map = mapFileReader.readMap(); verify(reader); assertEquals("id1", map.get("term1")); assertEquals("id2", map.get("term2")); assertEquals("id3", map.get("term3")); } @Test public void testClose() throws Exception{ reader.close(); replay(reader); mapFileReader.close(); verify(reader); } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/util/TokenStreamStringConcatenatorTest.javauima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/util/TokenStreamStringConcatenat0000644000175000017500000000360311625126526033413 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Collection; import org.apache.lucene.analysis.Token; import org.apache.uima.lucas.indexer.test.util.CollectionTokenStream; import org.apache.uima.lucas.indexer.util.TokenStreamStringConcatenator; import org.junit.Test; public class TokenStreamStringConcatenatorTest { @Test public void testTokenStreamToStringWithDelimiter() throws Exception{ TokenStreamStringConcatenator tokenStreamStringConcatenator = new TokenStreamStringConcatenator(); Collection tokens1 = new ArrayList(); tokens1.add(new Token("token1".toCharArray(),0,6,0,6)); tokens1.add(new Token("token2".toCharArray(),0,6,7,13)); tokens1.add(new Token("token3".toCharArray(),0,6,14,20)); CollectionTokenStream tokenStream1 = new CollectionTokenStream(tokens1); String concatenatedString = tokenStreamStringConcatenator.tokenStreamToStringWithDelimiter(tokenStream1, " "); assertEquals("token1 token2 token3", concatenatedString); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/util/PlainFileReaderTest.java0000644000175000017500000000422311625126526032535 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import static org.easymock.EasyMock.expect; import static org.easymock.classextension.EasyMock.createMock; import static org.easymock.classextension.EasyMock.replay; import static org.easymock.classextension.EasyMock.verify; import static org.junit.Assert.assertEquals; import java.io.BufferedReader; import java.io.IOException; import org.junit.Before; import org.junit.Test; public class PlainFileReaderTest { private BufferedReader reader; @Before public void setUp(){ reader = createMock(BufferedReader.class); } @Test public void testReadFile() throws Exception{ PlainFileReader plainFileReader = new PlainFileReader(reader); expect(reader.readLine()).andReturn("na"); expect(reader.readLine()).andReturn("und"); expect(reader.readLine()).andReturn("nu"); expect(reader.readLine()).andReturn(null); replay(reader); String[] lines = plainFileReader.readLines(); verify(reader); assertEquals(3, lines.length); assertEquals("na", lines[0]); assertEquals("und", lines[1]); assertEquals("nu", lines[2]); } @Test public void testClose() throws IOException{ PlainFileReader plainFileReader = new PlainFileReader(reader); reader.close(); replay(reader); plainFileReader.close(); verify(reader); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/util/MultimapFileReaderTest.java0000644000175000017500000000465611625126526033274 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import java.io.BufferedReader; import java.util.List; import java.util.Map; import org.apache.uima.lucas.indexer.util.MultimapFileReader; import org.junit.Before; import org.junit.Test; import static org.easymock.classextension.EasyMock.*; import static org.junit.Assert.*; public class MultimapFileReaderTest { private BufferedReader reader; private MultimapFileReader multimapFileReader; private static final String LINE_1 = "term1=term111|term11|term1"; private static final String LINE_2 = "term2=term222|term22|term2"; @Before public void setUp(){ reader = createMock(BufferedReader.class); multimapFileReader = new MultimapFileReader(reader); } @Test public void testReadMultimap() throws Exception{ expect(reader.readLine()).andReturn(LINE_1); expect(reader.readLine()).andReturn(LINE_2); expect(reader.readLine()).andReturn(null); replay(reader); Map> multimap = multimapFileReader.readMultimap(); verify(reader); assertEquals(2, multimap.size()); List line1Values = multimap.get("term1"); assertEquals("term111", line1Values.get(0)); assertEquals("term11", line1Values.get(1)); assertEquals("term1", line1Values.get(2)); List line2Values = multimap.get("term2"); assertEquals("term222", line2Values.get(0)); assertEquals("term22", line2Values.get(1)); assertEquals("term2", line2Values.get(2)); } @Test public void testClose() throws Exception{ reader.close(); replay(reader); multimapFileReader.close(); verify(reader); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/util/TokenFactory.java0000644000175000017500000000210511625126526031314 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer.util; import org.apache.lucene.analysis.Token; public class TokenFactory { public static Token newToken(String text, int begin, int end){ return new Token(text.toCharArray(), 0, text.length(), begin, end); } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/indexer/IndexWriterProviderImplTest.java0000644000175000017500000001031711625126526033374 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas.indexer; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.UnknownHostException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.FSDirectory; import org.apache.uima.resource.DataResource; import org.apache.uima.resource.ResourceInitializationException; import org.junit.After; import org.junit.Before; import org.junit.Test; public class IndexWriterProviderImplTest { private static final String fileSep = System.getProperty("file.separator"); private static final String TEST_INDEX = "src" + fileSep + "test" + fileSep + "resources" + fileSep + "test-index"; private static final String RESOURCES_TEST_INDEX_PROPERTIES = "src" + fileSep + "test" + fileSep + "resources" + fileSep + "IndexWriter.properties"; private IndexWriterProviderImpl indexWriterProviderImpl; private DataResource dataResource; private InputStream propertiesInputStream; @Before public void setUp() throws IOException { indexWriterProviderImpl = new IndexWriterProviderImpl(); dataResource = createMock(DataResource.class); FileInputStream fileInputStream = new FileInputStream(RESOURCES_TEST_INDEX_PROPERTIES); propertiesInputStream = new BufferedInputStream(fileInputStream); } @After public void tearDown() throws Exception { FSDirectory directory = (FSDirectory) indexWriterProviderImpl.getIndexWriter().getDirectory(); File directoryFile = directory.getFile(); directory = FSDirectory.getDirectory(directoryFile); IndexWriter.unlock(directory); for (String file : directory.list()) directory.deleteFile(file); directory.getFile().delete(); } @Test public void testLoadData() throws IOException, ResourceInitializationException { expect(dataResource.getInputStream()).andReturn(propertiesInputStream); replay(dataResource); indexWriterProviderImpl.load(dataResource); IndexWriter indexWriter = indexWriterProviderImpl.getIndexWriter(); FSDirectory fsDirectory = (FSDirectory) indexWriter.getDirectory(); String hostname = getHostName(); String pid = getPID(); String writerPath = fsDirectory.getFile().getAbsolutePath(); assertTrue(writerPath.contains( TEST_INDEX + "-" + hostname + "-" + pid)); assertEquals(513, indexWriter.getRAMBufferSizeMB(), 0.5); assertEquals(9999, indexWriter.getMaxFieldLength(), 0.5); String random = writerPath.substring(writerPath.lastIndexOf("-")+1); assertTrue(random.matches("\\d+")); } protected String getPID() { String id = ManagementFactory.getRuntimeMXBean().getName(); return id.substring(0, id.indexOf("@")); } public String getHostName() { InetAddress address; String hostName; try { address = InetAddress.getLocalHost(); hostName = address.getHostName(); } catch (UnknownHostException e) { throw new IllegalStateException(e); } return hostName; } } uima-addons-2.3.1/Lucas/src/test/java/org/apache/uima/lucas/ProspectiveSearchAETest.java0000644000175000017500000000712211625126526030774 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.lucas; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.*; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.XMLInputSource; import org.junit.Before; import org.junit.Test; import java.io.IOException; import static org.junit.Assert.*; public class ProspectiveSearchAETest { private static final String DESCRIPTOR_FILE = "src/test/resources/ProspectiveSearchAEDescriptor.xml"; private AnalysisEngine searchAE; private Type searchResultType; private Feature searchResultIdFeature; private Feature searchResultMatchingTextFeature; @Before public void setUp() throws InvalidXMLException, IOException, ResourceInitializationException { AnalysisEngineDescription analysisEngineDescription = (AnalysisEngineDescription) UIMAFramework .getXMLParser().parseAnalysisEngineDescription( new XMLInputSource(DESCRIPTOR_FILE)); searchAE = UIMAFramework.produceAnalysisEngine(analysisEngineDescription); TypeSystem ts = searchAE.newCAS().getTypeSystem(); searchResultType = ts.getType("org.apache.uima.lucas.SearchResult"); searchResultIdFeature = searchResultType.getFeatureByBaseName("id"); searchResultMatchingTextFeature = searchResultType.getFeatureByBaseName("matchingText"); } @Test public void testSimpleSearch() throws ResourceInitializationException, AnalysisEngineProcessException { CAS cas = searchAE.newCAS(); cas.setDocumentText("The quick brown fox jumps over the lazy dog"); searchAE.process(cas); FSIterator searchResults = cas.getIndexRepository().getAllIndexedFS(searchResultType); // test for the hit for search query "quick fox" assertTrue(searchResults.hasNext()); FeatureStructure result = searchResults.next(); assertEquals(0, result.getLongValue(searchResultIdFeature)); // Test if highlighting is correct ArrayFS matchingTextArray = (ArrayFS) result.getFeatureValue(searchResultMatchingTextFeature); assertEquals(2, matchingTextArray.size()); for (int i = 0; i < matchingTextArray.size(); i++) { AnnotationFS annotation = (AnnotationFS) matchingTextArray.get(i); if (i == 0) { assertEquals(4, annotation.getBegin()); assertEquals(9, annotation.getEnd()); } else if (i == 1) { assertEquals(16, annotation.getBegin()); assertEquals(19, annotation.getEnd()); } else { fail(); } } } }uima-addons-2.3.1/Lucas/src/docbook/0000755000175000017500000000000011625126526017076 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/docbook/images/0000755000175000017500000000000011625126526020343 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/src/docbook/LuceneCASConsumerUserGuide.xml0000644000175000017500000013563611625126526024731 0ustar drazzibdrazzib ]> Apache UIMA Lucene CAS Indexer Documentation Introduction The Lucene CAS Indexer (Lucas) is a UIMA CAS consumer that stores CAS data in a Lucene index. Lucas allows to exploit the results of collection processing for information retrieval purposes in a fast and flexible way. The consumer transforms annotation objects from annotation indexes into Lucene token objects and creates token streams from them. Token streams can be further processed by token filters before they are stored into a certain field of an index document. The mapping between UIMA annotations and Lucene tokens and token filtering is configurable by an XML file, whereas the index writer is configured by a properties file. To use Lucas, at first a mapping file must be created. You have to decide which annotation types should be present in the index and how your index layout should look like, or more precisely, which fields should be contained in the index. Optionally you can add token filters for further processing. Its also possible to deploy your own token filters. Lucas can run in multiple deployment scenarios where different instances share one index writer. This shared index writer instance is configured via a properties file and managed by the resource manager. Mapping Configuration This chapter discusses the mapping between UIMA annotations and Lucene tokens in detail.

Token Sources The mapping file describes the structure and contents of the generated Lucene index. Each CAS in a collection is mapped to a Lucene document. A Lucene document consists of fields, whereas a CAS contains multiple annotation indexes on different sofas. An annotation object can mark a text, can hold feature values or reference other feature structures. For instance, an annotation created by an entity mapper marks a text area and may additionally contain an identifier for the mapped entity. For this reason Lucas knows three different sources of Lucene token values: The covered text of a annotation object. One or more feature values of a annotation object. One or more feature values of a feature structure directly or indirectly referenced by an annotation object. If a feature has multiple values, that means it references a FSArray instance, then one token is generated for each value. In the same manner tokens are generated from each feature value, if more then one feature is provided. Alternatively, you can provide a featureValueDelimiterString which is used to concatenate different feature values from one annotation object to generate only one token. Each generated Lucene token has the same offset as the source annotation feature structure.
Covered Text As mentioned above, the text covered by annotation objects represents one possible source for Lucene token values. The following example creates an index with one title field which contains covered texts from all token annotations which are stored in the title sofa. ]]>
Feature Values The feature values of annotation objects are another source for token values. Consider the example below. ]]> The field cells contains a token stream generated from the annotation index of type de.julielab.types.Cell . Each generated token will contain the value of the feature specificType of the enclosing annotation object. The next example illustrates how multiple feature values can be combined by using a featureValueDelimiterString . If no featureValueDelimiterString is provided, a single token is generated from each feature value. ]]>
Feature Values of referenced Feature Structures Since annotation objects may reference other feature structures, it may be desirable to use these feature structures as source for Lucene token values. To achieve this, we utilize feature paths to address these feature structures. Consider the example below. ]]> The type de.julielab.types.Author has a feature affiliation which points to a affiliation feature structure. This affiliation feature structure in turn has a feature address which points to an address feature structure. This path of references is expressed as the feature path affiliation.address . A feature path consists of feature names separated by colons ("."). Please consider that the city feature is a feature of the "address" feature structure and not of the author annotation object.
Supported feature types Currently, not all feature types are supported. Supported feature types are the following: String String Array Number Types: Double, Float, Long, Integer, Short Consider that you need to provide a number format string if you want to use number types.
Token Stream Alignment In the examples above all defined Lucene fields contain only one annotation based token stream. There are a couple of reasons for the fact that the simple mapping of each annotation index to separate Lucene fields is not an optimal strategy. One practical reason is that the Lucene highlighting will not work for scenarios where more than one annotation type is involved. Additionally, the TF-IDF weighting of terms does not work properly if annotations are separated from their corresponding text fragments. Lucas is able to merge token streams and align them according to their token offsets. The resulting merged token stream is then stored in a field. The next example demonstrates this merging feature. ]]> Consider the merge attribute of the field tag. It causes the alignment of the two token streams generated from the de.julielab.types.Token and de.julielab.types.Cell annotations. If this attribute is set to false or is left out, the annotation token streams are concatenated.
Token Filters Token filters are the Lucene approach to enable operations on token streams. In typical Lucene applications token filters are combined with a tokenizer to build analyzers. In a typical Lucas application the tokenization is already given by annotation indexes. Lucas allows to apply token filters to certain annotation token streams or to the merged or concatenated field token stream as whole. The following example demonstrates how token filters are defined in the mapping file. ]]> The lowercase token filter is applied to the complete field content and the stopword filter is only applied to the annotation token stream which is generated from the de.julielab.types.Token annotation index. Both filters are predefined filters which are included in the Lucas distribution. A reference of all predefined token filters is covered in .
Deploying your own Token Filters For scenarios where the built in token filters where not sufficient, you can provide your own token filters. Simple token filters which do not need any further parameterization, are required to define a public constructor, which takes a token stream as the only parameter. The next example shows how a such a token filter is referenced in the mapping file. ]]> The attribute className must reference the canonical class name of the the filter. In cases where the token filter has parameters we need to provide a factory for it. This factory must implement the org.apache.uima.indexer.analysis.TokenFilterFactory interface. This interface defines a method createTokenFilter which takes a token stream and a java.util.Properties object as parameters. The properties object will include all attribute names as keys and their values which are additionally defined in the filter tag. Consider the example below for a demonstration. ]]> In the example above the token filter factory is new instantiated for every occurrence in the mapping file. In scenarios where token filters use large resources, this will be a waste of memory and time. To reuse a factory instance we need to provide a name and a reuse attribute. The example below demonstrate how we can reuse a factory instance. ]]>
Mapping File Reference After introducing the basic concepts and functions this chapter offers a complete reference of the mapping file elements.
Mapping File Structure The raw mapping file structure is sketched below. ... ... ... ... ... ]]>
Mapping File Elements This section describes the mapping file elements and their attributes. fields element fields container element contains: field+ field element describes a Lucene field contains: filters?, annotations field element attributes name allowed values default value mandatory description name string - yes the name of the field index yes|no|no_norms|no_tf|no_norms_tf no no See Field.Index termVector no|positions|offsets|positions_offsets no no See Field.TermVector stored yes|no|compress no no See Field.Store merge boolean false no If this attribute is set to true, all contained annotation token streams are merged according to their offset. The tokens position increment are adopted in the case of overlapping. unique boolean false no If this attribute is set to true, there will be only one field instance with this field's name be added to resulting Lucene documents. This is required e.g. by Apache Solr for primary key fields. You must not define multiple fields with the same name to be unique, this would break the unique property.
filters element container element for filters contains: filter+ filter element Describes a token filter instance. Token filters can either be predefined or self-provided. filter element attributes name allowed values default value mandatory description name string - no the name to reference either a predefined filter (see predefined filter reference) or a reused filter className string - no The canonical class name of a token filter. the token filter class must provide a single argument constructor which takes the token stream as parameter. factoryClassName string - no The canonical class name of a token filter factory. the token filter factory class must implement the org.apache.uima.indexer.analysis.TokenFilterFactory. See for a example. reuse boolean - false Enables token filter factory reuse. This makes sense when a token filter uses resources which should be cached. Because token filters are referenced by their names, you also need to provide a name. * string - - Filters may have their own parameter attributes which are explained in the ..
annotations element container element for annotations contains: annotation+ annotation element Describes a token stream which is generated from a CAS annotation index. contains: features? annotation element attributes name allowed values default value mandatory description type string - yes The canonical type name. E.g. "uima.cas.Annotation" sofa string InitialView yes Determines from which sofa the annotation index is taken featurePath string - no Allows to address feature structures which are associated with the annotation object. Features are separated by a ".". tokenizer cas|white_space|standard cas no Determines which tokenization is used. "cas" uses the tokenization given by the contained annotation token streams, "standard" uses the standard tokenizer featureValueDelimiterString string - no If this parameter is provided all feature values of the targeted feature structure are concatenated and delimited by this string.
features element Container element for features. contains: feature+ feature element Describes a certain feature of the addressed feature structure. Values of this features serve as token source. feature element attributes name allowed values default value mandatory description name string - yes The feature name. numberFormat string - no Allows to convert number features to strings. See DecimalNumberFormat .
Filters Reference Lucas comes with a couple of predefined token filters. This section provides a complete reference for these filters.
Addition Filter Adds suffixes or prefixes to tokens. ]]> addition filter attributes name allowed values default value mandatory description prefix string - no A pefix which is added to the front of each token. postfix string - no A post which is added to the end of each token.
Hypernyms Filter Adds hypernyms of a token with the same offset and position increment 0. ]]> hypernym filter attributes name allowed values default value mandatory description filePath string - yes The hypernym file path. Each line of the file contains one token with its hypernyms. The file must have the following format: TOKEN_TEXT=HYPERNYM1|HYPERNYM2|.. .
Position Filter Allows to select only the first or the last token of a token stream, all other tokens are discarded. ]]> position filter attributes name allowed values default value mandatory description position first|last - yes If position is set to first the only the the first token of the underlying token stream is returned, all other tokens are discarded. Otherwise, if position is set to last, only the last token is returned.
Replace Filter Allows to replace token texts. ]]> replace filter attributes name allowed values default value mandatory description filePath string - yes The token text replacement file path. Each line consists of the original token text and the replacement and must have the following format: TOKEN_TEXT=REPLACEMENT_TEXT .
Snowball Filter Integration of the Lucene snowball filter ]]> snowball filter attributes name allowed values default value mandatory description stemmerName snowball stemmer names. English no See snowball filter documentation .
Splitter Filter Splits tokens at a certain string. ]]> splitter filter attributes name allowed values default value mandatory description splitString string - yes The string on which tokens are split.
Concatenate Filter Concatenates token texts with a certain delimiter string. ]]> concatenate filter attributes name allowed values default value mandatory description concatString string - yes The string with which token texts are concatenated.
Stopword Filter Integration of the Lucene stop filter ]]> stopword filter attributes name allowed values default value mandatory description filePath string - no The stopword file path. Each line of the file contains a single stopword. ignoreCase boolean false no Defines if the stop filter ignores the case of stop words.
Unique Filter Filters tokens with the same token text. The resulting token stream contains only tokens with unique texts. ]]>
Upper Case Filter Turns the text of each token into upper case. ]]>
Lower Case Filter Turns the text of each token into lower case. ]]>
Index Writer Configuration The index writer used by Lucas can be configured separately. To allow Lucas to run in multiple deployment scenarios, different Lucas instances can share one index writer instance. This is handled by the resource manager. To configure the resource manager and the index writer properly, the Lucas descriptor contains a resource binding IndexWriterProvider . An IndexWriterProvider creates an index writer from a properties file. The file path and the name of this properties file must be set in the LucasIndexWriterProvider resource section of the descriptor. The properties file can contain the following properties. indexPath - the path to the index directory RAMBufferSize - (number value), see IndexWriter.ramBufferSize useCompoundFileFormat - (boolean value), see IndexWriter.useCompoundFormat maxFieldLength - (boolean value), see IndexWriter.maxFieldLength uniqueIndex - (boolean value), if set to true , host name and process identifier are added to the index name. (Only tested on linux systems) Descriptor Parameters Because Lucas is configured by the mapping file, the descriptor has only one parameter: mappingFile - the file path to the mapping file. Prospective Search Prospective search is a search method where a set of search queries are given first and then searched against a stream of documents. A search query divides the document stream into a sub-stream which only contains these document which match the query. Users usually define a number of search queries and then subscribe to the resulting sub-streams. An example for prospective search is a news feed which is monitored for certain terms, each time a term occurs a mail notification is send. The user must provide a set of search queries via a SearchQueryProvider , these search queries are then search against the processed CAS as defined in the mapping file, if a match occurs a feature structure is inserted into the CAS. Optionally highlighting is supported, annotations for the matchtng text areas are created and linked to the feature structure. The implementation uses the Lucene MemoryIndex which is a fast one document in memory index. For performance notes please consult the javadoc of the MemoryIndex class.
Search Query Provider The Search Query Provider provides the Perspective Search Analysis Engine with a set of search queries which should be monitored. A search query is a combination of a Lucene query and an id. The id is later needed to map a match to a specific search query. A user usually has a set of search queries which should be monitored, since there is no standardized way to access the search queries the user must implement the SearchQueryProvider interface and configure the thread-safe implementation as shared resource object. An example for such an implementation could be a search query provider which reads search queries form a database or a web service.
Search Results The search results are written to the CAS, for each match one Search Result feature structure is inserted into the CAS. The Search Result feature structure contains the id and optionally links to an array of annotations which mark the matching text in the CAS. The Search Result type must be mapped to a defined type in the analysis engine descriptor with the following configuration parameters: String org.apache.uima.lucas.SearchResult - Maps the search result type to an actual type in the type system. String org.apache.uima.lucas.SearchResultIdFeature - A long id feature, identifies the matching search query. String org.apache.uima.lucas.SearchResulMatchingTextFeature - An optional ArrayFS feature, links to annotations which mark the matching text.
uima-addons-2.3.1/Lucas/desc/0000755000175000017500000000000011625126534015604 5ustar drazzibdrazzibuima-addons-2.3.1/Lucas/desc/LuceneCASIndexer.xml0000644000175000017500000000614411625126534021414 0ustar drazzibdrazzib true org.apache.uima.java org.apache.uima.lucas.consumer.LuceneCASIndexer LuceneCASIndexer 0.6 apache mappingFile path to the mapping file String false true mappingFile src/test/resources/lucas.xml false true false LucasIndexWriterProvider Provides a index writer instance. file:src/test/resources/IndexWriter.properties org.apache.uima.lucas.indexer.IndexWriterProviderImpl indexWriterProvider LucasIndexWriterProvider uima-addons-2.3.1/Lucas/desc/lucas.xsd0000644000175000017500000001154711625126534017443 0ustar drazzibdrazzib uima-addons-2.3.1/Lucas/desc/IndexWriter.properties0000644000175000017500000000171511625126534022172 0ustar drazzibdrazzib# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # only for testing purposes ! indexPath = src/test/resources/test-index RAMBufferSize = 513 useCompoundFileFormat = false maxFieldLength = 9999 uniqueIndex = trueuima-addons-2.3.1/Lucas/desc/lucas.xml0000644000175000017500000000315011625126534017434 0ustar drazzibdrazzib uima-addons-2.3.1/DictionaryAnnotator/0000755000175000017500000000000011625127142017606 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/pom.xml0000644000175000017500000001441111625126460021126 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent DictionaryAnnotator 2.3.1 UIMA Annotator: ${project.artifactId} Annotator that annotates tokens by looking them up in a dictionary ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/DictionaryAnnotator.xml DictionaryAnnotatorUserGuide org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.uima uimaj-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test org.apache.xmlbeans xmlbeans 2.4.0 stax stax-api org.apache.geronimo.specs geronimo-stax-api_1.0_spec 1.0.1 uima-an-dictionary org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/dictionaryAnnotFeaturePathTestRef.txt src/test/resources/DictionaryAnnotatorTests/dictionaryAnnot*.txt src/test/resources/DictionaryBuilderTests/DictionaryPrintingRef.txt src/test/resources/DictionaryCreatorTest/dictInput.txt src/test/resources/DictionaryCreatorTest/*Ref.xml src/test/resources/DictionaryCreatorTest/WhitespaceTokenizer.pear src/test/resources/DictionaryCreatorTest/WhitespaceTokenizer/** org.codehaus.mojo xmlbeans-maven-plugin 2.3.3 xmlbeans resources uima-addons-2.3.1/DictionaryAnnotator/build_xml_types.xml0000644000175000017500000000350111625126460023534 0ustar drazzibdrazzib uima-addons-2.3.1/DictionaryAnnotator/resources/0000755000175000017500000000000011625126456021627 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/resources/dictionary.xml0000644000175000017500000000265311625126456024524 0ustar drazzibdrazzib en org.apache.uima.DictionaryEntry new new York new york city uima-addons-2.3.1/DictionaryAnnotator/resources/dictionary.xsd0000644000175000017500000000554611625126456024526 0ustar drazzibdrazzib uima-addons-2.3.1/DictionaryAnnotator/LICENSE.txt0000644000175000017500000002644611625126460021447 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/DictionaryAnnotator/marker-file-identifying-single-project0000644000175000017500000000000011625126460027151 0ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/marker-file-identifying-standard-pear0000644000175000017500000000000011625126460026751 0ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/marker-file-identifying-osgi-project0000644000175000017500000000000011625126460026631 0ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/NOTICE.txt0000644000175000017500000000131211625126460021327 0ustar drazzibdrazzibApache UIMA DictionaryAnnotator software component Copyright 2007-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). This software contains parts of Apache XMLBeans (http://xmlbeans.apache.org/), which contains the following software: - W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web Consortium (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) - Piccolo XML Parser for Java from http://piccolo.sourceforge.net/, Copyright 2002 Yuval Oren under the terms of the Apache Software License 2.0 uima-addons-2.3.1/DictionaryAnnotator/src/0000755000175000017500000000000011625126456020404 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/0000755000175000017500000000000011625126456021330 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/resources/0000755000175000017500000000000011625126456023342 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/resources/org/0000755000175000017500000000000011625126456024131 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/resources/org/apache/0000755000175000017500000000000011625126456025352 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/resources/org/apache/uima/0000755000175000017500000000000011625126456026305 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/resources/org/apache/uima/annotator/0000755000175000017500000000000011625126456030312 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/resources/org/apache/uima/annotator/dict_annot/0000755000175000017500000000000011625126456032434 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/resources/org/apache/uima/annotator/dict_annot/dictionaryAnnotatorMessages.propertiesuima-addons-2.3.1/DictionaryAnnotator/src/main/resources/org/apache/uima/annotator/dict_annot/dictio0000644000175000017500000000440611625126456033636 0ustar drazzibdrazzib# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # dictionary_annotator_error_parsing_dictionary_file = "Error while parsing the dictionary file {0}." dictionary_annotator_error_xml_validation = "XML validation errors while validating the dictionary file {0}: {1}." dictionary_annotator_resource_not_found = "The resource file {0} could not be found." dictionary_annotator_dictionary_file = "The dictionary file {0} is used to to create a new dictionary." dictionary_annotator_error_resolving_types = "Error resolving type {0} from UIMA type system." dictionary_annotator_error_invalid_feature_path_syntax = "The featurePath syntax for featurePath {0} is wrong. \"{1}\" is not allowed. dictionary_annotator_error_validating_feature_path = "Error while validating feature path \"{0}\". This path can never be valid for type {1}." dictionary_annotator_error_feature_path_element_not_supported = "The feature path element type {0} of the feature name {1} in the featurePath {2} is currently not supported." dictionary_annotator_error_missing_config_parameter = "A inputMatchFilterFeaturePath is specified but the required configuration parameter {0} is missing." dictionary_annotator_error_condition_operator_not_valid = "The condition operator {0} is not valid. Use an operator like: NULL, NOT_NULL, EQUALS, NOT_EQUALS, LESS, LESS_EQ, GREATER, GREATER_EQ". dictionary_annotator_filter_feature_condition = "The input annotation filter condition is: {0} ." dictionary_annotator_invalid_url_resource = "The dictionary URL resource {0} is not valid."uima-addons-2.3.1/DictionaryAnnotator/src/main/java/0000755000175000017500000000000011625126456022251 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/0000755000175000017500000000000011625126456023040 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/0000755000175000017500000000000011625126456024261 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/0000755000175000017500000000000011625126456025214 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/0000755000175000017500000000000011625126456027221 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/0000755000175000017500000000000011625126456031343 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/0000755000175000017500000000000011625126456032304 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/Condition.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/Condit0000644000175000017500000000551111625126456033451 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.impl; /** * A Condition has a filter operator and a condition value. */ public class Condition { private final FilterOp operatorType; private final String value; /** * creates a new condition object with a filter operator and a condition * value. * * @param operator * filter operator * @param value * condition value */ public Condition(FilterOp operator, String value) { this.operatorType = operator; this.value = value; } /** * Returns the condition operator type. * * @return returns the condition operator type. */ public FilterOp getConditionType() { return this.operatorType; } /** * Returns the condition value. * * @return Returns the condition value */ public String getValue() { return this.value; } /** * Returns the FilterOperator for the given String operator. Allowed String * operators are: NULL, NOT_NULL, EQUALS, NOT_EQUALS, LESS, LESS_EQ, GREATER, * GREATER_EQ * * @param operator * operator as String * @return FilterOperator for the given String operator * */ public static final FilterOp getOperator(String operator) { if (operator.equals("NULL")) { return FilterOp.NULL; } else if (operator.equals("NOT_NULL")) { return FilterOp.NOT_NULL; } else if (operator.equals("EQUALS")) { return FilterOp.EQUALS; } else if (operator.equals("NOT_EQUALS")) { return FilterOp.NOT_EQUALS; } else if (operator.equals("LESS")) { return FilterOp.LESS; } else if (operator.equals("LESS_EQ")) { return FilterOp.LESS_EQ; } else if (operator.equals("GREATER")) { return FilterOp.GREATER; } else if (operator.equals("GREATER_EQ")) { return FilterOp.GREATER_EQ; } else { return null; } } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/DictionaryAnnotatorConfigException.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/Dictio0000644000175000017500000000544111625126456033446 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.impl; import org.apache.uima.resource.ResourceInitializationException; /** * DictionaryAnnotatorConfigException is thrown if an configuration exception * occurs. */ public class DictionaryAnnotatorConfigException extends ResourceInitializationException { private static final long serialVersionUID = 5719082938917468647L; /** * Creates a new exception with a the specified message from the * DictionaryAnnotator message catalog. * * @param aMessageKey * an identifier that maps to the message for this exception. The * message may contain place holders for arguments as defined by * the {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if * the message has no arguments. */ public DictionaryAnnotatorConfigException(String aMessageKey, Object[] aArguments) { super(DictionaryAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments); } /** * Creates a new exception with the specified cause and a message from the * DictionaryAnnotator message catalog. * * @param aMessageKey * an identifier that maps to the message for this exception. The * message may contain place holders for arguments as defined by * the {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if * the message has no arguments. * @param aCause * the original exception that caused this exception to be thrown, * if any */ public DictionaryAnnotatorConfigException(String aMessageKey, Object[] aArguments, Throwable aCause) { super(DictionaryAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments, aCause); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/DictionaryAnnotator.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/Dictio0000644000175000017500000004426311625126456033453 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.impl; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.StringTokenizer; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.analysis_engine.annotator.AnnotatorContextException; import org.apache.uima.annotator.dict_annot.dictionary.Dictionary; import org.apache.uima.annotator.dict_annot.dictionary.DictionaryFileParser; import org.apache.uima.annotator.dict_annot.dictionary.DictionaryMatch; import org.apache.uima.annotator.dict_annot.dictionary.impl.DictionaryFileParserImpl; import org.apache.uima.annotator.dict_annot.dictionary.impl.HashMapDictionaryBuilder; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; /** * Dictionary annotator implementation that use HashMap dictionaries */ public class DictionaryAnnotator extends CasAnnotator_ImplBase { /** * Message catalog */ public static final String MESSAGE_DIGEST = "org.apache.uima.annotator.dict_annot.dictionaryAnnotatorMessages"; /** * System path separator */ public static final String PATH_SEPARATOR = System.getProperty("path.separator"); // DictionaryFiles configuration parameter name private static final String DICTIONARY_FILES = "DictionaryFiles"; // InputMatchType configuration parameter name private static final String INPUT_MATCH_TYPE = "InputMatchType"; // InputMatchFeaturePath configuration parameter name private static final String INPUT_MATCH_FEATURE_PATH = "InputMatchFeaturePath"; // InputMatchFilterFeaturePath configuration parameter name private static final String INPUT_MATCH_FILTER_FEATURE_PATH = "InputMatchFilterFeaturePath"; // FilterConditionOperator configuration parameter name private static final String FILTER_CONDITION_OPERATOR = "FilterConditionOperator"; // FilterConditionValue configuration parameter name private static final String FILTER_CONDITION_VALUE = "FilterConditionValue"; // annotator logger private Logger logger; // input match type name private String inputMatchTypeStr; // input match feature path private String inputMatchFeaturePathStr; // input match feature path private String inputMatchFilterFeaturePathStr; // input match feature path private String filterConditionOperator; // input match feature path private String filterConditionValue; // input match type private Type inputMatchType; // dictionaries used with this annotator private Dictionary[] dictionaries; // inputMatchFeaturePath object private FeaturePathInfo_impl inputMatchFeaturePath; // inputMatchFilterFeaturePath object private FeaturePathInfo_impl inputMatchFilterFeaturePath; // filterCondition object private Condition filterCondition; /* * (non-Javadoc) * * @see org.apache.uima.analysis_component.CasAnnotator_ImplBase#process(org.apache.uima.cas.CAS) */ public void process(CAS cas) throws AnalysisEngineProcessException { // copy input match type annotations to an array FSIterator it = cas.getAnnotationIndex(this.inputMatchType).iterator(); ArrayList inputTypeAnnots = new ArrayList(); while (it.hasNext()) { // get next annotation FS AnnotationFS annotFS = (AnnotationFS) it.next(); // check if we have to filter the annotation if (this.inputMatchFilterFeaturePathStr != null) { // check annotation filter condition if (this.inputMatchFilterFeaturePath.match(annotFS, this.filterCondition)) { inputTypeAnnots.add(annotFS); } } else { // no annotation filter specified inputTypeAnnots.add(annotFS); } } AnnotationFS[] annotFSs = inputTypeAnnots.toArray(new AnnotationFS[] {}); // -- use the array of annotations to detect matches -- for (int i = 0; i < this.dictionaries.length; i++) { // get current dictionary output type Type currentDictOutputType = cas.getTypeSystem().getType(this.dictionaries[i].getTypeName()); // check output type and throw an exception in case of errors if (currentDictOutputType == null) { throw new DictionaryAnnotatorProcessException("dictionary_annotator_error_resolving_types", new Object[] { this.dictionaries[i].getTypeName() }); } // iterate over the annotation array and detect matches int currentPos = 0; while (currentPos < annotFSs.length) { // check for dictionary matches at the current token position DictionaryMatch dictMatch = this.dictionaries[i].matchEntry(currentPos, annotFSs, this.inputMatchFeaturePath); // check if we have a dictionary match if (dictMatch != null) { // -- we have found a match starting at the current position -- // get match length of the match int matchLength = dictMatch.getMatchLength(); // create annotation for the match we found int start = annotFSs[currentPos].getBegin(); int end = annotFSs[currentPos + matchLength - 1].getEnd(); FeatureStructure fs = cas.createAnnotation(currentDictOutputType, start, end); // add annotation to the CAS cas.getIndexRepository().addFS(fs); // adjust current array position, add match length currentPos = currentPos + matchLength; } else { // -- no match was found, go on with the next token -- currentPos++; } } } } /* * (non-Javadoc) * * @see org.apache.uima.analysis_component.AnalysisComponent_ImplBase#initialize(org.apache.uima.UimaContext) */ public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); // initialize annotator logger this.logger = this.getContext().getLogger(); // get configuration parameter settings // get parameter ConceptFiles, default is an empty array String[] dictionaryFileNames = safeGetConfigParameterStringArrayValue(getContext(), DICTIONARY_FILES, new String[] {}); // get input match type this.inputMatchTypeStr = (String) this.getContext().getConfigParameterValue(INPUT_MATCH_TYPE); // get input match feature path this.inputMatchFeaturePathStr = (String) this.getContext().getConfigParameterValue( INPUT_MATCH_FEATURE_PATH); // initialize inputMatchFeaturePath - this must only be done if a feature // path was specified this.inputMatchFeaturePath = new FeaturePathInfo_impl(); if (this.inputMatchFeaturePathStr != null) { this.inputMatchFeaturePath.initialize(this.inputMatchFeaturePathStr); } // get input match filter feature path this.inputMatchFilterFeaturePathStr = (String) this.getContext().getConfigParameterValue( INPUT_MATCH_FILTER_FEATURE_PATH); // initialize inputMatchFilterFeaturePath - this must only be done if a // feature path was specified this.inputMatchFilterFeaturePath = new FeaturePathInfo_impl(); if (this.inputMatchFilterFeaturePathStr != null) { this.inputMatchFilterFeaturePath.initialize(this.inputMatchFilterFeaturePathStr); } // get filter condition operator this.filterConditionOperator = (String) this.getContext().getConfigParameterValue( FILTER_CONDITION_OPERATOR); // get filter condition value this.filterConditionValue = (String) this.getContext().getConfigParameterValue( FILTER_CONDITION_VALUE); // check filter condition if we have a filter condition feature path if (this.inputMatchFilterFeaturePathStr != null) { if (this.filterConditionOperator == null) { throw new DictionaryAnnotatorConfigException( "dictionary_annotator_error_missing_config_parameter", new Object[] { FILTER_CONDITION_OPERATOR }); } if (this.filterConditionValue == null) { throw new DictionaryAnnotatorConfigException( "dictionary_annotator_error_missing_config_parameter", new Object[] { FILTER_CONDITION_VALUE }); } // get condition operator FilterOp operator = Condition.getOperator(this.filterConditionOperator); if (operator == null) { throw new DictionaryAnnotatorConfigException( "dictionary_annotator_error_condition_operator_not_valid", new Object[] { this.filterConditionOperator }); } // create new Condition object this.filterCondition = new Condition(operator, this.filterConditionValue); // log filter condition StringBuffer buffer = new StringBuffer(); buffer.append(this.inputMatchTypeStr); buffer.append(":"); buffer.append(this.inputMatchFilterFeaturePathStr); buffer.append(" "); buffer.append(operator.toString()); buffer.append(" "); buffer.append(this.filterConditionValue); this.logger.logrb(Level.CONFIG, "DictionaryAnnotator", "initialize", MESSAGE_DIGEST, "dictionary_annotator_filter_feature_condition", new Object[] { buffer.toString() }); } // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); // get UIMA datapath and tokenize it into its elements StringTokenizer tokenizer = new StringTokenizer(getContext().getDataPath(), PATH_SEPARATOR); ArrayList datapathElements = new ArrayList(); while (tokenizer.hasMoreTokens()) { // add datapath elements to the 'datapathElements' array list datapathElements.add(new File(tokenizer.nextToken())); } // parse dictionary files ArrayList dicts = new ArrayList(); for (int i = 0; i < dictionaryFileNames.length; i++) { // try to resolve the relative file name with classpath or datapath DictionaryFile file = resolveRelativeFilePath(dictionaryFileNames[i], datapathElements); // if the current dictionary file wasn't found, throw an exception if (file == null) { throw new DictionaryAnnotatorConfigException("dictionary_annotator_resource_not_found", new Object[] { dictionaryFileNames[i] }); } else { // log concept file path this.logger.logrb(Level.CONFIG, "DictionaryAnnotator", "initialize", MESSAGE_DIGEST, "dictionary_annotator_dictionary_file", new Object[] { file.getFilePath() }); // parse dictionary file Dictionary dict = fileParser.parseDictionaryFile(file.getFilePath(), file.getStream(), new HashMapDictionaryBuilder()); // add dictionary to the dictionary list dicts.add(dict); } } // store all dictionaries in the dictionary array this.dictionaries = dicts.toArray(new Dictionary[] {}); } /* * (non-Javadoc) * * @see org.apache.uima.analysis_component.CasAnnotator_ImplBase#typeSystemInit(org.apache.uima.cas.TypeSystem) */ public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { // initialize the input match type that is used to match the dictionary // entries this.inputMatchType = typeSystem.getType(this.inputMatchTypeStr); if (this.inputMatchType == null) { throw new DictionaryAnnotatorProcessException("dictionary_annotator_error_resolving_types", new Object[] { this.inputMatchTypeStr }); } // validate inputMatchFeaturePath for given type - this must only be done // if a // feature path was specified if (this.inputMatchFeaturePathStr != null) { this.inputMatchFeaturePath.typeSystemInit(this.inputMatchType); } // validate inputMatchFilterfeaturePath for given type - this must only be // done if a // feature path was specified if (this.inputMatchFilterFeaturePathStr != null) { this.inputMatchFilterFeaturePath.typeSystemInit(this.inputMatchType); } } /** * Reads the given configuration parameters and returns the parameter value. If the parameter is * not available or the parameter type is not a String[], the given default value is returned. * * @param context * Annotator context * @param param * configuration parameter to read * @param defaultValue * default parameter value in case of errors * @return returns the boolean parameter value * @throws AnnotatorContextException * if an unrecoverable error occurs */ private static String[] safeGetConfigParameterStringArrayValue(UimaContext context, String param, String[] defaultValue) { String[] array = (String[]) context.getConfigParameterValue(param); if (array != null && array.length > 0) { return array; } return defaultValue; } /** * Resolves the absolute file name of the given relative file name using the given datapath path * elements. If the resolution was successful the File object is returned, if not null. * * @param fileName * relative file name to resolve * * @param datapathElements * datapath path elements * * @return returns the File object of the resolved file, otherwise null. */ /** * @param context * @param param * @param defaultValue * @return returns the boolean parameter value * @throws AnnotatorContextException */ private DictionaryFile resolveRelativeFilePath(String fileName, ArrayList datapathElements) throws DictionaryAnnotatorConfigException { DictionaryFile dictionaryFile; URL url = null; // check first if the current fileName is an URL if (fileName.startsWith("http")) { // try to open http connection to get the stream try { // create URL object url = new URL(fileName); // create URL connection URLConnection connection = url.openConnection(); // get stream from URL connection dictionaryFile = new DictionaryFile(url.toString(), new BufferedInputStream(connection .getInputStream())); return dictionaryFile; } catch (MalformedURLException ex) { throw new DictionaryAnnotatorConfigException("dictionary_annotator_invalid_url_resource", new Object[] { fileName }, ex); } catch (IOException ex) { throw new DictionaryAnnotatorConfigException("dictionary_annotator_invalid_url_resource", new Object[] { fileName }, ex); } } // try to use the class loader to load the file resource else if ((url = this.getClass().getClassLoader().getResource(fileName)) != null) { // we have successfully resolved the concept file, now also get it as // stream InputStream stream = this.getClass().getClassLoader().getResourceAsStream(fileName); dictionaryFile = new DictionaryFile(url.getFile(), new BufferedInputStream(stream)); return dictionaryFile; } else { if (datapathElements == null || datapathElements.size() == 0) { return null; } // try to use the datapath to load the file resource for (int i = 0; i < datapathElements.size(); i++) { File testFile = new File(datapathElements.get(i), fileName); if (testFile.exists()) { InputStream stream; try { stream = new BufferedInputStream(new FileInputStream(testFile)); } catch (FileNotFoundException ex) { return null; } dictionaryFile = new DictionaryFile(testFile.getAbsolutePath(), stream); return dictionaryFile; } } } return null; } /** * Helper class to bundle the XML dictionary file name and the dictionary file input stream to one * object. */ private static class DictionaryFile { // concept file path name private String filePath; // concept file stream private InputStream stream; /** * creates a new dictionaryFile object with the file path and the stream * * @param filePath * concept file path * * @param stream * concept file stream */ public DictionaryFile(String filePath, InputStream stream) { this.filePath = filePath; this.stream = stream; } /** * Returns the dictionary file path name * * @return concept file path name */ public String getFilePath() { return this.filePath; } /** * Returns the dictionary file stream * * @return concept file stream */ public InputStream getStream() { return this.stream; } } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/DictionaryAnnotatorProcessException.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/Dictio0000644000175000017500000000365611625126456033454 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.impl; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; /** * DictionaryAnnotatorProcessException is thrown if an annotator processing error * occurs. */ public class DictionaryAnnotatorProcessException extends AnalysisEngineProcessException { private static final long serialVersionUID = 8446506776134629247L; /** * Creates a new exception with a the specified message from the * DictionaryAnnotator message catalog. * * @param aMessageKey * an identifier that maps to the message for this exception. The * message may contain place holders for arguments as defined by * the {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if * the message has no arguments. */ public DictionaryAnnotatorProcessException(String aMessageKey, Object[] aArguments) { super(DictionaryAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/FilterOp.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/Filter0000644000175000017500000000305511625126456033457 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.impl; /** * Filter operators */ public enum FilterOp { NULL, NOT_NULL, EQUALS, NOT_EQUALS, LESS, LESS_EQ, GREATER, GREATER_EQ; public String toString() { switch (this) { case NULL: { return "null"; } case NOT_NULL: { return "!null"; } case EQUALS: { return "="; } case NOT_EQUALS: { return "!="; } case LESS: { return "<"; } case LESS_EQ: { return "<="; } case GREATER: { return "<"; } case GREATER_EQ: { return "<="; } default: { return ""; } } } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/FeaturePathInfo_impl.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/impl/Featur0000644000175000017500000006236111625126456033465 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.impl; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Locale; import java.util.ResourceBundle; import java.util.StringTokenizer; import org.apache.uima.annotator.dict_annot.dictionary.impl.FeaturePathInfo; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.LowLevelCAS; import org.apache.uima.cas.impl.TypeSystemUtils; import org.apache.uima.cas.impl.TypeSystemUtils.PathValid; import org.apache.uima.cas.text.AnnotationFS; /** * FeaturePathInfo implementation validates the given featurePath for a * specified annotation. It can return the featurePath value as string or match * the featurePath value against a specified condition. */ public class FeaturePathInfo_impl implements FeaturePathInfo { // featurePath string, separated by "/" private String featurePathString; // featurePath element names private ArrayList featurePathElementNames; // featurePath element features private ArrayList featurePathElements; /** * Constructor to create a new featurePath object */ public FeaturePathInfo_impl() { this.featurePathElementNames = new ArrayList(); this.featurePathElements = null; } /** * Initialize the object's featurePath for the given type. If the featurePath * is not valid an exception is thrown. * * @param featurePath * featurePath string separated by "/" */ public void initialize(String featurePath) throws DictionaryAnnotatorConfigException { this.featurePathString = featurePath; // check featurePath for invalid character sequences if (this.featurePathString.indexOf("//") > -1) { // invalid featurePath syntax throw new DictionaryAnnotatorConfigException( "dictionary_annotator_error_invalid_feature_path_syntax", new Object[] { this.featurePathString, "//" }); } // parse feature path into path elements StringTokenizer tokenizer = new StringTokenizer(this.featurePathString, "/"); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); this.featurePathElementNames.add(token); } } /** * checks the feature path for the given type and checks if it can be valid. * * @throws DictionaryAnnotatorProcessException */ public void typeSystemInit(Type featurePathType) throws DictionaryAnnotatorProcessException { // validate featurePath for given type PathValid pathValid = TypeSystemUtils.isPathValid(featurePathType, this.featurePathElementNames); if (PathValid.NEVER == pathValid) { // invalid featurePath - throw an configuration exception throw new DictionaryAnnotatorProcessException( "dictionary_annotator_error_validating_feature_path", new Object[] { this.featurePathString, featurePathType.getName() }); } else if (PathValid.ALWAYS == pathValid) { // the featurePath is always valid, so we can resolve and cache the // path elements this.featurePathElements = new ArrayList(); Type currentType = featurePathType; // iterate over all featurePathNames and store the resolved CAS // feature in the featurePathElements list for (int i = 0; i < this.featurePathElementNames.size(); i++) { // get feature Feature feature = currentType .getFeatureByBaseName(this.featurePathElementNames.get(i)); // store feature this.featurePathElements.add(feature); // get current feature type to resolve the next feature name currentType = feature.getRange(); } } } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.dictionary.impl.FeaturePathInfo#getValue(org.apache.uima.cas.text.AnnotationFS) */ public String getValue(AnnotationFS annotFS) { // handle special case where no featurePath was specified // (featurePathString == null) if (this.featurePathElementNames.size() == 0) { // no featurePath was specified, return the coveredText of the annotFS // as matching text return annotFS.getCoveredText(); } else { // we have a feature path that must be evaluated // featurePathValue String featurePathValue = null; // check if further featurePath elements are possible boolean noFurtherElementsPossible = false; // set current FS values FeatureStructure currentFS = annotFS; Type currentType = annotFS.getType(); int currentFeatureTypeCode = LowLevelCAS.TYPE_CLASS_INVALID; // resolve feature path value for (int i = 0; i < this.featurePathElementNames.size(); i++) { // if we had in the last iteration a primitive feature or a FS that // was // not set, the feature path is not valid for this annotation. if (noFurtherElementsPossible) { return null; } // get the Feature for the current featurePath element. If the // featurePath is always valid the featurePath Feature elements are // cached, otherwise the feature names must be resolved by name Feature feature; if (this.featurePathElements == null) { // resolve Feature by name feature = currentType .getFeatureByBaseName(this.featurePathElementNames.get(i)); } else { // use cached Feature element feature = this.featurePathElements.get(i); } // if feature is null the feature was not defined if (feature == null) { return null; } // get feature type and type code Type featureType = feature.getRange(); currentFeatureTypeCode = TypeSystemUtils.classifyType(featureType); // switch feature type code switch (currentFeatureTypeCode) { case LowLevelCAS.TYPE_CLASS_STRING: featurePathValue = currentFS.getStringValue(feature); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_INT: featurePathValue = Integer.toString(currentFS .getIntValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_BOOLEAN: featurePathValue = Boolean.toString(currentFS .getBooleanValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_BYTE: featurePathValue = Byte .toString(currentFS.getByteValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_DOUBLE: featurePathValue = Double.toString(currentFS .getDoubleValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_FLOAT: featurePathValue = Float.toString(currentFS .getFloatValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_LONG: featurePathValue = Long .toString(currentFS.getLongValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_INVALID: featurePathValue = null; noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_SHORT: featurePathValue = Short.toString(currentFS .getShortValue(feature)); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_FS: currentFS = currentFS.getFeatureValue(feature); if (currentFS == null) { // FS value not set - feature path cannot return a valid value noFurtherElementsPossible = true; featurePathValue = null; } else { currentType = currentFS.getType(); } break; default: // create message for unsupported feature path type ResourceBundle bundle = ResourceBundle.getBundle( DictionaryAnnotator.MESSAGE_DIGEST, Locale.getDefault(), this.getClass().getClassLoader()); // retrieve the message from the resource bundle String rawMessage = bundle .getString("dictionary_annotator_error_feature_path_element_not_supported"); MessageFormat messageFormat = new MessageFormat(rawMessage); messageFormat.setLocale(Locale.getDefault()); String message = messageFormat.format(new Object[] { currentType.getName(), this.featurePathElementNames.get(i), this.featurePathString }); // throw a RuntimeException with the unsupported feature path throw new RuntimeException(message); } } // the featurePath was processed correctly, check the featurePath value if (featurePathValue != null) { return featurePathValue; } else { // it seems that the last featurePath element was a FS // check now if the FS is of type AnnotationFS if (currentFS != null && currentFeatureTypeCode == LowLevelCAS.TYPE_CLASS_FS) { if (currentFS instanceof AnnotationFS) { // the last FS was an Annotation, so return the covered Text // of the annotation as featurePath value return ((AnnotationFS) currentFS).getCoveredText(); } } return null; } } } /* * (non-Javadoc) * * @see org.apache.uima.annotator.regex.FeaturePath#getFeaturePath() */ public String getFeaturePath() { return this.featurePathString; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.dictionary.impl.FeaturePathInfo#match(org.apache.uima.cas.text.AnnotationFS, * org.apache.uima.annotator.dict_annot.impl.Condition) */ public boolean match(AnnotationFS annotFS, Condition condition) { // handle special case where no featurePath was specified if (this.featurePathElementNames.size() == 0) { // no featurePath was specified, return the false return false; } else { // we have a feature path that must be evaluated // check if further featurePath elements are possible boolean noFurtherElementsPossible = false; // check condition result boolean checkCondidtion = false; // set current FS values FeatureStructure currentFS = annotFS; Type currentType = annotFS.getType(); int currentFeatureTypeCode = LowLevelCAS.TYPE_CLASS_INVALID; // resolve feature path value for (int i = 0; i < this.featurePathElementNames.size(); i++) { // if we had in the last iteration a primitive feature or a FS that // was not set, the feature path is not valid for this annotation. if (noFurtherElementsPossible) { return false; } // get the Feature for the current featurePath element. If the // featurePath is always valid the featurePath Feature elements are // cached, otherwise the feature names must be resolved by name Feature feature; if (this.featurePathElements == null) { // resolve Feature by name feature = currentType .getFeatureByBaseName(this.featurePathElementNames.get(i)); } else { // use cached Feature element feature = this.featurePathElements.get(i); } // if feature is null the feature was not defined if (feature == null) { return false; } // get feature type and type code Type featureType = feature.getRange(); currentFeatureTypeCode = TypeSystemUtils.classifyType(featureType); // switch feature type code switch (currentFeatureTypeCode) { case LowLevelCAS.TYPE_CLASS_STRING: checkCondidtion = checkString(annotFS.getStringValue(feature), condition); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_INT: checkCondidtion = checkInt(annotFS.getIntValue(feature), condition); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_BOOLEAN: checkCondidtion = checkBoolean(annotFS.getBooleanValue(feature), condition); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_BYTE: checkCondidtion = checkByte(annotFS.getByteValue(feature), condition); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_DOUBLE: checkCondidtion = checkDouble(annotFS.getDoubleValue(feature), condition); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_FLOAT: checkCondidtion = checkFloat(annotFS.getFloatValue(feature), condition); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_LONG: checkCondidtion = checkLong(annotFS.getLongValue(feature), condition); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_INVALID: noFurtherElementsPossible = true; checkCondidtion = false; break; case LowLevelCAS.TYPE_CLASS_SHORT: checkCondidtion = checkShort(annotFS.getShortValue(feature), condition); noFurtherElementsPossible = true; break; case LowLevelCAS.TYPE_CLASS_FS: currentFS = currentFS.getFeatureValue(feature); if (currentFS == null) { // FS value not set - feature path cannot return a valid value noFurtherElementsPossible = true; checkCondidtion = false; } else { currentType = currentFS.getType(); } break; default: // create message for unsupported feature path type ResourceBundle bundle = ResourceBundle.getBundle( DictionaryAnnotator.MESSAGE_DIGEST, Locale.getDefault(), this.getClass().getClassLoader()); // retrieve the message from the resource bundle String rawMessage = bundle .getString("dictionary_annotator_error_feature_path_element_not_supported"); MessageFormat messageFormat = new MessageFormat(rawMessage); messageFormat.setLocale(Locale.getDefault()); String message = messageFormat.format(new Object[] { currentType.getName(), this.featurePathElementNames.get(i), this.featurePathString }); // throw a RuntimeException with the unsupported feature path throw new RuntimeException(message); } } return checkCondidtion; } } /** * Check the given byte value for the specified condition * * @param in * byte value to check * @param condition * condition to check * * @return returns true if the condition match the byte value */ private final boolean checkByte(byte in, Condition condition) { String value = condition.getValue(); byte v; try { v = Byte.parseByte(value); } catch (NumberFormatException e) { return false; } switch (condition.getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } /** * Check the given double value for the specified condition * * @param in * double value to check * @param condition * condition to check * * @return returns true if the condition match the double value */ private final boolean checkDouble(double in, Condition condition) { String value = condition.getValue(); double v; try { v = Double.parseDouble(value); } catch (NumberFormatException e) { return false; } switch (condition.getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } /** * Check the given float value for the specified condition * * @param in * float value to check * @param condition * condition to check * * @return returns true if the condition match the float value */ private final boolean checkFloat(float in, Condition condition) { String value = condition.getValue(); float v; try { v = Float.parseFloat(value); } catch (NumberFormatException e) { return false; } switch (condition.getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } /** * Check the given long value for the specified condition * * @param in * long value to check * @param condition * condition to check * * @return returns true if the condition match the long value */ private final boolean checkLong(long in, Condition condition) { String value = condition.getValue(); long v; try { v = Long.parseLong(value); } catch (NumberFormatException e) { return false; } switch (condition.getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } /** * Check the given int value for the specified condition * * @param in * int value to check * @param condition * condition to check * * @return returns true if the condition match the int value */ private final boolean checkInt(int in, Condition condition) { String value = condition.getValue(); int v; try { v = Integer.parseInt(value); } catch (NumberFormatException e) { return false; } switch (condition.getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } /** * Check the given short value for the specified condition * * @param in * short value to check * @param condition * condition to check * * @return returns true if the condition match the short value */ private final boolean checkShort(short in, Condition condition) { String value = condition.getValue(); short v; try { v = Short.parseShort(value); } catch (NumberFormatException e) { return false; } switch (condition.getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } /** * Check the given String value for the specified condition * * @param in * String value to check * @param condition * condition to check * * @return returns true if the condition match the String value */ private final boolean checkString(String s, Condition condition) { String value = condition.getValue(); // Value can not be null assert (value != null); FilterOp op = condition.getConditionType(); // First check for conditions that makes sense if input value is null. switch (op) { case NULL: { return (s == null); } case NOT_NULL: { return (s != null); } } // If we get here and s is null, we fail. if (s == null) { return false; } // Now neither the value nor s are null, so we can compare them. final int comp = s.compareTo(value); switch (op) { case EQUALS: { return (comp == 0); } case NOT_EQUALS: { return (comp != 0); } case GREATER: { return (comp > 0); } case GREATER_EQ: { return (comp >= 0); } case LESS: { return (comp < 0); } case LESS_EQ: { return (comp <= 0); } default: { // Can't get here, but the compiler doesn't know that. return false; } } } /** * Check the given boolean value for the specified condition * * @param in * boolean value to check * @param condition * condition to check * * @return returns true if the condition match the boolean value */ private final boolean checkBoolean(boolean b, Condition condition) { String value = condition.getValue(); boolean v = Boolean.parseBoolean(value); switch (condition.getConditionType()) { case EQUALS: { return (v == b); } case NOT_EQUALS: { return (v != b); } default: { return false; } } } } uima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000755000175000017500000000000011625126456033510 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/DictionaryMatch.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000263411625126456033517 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary; /** * The DictionaryMatch interface defines the access to a dictionary match. */ public interface DictionaryMatch { /** * Returns the dictionary match entry meta data. * * @return The dictionary match entry meta data is returned */ public EntryMetaData getMatchMetaData(); /** * Returns the length of the match. * * @return returns 1 for a single word match. In case of a multi word match, * the multi word token count is returned. */ public int getMatchLength(); } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/Dictionary.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000565711625126456033527 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary; import org.apache.uima.annotator.dict_annot.dictionary.impl.FeaturePathInfo; import org.apache.uima.cas.text.AnnotationFS; /** * Dictionary interface to work with a dictionary. * The interface defines methods to check if a word or multi-word is available * in the dictionary and to match tokens against the dictionary. */ public interface Dictionary { /** * Checks if the given word is available in the dictionary. * * @param word * word to look for * * @return returns true if the given word is available in the dictionary, * otherwise false is returned */ public boolean contains(String word); /** * Checks if the given multi word is available in the dictionary. * * @param multiWord * multi word to look for * * @return returns true if the given multi word is available in the * dictionary, otherwise false is returned */ public boolean contains(String[] multiWord); /** * Checks if at the current position in the token array a match in the * dictionary is found. * * @param pos * current array position * * @param annotFSs * input annotation FS array * * @param featPathInfo * featurePath information for the matching * * @return returns a DictionaryMatch object in case a match was found. If no * match was found, null is returned */ public DictionaryMatch matchEntry(int pos, AnnotationFS[] annotFSs, FeaturePathInfo featPathInfo); /** * Returns the number of entries that are stored in the dictionary. * * @return number of entries */ public int getEntryCount(); /** * Returns the type name which should use to create annotations * * @return type name */ public String getTypeName(); /** * Returns the language of this dictionary * * @return dictionary language */ public String getLanguage(); } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/EntryMetaData.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000221611625126456033513 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary; /** * The EntryMetaData interface defines the access to the dictionary entry meta data. */ public interface EntryMetaData { /** * Returns the unique ID of this entry * * @return returns the unique ID for this entry */ public int getId(); } ././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/DictionaryBuilder.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000374511625126456033523 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary; /** * The Dictionary builder interface define the methods to create a new * dictionary. */ public interface DictionaryBuilder { /** * @return returns the Dictionary object if the dictionary could be created. */ public Dictionary getDictionary(); /** * Adds a new word to the dictionary. * * @param word * word that should be added. */ public void addWord(String word); /** * Set the dictionary properties, this method have to be called before words * can be added to the dictionary. * * @param language * dictionary language * * @param typeName * type name for the dictionary content * @param caseNormalization * case normalization settings * @param multiWordEntries * multi-word entries setting * @param multiWordSeparator * multi-word entry separator */ public void setDictionaryProperties(String language, String typeName, boolean caseNormalization, boolean multiWordEntries, String multiWordSeparator); } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/DictionaryFileParser.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000350711625126456033517 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary; import java.io.InputStream; import org.apache.uima.resource.ResourceInitializationException; /** * The DictionaryFileParser interface defines the method to parse a dictionary * file to create a dictionary. */ public interface DictionaryFileParser { /** * parse the given dictionary file and creates a new dictionary using the * given dictionary builder. * * @param dictionaryFilePath * dictionary XML file path * * @param dictionaryFileStream * dictionary XML file stream * * @param dictBuilder * dictionary build that should be used to create the dictionary * @return returns the created Dictionary * @throws ResourceInitializationException */ public Dictionary parseDictionaryFile(String dictionaryFilePath, InputStream dictionaryFileStream, DictionaryBuilder dictBuilder) throws ResourceInitializationException; } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/impl/uima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000755000175000017500000000000011625126456033510 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/impl/EntryMetaDataImpl.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000277311625126456033523 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary.impl; import org.apache.uima.annotator.dict_annot.dictionary.EntryMetaData; /** * Implementation of the EntryMetaData interface. */ public class EntryMetaDataImpl implements EntryMetaData { // unique ID of the current dictionary entry private int id; /** * creates a new EntryMetaDataImpl object with a unique ID. * * @param id * unique ID */ public EntryMetaDataImpl(int id) { this.id = id; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.EntryMetaData#getId() */ public int getId() { return this.id; } } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/impl/DictionaryMatchImpl.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000665211625126456033523 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary.impl; import org.apache.uima.annotator.dict_annot.dictionary.DictionaryMatch; import org.apache.uima.annotator.dict_annot.dictionary.EntryMetaData; /** * Implementation of the DictionaryMatch interface. Store the matches found in * the dictionary temporarily and check on the fly in they are valid or not. All * valid matches are stored separately. The last valid match is replaced if a new valid * match was found. At the end the match object contains the longest valid match * from the dictionary. */ public class DictionaryMatchImpl implements DictionaryMatch { // token count of the tempMatch that was found private int tempTokenCount; // metaData object of the temp match that was found private EntryMetaData tempMetaData; // token count of the last valid match private int correctTokenCount; // metaData of the last valid match private EntryMetaData correctMetaData; /** * Creates a new DictionaryMatch object and reset all members */ public DictionaryMatchImpl() { reset(); } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.DictionaryMatch#getMatchMetaData() */ public EntryMetaData getMatchMetaData() { return this.correctMetaData; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.DictionaryMatch#getMatchLength() */ public int getMatchLength() { return this.correctTokenCount; } /** * stores a new match in the match object * * @param metaData * metaData for the entry that matched * * @param isComplete * specifies if the entry is a temporary match or a valid match */ public void storeMatch(EntryMetaData metaData, boolean isComplete) { this.tempMetaData = metaData; this.tempTokenCount++; // if the match is valid -> store valid match if (isComplete) { this.correctTokenCount = this.tempTokenCount; this.correctMetaData = this.tempMetaData; } } /** * check if a valid match is available. * * @return returns true if a valid match is available, otherwise false is returned */ public boolean isValidMatch() { if (this.correctTokenCount > 0) { return true; } return false; } /** * reset the match data */ public void reset() { this.correctMetaData = null; this.tempMetaData = null; this.correctTokenCount = 0; this.tempTokenCount = 0; } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/impl/FeaturePathInfo.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000401311625126456033510 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary.impl; import org.apache.uima.annotator.dict_annot.impl.Condition; import org.apache.uima.cas.text.AnnotationFS; /** * FeaturePath interface defines the access to the value for a feature path * */ public interface FeaturePathInfo { /** * Returns the value of the given annotation FS for the stored featurePath. * * @param annotFs * annotation where the featurePath should be resolved on. * * @return featurePath value as String */ public String getValue(AnnotationFS annotFs); /** * Returns the featurePath as String * * @return featurePath string value */ public String getFeaturePath(); /** * Returns true if the featurePath value for the given annotation match the * specified condition. * * It returns false if no featurePath was specified! * * @param annotFS * current annotation to check * @param condition * condition for the match * * @return returns true if the conditions match the featurePath value */ public boolean match(AnnotationFS annotFS, Condition condition); }././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/impl/DictionaryEntry.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000664411625126456033524 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary.impl; import java.util.HashMap; import org.apache.uima.annotator.dict_annot.dictionary.EntryMetaData; /** * The DictionaryEntry contains the entry meta data object and the information * if an entry is complete or just a part of a multi-word entry. * * If the entry is part of a multi-word entry it also contains the branch of * multi-word tokens that are followed by the current entry. */ public class DictionaryEntry { // sub branch of multi word token entries of the current entry private HashMap subBranch; // specifies if the current entry is complete or just a part of a multi word private boolean isComplete = false; // contains the current entry meta data private EntryMetaData entryMetaData; /** * Creates a new DictionaryEntry object * * @param isComplete * should be true if the current entry is complete. An entry is * complete if it is a single word or the last token of a multi * word entry * * @param metaData * meta data for the current entry */ public DictionaryEntry(boolean isComplete, EntryMetaData metaData) { this.isComplete = isComplete; this.entryMetaData = metaData; } /** * Returns the sub branch for a dictionary entry. If no sub branch exist, a * new branch is created. * * @return returns the sub branch HashMap for this entry */ public HashMap getSubBranch() { if (this.subBranch == null) { this.subBranch = new HashMap(); } return this.subBranch; } /** * Returns for the current entry if it is complete or not. An entry is * complete if it is a single word or the last token of a multi word entry. * * @return returns true if the entry is complete, otherwise false. */ public boolean isComplete() { return this.isComplete; } /** * marks the current entry as a valid entry */ public void setComplete() { this.isComplete = true; } /** * Returns the current entry meta data object. * * @return EntryMetaData object for the current entry. */ public EntryMetaData getEntryMetaData() { return this.entryMetaData; } /** * Sets the metaData for this entry. * * @param metaData * entry meta data */ public void setEntryMetaData(EntryMetaData metaData) { this.entryMetaData = metaData; } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/impl/HashMapDictionaryBuilder.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000001047211625126456033516 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary.impl; import java.util.ArrayList; import java.util.StringTokenizer; import org.apache.uima.annotator.dict_annot.dictionary.Dictionary; import org.apache.uima.annotator.dict_annot.dictionary.DictionaryBuilder; /** * Implementation of the DictionaryBuilder interface to build a new HashMap * dictionary. */ public class HashMapDictionaryBuilder implements DictionaryBuilder { // multi-word entry dictionary private boolean createMultiWordEntries; // HashMap dictionary private HashMapDictionary dictionary; // multi-word separator private String multiWordSeparator; /** * Default constructor. Creates a new HashMap dictionary with case * normalization. */ public HashMapDictionaryBuilder() { this.dictionary = new HashMapDictionary(true); // initialize the default separator character with a space character this.multiWordSeparator = " "; } /** * Returns the multi-word separator of the dictionary builder * * @return multi-word separator */ public String getMultiWordSeparator() { return this.multiWordSeparator; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.dictionary.DictionaryBuilder#setDictionaryProperties(java.lang.String, * java.lang.String, boolean, boolean, java.lang.String) */ public void setDictionaryProperties(String language, String typeName, boolean caseNormalization, boolean multiWordEntries, String multiWordSeparator) { // create a new dictionary if the settings changed. if (!caseNormalization) { this.dictionary = new HashMapDictionary(caseNormalization); } this.dictionary.setDictionaryLanguage(language); this.dictionary.setTypeName(typeName); this.createMultiWordEntries = multiWordEntries; // set multi-word separator if (multiWordSeparator != null) { this.multiWordSeparator = multiWordSeparator; } } /** * split up the given input in several tokens using the multi-word separator * character as delimiter. * * @param input * word that should be tokenized * * @return Tokens for the given input */ private String[] multiTokenTokenizer(String input) { // create StringTokenizer tokenizer = new StringTokenizer(input, this.multiWordSeparator); ArrayList tokens = new ArrayList(); while (tokenizer.hasMoreTokens()) { tokens.add(tokenizer.nextToken()); } String[] multiWord = tokens.toArray(new String[] {}); return multiWord; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.dictionary.DictionaryBuilder#addWord(java.lang.String) */ public void addWord(String word) { if (this.createMultiWordEntries) { // tokenize the entry String[] multiWord = multiTokenTokenizer(word); if (multiWord.length == 1) { this.dictionary.addWord(multiWord[0]); } else { this.dictionary.addMultiWord(multiWord); } } else { this.dictionary.addWord(word); } } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.dictionary.DictionaryBuilder#getDictionary() */ public Dictionary getDictionary() { return this.dictionary; } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/impl/DictionaryFileParserImpl.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000001213111625126456033510 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary.impl; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import org.apache.incubator.uima.DictionaryDocument; import org.apache.incubator.uima.EntriesDocument; import org.apache.incubator.uima.EntryDocument; import org.apache.incubator.uima.TypeCollectionDocument; import org.apache.incubator.uima.DictionaryMetaDataDocument.DictionaryMetaData; import org.apache.uima.annotator.dict_annot.dictionary.Dictionary; import org.apache.uima.annotator.dict_annot.dictionary.DictionaryBuilder; import org.apache.uima.annotator.dict_annot.dictionary.DictionaryFileParser; import org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotatorConfigException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.xmlbeans.XmlError; import org.apache.xmlbeans.XmlOptions; /** * The DictionaryFileParser implementation parse the dictionary XML file and * creates a dictionary with the given dictionary builder. */ public class DictionaryFileParserImpl implements DictionaryFileParser { /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.dictionary.DictionaryFileParser#parseDictionaryFile(java.lang.String, * java.io.InputStream, * org.apache.uima.annotator.dict_annot.dictionary.DictionaryBuilder) */ public Dictionary parseDictionaryFile(String dictionaryFilePath, InputStream dictionaryFileStream, DictionaryBuilder dictBuilder) throws ResourceInitializationException { // parse the dictionary file and extract the content DictionaryDocument dictionaryDoc; try { dictionaryDoc = DictionaryDocument.Factory.parse(dictionaryFileStream); } catch (Exception ex) { throw new DictionaryAnnotatorConfigException( "dictionary_annotator_error_parsing_dictionary_file", new Object[] { dictionaryFilePath }, ex); } // validate input file ArrayList validationErrors = new ArrayList(); XmlOptions validationOptions = new XmlOptions(); validationOptions.setErrorListener(validationErrors); boolean isValid = dictionaryDoc.validate(validationOptions); // output the errors if the XML is invalid. if (!isValid) { Iterator iter = validationErrors.iterator(); StringBuffer errorMessages = new StringBuffer(); while (iter.hasNext()) { errorMessages.append("\n>> "); errorMessages.append(iter.next()); } throw new DictionaryAnnotatorConfigException( "dictionary_annotator_error_xml_validation", new Object[] { dictionaryFilePath, errorMessages.toString() }); } // get dictionary document DictionaryDocument.Dictionary dictionary = dictionaryDoc.getDictionary(); // get type collection settings TypeCollectionDocument.TypeCollection typeCollection = dictionary .getTypeCollection(); DictionaryMetaData dictMetaData = typeCollection.getDictionaryMetaData(); boolean caseNormalization = true; boolean multiWordEntries = true; String multiWordSeparator = null; if (dictMetaData != null) { caseNormalization = dictMetaData.getCaseNormalization(); multiWordEntries = dictMetaData.getMultiWordEntries(); multiWordSeparator = dictMetaData.getMultiWordSeparator(); } // get the dictionary language and the type name String language = typeCollection.getLanguageId(); String typeName = typeCollection.getTypeDescription().getTypeName(); // set dictionary properties dictBuilder.setDictionaryProperties(language, typeName, caseNormalization, multiWordEntries, multiWordSeparator); // get dictionary entries and add process them with the dictionary builder EntriesDocument.Entries entries = typeCollection.getEntries(); EntryDocument.Entry[] entryArray = entries.getEntryArray(); for (int i = 0; i < entryArray.length; i++) { dictBuilder.addWord(entryArray[i].getKey().getStringValue()); } // get dictionary and return it return dictBuilder.getDictionary(); } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/impl/DictionaryCreator.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000003451111625126456033516 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary.impl; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.HashMap; import java.util.List; import java.util.StringTokenizer; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.internal.util.CommandLineParser; import org.apache.uima.pear.tools.PackageBrowser; import org.apache.uima.pear.tools.PackageInstaller; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.util.FileUtils; import org.apache.uima.util.XMLInputSource; /** * The DicrionaryCreator creates an dictionary XML file based on the given input * parameters. The input file must contain one dictionary entry for each line. * The line is tokenized into multi words either with the specified tokenizer * PEAR file or with the separator character. * * The dictionary output XML file (UTF-8) must be updated after the creation * with some metadata information. */ public class DictionaryCreator { // input file command line parameter private static final String INPUT_FILE_PARAM = "-input"; // output file command line parameter private static final String OUTPUT_FILE_PARAM = "-output"; // input file encoding command line parameter private static final String INPUT_FILE_ENCODING_PARAM = "-encoding"; // input file language command line parameter private static final String INPUT_FILE_LANGUAGE_PARAM = "-lang"; // tokenizer command line parameter private static final String TOKENIZER_PARAM = "-tokenizer"; // tokenizer token type command line parameter private static final String TOKEN_TYPE_PARAM = "-tokenType"; // token separator character command line parameter private static final String SEPARATOR_CHAR_PARAM = "-separator"; // default separator character private static final String SEPARATOR_CHAR = " "; // default output separator character private static final String OUTPUT_SEPARATOR_CHAR = "|"; private static HashMap entities; static { entities = new HashMap(5); entities.put('<', "<"); entities.put('>', ">"); entities.put('&', "&"); entities.put('\"', """); entities.put('\'', "'"); } /** * creates the CommandLine parser used to parse the DictionaryCreator command * line. * * @return returns the CommandLineParser for the DictionaryCreator */ private static final CommandLineParser createCmdLineParser() { CommandLineParser parser = new CommandLineParser(); parser.addParameter(INPUT_FILE_PARAM, true); parser.addParameter(INPUT_FILE_LANGUAGE_PARAM, true); parser.addParameter(OUTPUT_FILE_PARAM, true); parser.addParameter(INPUT_FILE_ENCODING_PARAM, true); parser.addParameter(TOKENIZER_PARAM, true); parser.addParameter(TOKEN_TYPE_PARAM, true); parser.addParameter(SEPARATOR_CHAR_PARAM, true); return parser; } /** * prints the DictionaryCreator usage to the command line */ private static final void printUsage() { System.out .println("Usage: java org.apache.uima.annotator.dict_annot.dictionary.impl.DictionaryCreator -input -encoding -output [-tokenizer -tokenType ] [-separator ] "); System.out.println("Additional optional parameters:"); System.out.println(" -lang "); } /** * checks the command line syntax for errors * * @param clp * current CommandLineParser * * @return returns false in case of command line syntax errors, otherwise * true */ private static final boolean checkCmdLineSyntax(CommandLineParser clp) { boolean error = false; // check mandatory command line parameters if (!clp.isInArgsList(INPUT_FILE_PARAM)) { System.err.println("InputFile parameter -input is missing"); error = true; } if (!clp.isInArgsList(INPUT_FILE_ENCODING_PARAM)) { System.err .println("InputFile encoding parameter -encoding is missing"); error = true; } if (!clp.isInArgsList(OUTPUT_FILE_PARAM)) { System.err.println("OutputFile parameter -output is missing"); error = true; } if (clp.isInArgsList(TOKENIZER_PARAM)) { if (!clp.isInArgsList(TOKEN_TYPE_PARAM)) { System.err .println("If a tokenizer is used, the -tokenType paramter must be specified"); error = true; } } // if there was an error, return false if (error == true) { return false; } return true; } /** * main method for DictionaryCreator * * @param args * command line arguments */ public static void main(String[] args) { // create command line parser CommandLineParser clp = createCmdLineParser(); try { // parse command line clp.parseCmdLine(args); // check command line syntax if (!checkCmdLineSyntax(clp)) { printUsage(); System.exit(-1); } } catch (Exception e) { System.err.println("Error parsing command line: " + e.getMessage()); } // get command line arguments String inputFile = clp.getParamArgument(INPUT_FILE_PARAM); String language = clp.getParamArgument(INPUT_FILE_LANGUAGE_PARAM); String encoding = clp.getParamArgument(INPUT_FILE_ENCODING_PARAM); String outputFile = clp.getParamArgument(OUTPUT_FILE_PARAM); String tokenizerFile = clp.getParamArgument(TOKENIZER_PARAM); String tokenTypeStr = clp.getParamArgument(TOKEN_TYPE_PARAM); String separatorChar = clp.getParamArgument(SEPARATOR_CHAR_PARAM); // create dictionary try { DictionaryCreator.createDictionary(inputFile, encoding, outputFile, language, tokenizerFile, tokenTypeStr, separatorChar); System.out.println("The dictionary was sucessfully created at: " + outputFile); } catch (Exception ex) { ex.printStackTrace(); } } public static boolean createDictionary(String inputFile, String encoding, String outputFile, String language, String tokenizerFile, String tokenTypeStr, String separatorChar) throws Exception { String outputSeparatorChar = OUTPUT_SEPARATOR_CHAR; // check input file command line argument File inFile = new File(inputFile); if (!inFile.canRead()) { throw new Exception("Error: Input file " + inputFile + " cannot be read!"); } // check tokenizer pear command line arguments AnalysisEngine ae = null; Type tokenType = null; CAS cas = null; File tempDir = null; if (tokenizerFile != null) { // if a tokenizer is specified, check if the file can be read File pearFile = new File(tokenizerFile); if (!pearFile.canRead()) { throw new Exception("Error: Tokenizer file " + tokenizerFile + " cannot be read!"); } if (tokenTypeStr == null) { throw new Exception("Error: Tokenizer tokenType not specified"); } try { // create temp directory to install PEAR tempDir = new File(System.getProperty("java.io.tmpdir"), "~tokenizer_temp_install"); tempDir.deleteOnExit(); tempDir.mkdir(); // Install PEAR package PackageBrowser instPear = PackageInstaller.installPackage(tempDir, pearFile, true); // Create analysis engine from the installed PEAR package XMLInputSource in = new XMLInputSource(instPear .getComponentPearDescPath()); ResourceSpecifier specifier = UIMAFramework.getXMLParser() .parseResourceSpecifier(in); ae = UIMAFramework.produceAnalysisEngine(specifier); // create CAS and initialize tokenType cas = ae.newCAS(); tokenType = cas.getTypeSystem().getType(tokenTypeStr); } catch (Exception ex) { throw new Exception("Error creating tokenizer: " + ex.getMessage(), ex); } } // check separator char command line argument if (separatorChar == null) { // use default separator character separatorChar = SEPARATOR_CHAR; } else { // if set, use specified separator char also as output separator outputSeparatorChar = separatorChar; } // initialize input and output files BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(inputFile), encoding)); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(outputFile), "UTF-8")); // write dictionary XML lead in writer.write("\n"); writer .write("\n"); writer.write("\n"); writer .write("\n"); if (language != null) { writer.write("" + language + "\n"); } writer.write("\n"); writer.write(" ADD DICTIONARY OUTPUT TYPE HERE\n"); writer.write("\n"); writer.write("\n"); // start adding dictionary entries String line = reader.readLine(); while (line != null) { // multi workd string buffer - contains the tokens for each entry StringBuffer multiWordString = new StringBuffer(); // tokenize entry line if (ae != null) { // use tokenizer cas.setDocumentText(line); if (language != null) { cas.setDocumentLanguage(language); } // tokenize line ae.process(cas); // read results FSIterator it = cas.getAnnotationIndex(tokenType).iterator(); while (it.hasNext()) { multiWordString.append(((AnnotationFS) it.next()) .getCoveredText()); multiWordString.append(outputSeparatorChar); } cas.reset(); } else { // use separator char StringTokenizer tokenizer = new StringTokenizer(line, separatorChar); while (tokenizer.hasMoreTokens()) { multiWordString.append(tokenizer.nextToken()); multiWordString.append(outputSeparatorChar); } } // trim string and remove separator char at the end String multiWordTokenString = multiWordString.toString().trim(); if (multiWordTokenString.endsWith(outputSeparatorChar)) { int separatorLength = outputSeparatorChar.length(); int length = multiWordTokenString.length(); multiWordTokenString = multiWordTokenString.substring(0, length - separatorLength); } // replace XML entities multiWordTokenString = replaceXMLEntities(multiWordTokenString); // write dictionary entry to XML writer.write("\n"); writer.write("" + multiWordTokenString + "\n"); writer.write("\n"); // get next line line = reader.readLine(); } // all dictionary lines are processed reader.close(); // write dictionary XML lead out writer.write("\n"); writer.write("\n"); writer.write("\n"); writer.close(); // try to delete PEAR temp dir if (tempDir != null) { FileUtils.deleteRecursive(tempDir); if (tempDir != null) { List files = FileUtils.getFiles(tempDir, true); if (files != null) { for (int i = 0; i < files.size(); i++) { ((File) files.get(i)).deleteOnExit(); } } } } return true; } /** * returns text with replaced XML entities * * @param text * input text * * @return XML valid text */ private static String replaceXMLEntities(String text) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < text.length(); i++) { char character = text.charAt(i); if (DictionaryCreator.entities.containsKey(character)) { buffer.append(DictionaryCreator.entities.get(character)); } else { buffer.append(character); } } return buffer.toString(); } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/impl/HashMapDictionary.javauima-addons-2.3.1/DictionaryAnnotator/src/main/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000003655411625126456033527 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary.impl; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import org.apache.uima.annotator.dict_annot.dictionary.Dictionary; import org.apache.uima.annotator.dict_annot.dictionary.DictionaryMatch; import org.apache.uima.annotator.dict_annot.dictionary.EntryMetaData; import org.apache.uima.cas.text.AnnotationFS; /** * HashMap dictionary implementation. Implements the Dictionary interface using * a simple HashMap for the lookup. Each word added to the dictionary is added * to the main dictionary HashMap with some additional meta data information. In * case of multi-words the multi word parts are added as tree to the dictionary. */ public class HashMapDictionary implements Dictionary { // main dictionary HashMap private HashMap dictionary = null; // counts the entries in the dictionary, each entry gets an own unique ID private int idCounter; // dictionary language private String language; // dictionary output type private String typeName; // dictionary case normalization setting private boolean caseNormalization = true; /** * Creates a new HashMapDictionary object with an initial capacity of 100 * entries. */ public HashMapDictionary(boolean caseNormalization) { this.dictionary = new HashMap(100); this.idCounter = 0; this.caseNormalization = caseNormalization; this.language = null; this.typeName = null; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.Dictionary#contains(java.lang.String) */ public boolean contains(String word) { // check if the given word is available in the dictionary DictionaryEntry entry = this.dictionary.get(normalizeString(word)); if (entry != null) { return entry.isComplete(); } else { return false; } } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.Dictionary#contains(java.lang.String[]) */ public boolean contains(String[] multiWord) { // check if the dictionary contains the given multi-word DictionaryEntry entry = containsMultiWord(multiWord); if (entry != null) { return entry.isComplete(); } else { return false; } } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.dictionary.Dictionary#getTypeName() */ public String getTypeName() { // returns the dictionary output type name return this.typeName; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.dictionary.Dictionary#getLanguage() */ public String getLanguage() { // returns the dictionary language return this.language; } /** * check if the given multi-word is available in the dictionary. If it is * available the DictionaryEntry is returned. If it is not available, null is * returned * * @param multiWord * multi-word used for the lookup * * @return DictionaryEntry for the given multi-word, or null if the entry is * not in the dictionary */ private DictionaryEntry containsMultiWord(String[] multiWord) { HashMap currentMap = this.dictionary; DictionaryEntry entry = null; // iterate over all multi-word tokens and check if the multi-word is // available for (int i = 0; i < multiWord.length; i++) { // check token entry = currentMap.get(normalizeString(multiWord[i])); if (entry == null) { // multi-word is not available return null; } else { // use sub branch to lookup the next token currentMap = entry.getSubBranch(); } } return entry; } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.Dictionary#matchEntry(int, * java.lang.String[]) */ public DictionaryMatch matchEntry(int pos, AnnotationFS[] annotFSs, FeaturePathInfo featPathInfo) { // create a dictionary match object DictionaryMatchImpl match = new DictionaryMatchImpl(); int offset = 0; // check dictionary matches checkMatches(pos, annotFSs, featPathInfo, this.dictionary, match, offset); // check if a match was found that is valid if (match.isValidMatch()) { // valid match found, return the match return match; } else { // no valid match found return null; } } /* * (non-Javadoc) * * @see org.apache.uima.annotator.dict_annot.Dictionary#getEntryCount() */ public int getEntryCount() { // returns the number of entries in the dictionary return this.idCounter; } /** * Adds a new word to the dictionary. * * @param word * word that should be added to the dictionary * * @return ID that was generated for this entry */ public int addWord(String word) { // check if the word is already available in the dictionary DictionaryEntry entry = this.dictionary.get(normalizeString(word)); if (entry != null) { // check if entry is marked as complete if (entry.isComplete()) { return -1; } else { // set valid word entry.setComplete(); // update entry meta data this.idCounter++; EntryMetaData metaData = new EntryMetaDataImpl(this.idCounter); entry.setEntryMetaData(metaData); return this.idCounter; } } // increase ID counter this.idCounter++; // create new entry meta data object and add ID EntryMetaData metaData = new EntryMetaDataImpl(this.idCounter); // add entry to the dictionary this.dictionary.put(normalizeString(word), new DictionaryEntry(true, metaData)); return this.idCounter; } /** * Adds a new multi-word to the dictionary * * @param multiWord * multi-word that should be added to the dictionary * * @return ID that was generated for this entry */ public int addMultiWord(String[] multiWord) { DictionaryEntry entry = containsMultiWord(multiWord); if (entry != null) { // check if entry is marked as complete if (entry.isComplete()) { return -1; } else { // set valid word entry.setComplete(); // update entry meta data this.idCounter++; EntryMetaData metaData = new EntryMetaDataImpl(this.idCounter); entry.setEntryMetaData(metaData); return this.idCounter; } } // increase ID counter this.idCounter++; // create new entry meta data object and add ID EntryMetaData metaData = new EntryMetaDataImpl(this.idCounter); HashMap currentMap = this.dictionary; // iterate over all multi-word tokens and add them to the dictionary for (int i = 0; i < multiWord.length; i++) { // check if the current token is already in the dictionary if (currentMap.containsKey(normalizeString(multiWord[i]))) { // current multi-word token is already in the dictionary get the map // of sub tokens for this entry currentMap = (currentMap.get(normalizeString(multiWord[i]))) .getSubBranch(); } else { // current multi-word token is not in the dictionary // check how we have to set the word end property if (i == (multiWord.length - 1)) { // if it is the last token of the multi-word, the word end // property must be set to true entry = new DictionaryEntry(true, metaData); } else { entry = new DictionaryEntry(false, null); } // add token to the dictionary currentMap.put(normalizeString(multiWord[i]), entry); // set map for the next sub tokens currentMap = entry.getSubBranch(); } } // return generated ID return this.idCounter; } /** * print the dictionary content either to an Writer object or if not output * is specified to the command line. * * @param out * Writer object to write the content to * * @throws IOException */ public void printDictionary(Writer out) throws IOException { // start printing with the main branch printBranch(this.dictionary, null, out); } /** * set the dictionary language * * @param language * dictionary language */ public void setDictionaryLanguage(String language) { this.language = language; } /** * set the dictionary type name * * @param typeName * dictionary type name */ public void setTypeName(String typeName) { this.typeName = typeName; } /** * search the first longest matches for the given input data. This method is * called recursive to detect multi word matches. All valid matches that are * found are stored so that they can be retrieved later. * * @param pos * start position in the token array * @param tokens * token input array * @param dict * dictionary to use * @param match * match result object where all match data is stored * @param offset * offset in relation to the start position of the current token * that is discovered */ private void checkMatches(int pos, AnnotationFS[] annotFSs, FeaturePathInfo featPathInfo, HashMap dict, DictionaryMatchImpl match, int offset) { // check if the current token that is investigated is available in the // current map String value = featPathInfo.getValue(annotFSs[pos + offset]); if (value != null) { String normalizedValue = normalizeString(value); if (dict.containsKey(normalizedValue)) { // token is available in the map, get the dictionary entry object DictionaryEntry currentEntry = dict.get(normalizedValue); // add match to the match object match.storeMatch(currentEntry.getEntryMetaData(), currentEntry .isComplete()); // increase offset to investigate the next token offset++; // if further tokens are available .... if (annotFSs.length > pos + offset) { // ... investigate them checkMatches(pos, annotFSs, featPathInfo, currentEntry .getSubBranch(), match, offset); } } } } /** * print out the words of a dictionary branch * * @param map * current dictionary branch * * @param previousTokens * previous tokens for the current branch */ private void printBranch(HashMap map, ArrayList previousTokens, Writer out) throws IOException { // get an iterator over the main entries of this dictionary branch Iterator mainEntries = map.keySet().iterator(); // iterate over all entries of this branch while (mainEntries.hasNext()) { // get current token String currentToken = mainEntries.next(); // get dictionary entry for the current token DictionaryEntry dictEntry = map.get(currentToken); // check if the token is a valid word entry or a part of a multi-word // entry if (dictEntry.isComplete()) { // word end detected, print word if (previousTokens != null) { // add previous tokens of this multi-word String previous = getString(previousTokens); if (out == null) { System.out.println(previous + currentToken); } else { out.write(previous + currentToken); out.write(System.getProperty("line.separator")); } } else { // just print the single word if (out == null) { System.out.println(currentToken); } else { out.write(currentToken); out.write(System.getProperty("line.separator")); } } } // check for the current token if it is part of a multi-word // get the sub branch of this entry HashMap subBranch = dictEntry.getSubBranch(); // add current token to previousTokens list if (previousTokens == null) { previousTokens = new ArrayList(); } previousTokens.add(currentToken); // call printBranch for the current sub branch printBranch(subBranch, previousTokens, out); // remove current token form list, since the sub branch is processed // completely previousTokens.remove(previousTokens.size() - 1); } } /** * Converts the array list of string to a concatenated String separated by a * whitespace character. * * @param stringList * array list of string * * @return concatenated String separated by whitespace characters */ private String getString(ArrayList stringList) { StringBuffer buf = new StringBuffer(); for (int i = 0; i < stringList.size(); i++) { buf.append(stringList.get(i)); buf.append(" "); } return buf.toString(); } /** * Normalize the input string to lower case and remove all spaces around if * the dictionary is configured to do a case normalization * * @param input * input string to normalize * * @return returns the normalized string */ private String normalizeString(String input) { // check if case normalization is enabled if (this.caseNormalization) { return input.toLowerCase().trim(); } return input.trim(); } } uima-addons-2.3.1/DictionaryAnnotator/src/test/0000755000175000017500000000000011625126454021361 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/0000755000175000017500000000000011625126454023373 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryCreatorTest/0000755000175000017500000000000011625126454027660 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryCreatorTest/tokenizerDictRef.xml0000644000175000017500000000153611625126454033662 0ustar drazzibdrazzib en ADD DICTIONARY OUTPUT TYPE HERE new new|york new|orleans foo|-|bar foo|_|bar web2|.|0 &|Test <|Test <|&|>|'|" uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryCreatorTest/dictInput.txt0000644000175000017500000000011111625126454032355 0ustar drazzibdrazzibnew new york new orleans foo-bar foo_bar web2.0 &Test '"uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryCreatorTest/separatorDictRef.xml0000644000175000017500000000152211625126454033643 0ustar drazzibdrazzib en ADD DICTIONARY OUTPUT TYPE HERE new new york new orleans foo-bar foo_bar web2.0 &Test <Test <&>'" uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryCreatorTest/defaultDictRef.xml0000644000175000017500000000146511625126454033275 0ustar drazzibdrazzib ADD DICTIONARY OUTPUT TYPE HERE new new|york new|orleans foo-bar foo_bar web2.0 &Test <Test <&>'" uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/0000755000175000017500000000000011625126454030411 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotatorFeaturePath.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotato0000644000175000017500000000770211625126454034153 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true InputMatchFeaturePath String false false DictionaryFiles DictionaryAnnotatorTests/testDict.xml InputMatchType uima.tcas.DocumentAnnotation InputMatchFeaturePath featureToAnalyze org.apache.uima.DictionaryEntry uima.tcas.Annotation uima.tcas.DocumentAnnotation uima.tcas.Annotation featureToAnalyze uima.cas.String true true false ././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotatorInvalidOutputType.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotato0000644000175000017500000000567311625126454034160 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true DictionaryFiles DictionaryAnnotatorTests/testDict.xml InputMatchType uima.tcas.DocumentAnnotation true true false ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/dictionaryAnnotTestRef.txtuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/dictionaryAnnotTes0000644000175000017500000000004611625126454034155 0ustar drazzibdrazzibDictionaryEntry(0,13): nEw yOrk City ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotatorDictFileNotFound.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotato0000644000175000017500000000615411625126454034153 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true DictionaryFiles fileNotFound.xml InputMatchType uima.tcas.DocumentAnnotation org.apache.uima.DictionaryEntry uima.tcas.Annotation true true false uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/testDict.xml0000644000175000017500000000265411625126454032725 0ustar drazzibdrazzib en org.apache.uima.DictionaryEntry new new York new york city ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotator.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotato0000644000175000017500000000620111625126454034144 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true DictionaryFiles DictionaryAnnotatorTests/testDict.xml InputMatchType uima.tcas.DocumentAnnotation org.apache.uima.DictionaryEntry uima.tcas.Annotation true true false ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotatorAdvancedFeaturePath.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotato0000644000175000017500000001054611625126454034153 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true InputMatchFeaturePath String false false DictionaryFiles DictionaryAnnotatorTests/testDict.xml InputMatchType uima.tcas.DocumentAnnotation InputMatchFeaturePath subAnnotation/featureToAnalyze org.apache.uima.DictionaryEntry uima.tcas.Annotation org.apache.uima.SubAnnotation uima.tcas.Annotation featureToAnalyze uima.cas.String uima.tcas.DocumentAnnotation uima.tcas.Annotation subAnnotation org.apache.uima.SubAnnotation true true false ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/dictionaryAnnotFeaturePathTestRef.txtuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/dictionaryAnnotFea0000644000175000017500000000004411625126454034113 0ustar drazzibdrazzibDictionaryEntry(0,11): featurePath ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotatorInvalidInputType.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTests/DictionaryAnnotato0000644000175000017500000000620511625126454034150 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true DictionaryFiles DictionaryAnnotatorTests/testDict.xml InputMatchType org.apache.uima.InvalidInputType org.apache.uima.DictionaryEntry uima.tcas.Annotation true true false uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/0000755000175000017500000000000011625126454033525 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/DictionaryAnnotatorFilterFeaturePath.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/Di0000644000175000017500000001214711625126454034011 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true InputMatchFeaturePath String false false InputMatchFilterFeaturePath String false false FilterConditionOperator String false false FilterConditionValue String false false DictionaryFiles DictionaryAnnotatorTests/testDict.xml InputMatchType uima.tcas.DocumentAnnotation InputMatchFilterFeaturePath featureToAnalyze FilterConditionOperator EQUALS FilterConditionValue equalsTest org.apache.uima.DictionaryEntry uima.tcas.Annotation uima.tcas.DocumentAnnotation uima.tcas.Annotation featureToAnalyze uima.cas.String true true false ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/DictionaryAnnotatorFilterFeaturePathBoolean.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/Di0000644000175000017500000001214711625126454034011 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true InputMatchFeaturePath String false false InputMatchFilterFeaturePath String false false FilterConditionOperator String false false FilterConditionValue String false false DictionaryFiles DictionaryAnnotatorTests/testDict.xml InputMatchType uima.tcas.DocumentAnnotation InputMatchFilterFeaturePath featureToAnalyze FilterConditionOperator NOT_EQUALS FilterConditionValue false org.apache.uima.DictionaryEntry uima.tcas.Annotation uima.tcas.DocumentAnnotation uima.tcas.Annotation featureToAnalyze uima.cas.Boolean true true false ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/testDict.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/te0000644000175000017500000000265411625126454034067 0ustar drazzibdrazzib en org.apache.uima.DictionaryEntry new new York new york city ././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/DictionaryAnnotatorFilterFeaturePathInt.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/Di0000644000175000017500000001213611625126454034007 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true InputMatchFeaturePath String false false InputMatchFilterFeaturePath String false false FilterConditionOperator String false false FilterConditionValue String false false DictionaryFiles DictionaryAnnotatorTests/testDict.xml InputMatchType uima.tcas.DocumentAnnotation InputMatchFilterFeaturePath featureToAnalyze FilterConditionOperator LESS FilterConditionValue 23 org.apache.uima.DictionaryEntry uima.tcas.Annotation uima.tcas.DocumentAnnotation uima.tcas.Annotation featureToAnalyze uima.cas.Integer true true false ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/dictionaryAnnotFeaturePathTestRef.txtuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryAnnotatorTestFilterFeaturePath/di0000644000175000017500000000004611625126454034044 0ustar drazzibdrazzibDictionaryEntry(0,13): nEw yOrk City uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/0000755000175000017500000000000011625126454030032 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/DictionaryPrintingRef.txtuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/DictionaryPrintingRe0000644000175000017500000000006511625126454034065 0ustar drazzibdrazzibnew hampshire new york new york city new orleans uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/InvalidDictFile2.xml0000644000175000017500000000247311625126454033636 0ustar drazzibdrazzib org.apache.uima.DictionaryEntry New Hampshire uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/InvalidDictFile.xml0000644000175000017500000000250411625126454033547 0ustar drazzibdrazzib org.apache.uima.DictionaryEntry New Hampshire test ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/MultiWordsSpecialMultiWordSeparator.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/MultiWordsSpecialMul0000644000175000017500000000303111625126454034042 0ustar drazzibdrazzib org.apache.uima.DictionaryEntry new|Orleans New|Orleans new|York new|York|City New|Hampshire ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/SingleWordsCaseNormalization.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/SingleWordsCaseNorma0000644000175000017500000050330111625126454034010 0ustar drazzibdrazzib org.apache.uima.DictionaryEntry 0 001 04 1 10 100 101 11 112 12 120 123 141 143 15 16 168 171 192 1S 2 20 2000 2004 2006 206 23 232 24 255 257 26 264 279 294 296 2nd 3 306 31 313 320 32bit 332 339 35 352 354 357 364 376 386 389 398 4 416 418 43 433 446 455 468 475 480 492 4N 5 50 504 510 511 525 526 528 534 538 555 560 563 572 575 576 578 594 6 618 62 64 681 7 75 8 83 @see A A11 AE AEs ALL ANALYSIS ANY API APIs AS ASF AbstractCas Access Accessing Acquire AcronymTable Activate Add AddRemote Additional Advanced After Age Aggregate Aggregates All Along Also Although Always American An Analysis AnalysisComponent AnalysisEngine Analytical Analyzer AnaysisComponent And Annotation Annotations Annotator AnnotatorConfigurationException AnnotatorInitializationException AnnotatorProcessException Another Any Apache Application Applications Architecture Are Arguments Array Arrays As Asked Assembler Assume At Attributes Automated B21 BASIS Backwards Bank Base Basics Bean Because Before Better Bind Binding Bindings Boolean Both Browse Build Building Bundle Bush But By Byte C CAS CASes CASs CATALOG CDATA CDE CEO CEOs CLASSPATH CONDITIONS CONFIG CPE CPEs CPM CYC Call Called Can Capabilities Capability CapabilityLanguageFlow Careless Center Centers Changes Chapter Character Class ClassPath Classpath Click Close Code Collection Collections Color Combining Common Company Compatibility Complementing Complete Complex Component Components Concepts Conceptual Configuration Configurator Congratulations Connect Consider ConsoleHandler Constructor Consumer Consumers Context Contract Controller Controllers Copy Core Coupled Create Creating Currently D D102 DATAPATH DIGEST DOCTYPE DTD Data DataPath Database Databases Date DateAnnot DateTime Dates Debugger Declaration Declarations Declaring Default Define Defining Definition Definitions Delegate Dependencies Deploying Derby Describes Description Descriptions Descriptor Descriptors Details Detector Detects Develop Developer Developers Developing Development Directory Discussed Display Do DocBook Document DocumentAnalyzer Documentation Doe Does Double ECLIPSE EMF EMOF EN ENGINE ENTITY Each Eclipse Edition Editor Enable Engine Engines English Enter Enterprise Entity EntityDetector Entry Environment Essential Every Example Examples Exception Exceptions Exercise Existing Expand Exploiting Explore Explorer Expression External F2 FAQs FINE FINER FINEST FSArray FSIndex Facility Fact Factory Feature FeatureStructure FeatureStructures Features Figure File FileConsoleLogger Files Finally Financial Find Finish First Fixed FixedFlow Float Flow For Format Found Foundation Fragment Fragments FrameNet Framework FredCenter Frequently Furthermore G1 GN GUI General Generally Generate Generating GenericAnnotator German Get Getting Give Glossary Go Golf Good Graduating Graphical Groups Guide Guides HOME HOST HTML HTTP HashMap Having He Header Here High How However Hybrid I IBM IDE II INFO IP IR IS Identification If Ignore ImplBase Import Imported Imports In Included Includes Including Index Indexer Indexes Information Initialize Initializer Initializers InputStream Install InstallShield Installation Installer Instances Instead Integer Integrated Integration Intel Interacting Interactive Interchange Interfaces Internationalization Introduced Introduction Is It Items Iterator Its J2 JAR JAVA JCAS JCas JCasAnnotator JCasGen JDBC JDK JFSIndexRepository JNI JPG JRE JTextAnnotator JVM Java JavaBeansconventions JavaDoc JavaDocs John Journal Just K35 KIND Keep Key Keyword Kit Knowledge L07 LICENSE Language Languages Later Learn Let Level Levels License Licensed Line List Lists Loaders Location Locations Logger Logging Logical Long Loosely MESSAGE Machine Make Management Manager Many Mappings Matcher Maximize Meaning Meeting MeetingAnnotator MeetingDectector MeetingDetectorTAE Menu Merger Message Messages Meta MetaData Method Methods Mining MixedAggregate Modal Modeling Module Money More Most Multiple Multiplier Multipliers MyNamed NLP NOTICE NS Name Naming Natural Navigate Needs Network New Next No Node Not Note Notice Noun NounPhrase November Now Number Numbers OASIS OF OFF OK OLAP OMG OR OS Object Objects Occupation On Once One Open Optional Or Ordering Organization Other Our Outside Over Overview Overviews P1 P2 PEAR PEARs PM PNG PORT PUBLIC Package Packager Packet Paragraph Parameter Parameters Parse ParseNode Passing Pat Path Pattern PatternSyntaxException Patterns Pear Performs Perl Person PersonTitleDBWriterCasConsumer Perspective Phone Phrase Picture Pitfalls Please Plug Plugins Portal Preferences President Presidents Press Previous Price Primitive Prior Problems Process Processing Processor Processors Product Products Program Programming Project Properties Property PropertyResourceBundle PropertyResourceBundler Protocol Provides Providing Proxy Put Python Queries Query Questions Rather Read Reader Readers Reading Reads Reconfiguration Ref Refer Reference References Refresh Regular Relation Release Remember Reporting Repositories Repository Representing Req Requirements Requires Research Resource ResourceInitializationException ResourceManager Resources Restoring Result ResultSpecification ResultSpecifications Results Retaining Retrieval Right Room RoomNumber RoomNumberAndDateTime RoomNumberAnnotator RoomNumbers Run Running Runtime S SDK SEVERE SOAP STANDARD SYSTEM Sample SampleAnnotator Saving Screen Screenshot Scripts Search Searching Section Section2 See Select Semantic SemanticSearchGUI Seminars Send Sentence Sentences Serialization Server Service Services Set Setting Settings Setup Sharing Shell Shift Short Should Shown Simple SimpleTokenAndSentenceAnnotator Simpler Since Single Sink Size So Sofa Sofas Software Some Sometimes Source SourceForge Sources Special Specialized Specification Specifications Specify Specifying Start Started Statement States Statistical Steps Stream String StringMapResource Strings Structure Structured Structures Subject Subjects Subsequent Such Summary Support Supporting Syntax System Systems TAE TCAS TCASes TCL TEXT TOP Table Terms Test TestClass Testing Text TextAnalysisEngine TextAnnotator The Their Then There Therefore These They Think This Though Through Throwing Tightly TimeAnnot Times Timestamp To Together Tokenizer Tool Tooling Tools Topic Topics Tracing Try Tutorial TutorialDateTime TutorialTypeSystem Tutorials Two Type Types Typically UDDI UIM UIMA UIMAException UIMAFramework UIMASummerSchool2003 URI URL UTF UimaAcronymAnnotator UimaAcronymFile UimaAcronymTableFile UimaContext UimaMeeting UimaMeetingAnnotator UimaMeetingDectector UimaMeetingDetectorTAE UimaTermTable United Unless Unstructured Unzip Update Updates Use User Users Using Utilities Utility V4 VM VNS Values Variable Variables Verb Version View Viewer Viewing Views Vinci Virtual Visual Vol W WARNING WARRANTIES WITHOUT WSDL Washington Watson WatsonConferenceRooms We Web WebSphere Weight What When Where While Window Windows With Within Word WordNet Words Workspace Write Writer X XCAS XCasAnnotationViewer XMI XML XP XmlDetagger Y Yes Yorktown You Your Z ability able about above absolute abstract abstracts academia accelerate accept accepts access accessed accesses accessing accomplished according accumulate achieving acquire acquires acquiring acronym acronyms across action active actively acts actual actually adaptation adapter add addToIndexes added adding addition additional address admits advanced advantage advertised affects affords after again agents aggregate aggregates aggregating aggregation agreed agreements aid algorithm algorithms align all allAnnotatorFeatures allow allowed allowing allows almost along alphaWorks already also alternative although always ambiguous among an analogous analogy analysis analysisEngineDescription analysisEngineMetaData analytics analyze analyzed analyzer analyzes analyzing and annotate annotated annotates annotating annotation annotations annotator annotatorImplementationName another any anything anywhere appear appears applicable application applications applies apply applying appreciation approach approaches appropriate arbitrarily arbitrary architectural architecture archive archives are areas aren argument arguments around arranged array arrays arrow arrows art article artifact artifacts as ascending asks aspects assembled assembling assertion assertions asserts assigned assignment assists associated association assumed assumes asynchronously at attached attempt attribute attributes audio author automatic automatically available avoid axiomatically b bJ back backwards bad bar base based bases basic basics bat batching be because become becomes been before begin beginning begins behavior being believed belong belongs below benefits best better between bin binary bind binding bindings binds bit blank blockquote blocks body bold bolditalic books both bottom box br branching break breaking bridge brief briefly bring brings broad broader broken browse browser build building buildings builds built buried bush bushes businesses but button buttons by c cached caching call called calling calls came can candidate cannot canonical capabilities capability capable capitals captioned captions capture captured cas case cases cast catch categorizers cause cde cdg center central ceo certain chain challenge challenges challenging change changed changes changing chapter chapters character characterize characterized characters check checkbox checked checks choice choices choke choose chosen clarify class classes classic classpath clean clear cleared clearly click clicking client close closed co code codes col1 col2 collaborate collapse collection collections collects collocated colname colnum cols colsep colspec column columns colwidth com combination combine combined combines combining come comes command comment commercial common commonly communicate communications community comonent compact compare compared compatibility compatible competitive compilation compile compiled complaints complete completely completes complex compliance compliant complimentary component components compose composed composible composing composition comprised computational compute computed computer concept concepts conceptual concern concerned condition conditional config configurable configuration configurationParameter configurationParameterSettings configurationParameters configurations configurator configure configured configuring conform conforms connect connected connecting connection connections connects consider considerable considered consistent consists console constant constants constitute constitutes construct constructed constructor constructors consumer consumes contain contained container containers containing contains content contents continue continuing contract contrast contrasted contributor control controller controllers controls convenience convenient conveniently convention conventional conventions converge conversation convert cooperating copy copying copyright core corner correctly correspond correspondence corresponding corresponds costly could coupled coupling course covered cpe cpm create created creates creating creation critical cross crossRef120 crossRef122 crossRef2 crossRef242 crossRef26 crossRef27 crossRef28 crossRef29 crossRef30 crossRef31 crossRef32 crossRef33 crossRef34 crossRef35 crossRef356 crossRef357 crossRef358 crossRef36 crossRef37 crossRef38 crossRef39 crossRef40 crossRef41 crossRef42 crossRef43 crossRef71 crossrefPage crossrefText cumbersome curious current currently curve custom customized d data database databases datapath dates db2 db2ii ddb de deal debugger debugging decided decides decision declaration declarations declarative declare declared declares declaring decoupled deep default defaults definable define defined defines defining definition definitions degree degrees delegate delegateAnalysisEngine delegateAnalysisEngineSpecifiers delegated deleted delimit delimiting deliver demo demonstrate demonstrates denoted denotes depend dependencies dependency dependent depends deploy deployable deployed deployer deploying deployment deployments deposit deprecated depth derived descending describe described describes describing description descriptions descriptive descriptor descriptors design designed designing desired desktop destroy detagged detagging detail detailed detailing details detect detected detecting detection detector detectors detects determine determined determines determining dev develop developed developer developers developerworks developing development deviates dialog did didn difference different differs difficult digest digests dimensions direct directed directly directories directory disabled discipline discover discoverable discovered discovering discovery discuss discussed discusses discussing discussion disk dispersed display displayed displays distinct distinction distribute distributed distribution div divided do doc docText docbook docbookx docs document documentAnalyzer documentation documents does doesn doing domain don done dotted double down download downstream drug dtd during dynamically e each earlier early easily easy eclipse eclipsePlugin edit editable editing editions editor eee effect effects efficient efficiently effort either element elements eliminated eliminating else embed embedded embedding embeddings emf emitted emphasis empty en enable enabled enablement enablements enables enabling encapsulate enclosed encoding encouraged end engine engineering engineers engines enriched ensure ensuring ent entered enterprise entire entities entity entry env environment environments equipped equivalent error errors essential etc even event events every everything evidence ex1 ex2 ex3 ex4 ex5 ex6 exact exactly example examples except exception exceptions execute executed execution exist existing exists exit expand expandable expanded expandedForm expect expected expensive experiment explained explanation explicate explicit explicitly exploit exploits explore explorer exploring express expression expressions extend extended extends extensible extension extensive external externalResource externalResourceBinding externalResourceBindings externalResourceDependency externalResources externalized extract extracted extracts extras facilitate facilitates facilities facility fact factory facts fails failure failures fairly false familiar faqs far fastest faults favoring feature featureDescription features fed feedback feeding feeds ferrucci few field fields fig figCaption figReference figure file fileResourceSpecifier fileUrl filename fileref files filled filtering final finally finances find finder finding finds fine finishes first fixed fixedFlow flexibility flexible flexibly float floating flow flowConstraints flowcontroller flows folder folders follow followed following follows foo footnote footnotesHere for forces foremost form format formats formatted formatter forms formulate found foundation four frame frames framework frameworkImplementation frameworks free freely frequent friendly from full fullName fully function functionality functions further future g gained garden gather general generalized generally generate generated generates generating get getAnnotationIndex getConfigParameterValue getContext getDocumentText getFullName getJFSIndexRepository getLogger getMetaData getRequiredCasInterface getResourceAsStream getResourceObject getResourceURL getResultSpecification gets getter getters getting give given gives global glossary glossdef glossentry glosssee glossseealso glossterm go goal going good governing governments grammatical granular graphs greater group groups grow growing gt guarantee guide guidelines guides guilds h3 h4 hand handle handler handlers handles handling handy happening happens hardcoded has hasNext hasn have haven having he header heading heart height help helpful helps her here hierarchical hierarchy high higher highest highlight highlighted highly his hold holding holds hook hooks hope host hosted hosts house hover hovering how however href htm html http hybrid i ibm iceberg id idea ideal identifier identifies identify identifying identity if ignore ignored illustrated illustrates image image002 image004 image006 image008 image010 image012 image014 image016 image018 image020 image022 image024 image026 image028 image030 image032 image034 image036 image038 image040 image042 image044 image046 image048 image050 imagedata imageobject images imagine img imgroot impact impl implement implementation implementationName implementations implemented implementing implements implicit implied implmentations imply import importance important imported importing imports improve in include included includes including incompatibilities incorporated increase independent independently index indexed indexer indexes indexing indicate indicated indicates indicating indication indices indirectly individual industrial industry infer inferred infers informalfigure informaltable information informational infrastructure inherit inheritance inherited initial initialization initialize initialized initializer initializes initializing initially input inputSofa inputSofas inputs ins insert inside install installation installed installer installing installs instance instances instantiate instantiated instantiates instantiating instead instructions insulate insure int integer integers integrated integrating integration intelligent intended intent interact interacting interaction interactions interacts interchangeably interest interesting interface interfaceName interfaces intermediate internal internally internationalization internationalized internet interoperate interpret interpretation interpreted intersection intl into intro introduce introduced introduces introduction intuitive invalid invocation invoke invoked invokes involve involved io is isolate issue issues issuing it item itemizedlist items iterate iterating iteration iterator iterators its itself j2se jar java javadocs jcas jcasgen job journal jpg juru just keep keeps key keys keyword keywords kind kinds know knowledge label labeled labeling language languages languagesSupported large largest last later latest launch law layer layout ldquo lead leads learn learning least leave left legend length let lets level levels leveraged liberal license licensed licenses licensing like likely limit limitations limited limits line linear lingual linguistics link linked linkend linking links list listed listitem lists literal load loaders loads local locally locate located location locations log logged logger loggers logging logic logical logically logs long longer look looked looking looks loose loosely lot lots lowest lt mHawthornePattern mLocations mMap mPatterns mYorktownPattern machine machines made main maintain maintained maintaining maintains majority make makes making manage managed management manager manages managing mandatory manipulating manually many map mapping mark marked match matcher matching matter may maybe mdash mean meaning means meant mechanism mechanisms media mediaobject medical meeting meetings member memory mention mentioned mentions menu menus merge merger merging message messages meta metadata method methods middleware might millions mind mining mirrors mixture modal modalities mode model modern modifications modified modifying modules monitoring months more most mounds mouse move moved much muh multi multiValued multimodal multiple multipleDeploymentAllowed multiplier multithreaded must my myJarFile myProject myannotator myorg nalysis name nameValuePair named nameend namely names namespace namest naming native natural naturally navigator ndash necessarily necessary need needed nested net network networking never new newer next no node nodes noise non nor not notations note noted notes nothing notice notification now null number numbering numbers oasis object objects obtain obtainable obtains obviously occur occurrence occurrences occurring occurs of off offering offset offsets often olink on once one ones only ontology open opennlp opens operate operated operates operation operationalProperties operations opinions optimize option optional optionally options or orchestrated orchestration order orderedlist ordering org organization organizations organize organized organizing orientation oriented original other others otherterm othertimes otherwise our out outer output outputSofa outputSofas outputs outside over overall overlapping overridden override overview own ownership p package packaged packager packages packaging page pages pairs pane panel paper par para paradigm paragraph parallel parallelization parallelized param1 param2 parameter parameters parse parsed parser parsers parsing part particular parts pass passed path pattern patternStrings patterns pear pedagogical peek per perform performance performs perhaps permissions permit permits person persons perspective philosophy phrase physical physically pick picture piece pieces pipeline pipelines pitfalls pkg place placed placeholder places plain plainTextDocument plan planning plans platform platforms please plug pluggable plugged plugin plugins plus png point pointed pointing popular populate populates populating popup port porting portion pos position positions possibilities possible possibly post postcpp potential potentially powerful practice practices pre preceded precise precisely precpp preferences prefix present presented presents president pressing prevent previous previously primary primitive primitives principal principle printed prior private probable problem problems proceed process processed processes processing processor produce produced produces product products program programlisting programmers programming programs project projects pronounce propagate propagated propagates properly properties property protocol protocols provide provided provides providing proximity proxy public publications published publishes pulldown pulling purchases purely purpose purposes push pushing put qualified queries query querying quick quickly quot quote range rangeTypeName ranging rank rapid rarr rather raw re reached read reader readers reading reads ready real really reason reasoning reasons receive received receives receiving recognition recognized recognizer recommend recommended recommends recompiled recompute reconfiguration reconfigure record recorded recording recover recoverability recoverable recovery redo reexamine ref refer reference referenced references referred referring refers refines reflect refresh refreshes regarding regex region regions registered registering regular reinitialize relate related relation relational relations relationship relative relatively release released relevant relies relieve remainder remaining remains remote remotely renders repairs repeated replace replaced reporting repository represent representation representational representations represented representing represents require required requirements requires research resolved resource resourceManagerConfiguration resourceName resourceSpecifier resources respect respectively response responsible rest restart restarting restore restoring restrict restricted result resulting results rethrow retrieval retrieve retrieved retrieving return returned returning returns reusable reuse reversed review rich right role roles room rooms root roots roughly routing row rows rowsep rule rules run running runs runtime s safe sake same sample save saved saves saving say scalability scale scaleable scaling scenario scenarios schema scheme scientists screen screens screenshot script scripts scroll sdk search searched searches searching second section sections see seeing seeking seen segment segmentation segments select selected semantic semantics sending sends sense sent sentence sentences separate separately sequence sequentially serialization serialize series serious server servers service services set setBegin setBuilding setEnd setFullName setUimaClassPath sets setter setters setting settings setup several severity sh shallow share shareable shared shares sharing shell shift shipped ships shortcut shorter shot should show showed showing shown shows shut side sift signal significant significantly similar simple simplest simplified simplifies simply simultaneous simultaneously since single sink site situation six size sj sj43 skills skip skipped skipping small smaller so sofa sofas software solution solutions some something somewhere soon sophisticated sorted sorting source sourceInfo sourceforge sources space spacing span spans spec special specialized specific specification specifications specifics specified specifiers specifies specify specifyable specifying speech speed sppech src stacked standard standards standoff stands start started starting starts startup state stateless statement statements static statistics step steps still storage store stored storing straightforward strangely stream streams strength string strings structure structured structures strung style sub subcomponent subcomponents subdirectory subelement subject subjects submit subsection subsequent subsequently subset substitutable substituted subtype subtypes successfully such suggested suggests suite summarize summarizers summary sun super superclass supertype supertypeName supertypes supplied supplies supply support supported supporting supports suppress sure surely switch syntax system systems t tab tabbed table tableSubhead tables tabs tag tagged tags take taken takes taking target targetdoc targetptr task taxonomy tbody tcas td teach teams tech techniques technologies technology tend tens term terminology terms test tested testing text textobject texts tgroup than that the their them themselves then there therefore therein these they thing things think third this thoroughly those though thought thread threadID threading threats three through throughput throw throwing thrown throws tightly time timeIndex timeIter times tip title to toString today together token tokenization tokenizer tokenizers tokens too took tool tooling tools top topic topics tr tracing trademark traditional transcribes transcript transformed transforming translated translation translations transport treatments treats tree trees trivial true try tug turn tutoria tutorial tutorials twisty two txt type typeDescription typeSystemDescription typeSystemInit typecas typed types typical typically ubject ugr uima uimaAcronyms uimaents uimaj ul ulink ultimately undefined under underline underlying understand understanding unexpected unfortunately union unique unit units unless unrecoverable unsigned unstructured until unusual up update updated updates upper upstream url us use used useful user users uses using usually util utilities utility v1 valid validation value values var variable variablelist variables varieties variety various varlistentry vary varying vast ve vendor verifies verify verifying version versions versus vertically very via video view viewed viewer viewier viewing views visible visual vital voice void volumes walk walks want wanted was way ways we weakest web website welcome well were what whatever whats when whenever where whether which while whiteboard who whole whose wide width will window wish with within without womnifind word words work workflow working works workspace world worlds worry worth would wouldn wrapped wrappers wrapping wraps write writes writing written www x xcas xmi xml xmlDocument xmlns xmp xref xyz y yet you your yourself zero zones ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/MultiWordsNoCaseNormalization.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/MultiWordsNoCaseNorm0000644000175000017500000000300311625126454034007 0ustar drazzibdrazzib org.apache.uima.DictionaryEntry new Orleans New Orleans new York new York City New Hampshire ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/MultiWordsCaseNormalization.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/MultiWordsCaseNormal0000644000175000017500000000300211625126454034026 0ustar drazzibdrazzib org.apache.uima.DictionaryEntry new Orleans New Orleans new York new York City New Hampshire ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/SingleWordsNoCaseNormalization.xmluima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryBuilderTests/SingleWordsNoCaseNor0000644000175000017500000050330211625126454033770 0ustar drazzibdrazzib org.apache.uima.DictionaryEntry 0 001 04 1 10 100 101 11 112 12 120 123 141 143 15 16 168 171 192 1S 2 20 2000 2004 2006 206 23 232 24 255 257 26 264 279 294 296 2nd 3 306 31 313 320 32bit 332 339 35 352 354 357 364 376 386 389 398 4 416 418 43 433 446 455 468 475 480 492 4N 5 50 504 510 511 525 526 528 534 538 555 560 563 572 575 576 578 594 6 618 62 64 681 7 75 8 83 @see A A11 AE AEs ALL ANALYSIS ANY API APIs AS ASF AbstractCas Access Accessing Acquire AcronymTable Activate Add AddRemote Additional Advanced After Age Aggregate Aggregates All Along Also Although Always American An Analysis AnalysisComponent AnalysisEngine Analytical Analyzer AnaysisComponent And Annotation Annotations Annotator AnnotatorConfigurationException AnnotatorInitializationException AnnotatorProcessException Another Any Apache Application Applications Architecture Are Arguments Array Arrays As Asked Assembler Assume At Attributes Automated B21 BASIS Backwards Bank Base Basics Bean Because Before Better Bind Binding Bindings Boolean Both Browse Build Building Bundle Bush But By Byte C CAS CASes CASs CATALOG CDATA CDE CEO CEOs CLASSPATH CONDITIONS CONFIG CPE CPEs CPM CYC Call Called Can Capabilities Capability CapabilityLanguageFlow Careless Center Centers Changes Chapter Character Class ClassPath Classpath Click Close Code Collection Collections Color Combining Common Company Compatibility Complementing Complete Complex Component Components Concepts Conceptual Configuration Configurator Congratulations Connect Consider ConsoleHandler Constructor Consumer Consumers Context Contract Controller Controllers Copy Core Coupled Create Creating Currently D D102 DATAPATH DIGEST DOCTYPE DTD Data DataPath Database Databases Date DateAnnot DateTime Dates Debugger Declaration Declarations Declaring Default Define Defining Definition Definitions Delegate Dependencies Deploying Derby Describes Description Descriptions Descriptor Descriptors Details Detector Detects Develop Developer Developers Developing Development Directory Discussed Display Do DocBook Document DocumentAnalyzer Documentation Doe Does Double ECLIPSE EMF EMOF EN ENGINE ENTITY Each Eclipse Edition Editor Enable Engine Engines English Enter Enterprise Entity EntityDetector Entry Environment Essential Every Example Examples Exception Exceptions Exercise Existing Expand Exploiting Explore Explorer Expression External F2 FAQs FINE FINER FINEST FSArray FSIndex Facility Fact Factory Feature FeatureStructure FeatureStructures Features Figure File FileConsoleLogger Files Finally Financial Find Finish First Fixed FixedFlow Float Flow For Format Found Foundation Fragment Fragments FrameNet Framework FredCenter Frequently Furthermore G1 GN GUI General Generally Generate Generating GenericAnnotator German Get Getting Give Glossary Go Golf Good Graduating Graphical Groups Guide Guides HOME HOST HTML HTTP HashMap Having He Header Here High How However Hybrid I IBM IDE II INFO IP IR IS Identification If Ignore ImplBase Import Imported Imports In Included Includes Including Index Indexer Indexes Information Initialize Initializer Initializers InputStream Install InstallShield Installation Installer Instances Instead Integer Integrated Integration Intel Interacting Interactive Interchange Interfaces Internationalization Introduced Introduction Is It Items Iterator Its J2 JAR JAVA JCAS JCas JCasAnnotator JCasGen JDBC JDK JFSIndexRepository JNI JPG JRE JTextAnnotator JVM Java JavaBeansconventions JavaDoc JavaDocs John Journal Just K35 KIND Keep Key Keyword Kit Knowledge L07 LICENSE Language Languages Later Learn Let Level Levels License Licensed Line List Lists Loaders Location Locations Logger Logging Logical Long Loosely MESSAGE Machine Make Management Manager Many Mappings Matcher Maximize Meaning Meeting MeetingAnnotator MeetingDectector MeetingDetectorTAE Menu Merger Message Messages Meta MetaData Method Methods Mining MixedAggregate Modal Modeling Module Money More Most Multiple Multiplier Multipliers MyNamed NLP NOTICE NS Name Naming Natural Navigate Needs Network New Next No Node Not Note Notice Noun NounPhrase November Now Number Numbers OASIS OF OFF OK OLAP OMG OR OS Object Objects Occupation On Once One Open Optional Or Ordering Organization Other Our Outside Over Overview Overviews P1 P2 PEAR PEARs PM PNG PORT PUBLIC Package Packager Packet Paragraph Parameter Parameters Parse ParseNode Passing Pat Path Pattern PatternSyntaxException Patterns Pear Performs Perl Person PersonTitleDBWriterCasConsumer Perspective Phone Phrase Picture Pitfalls Please Plug Plugins Portal Preferences President Presidents Press Previous Price Primitive Prior Problems Process Processing Processor Processors Product Products Program Programming Project Properties Property PropertyResourceBundle PropertyResourceBundler Protocol Provides Providing Proxy Put Python Queries Query Questions Rather Read Reader Readers Reading Reads Reconfiguration Ref Refer Reference References Refresh Regular Relation Release Remember Reporting Repositories Repository Representing Req Requirements Requires Research Resource ResourceInitializationException ResourceManager Resources Restoring Result ResultSpecification ResultSpecifications Results Retaining Retrieval Right Room RoomNumber RoomNumberAndDateTime RoomNumberAnnotator RoomNumbers Run Running Runtime S SDK SEVERE SOAP STANDARD SYSTEM Sample SampleAnnotator Saving Screen Screenshot Scripts Search Searching Section Section2 See Select Semantic SemanticSearchGUI Seminars Send Sentence Sentences Serialization Server Service Services Set Setting Settings Setup Sharing Shell Shift Short Should Shown Simple SimpleTokenAndSentenceAnnotator Simpler Since Single Sink Size So Sofa Sofas Software Some Sometimes Source SourceForge Sources Special Specialized Specification Specifications Specify Specifying Start Started Statement States Statistical Steps Stream String StringMapResource Strings Structure Structured Structures Subject Subjects Subsequent Such Summary Support Supporting Syntax System Systems TAE TCAS TCASes TCL TEXT TOP Table Terms Test TestClass Testing Text TextAnalysisEngine TextAnnotator The Their Then There Therefore These They Think This Though Through Throwing Tightly TimeAnnot Times Timestamp To Together Tokenizer Tool Tooling Tools Topic Topics Tracing Try Tutorial TutorialDateTime TutorialTypeSystem Tutorials Two Type Types Typically UDDI UIM UIMA UIMAException UIMAFramework UIMASummerSchool2003 URI URL UTF UimaAcronymAnnotator UimaAcronymFile UimaAcronymTableFile UimaContext UimaMeeting UimaMeetingAnnotator UimaMeetingDectector UimaMeetingDetectorTAE UimaTermTable United Unless Unstructured Unzip Update Updates Use User Users Using Utilities Utility V4 VM VNS Values Variable Variables Verb Version View Viewer Viewing Views Vinci Virtual Visual Vol W WARNING WARRANTIES WITHOUT WSDL Washington Watson WatsonConferenceRooms We Web WebSphere Weight What When Where While Window Windows With Within Word WordNet Words Workspace Write Writer X XCAS XCasAnnotationViewer XMI XML XP XmlDetagger Y Yes Yorktown You Your Z ability able about above absolute abstract abstracts academia accelerate accept accepts access accessed accesses accessing accomplished according accumulate achieving acquire acquires acquiring acronym acronyms across action active actively acts actual actually adaptation adapter add addToIndexes added adding addition additional address admits advanced advantage advertised affects affords after again agents aggregate aggregates aggregating aggregation agreed agreements aid algorithm algorithms align all allAnnotatorFeatures allow allowed allowing allows almost along alphaWorks already also alternative although always ambiguous among an analogous analogy analysis analysisEngineDescription analysisEngineMetaData analytics analyze analyzed analyzer analyzes analyzing and annotate annotated annotates annotating annotation annotations annotator annotatorImplementationName another any anything anywhere appear appears applicable application applications applies apply applying appreciation approach approaches appropriate arbitrarily arbitrary architectural architecture archive archives are areas aren argument arguments around arranged array arrays arrow arrows art article artifact artifacts as ascending asks aspects assembled assembling assertion assertions asserts assigned assignment assists associated association assumed assumes asynchronously at attached attempt attribute attributes audio author automatic automatically available avoid axiomatically b bJ back backwards bad bar base based bases basic basics bat batching be because become becomes been before begin beginning begins behavior being believed belong belongs below benefits best better between bin binary bind binding bindings binds bit blank blockquote blocks body bold bolditalic books both bottom box br branching break breaking bridge brief briefly bring brings broad broader broken browse browser build building buildings builds built buried bush bushes businesses but button buttons by c cached caching call called calling calls came can candidate cannot canonical capabilities capability capable capitals captioned captions capture captured cas case cases cast catch categorizers cause cde cdg center central ceo certain chain challenge challenges challenging change changed changes changing chapter chapters character characterize characterized characters check checkbox checked checks choice choices choke choose chosen clarify class classes classic classpath clean clear cleared clearly click clicking client close closed co code codes col1 col2 collaborate collapse collection collections collects collocated colname colnum cols colsep colspec column columns colwidth com combination combine combined combines combining come comes command comment commercial common commonly communicate communications community comonent compact compare compared compatibility compatible competitive compilation compile compiled complaints complete completely completes complex compliance compliant complimentary component components compose composed composible composing composition comprised computational compute computed computer concept concepts conceptual concern concerned condition conditional config configurable configuration configurationParameter configurationParameterSettings configurationParameters configurations configurator configure configured configuring conform conforms connect connected connecting connection connections connects consider considerable considered consistent consists console constant constants constitute constitutes construct constructed constructor constructors consumer consumes contain contained container containers containing contains content contents continue continuing contract contrast contrasted contributor control controller controllers controls convenience convenient conveniently convention conventional conventions converge conversation convert cooperating copy copying copyright core corner correctly correspond correspondence corresponding corresponds costly could coupled coupling course covered cpe cpm create created creates creating creation critical cross crossRef120 crossRef122 crossRef2 crossRef242 crossRef26 crossRef27 crossRef28 crossRef29 crossRef30 crossRef31 crossRef32 crossRef33 crossRef34 crossRef35 crossRef356 crossRef357 crossRef358 crossRef36 crossRef37 crossRef38 crossRef39 crossRef40 crossRef41 crossRef42 crossRef43 crossRef71 crossrefPage crossrefText cumbersome curious current currently curve custom customized d data database databases datapath dates db2 db2ii ddb de deal debugger debugging decided decides decision declaration declarations declarative declare declared declares declaring decoupled deep default defaults definable define defined defines defining definition definitions degree degrees delegate delegateAnalysisEngine delegateAnalysisEngineSpecifiers delegated deleted delimit delimiting deliver demo demonstrate demonstrates denoted denotes depend dependencies dependency dependent depends deploy deployable deployed deployer deploying deployment deployments deposit deprecated depth derived descending describe described describes describing description descriptions descriptive descriptor descriptors design designed designing desired desktop destroy detagged detagging detail detailed detailing details detect detected detecting detection detector detectors detects determine determined determines determining dev develop developed developer developers developerworks developing development deviates dialog did didn difference different differs difficult digest digests dimensions direct directed directly directories directory disabled discipline discover discoverable discovered discovering discovery discuss discussed discusses discussing discussion disk dispersed display displayed displays distinct distinction distribute distributed distribution div divided do doc docText docbook docbookx docs document documentAnalyzer documentation documents does doesn doing domain don done dotted double down download downstream drug dtd during dynamically e each earlier early easily easy eclipse eclipsePlugin edit editable editing editions editor eee effect effects efficient efficiently effort either element elements eliminated eliminating else embed embedded embedding embeddings emf emitted emphasis empty en enable enabled enablement enablements enables enabling encapsulate enclosed encoding encouraged end engine engineering engineers engines enriched ensure ensuring ent entered enterprise entire entities entity entry env environment environments equipped equivalent error errors essential etc even event events every everything evidence ex1 ex2 ex3 ex4 ex5 ex6 exact exactly example examples except exception exceptions execute executed execution exist existing exists exit expand expandable expanded expandedForm expect expected expensive experiment explained explanation explicate explicit explicitly exploit exploits explore explorer exploring express expression expressions extend extended extends extensible extension extensive external externalResource externalResourceBinding externalResourceBindings externalResourceDependency externalResources externalized extract extracted extracts extras facilitate facilitates facilities facility fact factory facts fails failure failures fairly false familiar faqs far fastest faults favoring feature featureDescription features fed feedback feeding feeds ferrucci few field fields fig figCaption figReference figure file fileResourceSpecifier fileUrl filename fileref files filled filtering final finally finances find finder finding finds fine finishes first fixed fixedFlow flexibility flexible flexibly float floating flow flowConstraints flowcontroller flows folder folders follow followed following follows foo footnote footnotesHere for forces foremost form format formats formatted formatter forms formulate found foundation four frame frames framework frameworkImplementation frameworks free freely frequent friendly from full fullName fully function functionality functions further future g gained garden gather general generalized generally generate generated generates generating get getAnnotationIndex getConfigParameterValue getContext getDocumentText getFullName getJFSIndexRepository getLogger getMetaData getRequiredCasInterface getResourceAsStream getResourceObject getResourceURL getResultSpecification gets getter getters getting give given gives global glossary glossdef glossentry glosssee glossseealso glossterm go goal going good governing governments grammatical granular graphs greater group groups grow growing gt guarantee guide guidelines guides guilds h3 h4 hand handle handler handlers handles handling handy happening happens hardcoded has hasNext hasn have haven having he header heading heart height help helpful helps her here hierarchical hierarchy high higher highest highlight highlighted highly his hold holding holds hook hooks hope host hosted hosts house hover hovering how however href htm html http hybrid i ibm iceberg id idea ideal identifier identifies identify identifying identity if ignore ignored illustrated illustrates image image002 image004 image006 image008 image010 image012 image014 image016 image018 image020 image022 image024 image026 image028 image030 image032 image034 image036 image038 image040 image042 image044 image046 image048 image050 imagedata imageobject images imagine img imgroot impact impl implement implementation implementationName implementations implemented implementing implements implicit implied implmentations imply import importance important imported importing imports improve in include included includes including incompatibilities incorporated increase independent independently index indexed indexer indexes indexing indicate indicated indicates indicating indication indices indirectly individual industrial industry infer inferred infers informalfigure informaltable information informational infrastructure inherit inheritance inherited initial initialization initialize initialized initializer initializes initializing initially input inputSofa inputSofas inputs ins insert inside install installation installed installer installing installs instance instances instantiate instantiated instantiates instantiating instead instructions insulate insure int integer integers integrated integrating integration intelligent intended intent interact interacting interaction interactions interacts interchangeably interest interesting interface interfaceName interfaces intermediate internal internally internationalization internationalized internet interoperate interpret interpretation interpreted intersection intl into intro introduce introduced introduces introduction intuitive invalid invocation invoke invoked invokes involve involved io is isolate issue issues issuing it item itemizedlist items iterate iterating iteration iterator iterators its itself j2se jar java javadocs jcas jcasgen job journal jpg juru just keep keeps key keys keyword keywords kind kinds know knowledge label labeled labeling language languages languagesSupported large largest last later latest launch law layer layout ldquo lead leads learn learning least leave left legend length let lets level levels leveraged liberal license licensed licenses licensing like likely limit limitations limited limits line linear lingual linguistics link linked linkend linking links list listed listitem lists literal load loaders loads local locally locate located location locations log logged logger loggers logging logic logical logically logs long longer look looked looking looks loose loosely lot lots lowest lt mHawthornePattern mLocations mMap mPatterns mYorktownPattern machine machines made main maintain maintained maintaining maintains majority make makes making manage managed management manager manages managing mandatory manipulating manually many map mapping mark marked match matcher matching matter may maybe mdash mean meaning means meant mechanism mechanisms media mediaobject medical meeting meetings member memory mention mentioned mentions menu menus merge merger merging message messages meta metadata method methods middleware might millions mind mining mirrors mixture modal modalities mode model modern modifications modified modifying modules monitoring months more most mounds mouse move moved much muh multi multiValued multimodal multiple multipleDeploymentAllowed multiplier multithreaded must my myJarFile myProject myannotator myorg nalysis name nameValuePair named nameend namely names namespace namest naming native natural naturally navigator ndash necessarily necessary need needed nested net network networking never new newer next no node nodes noise non nor not notations note noted notes nothing notice notification now null number numbering numbers oasis object objects obtain obtainable obtains obviously occur occurrence occurrences occurring occurs of off offering offset offsets often olink on once one ones only ontology open opennlp opens operate operated operates operation operationalProperties operations opinions optimize option optional optionally options or orchestrated orchestration order orderedlist ordering org organization organizations organize organized organizing orientation oriented original other others otherterm othertimes otherwise our out outer output outputSofa outputSofas outputs outside over overall overlapping overridden override overview own ownership p package packaged packager packages packaging page pages pairs pane panel paper par para paradigm paragraph parallel parallelization parallelized param1 param2 parameter parameters parse parsed parser parsers parsing part particular parts pass passed path pattern patternStrings patterns pear pedagogical peek per perform performance performs perhaps permissions permit permits person persons perspective philosophy phrase physical physically pick picture piece pieces pipeline pipelines pitfalls pkg place placed placeholder places plain plainTextDocument plan planning plans platform platforms please plug pluggable plugged plugin plugins plus png point pointed pointing popular populate populates populating popup port porting portion pos position positions possibilities possible possibly post postcpp potential potentially powerful practice practices pre preceded precise precisely precpp preferences prefix present presented presents president pressing prevent previous previously primary primitive primitives principal principle printed prior private probable problem problems proceed process processed processes processing processor produce produced produces product products program programlisting programmers programming programs project projects pronounce propagate propagated propagates properly properties property protocol protocols provide provided provides providing proximity proxy public publications published publishes pulldown pulling purchases purely purpose purposes push pushing put qualified queries query querying quick quickly quot quote range rangeTypeName ranging rank rapid rarr rather raw re reached read reader readers reading reads ready real really reason reasoning reasons receive received receives receiving recognition recognized recognizer recommend recommended recommends recompiled recompute reconfiguration reconfigure record recorded recording recover recoverability recoverable recovery redo reexamine ref refer reference referenced references referred referring refers refines reflect refresh refreshes regarding regex region regions registered registering regular reinitialize relate related relation relational relations relationship relative relatively release released relevant relies relieve remainder remaining remains remote remotely renders repairs repeated replace replaced reporting repository represent representation representational representations represented representing represents require required requirements requires research resolved resource resourceManagerConfiguration resourceName resourceSpecifier resources respect respectively response responsible rest restart restarting restore restoring restrict restricted result resulting results rethrow retrieval retrieve retrieved retrieving return returned returning returns reusable reuse reversed review rich right role roles room rooms root roots roughly routing row rows rowsep rule rules run running runs runtime s safe sake same sample save saved saves saving say scalability scale scaleable scaling scenario scenarios schema scheme scientists screen screens screenshot script scripts scroll sdk search searched searches searching second section sections see seeing seeking seen segment segmentation segments select selected semantic semantics sending sends sense sent sentence sentences separate separately sequence sequentially serialization serialize series serious server servers service services set setBegin setBuilding setEnd setFullName setUimaClassPath sets setter setters setting settings setup several severity sh shallow share shareable shared shares sharing shell shift shipped ships shortcut shorter shot should show showed showing shown shows shut side sift signal significant significantly similar simple simplest simplified simplifies simply simultaneous simultaneously since single sink site situation six size sj sj43 skills skip skipped skipping small smaller so sofa sofas software solution solutions some something somewhere soon sophisticated sorted sorting source sourceInfo sourceforge sources space spacing span spans spec special specialized specific specification specifications specifics specified specifiers specifies specify specifyable specifying speech speed sppech src stacked standard standards standoff stands start started starting starts startup state stateless statement statements static statistics step steps still storage store stored storing straightforward strangely stream streams strength string strings structure structured structures strung style sub subcomponent subcomponents subdirectory subelement subject subjects submit subsection subsequent subsequently subset substitutable substituted subtype subtypes successfully such suggested suggests suite summarize summarizers summary sun super superclass supertype supertypeName supertypes supplied supplies supply support supported supporting supports suppress sure surely switch syntax system systems t tab tabbed table tableSubhead tables tabs tag tagged tags take taken takes taking target targetdoc targetptr task taxonomy tbody tcas td teach teams tech techniques technologies technology tend tens term terminology terms test tested testing text textobject texts tgroup than that the their them themselves then there therefore therein these they thing things think third this thoroughly those though thought thread threadID threading threats three through throughput throw throwing thrown throws tightly time timeIndex timeIter times tip title to toString today together token tokenization tokenizer tokenizers tokens too took tool tooling tools top topic topics tr tracing trademark traditional transcribes transcript transformed transforming translated translation translations transport treatments treats tree trees trivial true try tug turn tutoria tutorial tutorials twisty two txt type typeDescription typeSystemDescription typeSystemInit typecas typed types typical typically ubject ugr uima uimaAcronyms uimaents uimaj ul ulink ultimately undefined under underline underlying understand understanding unexpected unfortunately union unique unit units unless unrecoverable unsigned unstructured until unusual up update updated updates upper upstream url us use used useful user users uses using usually util utilities utility v1 valid validation value values var variable variablelist variables varieties variety various varlistentry vary varying vast ve vendor verifies verify verifying version versions versus vertically very via video view viewed viewer viewier viewing views visible visual vital voice void volumes walk walks want wanted was way ways we weakest web website welcome well were what whatever whats when whenever where whether which while whiteboard who whole whose wide width will window wish with within without womnifind word words work workflow working works workspace world worlds worry worth would wouldn wrapped wrappers wrapping wraps write writes writing written www x xcas xmi xml xmlDocument xmlns xmp xref xyz y yet you your yourself zero zones uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryMatchTests/0000755000175000017500000000000011625126454027500 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryMatchTests/dictionary.xml0000644000175000017500000000275211625126454032375 0ustar drazzibdrazzib en-XX org.apache.uima.ListBased new Orleans New Orleans new York City new York New Hampshire new uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryMatchTests/Token.xcas0000644000175000017500000000613711625126454031447 0ustar drazzibdrazzib uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryMatchTests/MultiWords.xml0000644000175000017500000000274311625126454032341 0ustar drazzibdrazzib org.apache.uima.DictionaryEntry new Orleans New Orleans new York City new York New Hampshire new uima-addons-2.3.1/DictionaryAnnotator/src/test/resources/DictionaryMatchTests/Token.xml0000644000175000017500000001356711625126454031316 0ustar drazzibdrazzib uima.tcas.Annotation uima.cas.AnnotationBase sofa uima.cas.Sofa begin uima.cas.Integer end uima.cas.Integer uima.tcas.DocumentAnnotation uima.tcas.Annotation sofa uima.cas.Sofa begin uima.cas.Integer end uima.cas.Integer language uima.cas.String org.apache.uima.TokenAnnotation uima.tcas.Annotation sofa uima.cas.Sofa begin uima.cas.Integer end uima.cas.Integer tokenType uima.cas.String org.apache.uima.SentenceAnnotation uima.tcas.Annotation sofa uima.cas.Sofa begin uima.cas.Integer end uima.cas.Integer org.apache.uima.ListBased uima.tcas.Annotation sofa uima.cas.Sofa begin uima.cas.Integer end uima.cas.Integer uima-addons-2.3.1/DictionaryAnnotator/src/test/java/0000755000175000017500000000000011625126452022300 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/0000755000175000017500000000000011625126452023067 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/0000755000175000017500000000000011625126452024310 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/0000755000175000017500000000000011625126452025243 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/0000755000175000017500000000000011625126454027252 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/0000755000175000017500000000000011625126454031374 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/DictionaryAnnotatorFilterFeaturePathTest.javauima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/DictionaryA0000644000175000017500000001527111625126454033533 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot; import java.io.File; import junit.framework.TestCase; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Feature; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.util.XMLInputSource; /** * Dictionary annotator test. This test class tests the dictionary annotator * code with input filter featurePath settings */ public class DictionaryAnnotatorFilterFeaturePathTest extends TestCase { /** * Test the dictionary annotator processing with an simple input filter * feature path setting. * * @throws Exception */ public void testDictionaryAnnotatorWithSimpleFilterFeaturePath() throws Exception { AnalysisEngine ae = null; // Create an XML input source from the specifier file. XMLInputSource in = new XMLInputSource( JUnitExtension .getFile("DictionaryAnnotatorTestFilterFeaturePath/DictionaryAnnotatorFilterFeaturePath.xml")); // Parse the specifier. ResourceSpecifier specifier = UIMAFramework.getXMLParser() .parseResourceSpecifier(in); // Create the Text Analysis Engine. ae = UIMAFramework.produceAnalysisEngine(specifier); // Create a new CAS and set data CAS cas = ae.newCAS(); cas.setDocumentText("nEw yOrk City"); cas.setDocumentLanguage("en"); Feature feat = cas.getDocumentAnnotation().getType().getFeatureByBaseName("featureToAnalyze"); cas.getDocumentAnnotation().setStringValue(feat, "equalsTest"); // Process cas ae.process(cas); // define result interested in String[] tofs = { "org.apache.uima.DictionaryEntry" }; // compare results File outputFile = new File(JUnitExtension .getFile("DictionaryAnnotatorTestFilterFeaturePath"), "dictionaryAnnotFeaturePathTest_testoutput.txt"); AnnotatorTester .checkResult( cas, tofs, JUnitExtension .getFile("DictionaryAnnotatorTestFilterFeaturePath/dictionaryAnnotFeaturePathTestRef.txt"), outputFile); } /** * Test the dictionary annotator processing with an simple input filter * feature path setting of type int. * * @throws Exception */ public void testDictionaryAnnotatorWithSimpleFilterFeaturePathInt() throws Exception { AnalysisEngine ae = null; // Create an XML input source from the specifier file. XMLInputSource in = new XMLInputSource( JUnitExtension .getFile("DictionaryAnnotatorTestFilterFeaturePath/DictionaryAnnotatorFilterFeaturePathInt.xml")); // Parse the specifier. ResourceSpecifier specifier = UIMAFramework.getXMLParser() .parseResourceSpecifier(in); // Create the Text Analysis Engine. ae = UIMAFramework.produceAnalysisEngine(specifier); // Create a new CAS and set data CAS cas = ae.newCAS(); cas.setDocumentText("nEw yOrk City"); cas.setDocumentLanguage("en"); Feature feat = cas.getDocumentAnnotation().getType().getFeatureByBaseName("featureToAnalyze"); cas.getDocumentAnnotation().setIntValue(feat, 22); // Process cas ae.process(cas); // define result interested in String[] tofs = { "org.apache.uima.DictionaryEntry" }; // compare results File outputFile = new File(JUnitExtension .getFile("DictionaryAnnotatorTestFilterFeaturePath"), "dictionaryAnnotFeaturePathTest_testoutput.txt"); AnnotatorTester .checkResult( cas, tofs, JUnitExtension .getFile("DictionaryAnnotatorTestFilterFeaturePath/dictionaryAnnotFeaturePathTestRef.txt"), outputFile); } /** * Test the dictionary annotator processing with an simple input filter * feature path setting of type boolean. * * @throws Exception */ public void testDictionaryAnnotatorWithSimpleFilterFeaturePathBoolean() throws Exception { AnalysisEngine ae = null; // Create an XML input source from the specifier file. XMLInputSource in = new XMLInputSource( JUnitExtension .getFile("DictionaryAnnotatorTestFilterFeaturePath/DictionaryAnnotatorFilterFeaturePathBoolean.xml")); // Parse the specifier. ResourceSpecifier specifier = UIMAFramework.getXMLParser() .parseResourceSpecifier(in); // Create the Text Analysis Engine. ae = UIMAFramework.produceAnalysisEngine(specifier); // Create a new CAS and set data CAS cas = ae.newCAS(); cas.setDocumentText("nEw yOrk City"); cas.setDocumentLanguage("en"); Feature feat = cas.getDocumentAnnotation().getType().getFeatureByBaseName("featureToAnalyze"); cas.getDocumentAnnotation().setBooleanValue(feat, true); // Process cas ae.process(cas); // define result interested in String[] tofs = { "org.apache.uima.DictionaryEntry" }; // compare results File outputFile = new File(JUnitExtension .getFile("DictionaryAnnotatorTestFilterFeaturePath"), "dictionaryAnnotFeaturePathTest_testoutput.txt"); AnnotatorTester .checkResult( cas, tofs, JUnitExtension .getFile("DictionaryAnnotatorTestFilterFeaturePath/dictionaryAnnotFeaturePathTestRef.txt"), outputFile); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/DictionaryAnnotatorTest.javauima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/DictionaryA0000644000175000017500000002073311625126454033532 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot; import java.io.File; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotatorProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.util.XMLInputSource; /** * Dictionary annotator test. This test class tests the dictionary annotator * code and does not focus on dictionary matching. */ public class DictionaryAnnotatorTest extends TestCase { /** * Test the dictionary annotator processing. * * @throws Exception */ public void testDictionaryAnnotator() throws Exception { // create annotation tester with the dictionary annotator specifier AnnotatorTester annotTester = new AnnotatorTester(JUnitExtension .getFile("DictionaryAnnotatorTests/DictionaryAnnotator.xml")); CAS cas = annotTester.performTest("nEw yOrk City", "en"); // define result interested in String[] tofs = { "org.apache.uima.DictionaryEntry" }; // compare results File outputFile = new File(JUnitExtension .getFile("DictionaryAnnotatorTests"), "dictionaryAnnotTest_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("DictionaryAnnotatorTests/dictionaryAnnotTestRef.txt"), outputFile); } /** * The test dictionary annotator processing with an invalid input type * * @throws Exception */ public void testDictionaryAnnotatorInvalidInputType() throws Exception { // create annotation tester with the dictionary annotator specifier AnnotatorTester annotTester = new AnnotatorTester( JUnitExtension .getFile("DictionaryAnnotatorTests/DictionaryAnnotatorInvalidInputType.xml")); boolean foundMessage = false; try { annotTester.performTest("Dummy text", "en"); } catch (DictionaryAnnotatorProcessException ex) { String message = ex.getMessage(); if (message.indexOf("org.apache.uima.InvalidInputType") > -1) { foundMessage = true; } } Assert.assertTrue(foundMessage); } /** * The test dictionary annotator processing with an invalid output type * * @throws Exception */ public void testDictionaryAnnotatorInvalidOutputType() throws Exception { // create annotation tester with the dictionary annotator specifier AnnotatorTester annotTester = new AnnotatorTester( JUnitExtension .getFile("DictionaryAnnotatorTests/DictionaryAnnotatorInvalidOutputType.xml")); boolean foundMessage = false; try { annotTester.performTest("Dummy text", "en"); } catch (DictionaryAnnotatorProcessException ex) { String message = ex.getMessage(); if (message.indexOf("org.apache.uima.DictionaryEntry") > -1) { foundMessage = true; } } Assert.assertTrue(foundMessage); } /** * The test dictionary annotator processing - dictionary file not found * * @throws Exception */ public void testDictionaryAnnotatorDictFileNotFound() throws Exception { boolean foundMessage = false; try { // create annotation tester with the dictionary annotator specifier new AnnotatorTester( JUnitExtension .getFile("DictionaryAnnotatorTests/DictionaryAnnotatorDictFileNotFound.xml")); } catch (ResourceInitializationException ex) { String message = ex.getCause().getMessage(); if (message.indexOf("fileNotFound.xml") > -1) { foundMessage = true; } } Assert.assertTrue(foundMessage); } /** * Test the dictionary annotator processing with a simple feature path setting. * * @throws Exception */ public void testDictionaryAnnotatorWithSimpleFeaturePath() throws Exception { AnalysisEngine ae = null; // Create an XML input source from the specifier file. XMLInputSource in = new XMLInputSource( JUnitExtension .getFile("DictionaryAnnotatorTests/DictionaryAnnotatorFeaturePath.xml")); // Parse the specifier. ResourceSpecifier specifier = UIMAFramework.getXMLParser() .parseResourceSpecifier(in); // Create the Text Analysis Engine. ae = UIMAFramework.produceAnalysisEngine(specifier); // Create a new CAS and set data CAS cas = ae.newCAS(); cas.setDocumentText("featurePath"); cas.setDocumentLanguage("en"); Feature feat = cas.getDocumentAnnotation().getType().getFeatureByBaseName("featureToAnalyze"); cas.getDocumentAnnotation().setStringValue(feat, "nEw yOrk City"); // Process cas ae.process(cas); // define result interested in String[] tofs = { "org.apache.uima.DictionaryEntry" }; // compare results File outputFile = new File(JUnitExtension .getFile("DictionaryAnnotatorTests"), "dictionaryAnnotFeaturePathTest_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("DictionaryAnnotatorTests/dictionaryAnnotFeaturePathTestRef.txt"), outputFile); } /** * Test the dictionary annotator processing with an advanced feature path setting. * * @throws Exception */ public void testDictionaryAnnotatorWithAdvancedFeaturePath() throws Exception { AnalysisEngine ae = null; // Create an XML input source from the specifier file. XMLInputSource in = new XMLInputSource( JUnitExtension .getFile("DictionaryAnnotatorTests/DictionaryAnnotatorAdvancedFeaturePath.xml")); // Parse the specifier. ResourceSpecifier specifier = UIMAFramework.getXMLParser() .parseResourceSpecifier(in); // Create the Text Analysis Engine. ae = UIMAFramework.produceAnalysisEngine(specifier); // Create a new CAS and set data CAS cas = ae.newCAS(); cas.setDocumentText("featurePath"); cas.setDocumentLanguage("en"); Type subAnnotationType = cas.getTypeSystem().getType("org.apache.uima.SubAnnotation"); Feature feat = subAnnotationType.getFeatureByBaseName("featureToAnalyze"); AnnotationFS fs = cas.createAnnotation(subAnnotationType, 0, 4); fs.setStringValue(feat, "nEw yOrk City"); cas.addFsToIndexes(fs); Feature subAnnotFeat = cas.getDocumentAnnotation().getType().getFeatureByBaseName("subAnnotation"); cas.getDocumentAnnotation().setFeatureValue(subAnnotFeat, fs); // Process cas ae.process(cas); // define result interested in String[] tofs = { "org.apache.uima.DictionaryEntry" }; // compare results File outputFile = new File(JUnitExtension .getFile("DictionaryAnnotatorTests"), "dictionaryAnnotFeaturePathTest_testoutput.txt"); AnnotatorTester.checkResult(cas, tofs, JUnitExtension .getFile("DictionaryAnnotatorTests/dictionaryAnnotFeaturePathTestRef.txt"), outputFile); } } uima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/dictionary/0000755000175000017500000000000011625126454033541 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/dictionary/DictionaryCreatorTest.javauima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000000701311625126454033544 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary; import java.io.File; import junit.framework.TestCase; import org.apache.uima.annotator.dict_annot.dictionary.impl.DictionaryCreator; import org.apache.uima.test.junit_extension.FileCompare; import org.apache.uima.test.junit_extension.JUnitExtension; /** * Test dictionary creation with the DictionarCreator */ public class DictionaryCreatorTest extends TestCase { /** * test default dictionary creation * * @throws Exception */ public void testDefaultDictionaryCreation() throws Exception { String inputFile = JUnitExtension.getFile( "DictionaryCreatorTest/dictInput.txt").getAbsolutePath(); File outputFile = new File(JUnitExtension .getFile("DictionaryCreatorTest"), "defaultDict.xml"); DictionaryCreator.createDictionary(inputFile, "UTF-8", outputFile .getAbsolutePath(), null, null, null, null); File refFile = JUnitExtension .getFile("DictionaryCreatorTest/defaultDictRef.xml"); assertTrue(FileCompare.compare(refFile, outputFile)); } /** * test dictionary creation is language and special separator character * @throws Exception */ public void testCustomSeparatorDictionaryCreation() throws Exception { String inputFile = JUnitExtension.getFile( "DictionaryCreatorTest/dictInput.txt").getAbsolutePath(); File outputFile = new File(JUnitExtension .getFile("DictionaryCreatorTest"), "separatorDict.xml"); DictionaryCreator.createDictionary(inputFile, "UTF-8", outputFile .getAbsolutePath(), "en", null, null, " "); File refFile = JUnitExtension .getFile("DictionaryCreatorTest/separatorDictRef.xml"); assertTrue(FileCompare.compare(refFile, outputFile)); } /** * test dictionary creation with a tokenizer PEAR * * @throws Exception */ public void testTokenizerDictionaryCreation() throws Exception { String inputFile = JUnitExtension.getFile( "DictionaryCreatorTest/dictInput.txt").getAbsolutePath(); File outputFile = new File(JUnitExtension .getFile("DictionaryCreatorTest"), "tokenizerDict.xml"); File pearFile = JUnitExtension.getFile("DictionaryCreatorTest/WhitespaceTokenizer.pear"); DictionaryCreator.createDictionary(inputFile, "UTF-8", outputFile .getAbsolutePath(), "en", pearFile.getAbsolutePath(), "org.apache.uima.TokenAnnotation", null); File refFile = JUnitExtension .getFile("DictionaryCreatorTest/tokenizerDictRef.xml"); assertTrue(FileCompare.compare(refFile, outputFile)); } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/dictionary/DictionaryMatcherTest.javauima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000001411511625126454033545 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.uima.UIMAFramework; import org.apache.uima.annotator.dict_annot.dictionary.impl.DictionaryFileParserImpl; import org.apache.uima.annotator.dict_annot.dictionary.impl.FeaturePathInfo; import org.apache.uima.annotator.dict_annot.dictionary.impl.HashMapDictionaryBuilder; import org.apache.uima.annotator.dict_annot.impl.FeaturePathInfo_impl; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.XCASDeserializer; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.metadata.FsIndexDescription; import org.apache.uima.resource.metadata.TypeSystemDescription; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.util.CasCreationUtils; import org.apache.uima.util.XMLInputSource; /** * Tests if the dictionary matches works correctly. */ public class DictionaryMatcherTest extends TestCase { /** * Test matcher that takes the text and the dictionary and adds all matches * to the array list. * * @param dict * dictionary to use * @param tokens * tokenized string * @param matches * match list */ public void match(Dictionary dict, AnnotationFS[] annotFSs, FeaturePathInfo featPathInfo, ArrayList matches) { int currentPos = 0; while (currentPos < annotFSs.length) { DictionaryMatch dictMatch = dict.matchEntry(currentPos, annotFSs, featPathInfo); if (dictMatch != null) { // we have found a match starting at currentPos int matchLength = dictMatch.getMatchLength(); StringBuffer buffer = new StringBuffer(); for (int i = 0; i < matchLength; i++) { buffer.append(annotFSs[currentPos + i].getCoveredText()); buffer.append(" "); } matches.add(buffer.toString().trim()); // adjust current token position in case of multi word match currentPos = currentPos + matchLength; } else { // no match found, go to the next token currentPos++; } } } /** * tests the dictionary matching for single words and multi words. * * @throws Exception */ public void testDictionaryMatchingOutsideAnnotator() throws Exception { // create the dictionary File dictFile = JUnitExtension .getFile("DictionaryMatchTests/MultiWords.xml"); InputStream stream = new BufferedInputStream( new FileInputStream(dictFile)); DictionaryBuilder dictBuilder = new HashMapDictionaryBuilder(); // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); fileParser.parseDictionaryFile(dictFile.getAbsolutePath(), stream, dictBuilder); Dictionary dict = dictBuilder.getDictionary(); // -- read input XCAS and create a CAS -- // read type system file File typeSystemFile = JUnitExtension .getFile("DictionaryMatchTests/Token.xml"); // get XCAS file File xcasFile = JUnitExtension.getFile("DictionaryMatchTests/Token.xcas"); // parse type system file Object descriptor = UIMAFramework.getXMLParser().parse( new XMLInputSource(typeSystemFile)); TypeSystemDescription tsDesc = (TypeSystemDescription) descriptor; // create a CAS and add XCAS content CAS cas = CasCreationUtils.createCas(tsDesc, null, new FsIndexDescription[0]); SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); XCASDeserializer xcasDeserializer = new XCASDeserializer(cas .getTypeSystem()); parser.parse(xcasFile, xcasDeserializer.getXCASHandler(cas)); // get dictionary match input type Type inputType = cas.getTypeSystem().getType( "org.apache.uima.TokenAnnotation"); Assert .assertNotNull("Type org.apache.uima.TokenAnnotation not found in the type system" + inputType); // copy input match type annotations to an array FSIterator it = cas.getAnnotationIndex(inputType).iterator(); ArrayList inputTypeAnnots = new ArrayList(); while (it.hasNext()) { inputTypeAnnots.add((AnnotationFS) it.next()); } AnnotationFS[] annotFSs = inputTypeAnnots.toArray(new AnnotationFS[] {}); // check matches for the CAS ArrayList matches = new ArrayList(); match(dict, annotFSs, new FeaturePathInfo_impl(), matches); // check match results Assert.assertEquals("new", matches.get(0)); Assert.assertEquals("new york", matches.get(1)); Assert.assertEquals("new orleans", matches.get(2)); Assert.assertEquals("new york city", matches.get(3)); } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootuima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/dictionary/DictionaryBuilderTest.javauima-addons-2.3.1/DictionaryAnnotator/src/test/java/org/apache/uima/annotator/dict_annot/dictionary/0000644000175000017500000003545311625126454033555 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.dict_annot.dictionary; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.InputStream; import java.util.ArrayList; import java.util.StringTokenizer; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.incubator.uima.DictionaryDocument; import org.apache.incubator.uima.EntriesDocument; import org.apache.incubator.uima.EntryDocument; import org.apache.uima.annotator.dict_annot.dictionary.impl.DictionaryFileParserImpl; import org.apache.uima.annotator.dict_annot.dictionary.impl.HashMapDictionary; import org.apache.uima.annotator.dict_annot.dictionary.impl.HashMapDictionaryBuilder; import org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotatorConfigException; import org.apache.uima.test.junit_extension.FileCompare; import org.apache.uima.test.junit_extension.JUnitExtension; /** * The DictionaryBuilderTest class tests the dictionary creation for single and * multi word entries. */ public class DictionaryBuilderTest extends TestCase { /** * test single word dictionary creation with case normalization * * @throws Exception */ public void testSingleWordDictionaryBuildingCaseNormalization() throws Exception { // read input file File dictFile = JUnitExtension .getFile("DictionaryBuilderTests/SingleWordsCaseNormalization.xml"); InputStream stream = new BufferedInputStream( new FileInputStream(dictFile)); // create dictionary HashMapDictionaryBuilder dictBuilder = new HashMapDictionaryBuilder(); // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); fileParser.parseDictionaryFile(dictFile.getAbsolutePath(), stream, dictBuilder); HashMapDictionary dict = (HashMapDictionary) dictBuilder.getDictionary(); // read dictionary entries ArrayList entries = getDictionaryEntries(dictFile); for (int i = 0; i < entries.size(); i++) { Assert.assertTrue("Missing in dictionary: " + entries.get(i), dict .contains(entries.get(i))); } Assert.assertTrue(dict.contains("CpE")); Assert.assertTrue(dict.contains("CPE")); Assert.assertTrue(dict.contains("cpe")); Assert.assertEquals(2761, dict.getEntryCount()); } /** * test single word dictionary creation without case normalization * * @throws Exception */ public void testSingleWordDictionaryBuildingNoCaseNormalization() throws Exception { // read input file File dictFile = JUnitExtension .getFile("DictionaryBuilderTests/SingleWordsNoCaseNormalization.xml"); InputStream stream = new BufferedInputStream( new FileInputStream(dictFile)); // create dictionary DictionaryBuilder dictBuilder = new HashMapDictionaryBuilder(); // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); fileParser.parseDictionaryFile(dictFile.getAbsolutePath(), stream, dictBuilder); HashMapDictionary dict = (HashMapDictionary) dictBuilder.getDictionary(); // read dictionary entries ArrayList entries = getDictionaryEntries(dictFile); for (int i = 0; i < entries.size(); i++) { Assert.assertTrue("Missing in dictionary: " + entries.get(i), dict .contains(entries.get(i))); } Assert.assertFalse(dict.contains("CpE")); Assert.assertTrue(dict.contains("CPE")); Assert.assertTrue(dict.contains("cpe")); Assert.assertEquals(3337, dict.getEntryCount()); } /** * test multi word dictionary creation without case normalization * * @throws Exception */ public void testMultiWordDictionaryBuildingNoCaseNormalization() throws Exception { // read input file File dictFile = JUnitExtension .getFile("DictionaryBuilderTests/MultiWordsNoCaseNormalization.xml"); InputStream stream = new BufferedInputStream( new FileInputStream(dictFile)); // create dictionary HashMapDictionaryBuilder dictBuilder = new HashMapDictionaryBuilder(); // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); fileParser.parseDictionaryFile(dictFile.getAbsolutePath(), stream, dictBuilder); HashMapDictionary dict = (HashMapDictionary) dictBuilder.getDictionary(); // read dictionary entries ArrayList entries = getDictionaryEntries(dictFile); for (int i = 0; i < entries.size(); i++) { StringTokenizer tokenizer = new StringTokenizer(entries.get(i), dictBuilder.getMultiWordSeparator()); ArrayList list = new ArrayList(); while (tokenizer.hasMoreTokens()) { list.add(tokenizer.nextToken()); } String[] multiWord = list.toArray(new String[] {}); Assert.assertTrue("Missing in dictionary: " + entries.get(i), dict .contains(multiWord)); } Assert.assertEquals(5, dict.getEntryCount()); Assert.assertFalse(dict.contains(new String[] { "Unstructured", "Information", "Management", "Architecture" })); Assert.assertTrue(dict.contains(new String[] { "new", "York" })); Assert.assertTrue(dict.contains(new String[] { "new", "York", "City" })); } /** * test multi word dictionary creation with case normalization * * @throws Exception */ public void testMultiWordDictionaryBuildingCaseNormalization() throws Exception { // read input file File dictFile = JUnitExtension .getFile("DictionaryBuilderTests/MultiWordsCaseNormalization.xml"); InputStream stream = new BufferedInputStream( new FileInputStream(dictFile)); // create dictionary HashMapDictionaryBuilder dictBuilder = new HashMapDictionaryBuilder(); // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); fileParser.parseDictionaryFile(dictFile.getAbsolutePath(), stream, dictBuilder); HashMapDictionary dict = (HashMapDictionary) dictBuilder.getDictionary(); // read dictionary entries ArrayList entries = getDictionaryEntries(dictFile); for (int i = 0; i < entries.size(); i++) { StringTokenizer tokenizer = new StringTokenizer(entries.get(i), dictBuilder.getMultiWordSeparator()); ArrayList list = new ArrayList(); while (tokenizer.hasMoreTokens()) { list.add(tokenizer.nextToken()); } String[] multiWord = list.toArray(new String[] {}); Assert.assertTrue("Missing in dictionary: " + entries.get(i), dict .contains(multiWord)); } Assert.assertEquals(4, dict.getEntryCount()); Assert.assertFalse(dict.contains(new String[] { "Unstructured", "Information", "Management", "Architecture" })); Assert.assertTrue(dict.contains(new String[] { "new", "yORk" })); Assert.assertTrue(dict.contains(new String[] { "new", "york", "city" })); Assert.assertFalse(dict.contains("new")); } /** * test multi-word dictionary creation with a special multi-word separator * * @throws Exception */ public void testMultiWordDictionaryBuildingWithSpecialMultiWordSeparator() throws Exception { // read input file File dictFile = JUnitExtension .getFile("DictionaryBuilderTests/MultiWordsSpecialMultiWordSeparator.xml"); InputStream stream = new BufferedInputStream( new FileInputStream(dictFile)); // create dictionary HashMapDictionaryBuilder dictBuilder = new HashMapDictionaryBuilder(); // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); fileParser.parseDictionaryFile(dictFile.getAbsolutePath(), stream, dictBuilder); HashMapDictionary dict = (HashMapDictionary) dictBuilder.getDictionary(); // read dictionary entries ArrayList entries = getDictionaryEntries(dictFile); for (int i = 0; i < entries.size(); i++) { StringTokenizer tokenizer = new StringTokenizer(entries.get(i), dictBuilder.getMultiWordSeparator()); ArrayList list = new ArrayList(); while (tokenizer.hasMoreTokens()) { list.add(tokenizer.nextToken()); } String[] multiWord = list.toArray(new String[] {}); Assert.assertTrue("Missing in dictionary: " + entries.get(i), dict .contains(multiWord)); } Assert.assertEquals(4, dict.getEntryCount()); Assert.assertFalse(dict.contains(new String[] { "Unstructured", "Information", "Management", "Architecture" })); Assert.assertTrue(dict.contains(new String[] { "new", "yORk" })); Assert.assertTrue(dict.contains(new String[] { "new", "york", "city" })); Assert.assertFalse(dict.contains("new")); } /** * parse the dictionary file and returns the entries as ArrayList. * * @param dictionaryFile * @return * @throws Exception */ private ArrayList getDictionaryEntries(File dictionaryFile) throws Exception { ArrayList dictEntries = new ArrayList(); // parse the dictionary file and extract the content DictionaryDocument dictionaryDoc; try { dictionaryDoc = DictionaryDocument.Factory.parse(dictionaryFile); } catch (Exception ex) { throw new DictionaryAnnotatorConfigException( "dictionary_annotator_error_parsing_dictionary_file", new Object[] { dictionaryFile.getAbsolutePath() }, ex); } // get dictionary document DictionaryDocument.Dictionary dictionary = dictionaryDoc.getDictionary(); // get dictionary entries EntriesDocument.Entries entries = dictionary.getTypeCollection() .getEntries(); EntryDocument.Entry[] entryArray = entries.getEntryArray(); for (int i = 0; i < entryArray.length; i++) { dictEntries.add(entryArray[i].getKey().getStringValue()); } // return the dictionary entries return dictEntries; } /** * test building an invalid XML dictionary file * * @throws Exception */ public void testBuildingInvalidDictFile() throws Exception { // read input file File dictFile = JUnitExtension .getFile("DictionaryBuilderTests/InvalidDictFile.xml"); InputStream stream = new BufferedInputStream( new FileInputStream(dictFile)); // create dictionary HashMapDictionaryBuilder dictBuilder = new HashMapDictionaryBuilder(); // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); boolean foundMessage = false; try { fileParser.parseDictionaryFile(dictFile.getAbsolutePath(), stream, dictBuilder); } catch (DictionaryAnnotatorConfigException ex) { String message = ex.getMessage(); if (message.indexOf("InvalidDictFile.xml") > -1) { foundMessage = true; } } Assert.assertTrue(foundMessage); } /** * test building an invalid XML dictionary file * * @throws Exception */ public void testBuildingInvalidDictFile2() throws Exception { // read input file File dictFile = JUnitExtension .getFile("DictionaryBuilderTests/InvalidDictFile2.xml"); InputStream stream = new BufferedInputStream( new FileInputStream(dictFile)); // create dictionary HashMapDictionaryBuilder dictBuilder = new HashMapDictionaryBuilder(); // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); boolean foundMessage = false; try { fileParser.parseDictionaryFile(dictFile.getAbsolutePath(), stream, dictBuilder); } catch (DictionaryAnnotatorConfigException ex) { String message = ex.getMessage(); if (message.indexOf("InvalidDictFile2.xml") > -1) { foundMessage = true; } } Assert.assertTrue(foundMessage); } /** * test dictionary printing * * @throws Exception */ public void testDictionaryPrinting() throws Exception { // read input file File dictFile = JUnitExtension .getFile("DictionaryBuilderTests/MultiWordsSpecialMultiWordSeparator.xml"); InputStream stream = new BufferedInputStream( new FileInputStream(dictFile)); // create dictionary HashMapDictionaryBuilder dictBuilder = new HashMapDictionaryBuilder(); // create dictionary file parser DictionaryFileParser fileParser = new DictionaryFileParserImpl(); fileParser.parseDictionaryFile(dictFile.getAbsolutePath(), stream, dictBuilder); HashMapDictionary dict = (HashMapDictionary) dictBuilder.getDictionary(); //create dictionary content output file File outputFile = new File(JUnitExtension .getFile("DictionaryBuilderTests"), "dictionaryPrinting_testoutput.txt"); FileWriter writer = new FileWriter(outputFile); //print dictionary content to file dict.printDictionary(writer); writer.flush(); writer.close(); //compare dictionary content with reference content FileCompare.compare(outputFile, JUnitExtension .getFile("DictionaryBuilderTests/DictionaryPrintingRef.txt")); } } uima-addons-2.3.1/DictionaryAnnotator/src/docbook/0000755000175000017500000000000011625126456022024 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/src/docbook/DictionaryAnnotatorUserGuide.xml0000644000175000017500000005147211625126456030367 0ustar drazzibdrazzib Apache UIMA Dictionary Annotator Documentation Introduction The DictionaryAnnotator is an Apache UIMA analysis engine that annotates words based on dictionary entries. For each word in the document text that is available in the dictionary a new annotation is created. The annotator can be configured with one or more independent dictionaries. The dictionaries can easily be created with the dictionary creator command line tooling. For advanced usage of the annotator the matching can also be improved by specifying multi word capabilities, match input type properties and input type filter settings. Processing Overview To use the DictionaryAnnotator at first a dictionary must be created because so far the annotator does not provide any dictionaries. The creation of a dictionary is very simple when using the dictionary creator command line tooling. The tooling takes as input a list words that should be added to the dictionary. The output of the dictionary creator is the created dictionary as XML file and can be used to configure the annotator. For each dictionary additional meta data like the annotation output type for the created annotation can be set. The dictionary and the DictionaryAnnotator can be configured to work with single word dictionary entries like "Apache" or with multi word entries like "Apache UIMA". After the annotator is configured with the created dictionary the lookup strategy settings must be defined. The dictionary lookup inside the annotator works with tokens. A token is a word or an arbitrary text fragment that is used for the dictionary lookup. If a token match a dictionary entry an annotation is created. The kind of tokens that are used for the lookup can be configured and enhanced with filter capabilities. To improve the dictionary lookup it is recommended that the tokenization for the dictionary entries and the tokenization for the document text is the same. This can be achieved when using the dictionary creator with some advanced settings. During the annotator processing for each token in the document text that is available in the dictionary a new annotation with the dictionary output type is created. These annotations can be used in a succeeding step to do some further processing. Dictionary Creation To automatically create a dictionary, the DictionaryCreator command line tooling is provied.
Dictionary Creator The DictionaryCreator command line tool should be used to create the DictionaryAnnotator dictionaries. The input for the DictionaryCreator is a text file that contains the dictionary entries, one entry per line. The output is the created dictionary as XML file. The usage below shows all possible command line parameters. -encoding -output [-tokenizer -tokenType ] [-separator ] [-lang ]]]> When just using the mandatory settings the input content for the dictionary is tokenized/separated by using the whitespace character. This means that if the line contains a whitespace character as in "Apache UIMA" the dictionary entry is treated as multi word entry where the mutli word consists of the two tokens "Apache" and "UIMA". If the line just contains "DictionaryAnnotator" the dictionary entry in treated as single word entry and has only one token called "DictionaryAnnotator". A sample XML dictionary file is shown below. ADD DICTIONARY OUTPUT TYPE HERE DictionaryAnnotator Apache UIMA ]]> In addition to the default creation, the DictionaryCreator can be configured with additional parameters. These are: tokenization <TokenizerPearFile> - To use an Apache UIMA tokenizer annotator PEAR that tokenize the input instead of the simple whitespace tokenization that is done by default. When using a special tokenizer the tokenType <tokenType> parameter must also be set. tokenType <tokenType> - Specifies the token type to get the tokens created by the tokenizer. These tokens are used to create the single or multi word dictionary entries for each line of the input. lang <languageCode> - In some cases it is necessary to specify the language for the created dictionary and for the used tokenization. separator <separatorChar> - If no special tokenizer is used for the tokenization of the input dictionary content, by default the whitespace character is used to tokenizer the content. If another separator character should be used instead, it can be specified by using this parameter. After the dictionary is created, it is necessary to update the created dictionary with some additional meta data. The most important one that must be set is the typeName entry. The typeName entry after the creation looks like <typeName> ADD DICTIONARY OUTPUT TYPE HERE</typeName> and must be updated with the UIMA type that should be used if the DictionaryAnnotator creates an annotation for a word based on this dictionary. For more details about the other meta data entries of the dictionary, please refer to .
Dictionary XML Format The Dictionary XML Format is shown with an example below: en org.apache.uima.DictionaryEntry DictionaryAnnotator Apache UIMA ]]> The <dictionaryMetaData> element specifies how the dictionary is used inside the DictionaryAnnoator. The attributes for the element are: caseNormalization - If this parameter is set to true all dictionary entries are treated case normalized. This means that the dictionary matching is not case sensitive. multiWordSeparator - Specifies the multi word separator character that is used in the XML document for multi words. If the DictionaryCreator creates the dictionary files this is by default the "|" character. multiWordEntries - If this parameter is true the dictionary is treated as multi word dictionary. This means that dictionary entries that are separated by the multiWordSpearator are treated as multi word entries. So for example "Apache|UIMA" is treated as multi word entry and the document text must have after the tokenization two tokens "Apache" and "UIMA" to match the dictionary entry. The <languageId> element specifies the language of the current dictionary if all entries have the same language. This settings is not mandatory and can also be omitted. content. The <typeName> element specifies the output type that is used if an annotation is created for a dictionary entry. The <key> elements specifies the dictionary entries. For each entry an own <key> element is used.
Annotator Configuration To use the DictionaryAnnotator it must be configured with at least one dictionary and with the input match type settings - the tokens - that the annotator will use to do the lookup. In addition to these mandatory settings it is possible to define input match type filters to filter the used annotations before they are used for the lookup. The following paragraphs will explain in detail how to configuration is done.
Dictionary Files To specify the annotator dictionary files there is a configuration parameter definition in the annotator descriptor that looks like: DictionaryFiles list of dictionary files to configure the annotator String true true ]]> This parameter is mandatory and multi valued. This means that the setting must be available and one or more dictionary files can be specified with the same parameter. A sample setting for two dictionary files can look like: DictionaryFiles dictionary1.xml http://localhost/mydict/dictionary.xml ]]> The specified dictionary file names must be available in the classpath or in the UIMA datapath. Additionally it is possible to specify an HTTP URL to load the dictionary file.
Input Match Type The InputMatchType parameter defines the annotation type that is used for the dictionary lookup. All annotations of type InputMatchType are used for the lookup in the dictionary. In most cases this type should be the output type of the tokenizer annotator component. If the dictionary was created by using the DictionaryCreator configured with a tokenizer, it is recommended that the same tokenizer is also used in the annotator flow. Beyond that the InputMatchType should be the same as the tokenType used for the dictionary creation. The parameter that defines the input match type is: InputMatchType String false true ]]> The parameter setting is mandatory and single valued. A sample setting for the InputMatchType looks like: InputMatchType org.apache.uima.TokenAnnotation ]]>
Input Match Type Feature Path In some special cases it may be necessary to use a feature value or a featurePath value of the InputMatchType for the dictionary lookup. In that case not the covered text of the InputMatchType annotation is used for the lookup but the specified feature or featurePath value. To define a feature or featurePath that is used for the lookup the following parameter must be used: InputMatchFeaturePath String false false ]]> The parameter is not mandatory, it is just an optional addition. But if the parameter is used, the defined feature or featurePath must be valid for the InputMatchType. A sample configuration with a feature called baseFormToken is shown below: InputMatchFeaturePath baseFormToken ]]> If a featurePath is specified the path separator for the feature is "/".
Input Match Type Filters If not all InputMatchType annotations should be used for the dictionary lookup it is possible to define filters to filter the used annotations. To define a filter three settings are necessary. The first one is the InputMatchFilterFeaturePath that specifies the feature or featurePath that should be used for the filtering. The second parameter is the FilterConditionOperator that defines the filter condition operator. The last parameter is FilterConditionValue that defines the condition value for the comparison. The parameter definition for all three parameters looks like: InputMatchFilterFeaturePath String false false FilterConditionOperator String false false FilterConditionValue String false false ]]> For the InputMatchFilterFeaturePath the same rules applies as for the InputMatchFeaturePath. The specified feature or featurePath must be valid for the InputMatchType definition. If a featurePath is specified, the features are separated by "/". The value for the FilterConditionOperator can be one of: NULL - InputMatchFilterFeaturePath value must be NULL. No FilterConditionValue must be specified. NOT_NULL - InputMatchFilterFeaturePath value must be set and is not NULL. No FilterConditionValue must be specified. EQUALS - InputMatchFilterFeaturePath value must be equal to the FilterConditionValue. NOT_EQUALS - InputMatchFilterFeaturePath value is not equal to the FilterConditionValue LESS - InputMatchFilterFeaturePath value is less than the FilterConditionValue LESS_EQ - InputMatchFilterFeaturePath value is less or equal to the FilterConditionValue GREATER - InputMatchFilterFeaturePath value is greater than the FilterConditionValue GREATER_EQ - InputMatchFilterFeaturePath value is greater or equal to the FilterConditionValue A sample configuration for a filter that only use noun tokens for the dictionary lookup is shown below: InputMatchFilterFeaturePath partOfSpeach FilterConditionOperator EQUALS FilterConditionValue noun ]]>
uima-addons-2.3.1/DictionaryAnnotator/src/docbook/images/0000755000175000017500000000000011625126454023267 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/desc/0000755000175000017500000000000011625126456020533 5ustar drazzibdrazzibuima-addons-2.3.1/DictionaryAnnotator/desc/AggregateAE.xml0000644000175000017500000000430211625126456023350 0ustar drazzibdrazzib org.apache.uima.java false aggregate 1.0 WhitespaceTokenizer DictionaryAnnotator true true false uima-addons-2.3.1/DictionaryAnnotator/desc/DictionaryAnnotator.xml0000644000175000017500000001111411625126456025246 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.dict_annot.impl.DictionaryAnnotator DictionaryAnnotator DictionaryFiles list of dictionary files to configure the annotator String true true InputMatchType String false true InputMatchFeaturePath String false false InputMatchFilterFeaturePath String false false FilterConditionOperator String false false FilterConditionValue String false false DictionaryFiles dictionary.xml InputMatchType org.apache.uima.TokenAnnotation org.apache.uima.DictionaryEntry uima.tcas.Annotation org.apache.uima.TokenAnnotation Single token annotation uima.tcas.Annotation tokenType token type uima.cas.String true true false uima-addons-2.3.1/README.txt0000644000175000017500000000251711625126554015324 0ustar drazzibdrazzibCrypto Notice ------------- This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See for more information. The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code. The following provides more details on the included cryptographic software: This distribution includes portions of Apache Tika, which, in turn, is classified as being controlled under ECCN 5D002.uima-addons-2.3.1/NOTICE0000644000175000017500000000027311625126554014527 0ustar drazzibdrazzib UIMA-Addons: uima-addons Copyright 2006-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). uima-addons-2.3.1/RELEASE_NOTES.html0000644000175000017500000001146011625126554016541 0ustar drazzibdrazzib Apache UIMA Addons v2.3.1 Release Notes

Apache UIMA Addons v2.3.1 Release Notes

Contents

1. What is the UIMA-Addons package?
2. Major Changes in this Release
3. How to Get Involved
4. How to Report Issues
5. List of JIRA Issues Fixed in this Release

1. What is the UIMA-Addons package?

The Apache UIMA addons package is a collection of additional components for the base UIMA release. The add-on package contains annotator components developed for Apache UIMA. The add-on package fits the Apache UIMA directory structure and adds a directory called "addons lib" that contains the following annotator components:

  • DictionaryAnnotator
  • RegularExpressionAnnotator
  • Tagger
  • WhitespaceTokenizer
  • Bean Scripting Framework (BSF) BSFAnnotator
  • ConceptMapper
  • ConfigurableFeatureExtractor
  • Lucas
  • OpenCalaisAnnotator
  • SnowballAnnotator
  • TikaAnnotator
  • AlchemyAPIAnnotator
  • Solrcas
Additionally the package contains some components to package annotators and for accessing annotators as simple REST service. These are:
  • PearPackagingAntTask
  • SimpleServer
There is an addon to the base UIMA:
  • FsVariables

Each component has a separate LICENSE and NOTICE files; some also have Readme and other documentation (in docs/). Documentation is also available on the UIMA website, in the Sandbox area.

2. Major Changes in this Release

The following components were added in this release:

  • AlchemyAPI Annotator - is an annotator wrapping alchemyapi.com services providing named entity extraction, keyword/concept tagging, etc.
  • Solrcas - is a CAS Consumer component that can store CAS objects into an Apache Solr instance
The following are the main changes to existing components:
  • TikaAnnotator - now using Apache Tika 0.7 instead of 0.4, language extracted by Tika goes inside CAS documentLanguage
  • Lucas - now using Apache Lucene 2.9.3
  • Tagger - added an AnalysisEngine to train HMM Tagger models
  • OpenCalaisAnnotator - fixed negative begin/end values bug
  • Generally fixed URI/space handling

3. How to Get Involved

The Apache UIMA project really needs and appreciates any contributions, including documentation help, source code and feedback. If you are interested in contributing, please visit http://uima.apache.org/get-involved.html.

4. How to Report Issues

The Apache UIMA project uses JIRA for issue tracking. Please report any issues you find at http://issues.apache.org/jira/browse/uima

5. List of JIRA Issues Fixed in this Release

Click issuesFixed/jira-report.hmtl or Jira for the list of issues fixed in this release. uima-addons-2.3.1/uima-addons-parent/0000755000175000017500000000000011625126604017305 5ustar drazzibdrazzibuima-addons-2.3.1/uima-addons-parent/pom.xml0000644000175000017500000006073211625126452020633 0ustar drazzibdrazzib 4.0.0 org.apache.uima parent-pom 2 org.apache.uima uima-addons-parent pom 2.3.1 UIMA-AddOns: ${project.artifactId} The common parent pom for uima-addons ${uimaWebsiteUrl} Jira https://issues.apache.org/jira/browse/UIMA?projectId=12310570 scm:svn:http://svn.apache.org/repos/asf/uima/addons/tags/uima-addons-2.3.1-rc5/uima-addons-parent scm:svn:https://svn.apache.org/repos/asf/uima/addons/tags/uima-addons-2.3.1-rc5/uima-addons-parent http://svn.apache.org/viewvc/uima/sandbox/addons/uima-addons-parent/tags/uima-addons-2.3.1-rc5/uima-addons-parent eclipsePlugins Eclipse components default http://repo1.maven.org/eclipse never fail false central Maven Repository Switchboard default http://repo1.maven.org/maven2 true fail never false apache.snapshots.plugins Apache Snapshot Repository - Maven plugins http://repository.apache.org/snapshots default false true fail never addons ${project.artifactId} 2.3.1 org.apache.maven.plugins maven-javadoc-plugin 2.7 5 UTF-8 false true api_1.5 http://download.oracle.com/javase/1.5.0/docs/api/ generated X ordered X modifiable X model X pre X org.apache.maven.plugins maven-release-plugin forked-path https://svn.apache.org/repos/asf/uima/sandbox/tags/ single project common and binary build marker-file-identifying-single-project org.apache.maven.plugins maven-dependency-plugin copy dependencies to base-bin/lib copy-dependencies process-resources ${project.build.directory}/base-bin/lib runtime true org.apache.maven.plugins maven-resources-plugin copy standard dirs and files to base-bin copy-resources process-resources ${project.build.directory}/base-bin . desc/** conf/** data/** doc/** docs/** resources/** bin/** LICENSE* NOTICE* README* readme* RELEASE_NOTES* ReleaseNotes* issuesFixed/** src/main/readme copy standard target jar to base-bin/lib copy-resources pre-integration-test ${project.build.directory}/base-bin/lib ${project.build.directory} *.jar *-sources.jar *-osgi.jar copy generated docbook artifacts to base-bin/doc folder copy-resources pre-integration-test ${project.build.directory}/base-bin/doc ${project.build.directory}/site/d org.apache.maven.plugins maven-assembly-plugin binary-release true uima-single-project-bin2 2 build OSGi bundle for annotator marker-file-identifying-osgi-project-ignored-for-2.3.1 maven-resources-plugin Copy base-bin to osgi copy-resources integration-test ${project.build.directory}/osgi ${project.build.directory}/base-bin ** doc/** docs/** **/*-javadoc.jar issuesFixed/** maven-dependency-plugin Copy uima dependencies to osgi/lib copy process-resources ${project.build.directory}/osgi/lib org.apache.uima uimaj-core ${uimaDependencyVersion} org.apache.felix maven-bundle-plugin 2.1.0 uima-bundle integration-test manifest ${project.build.directory}/osgi ${project.build.directory}/osgi/META-INF org.apache.log.*;resolution:=optional *;scope=compile; lib J2SE-1.5 true .,lib/${project.build.finalName}.jar,{maven-dependencies},lib/uimaj-core-${uimaDependencyVersion}.jar {maven-resources}, {maven-dependencies}, lib/uimaj-core-${uimaDependencyVersion}.jar=${settings.localRepository}/org/apache/uima/uimaj-core/${uimaDependencyVersion}/uimaj-core-${uimaDependencyVersion}.jar ${parsedVersion.osgiVersion} ${project.groupId}.${project.artifactId};singleton:=true maven-jar-plugin Create OSGi Jar jar integration-test ${project.groupId}.${project.artifactId}_${parsedVersion.osgiVersion} osgi ${project.build.directory}/osgi ${project.build.directory}/osgi/META-INF/MANIFEST.MF build standard PEAR marker-file-identifying-standard-pear maven-dependency-plugin copy dependencies to lib org.apache.maven.plugins maven-resources-plugin copy generated docbook artifacts to pearPackaging/doc folder copy standard sandbox target jar to pearPackaging/lib Copy Pear Lic/Not/Readme/Relnotes Copy base-bin to pearPackaging copy-resources integration-test ${project.build.directory}/pearPackaging ${project.build.directory}/base-bin ** **/*-javadoc.jar org.apache.uima PearPackagingMavenPlugin 2.3.1 true build uima annnotator Pear package integration-test $main_root/resources ${project.artifactId} ${pearMainDescriptor} org.codehaus.mojo build-helper-maven-plugin attach-pear-artifact post-integration-test attach-artifact ${project.build.directory}/${project.artifactId}.pear pear uima-addons-2.3.1/DEPENDENCIES0000644000175000017500000000042511625130116015360 0ustar drazzibdrazzib// ------------------------------------------------------------------ // Transitive dependencies of this project determined from the // maven pom organized by organization. // ------------------------------------------------------------------ UIMA Aggregate: uima-addons uima-addons-2.3.1/SimpleServer/0000755000175000017500000000000011625127524016237 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/pom.xml0000644000175000017500000001424311625126450017555 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent SimpleServer 2.3.1 UIMA Addon: ${project.artifactId} A Java Servlet that runs a UIMA pipeline and makes the results available via a REST interface ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 simpleServerUserGuide org.apache.uima uimaj-core ${uimaDependencyVersion} org.apache.uima uimaj-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test org.apache.xmlbeans xmlbeans 2.4.0 stax stax-api org.apache.geronimo.specs geronimo-stax-api_1.0_spec 1.0.1 junit junit 4.8.2 test javax.servlet servlet-api 2.5 provided org.mortbay.jetty jetty 6.1.8 provided org.apache.httpcomponents httpclient 4.0-alpha2 provided uima-simple-server org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/test/resources/expected/*.xml src/test/resources/test.txt org.codehaus.mojo xmlbeans-maven-plugin 2.3.3 xmlbeans src/main/resources uima-addons-2.3.1/SimpleServer/LICENSE.txt0000644000175000017500000002644611625126450020073 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/SimpleServer/marker-file-identifying-single-project0000644000175000017500000000000011625126450025575 0ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/build_config_xml.xml0000644000175000017500000000454111625126450022266 0ustar drazzibdrazzib uima-addons-2.3.1/SimpleServer/NOTICE.txt0000644000175000017500000000127511625126450017763 0ustar drazzibdrazzibApache UIMA sandbox -- SimpleServer component Copyright 2008-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). This software contains parts of Apache XMLBeans (http://xmlbeans.apache.org/), which contains the following software: - W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web Consortium (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) - Piccolo XML Parser for Java from http://piccolo.sourceforge.net/, Copyright 2002 Yuval Oren under the terms of the Apache Software License 2.0uima-addons-2.3.1/SimpleServer/src/0000755000175000017500000000000011625126446017030 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/0000755000175000017500000000000011625126450017747 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/resources/0000755000175000017500000000000011625126450021761 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/resources/samples/0000755000175000017500000000000011625126450023425 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/resources/samples/web.xml0000644000175000017500000000411411625126450024724 0ustar drazzibdrazzib UIMA REST service UIMA REST service for simple application access of UIMA analysis WhitespaceTokenizer org.apache.uima.simpleserver.servlet.SimpleServerServlet PearPath resources/WhitespaceTokenizer.pear PearInstallPath ./ ResultSpecFile resources/WhitespaceTokenizer.xml WhitespaceTokenizer /ws-tokenizer uima-addons-2.3.1/SimpleServer/src/main/resources/samples/WhitespaceTokenizer.xml0000644000175000017500000000252611625126450030143 0ustar drazzibdrazzib Recognize tokens and sentences uima-addons-2.3.1/SimpleServer/src/main/resources/SimpleServerConfig.xsd0000644000175000017500000001324011625126450026247 0ustar drazzibdrazzib uima-addons-2.3.1/SimpleServer/src/main/resources/org/0000755000175000017500000000000011625126450022550 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/resources/org/apache/0000755000175000017500000000000011625126450023771 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/resources/org/apache/uima/0000755000175000017500000000000011625126450024724 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/resources/org/apache/uima/simpleserver/0000755000175000017500000000000011625126450027444 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/resources/org/apache/uima/simpleserver/exception.properties0000644000175000017500000000313511625126450033562 0ustar drazzibdrazzib###################################################################### # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ###################################################################### incorrect_path_syntax = Incorrect path syntax (too many slashes?): {0} incorrect_feature_syntax = Not a valid feature name: "{0}"; in path: {1} value_must_not_be_set = Invalid filter syntax; no value may be set for operator "{0}"; value = "{1}" value_must_be_set = Invalid filter syntax; value attribute must be set for operator "{0}" type_does_not_exist = No such type in type system: {0} path_never_valid = The feature path "{0}" will never have a result for type "{1}" validation_warning = Warning: there were errors/warnings validating this server spec: {0} service_state_exception = Service not initialized uima_initialization_error = Error initializing service uima-addons-2.3.1/SimpleServer/src/main/java/0000755000175000017500000000000011625126446020675 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/java/org/0000755000175000017500000000000011625126446021464 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/0000755000175000017500000000000011625126446022705 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/0000755000175000017500000000000011625126446023640 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/0000755000175000017500000000000011625126450026353 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/0000755000175000017500000000000011625126446027720 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/InlineXMLGenerator.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/InlineXMLGenerator.0000644000175000017500000003002011625126446033362 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.output; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.TreeSet; /* * This class contains static methods responsible for creation of inline-xml from the given Result * object. */ public class InlineXMLGenerator { /* * main method of this class - decides, which annotations should be taken, and produces the string * with inline-xml. */ public static String getInlineXML(Result result) { // a list of all positions where some tags begin TreeSet beginPositions = new TreeSet(); // a list of all positions where some tags end TreeSet endPositions = new TreeSet(); // a list of all positions where empty tags begin and end TreeSet emptyPositions = new TreeSet(); // this will be used to merge the three lists above TreeSet allPositions = new TreeSet(); // maps a position number to the collection of tags which // begin at this position. HashMap> beginTags = new HashMap>(result .getResultEntries().size()); // maps a position number to the collection of tags which // end at this position. HashMap> endTags = new HashMap>(result .getResultEntries().size()); // maps a position number to the collection of empty tags which // begin and end at this position. HashMap> emptyTags = new HashMap>(); // first of all, we decide which annotions to take // this loop iterates over all available annotations loop: for (ResultEntry entry : result.getResultEntries()) { Integer begin; Integer end; try { begin = new Integer(entry.getBegin()); end = new Integer(entry.getEnd()); } catch (NumberFormatException e) { // we don't take annotations without features "begin" and "end" continue loop; } // a zero-length-annotation can not cause any conflicts and should // always be taken if (begin.equals(end)) { emptyPositions.add(begin); List emptyTagList = emptyTags.get(end); if (emptyTagList == null) { emptyTagList = new LinkedList(); emptyTags.put(end, emptyTagList); } // and add the entry to both tag lists emptyTagList.add(entry); continue loop; } // if an anotation is not zero-length, it can cause conflicts, // so we should decide, whether we take it or not // now let's analyse the candidates for conflicts Set conflictPoints; // 1. which begin in the body of current annotation conflictPoints = beginPositions.subSet(begin + 1, end); for (int i : conflictPoints) { for (ResultEntry e : beginTags.get(i)) { if (isConflict(e, begin, end)) { continue loop; } } } // 2. which end in the body of current annotation conflictPoints = endPositions.subSet(begin + 1, end); for (int i : conflictPoints) { for (ResultEntry e : endTags.get(i)) { if (isConflict(e, begin, end)) { continue loop; } } } // now, if no conflicts found, we can // add the entry to our results beginPositions.add(begin); endPositions.add(end); // now create the tag lists, if necessary // and add the tag to the lists List beginTagList = beginTags.get(begin); if (beginTagList == null) { beginTagList = new LinkedList(); beginTags.put(begin, beginTagList); } List endTagList = endTags.get(end); if (endTagList == null) { endTagList = new LinkedList(); endTags.put(end, endTagList); } // and add the entry to both tag lists beginTagList.add(entry); endTagList.add(entry); } // end of loop over all entries (annotations) // now we have all the entries in our collections and we can // begin with the output // first, we make a mixed set of all used positions, both of end tags // and // begin tags allPositions.addAll(beginPositions); allPositions.addAll(endPositions); allPositions.addAll(emptyPositions); allPositions.add(0); StringBuffer sourceText = new StringBuffer(result.getText()); allPositions.add(sourceText.length()); // now, construct the output StringBuffer resultSB = new StringBuffer("\n"); int begin = 0; for (int end : allPositions) { // print closing tags List endingTags = endTags.get(begin); // BEGIN!!! it's not a typing error! if (endingTags != null) { printEndTags(endingTags, resultSB); } // print empty tags List empTags = emptyTags.get(begin); if (empTags != null) { printEmptyTags(empTags, resultSB); } // print opening tags List beginningTags = beginTags.get(begin); if (beginningTags != null) { printBeginTags(beginningTags, resultSB); } // print content resultSB.append(xmlEscape(sourceText.substring(begin, end))); // proceed to next step begin = end; } // printout tags that may be at the end List endingTags = endTags.get(begin); // BEGIN!!! it's if (endingTags != null) { printEndTags(endingTags, resultSB); } // print empty tags List empTags = emptyTags.get(begin); if (empTags != null) { printEmptyTags(empTags, resultSB); } List beginningTags = beginTags.get(begin); if (beginningTags != null) { printBeginTags(beginningTags, resultSB); } resultSB.append("\n"); return resultSB.toString(); } /* * sorts the beginning tags by length descending and adds them to the given string buffer */ private static void printBeginTags(List list, StringBuffer sb) { while (!list.isEmpty()) { ResultEntry selectedEntry = null; int maxlen = -1; for (ResultEntry e : list) { // ONLY > , will not work properly with >= ! if (len(e) > maxlen) { maxlen = len(e); selectedEntry = e; } } sb.append(constructBeginTag(selectedEntry)); list.remove(selectedEntry); } } /* * sorts the ending tags by length ascending and adds them to the given string buffer */ private static void printEndTags(List list, StringBuffer sb) { while (!list.isEmpty()) { ResultEntry selectedEntry = null; int minlen = Integer.MAX_VALUE; for (ResultEntry e : list) { // ONLY <= , will not work properly with < ! if (len(e) <= minlen) { minlen = len(e); selectedEntry = e; } } sb.append(constructEndTag(selectedEntry)); list.remove(selectedEntry); } } /* * adds the given empty tags to the given string buffer */ private static void printEmptyTags(List list, StringBuffer sb) { for (ResultEntry entry : list) { sb.append(constructEmptyTag(entry)); } list.clear(); } /* * gets the length of an annotation */ private static int len(ResultEntry entry) { return entry.getEnd() - entry.getBegin() + 1; } /* * constructs an opening XML tag specified by the given ResultEntry */ private static String constructBeginTag(ResultEntry entry) { StringBuffer result = new StringBuffer(""); result.append("<"); result.append(entry.getEntryName()); for (String attribute : entry.getAttributeNames()) { // TODO covered text - DONE // exclude the next "if" // if (!attribute.equals("coveredText")) { result.append(" "); result.append(attribute); result.append("=\""); result.append(xmlEscape(entry.getAttriuteValue(attribute))); result.append("\""); // } } result.append(">"); return result.toString(); } /* * constructs a closing XML tag specified by the given ResultEntry */ private static String constructEndTag(ResultEntry entry) { return ""; } /* * constructs an empty XML tag specified by the given ResultEntry */ private static String constructEmptyTag(ResultEntry entry) { StringBuffer result = new StringBuffer(""); result.append("<"); result.append(entry.getEntryName()); for (String attribute : entry.getAttributeNames()) { if (!attribute.equals("coveredText")) { result.append(" "); result.append(attribute); result.append("=\""); result.append(xmlEscape(entry.getAttriuteValue(attribute))); result.append("\""); } } result.append("/>"); return result.toString(); } /* * used to escape XML-specific characters */ private static StringBuffer xmlEscape(String s) { StringBuffer sb = new StringBuffer(); normalize(s, sb, false); return sb; } /* * escapes the XML characters in the given text and adds the result to the given string buffer */ public static void normalize(String aStr, StringBuffer aResultBuf, boolean aNewlinesToSpaces) { if (aStr != null) { int len = aStr.length(); for (int i = 0; i < len; i++) { char c = aStr.charAt(i); switch (c) { case '<': aResultBuf.append("<"); break; case '>': aResultBuf.append(">"); break; case '&': aResultBuf.append("&"); break; case '"': aResultBuf.append("""); break; case '\'': aResultBuf.append("'"); break; case '\n': aResultBuf.append(aNewlinesToSpaces ? " " : "\n"); break; case '\r': aResultBuf.append(aNewlinesToSpaces ? " " : "\r"); break; default: aResultBuf.append(c); } } } } /* * determines whether the given annotation has a conflict with another annotation with specified * begin and end positions. */ private static boolean isConflict(ResultEntry entry, int begin, int end) { return isConflict(entry.getBegin(), entry.getEnd(), begin, end); } /* * determines whether the anotations with begin positions b1 and b2 and end positions e1 and e2 * cross each other, producing a conflict in the xml output */ private static boolean isConflict(int b1, int e1, int b2, int e2) { if (b1 == b2) { return false; } if (e1 == e2) { return false; } if (b1 > b2) { return isConflict(b2, e2, b1, e1); } if ((e1 > b2) && (e1 < e2)) { return true; } return false; } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/ResultEntry.java0000644000175000017500000000313111625126446033061 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.output; import java.util.List; /* * represents one annotation taken for output, i.e. for example * one tag of the XML output */ public interface ResultEntry { /* * represents the name of the output tag for this annotation */ public String getEntryName(); /* * gives an attribute value for the given attribute name */ public String getAttriuteValue(String string); /* * a list of the attributes taken for output for this annotation, i.e. * attributes of the XML tag (in case we produce XML output) */ public List getAttributeNames(); /* * text covered by the annotation */ public String getCoveredText(); public int getBegin(); public int getEnd(); }uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/Result.java0000644000175000017500000000226011625126446032041 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.output; import java.util.List; /* * Represent the result of analysis. The result is the input text plus a list of metadata. */ public interface Result { /* * */ public List getResultEntries(); /* * the whole text passed to the analysis engine */ public String getText(); }uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/impl/0000755000175000017500000000000011625126446030661 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/impl/ResultImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/impl/ResultImpl.jav0000644000175000017500000000341411625126446033465 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.output.impl; import java.util.ArrayList; import java.util.List; import org.apache.uima.simpleserver.output.Result; import org.apache.uima.simpleserver.output.ResultEntry; /* * Implementation of the Result interface. * No sophisticated logic, just a bean-like class. */ public class ResultImpl implements Result { private List resultEntries = null; private String text = null; public ResultImpl(List resultEntries, String text) { super(); this.resultEntries = resultEntries; this.text = text; } /* * (non-Javadoc) * * @see org.apache.uima.uimaserver.output.Result#getResultEntries() */ public List getResultEntries() { return this.resultEntries; } public ResultImpl() { super(); this.resultEntries = new ArrayList(); } public String getText() { return this.text; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/impl/ResultEntryImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/impl/ResultEntryImp0000644000175000017500000000577011625126446033563 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.output.impl; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.uima.simpleserver.output.ResultEntry; /* * Default implementation of the ResultEntry interface. * No sophisticated logic, just a bean-like class. */ public class ResultEntryImpl implements ResultEntry { private final String entryName; private final int begin; private final int end; private List attributeNames; private Map attributes; private String coveredText = null; public ResultEntryImpl(String entryName, int begin, int end) { super(); this.entryName = entryName; this.begin = begin; this.end = end; this.attributes = new HashMap(); this.attributeNames = new LinkedList(); } public String getCoveredText() { return this.coveredText; } public void setCoveredText(String coveredText) { this.coveredText = coveredText; } /* * (non-Javadoc) * * @see org.apache.uima.uimaserver.output.ResultEntry#getEntryName() */ public String getEntryName() { return this.entryName; } /* * (non-Javadoc) * * @see org.apache.uima.uimaserver.output.ResultEntry#getAttriuteValue(java.lang.String) */ public String getAttriuteValue(String string) { return this.attributes.get(string); } public void setAttributeValue(String attributeName, String attributeValue) { if (!this.attributes.containsKey(attributeName)) { this.attributeNames.add(attributeName); } this.attributes.put(attributeName, attributeValue); } /* * (non-Javadoc) * * @see org.apache.uima.uimaserver.output.ResultEntry#getAttributeNames() */ public List getAttributeNames() { return this.attributeNames; } /* (non-Javadoc) * @see org.apache.uima.simpleserver.output.ResultEntry#getBegin() */ public int getBegin() { return this.begin; } /* (non-Javadoc) * @see org.apache.uima.simpleserver.output.ResultEntry#getEnd() */ public int getEnd() { return this.end; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/ResultConverter.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/output/ResultConverter.jav0000644000175000017500000000767311625126446033605 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.output; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; /* * This class contains static methods responsible for the creation * of particular view of the analysis result */ public class ResultConverter { /* * Returns a string containing an XML document with analysis results, with tag * names and attribute names as specified by the current Result Specification * * * Straight-forward method, no other methods are used. */ public static String getXMLString(Result result) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); DOMImplementation impl = builder.getDOMImplementation(); Document document = impl.createDocument(null, null, null); Element root = document.createElement("result"); document.appendChild(root); for (ResultEntry resultEntry : result.getResultEntries()) { Element element = document.createElement(resultEntry.getEntryName()); root.appendChild(element); for (String attributeName : resultEntry.getAttributeNames()) { String attributeValue = resultEntry.getAttriuteValue(attributeName); element.setAttribute(attributeName, attributeValue); } // TODO covered text - DONE if (resultEntry.getCoveredText() != null) { Node textNode = document.createTextNode(resultEntry.getCoveredText()); element.appendChild(textNode); } } DOMSource source = new DOMSource(document); TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.STANDALONE, "no"); StringWriter stringWriter = new StringWriter(); StreamResult streamResult = new StreamResult(stringWriter); transformer.transform(source, streamResult); return stringWriter.toString().replace(" standalone=\"no\"", ""); } catch (Throwable t) { throw new RuntimeException("XML output failed", t); } } /* * Delegates the call to the InlineXMLGenerator class, where the inline XML is * constructed from the given Result object */ public static String getInlineXML(Result result) { try { return InlineXMLGenerator.getInlineXML(result); } catch (Throwable t) { throw new RuntimeException("Tagged text output failed", t); } } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/0000755000175000017500000000000011625126450027620 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/Output.java0000644000175000017500000000230311625126450031761 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; import java.util.List; /** * Represents an Output specification, consisting of * a feature path and the corresponding attribute name. * */ public interface Output { public String getAttribute(); public List getFeaturePath(); public String getShortDescription(); public String getLongDescription(); }uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/Condition.java0000644000175000017500000000172111625126450032412 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; public interface Condition { FilterOp getConditionType(); String getValue(); } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/ConfigFactory.java0000644000175000017500000001277411625126450033233 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; import java.util.List; import org.apache.uima.simpleserver.config.impl.AndFilterImpl; import org.apache.uima.simpleserver.config.impl.ConditionImpl; import org.apache.uima.simpleserver.config.impl.OrFilterImpl; import org.apache.uima.simpleserver.config.impl.OutputImpl; import org.apache.uima.simpleserver.config.impl.SimpleFilterImpl; import org.apache.uima.simpleserver.config.impl.ServerSpecImpl; import org.apache.uima.simpleserver.config.impl.TypeMapImpl; /** * Creates config objects. This class is used internally when reading in config files. Similarly, it * may be used to create config objects programmatically. */ public final class ConfigFactory { /** * Create a new server specification. * * @param shortDescription * Short description of service. * @param longDescription * Verbose description of service. * @param doOutputAll * Output all types, regardless of individual type maps. * @return A new service config object. */ public static ServerSpec newServerSpec(String shortDescription, String longDescription, boolean doOutputAll) { return new ServerSpecImpl(shortDescription, longDescription, doOutputAll); } /** * Create a new type map. * * @param typeName * The UIMA type name (input). * @param outputTag * A XML tag name (output). * @param coveredText * Output covered text, yes or no. * @return A new type map object. Can be added to a server spec. */ public static TypeMap newTypeMap(String typeName, Filter filter, String outputTag, boolean coveredText) { return new TypeMapImpl(typeName, filter, outputTag, coveredText, false, null, null); } /** * Create a new type map. * * @param typeName * The UIMA type name (input). * @param outputTag * A XML tag name (output). * @param coveredText * Output covered text, yes or no. * @param shortDescription * Short description of map. * @param longDescription * Verbose description of map. * @return A new type map object. Can be added to a server spec. */ public static TypeMap newTypeMap(String typeName, Filter filter, String outputTag, boolean coveredText, boolean outputAll, String shortDescription, String longDescription) { return new TypeMapImpl(typeName, filter, outputTag, coveredText, outputAll, shortDescription, longDescription); } /** * Create a new output mapping. * * @param path * Feature path whose value will be output. * @param attribute * XML attribute that will contain the output. * @param shortDescription * A short description of the output mapping. * @param longDescription * A verbose description of the output mapping. * @return A new output mapping. Can be added to a type map. */ public static Output newOutput(List path, String attribute, String shortDescription, String longDescription) { return new OutputImpl(path, attribute, shortDescription, longDescription); } /** * Create a new Filter. * * @param featurePath * Feature path whose value the filter operates on. Must not be null. * @param condition * The condition the path's value must satisfy. * @return A new Filter. */ public static SimpleFilter newSimpleFilter(List featurePath, Condition condition) { return new SimpleFilterImpl(featurePath, condition); } /** * Create a new filter conjunction. * * @return A new filter conjunction. */ public static AndFilter newAndFilter() { return new AndFilterImpl(); } /** * Create a new filter disjunction. * * @return A new filter disjunction. */ public static OrFilter newOrFilter() { return new OrFilterImpl(); } /** * Create new Condition. * * @param type * The condition's type (not null, equals etc.). * @param value * Value for equality constraints. * @return A new Condition. */ public static Condition newCondition(FilterOp type, String value) { return new ConditionImpl(type, value); } /** * Create new Condition with null value. * * @param type * The condition's type (not null, etc.). * @return A new Condition. */ public static Condition newCondition(FilterOp type) { return newCondition(type, null); } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/ServerSpec.java0000644000175000017500000000545311625126450032553 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; import java.util.List; import org.apache.uima.cas.TypeSystem; import org.apache.uima.simpleserver.SimpleServerException; /** * Output specification for a simple service. */ public interface ServerSpec { /** * The path separator of feature paths: /. */ public static final char PATH_SEPARATOR = '/'; /** * Check setting to output all types. If this returns true, individual type maps are ignored. * Defaults to false. * @return true iff output of all types is enabled. */ public boolean getOutputAll(); /** * @return A list of type specifications. Each type specification represents output specifications * for a single CAS type. */ public List getTypeSpecs(); /** * Add a type map to an existing spec. * * @param typeMap * The input type map to be added. */ public void addTypeMap(TypeMap typeMap); /** * Get the service's short description. * * @return The short description. */ public String getShortDescription(); /** * Get the service's long description. * * @return The long description. */ public String getLongDescription(); /** * Validate a service spec with respect to a type system. Check that types and feature paths * exist. None of the errors found here need to be considered fatal. A non-existing type simply * means a type spec that will never produce any output. Similarly, an invalid feature path means * a filter that will never match or an output spec that will never produce output. Server-side, * it's probably valid to simply log those errors and carry on. * * @param typeSystem * The type system to validate against. * @return A list of errors/warnings in the form of SimpleServerExceptions. */ public List validate(TypeSystem typeSystem); }uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/Filter.java0000644000175000017500000000213411625126450031710 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; import org.apache.uima.cas.FeatureStructure; /** * */ public interface Filter { public static enum FilterType { SIMPLE, AND, OR } FilterType getFilterType(); boolean match(FeatureStructure fs); } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/TypeMap.java0000644000175000017500000000450611625126450032047 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; import java.util.List; /** * Represents a type map in a service spec. */ public interface TypeMap { /** * Get the filter for this map. * * @return This map's filter; may be null. */ public Filter getFilter(); /** * Get the "output all" switch. If this is set to true, output all simple-valued features of the * given type. Defaults to false. * * @return The "output all" switch. */ public boolean getOutputAll(); /** * Get list of output specs. * * @return This map's output specs. */ public List getOutputs(); /** * Add an output spec. * * @param output */ public void addOutput(Output output); /** * Get the output tag that the type name is mapped to. * * @return This type map's output tag. */ public String getOutputTag(); /** * Get the type name. * * @return This map's type name; objects of this type will be considered for output. */ public String getTypeName(); /** * Get the switch for covered text. * * @return Whether this map outputs the covered text for each annotation. */ public boolean isOutputCoveredText(); /** * @return The short description (one line) of this map; may be null. */ public String getShortDescription(); /** * @return The long description of this map; may be null. */ public String getLongDescription(); }uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/AndFilter.java0000644000175000017500000000205211625126450032332 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; import java.util.List; /** * Conjunction of filters. */ public interface AndFilter extends Filter { void addFilter(Filter filter); List getFilters(); } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/OrFilter.java0000644000175000017500000000211311625126450032206 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; import java.util.List; /** * Disjunction of filters. */ public interface OrFilter extends Filter { /** * @param filter */ void addFilter(Filter filter); List getFilters(); } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/FilterOp.java0000644000175000017500000000275711625126450032222 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; /** * Types of conditions. */ public enum FilterOp { NULL, NOT_NULL, EQUALS, NOT_EQUALS, LESS, LESS_EQ, GREATER, GREATER_EQ; public String toString() { switch (this) { case NULL: { return "null"; } case NOT_NULL: { return "!null"; } case EQUALS: { return "="; } case NOT_EQUALS: { return "!="; } case LESS: { return "<"; } case LESS_EQ: { return "<="; } case GREATER: { return "<"; } case GREATER_EQ: { return "<="; } default: { return null; } } } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/0000755000175000017500000000000011625126450030561 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/FilterImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/FilterImpl.jav0000644000175000017500000000247011625126450033335 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config.impl; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.simpleserver.config.Filter; /** * TODO: Create type commment. */ public abstract class FilterImpl implements Filter { private final FilterType type; public FilterImpl(FilterType type) { super(); this.type = type; } public FilterType getFilterType() { return this.type; } public abstract boolean match(FeatureStructure fs); } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/ServerSpecImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/ServerSpecImpl0000644000175000017500000001206411625126450033412 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config.impl; import java.util.ArrayList; import java.util.List; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.impl.TypeSystemUtils; import org.apache.uima.cas.impl.TypeSystemUtils.PathValid; import org.apache.uima.simpleserver.SimpleServerException; import org.apache.uima.simpleserver.config.AndFilter; import org.apache.uima.simpleserver.config.Filter; import org.apache.uima.simpleserver.config.OrFilter; import org.apache.uima.simpleserver.config.Output; import org.apache.uima.simpleserver.config.ServerSpec; import org.apache.uima.simpleserver.config.SimpleFilter; import org.apache.uima.simpleserver.config.TypeMap; import org.apache.uima.simpleserver.config.Filter.FilterType; /** * Implementation of ServerSpec interface. */ public class ServerSpecImpl implements ServerSpec { private final String shortDescription; private final String longDescription; private final boolean doOutputAll; private final List typeMaps = new ArrayList(); public ServerSpecImpl(String shortDesc, String longDesc, boolean doOutputAll) { super(); this.shortDescription = shortDesc; this.longDescription = longDesc; this.doOutputAll = doOutputAll; } public ServerSpecImpl(String shortDesc, String longDesc) { // Default doOutputAll to false; this(shortDesc, longDesc, false); } public void addTypeMap(TypeMap typeMap) { this.typeMaps.add(typeMap); } public String getLongDescription() { return this.longDescription; } public String getShortDescription() { return this.shortDescription; } public List getTypeSpecs() { return this.typeMaps; } public List validate(TypeSystem typeSystem) { List exc = new ArrayList(); List typeSpecs = this.getTypeSpecs(); for (TypeMap typeMap : typeSpecs) { // Check that the type exists. Type type = typeSystem.getType(typeMap.getTypeName()); if (type == null) { exc.add(new SimpleServerException(SimpleServerException.type_does_not_exist, new Object[] { typeMap.getTypeName() })); continue; } // Now go through the filter and outputs and check each path for validity Filter filter = typeMap.getFilter(); if (filter != null) { checkFilter(filter, type, exc); } checkOutputs(typeMap.getOutputs(), type, exc); } return exc; } private static final void checkOutputs(List outputs, Type type, List exc) { for (Output output : outputs) { List fPath = output.getFeaturePath(); if (TypeSystemUtils.isPathValid(type, fPath) == PathValid.NEVER) { exc.add(new SimpleServerException(SimpleServerException.path_never_valid, new Object[] { fPathToString(fPath), type })); } } } private static final void checkFilter(Filter filter, Type type, List exc) { FilterType filterType = filter.getFilterType(); switch (filterType) { case AND: { checkFilters(((AndFilter) filter).getFilters(), type, exc); break; } case OR: { checkFilters(((OrFilter) filter).getFilters(), type, exc); break; } case SIMPLE: { List fPath = ((SimpleFilter) filter).getFeaturePath(); if (TypeSystemUtils.isPathValid(type, fPath) == PathValid.NEVER) { exc.add(new SimpleServerException(SimpleServerException.path_never_valid, new Object[] { fPathToString(fPath), type })); } break; } } } private static final String fPathToString(List fPath) { StringBuffer buf = new StringBuffer(); buf.append('/'); for (String f : fPath) { buf.append(f); buf.append('/'); } return buf.toString(); } private static final void checkFilters(List filters, Type type, List exc) { for (Filter filter : filters) { checkFilter(filter, type, exc); } } public boolean getOutputAll() { return this.doOutputAll; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/OutputImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/OutputImpl.jav0000644000175000017500000000426711625126446033423 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config.impl; import java.util.Collections; import java.util.List; import org.apache.uima.simpleserver.config.Output; /* * implementation of the OutputSpecification interface. * A bean-like class, no special logic here, except for constructor method. */ public class OutputImpl implements Output { // feature path private final List features; // attribute name private final String attribute; private final String shortDescription; private final String longDescription; @SuppressWarnings("unused") private OutputImpl() { this(null, null, null, null); } public OutputImpl(List features, String attribute) { this(features, attribute, null, null); } public OutputImpl(List features, String attribute, String shortDescription, String longDescription) { this.features = features; this.attribute = attribute; this.shortDescription = shortDescription; this.longDescription = longDescription; } public String getLongDescription() { return this.longDescription; } public String getShortDescription() { return this.shortDescription; } public String getAttribute() { return this.attribute; } public List getFeaturePath() { return Collections.unmodifiableList(this.features); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/OrFilterImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/OrFilterImpl.j0000644000175000017500000000333611625126450033311 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config.impl; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.simpleserver.config.Filter; import org.apache.uima.simpleserver.config.OrFilter; /** * TODO: Create type commment. */ public class OrFilterImpl extends FilterImpl implements OrFilter { private final List filters = new ArrayList(); public OrFilterImpl() { super(Filter.FilterType.OR); } public void addFilter(Filter filter) { this.filters.add(filter); } public List getFilters() { return Collections.unmodifiableList(this.filters); } @Override public boolean match(FeatureStructure fs) { for (Filter filter: this.filters) { if (filter.match(fs)) { return true; } } return false; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/AndFilterImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/AndFilterImpl.0000644000175000017500000000350511625126450033257 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config.impl; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.simpleserver.config.AndFilter; import org.apache.uima.simpleserver.config.Filter; /** * TODO: Create type commment. */ public class AndFilterImpl extends FilterImpl implements AndFilter { private final List filters = new ArrayList(); public AndFilterImpl() { super(Filter.FilterType.AND); } public void addFilter(Filter filter) { this.filters.add(filter); } /* (non-Javadoc) * @see org.apache.uima.simpleserver.config.AndFilter#getFilters() */ public List getFilters() { return Collections.unmodifiableList(this.filters); } @Override public boolean match(FeatureStructure fs) { for (Filter filter: this.filters) { if (!filter.match(fs)) { return false; } } return true; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/ConditionImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/ConditionImpl.0000644000175000017500000000315411625126450033335 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config.impl; import org.apache.uima.simpleserver.config.Condition; import org.apache.uima.simpleserver.config.FilterOp; /** * Implementation of Condition interface. */ public class ConditionImpl implements Condition { private final FilterOp type; private final String value; public ConditionImpl(FilterOp type, String value) { super(); this.type = type; this.value = value; } /* (non-Javadoc) * @see org.apache.uima.simpleserver.config.Condition#getConditionType() */ public FilterOp getConditionType() { return this.type; } /* (non-Javadoc) * @see org.apache.uima.simpleserver.config.Condition#getValue() */ public String getValue() { return this.value; } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/SimpleFilterImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/SimpleFilterIm0000644000175000017500000002364611625126446033411 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config.impl; import java.util.Collections; import java.util.List; import java.util.Stack; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.LowLevelCAS; import org.apache.uima.cas.impl.TypeSystemUtils; import org.apache.uima.simpleserver.config.Condition; import org.apache.uima.simpleserver.config.Filter; import org.apache.uima.simpleserver.config.FilterOp; import org.apache.uima.simpleserver.config.SimpleFilter; /** * Implementation of Filter interface. */ public class SimpleFilterImpl extends FilterImpl implements SimpleFilter { private final List path; private final Condition condition; @SuppressWarnings("unused") private SimpleFilterImpl() { this(null, null); } public SimpleFilterImpl(List path, Condition condition) { super(Filter.FilterType.SIMPLE); this.path = path; this.condition = condition; } public Condition getCondition() { return this.condition; } public List getFeaturePath() { return Collections.unmodifiableList(this.path); } @Override public boolean match(FeatureStructure fs) { Stack stack = list2Stack(this.path); return match(stack, fs); } private final boolean match(Stack stack, FeatureStructure fs) { if (stack.isEmpty()) { // Can only be FS-type conditions switch (this.getCondition().getConditionType()) { case NULL: { return (fs == null); } case NOT_NULL: { return (fs != null); } default: { // All other cases must be false return false; } } } if (fs == null) { return false; } // If we get here, we know the stack is not empty, so get the next feature. String fName = stack.pop(); Feature f = fs.getType().getFeatureByBaseName(fName); // If the feature is not defined for the type of the input FS, return false. if (f == null) { return false; } Type range = f.getRange(); final int typeClass = TypeSystemUtils.classifyType(range); // If the next feature value is a FS, continue recursively. if (typeClass == LowLevelCAS.TYPE_CLASS_FS) { // If the type value is a regular FS, carry on recursively. fs = fs.getFeatureValue(f); return match(stack, fs); } // If we get here, the next feature value is not a FS, so the stack should be empty. if (!stack.isEmpty()) { return false; } // So now we know we're at the end of the path, the next feature value is what we evaluate // against. switch (typeClass) { case LowLevelCAS.TYPE_CLASS_BOOLEAN: { return checkBoolean(fs.getBooleanValue(f)); } case LowLevelCAS.TYPE_CLASS_BYTE: { return checkByte(fs.getByteValue(f)); } case LowLevelCAS.TYPE_CLASS_DOUBLE: { return checkDouble(fs.getDoubleValue(f)); } case LowLevelCAS.TYPE_CLASS_FLOAT: { return checkFloat(fs.getFloatValue(f)); } case LowLevelCAS.TYPE_CLASS_INT: { return checkInt(fs.getIntValue(f)); } case LowLevelCAS.TYPE_CLASS_LONG: { return checkLong(fs.getLongValue(f)); } case LowLevelCAS.TYPE_CLASS_SHORT: { return checkShort(fs.getShortValue(f)); } case LowLevelCAS.TYPE_CLASS_STRING: { return checkString(fs.getStringValue(f)); } default: { // Catch-all: any types we don't handle (arrays) will automatically return false. return false; } } } private final boolean checkByte(byte in) { String value = this.getCondition().getValue(); byte v; try { v = Byte.parseByte(value); } catch (NumberFormatException e) { return false; } switch (this.getCondition().getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } private final boolean checkDouble(double in) { String value = this.getCondition().getValue(); double v; try { v = Double.parseDouble(value); } catch (NumberFormatException e) { return false; } switch (this.getCondition().getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } private final boolean checkFloat(float in) { String value = this.getCondition().getValue(); float v; try { v = Float.parseFloat(value); } catch (NumberFormatException e) { return false; } switch (this.getCondition().getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } private final boolean checkLong(long in) { String value = this.getCondition().getValue(); long v; try { v = Long.parseLong(value); } catch (NumberFormatException e) { return false; } switch (this.getCondition().getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } private final boolean checkInt(int in) { String value = this.getCondition().getValue(); int v; try { v = Integer.parseInt(value); } catch (NumberFormatException e) { return false; } switch (this.getCondition().getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } private final boolean checkShort(short in) { String value = this.getCondition().getValue(); short v; try { v = Short.parseShort(value); } catch (NumberFormatException e) { return false; } switch (this.getCondition().getConditionType()) { case EQUALS: { return (in == v); } case NOT_EQUALS: { return (in != v); } case GREATER: { return (in > v); } case GREATER_EQ: { return (in >= v); } case LESS: { return (in < v); } case LESS_EQ: { return (in <= v); } default: { return false; } } } private final boolean checkString(String s) { String value = this.getCondition().getValue(); FilterOp op = this.getCondition().getConditionType(); // First check for conditions that makes sense if input value is null. switch (op) { case NULL: { return (s == null); } case NOT_NULL: { return (s != null); } } // If we get here and s is null, we fail. if (s == null) { return false; } // Now neither the value nor s are null, so we can compare them. final int comp = s.compareTo(value); switch (op) { case EQUALS: { return (comp == 0); } case NOT_EQUALS: { return (comp != 0); } case GREATER: { return (comp > 0); } case GREATER_EQ: { return (comp >= 0); } case LESS: { return (comp < 0); } case LESS_EQ: { return (comp <= 0); } default: { // Can't get here, but the compiler doesn't know that. return false; } } } private final boolean checkBoolean(boolean b) { String value = this.getCondition().getValue(); boolean v = Boolean.parseBoolean(value); switch (this.getCondition().getConditionType()) { case EQUALS: { return (v == b); } case NOT_EQUALS: { return (v != b); } default: { return false; } } } private static final Stack list2Stack(List list) { Stack stack = new Stack(); for (int i = list.size() - 1; i >= 0; i--) { stack.push(list.get(i)); } return stack; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/TypeMapImpl.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/TypeMapImpl.ja0000644000175000017500000000540511625126446033307 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config.impl; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.uima.simpleserver.config.Filter; import org.apache.uima.simpleserver.config.Output; import org.apache.uima.simpleserver.config.TypeMap; /* * Implementation of the TypeSpecification interface. Just a simple bean-like class without any * logic, exept for constructor method. */ public class TypeMapImpl implements TypeMap { private final String typeName; private final String outputTag; private boolean outputCoveredText; private boolean outputAll; private final Filter filter; private final List outputs = new ArrayList(); private final String shortDescription; private final String longDescription; public TypeMapImpl(String typeName, Filter filter, String outputTag, boolean outputCoveredText, boolean outputAll, String shortDescription, String longDescription) { super(); this.typeName = typeName; this.filter = filter; this.outputTag = outputTag; this.outputCoveredText = outputCoveredText; this.outputAll = outputAll; this.shortDescription = shortDescription; this.longDescription = longDescription; } public Filter getFilter() { return this.filter; } public List getOutputs() { return Collections.unmodifiableList(this.outputs); } public String getOutputTag() { return this.outputTag; } public String getTypeName() { return this.typeName; } public boolean isOutputCoveredText() { return this.outputCoveredText; } public String getLongDescription() { return this.longDescription; } public String getShortDescription() { return this.shortDescription; } public void addOutput(Output output) { this.outputs.add(output); } public boolean getOutputAll() { return this.outputAll; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/XmlConfigReader.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/impl/XmlConfigReade0000644000175000017500000003200511625126450033333 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config.impl; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.uima.cas.impl.TypeSystemUtils; import org.apache.uima.simpleserver.SimpleServerException; import org.apache.uima.simpleserver.config.AndFilter; import org.apache.uima.simpleserver.config.Condition; import org.apache.uima.simpleserver.config.ConfigFactory; import org.apache.uima.simpleserver.config.Filter; import org.apache.uima.simpleserver.config.FilterOp; import org.apache.uima.simpleserver.config.OrFilter; import org.apache.uima.simpleserver.config.Output; import org.apache.uima.simpleserver.config.ServerSpec; import org.apache.uima.simpleserver.config.SimpleFilter; import org.apache.uima.simpleserver.config.TypeMap; import org.apache.uima.simpleserver.config.xml.And; import org.apache.uima.simpleserver.config.xml.FilterOperator; import org.apache.uima.simpleserver.config.xml.FilterType; import org.apache.uima.simpleserver.config.xml.Or; import org.apache.uima.simpleserver.config.xml.OutputType; import org.apache.uima.simpleserver.config.xml.SimpleFilterType; import org.apache.uima.simpleserver.config.xml.TypeElementType; import org.apache.uima.simpleserver.config.xml.UimaSimpleServerSpecDocument; import org.apache.uima.simpleserver.config.xml.TypeElementType.Filters; import org.apache.uima.simpleserver.config.xml.TypeElementType.Outputs; import org.apache.uima.simpleserver.config.xml.UimaSimpleServerSpecDocument.UimaSimpleServerSpec; import org.apache.xmlbeans.XmlError; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlOptions; /** * Read server configuration from an XML file or stream. */ public final class XmlConfigReader { // Constants for filter operators private static final int NULL = FilterOperator.Enum.forString("null").intValue(); private static final int NOT_NULL = FilterOperator.Enum.forString("!null").intValue(); private static final int EQUALS = FilterOperator.Enum.forString("=").intValue(); private static final int NOT_EQUALS = FilterOperator.Enum.forString("!=").intValue(); private static final int LESS = FilterOperator.Enum.forString("<").intValue(); private static final int LESS_EQ = FilterOperator.Enum.forString("<=").intValue(); private static final int GREATER = FilterOperator.Enum.forString(">").intValue(); private static final int GREATER_EQ = FilterOperator.Enum.forString(">=").intValue(); /** * Read a config file. * * @param file * The config file. * @return The corresponding server spec. * @throws IOException * @throws XmlException * XML parsing error. * @throws SimpleServerException * Content parsing error. */ public static ServerSpec readServerSpec(File file) throws IOException, XmlException, SimpleServerException { return readServerSpec(new BufferedInputStream(new FileInputStream(file))); } /** * Read a config XML stream. * * @param is * The XML input stream. * @return The corresponding server spec. * @throws IOException * @throws XmlException * XML parsing error. * @throws SimpleServerException * Content parsing error. */ public static ServerSpec readServerSpec(InputStream is) throws IOException, XmlException, SimpleServerException { UimaSimpleServerSpec specBean = UimaSimpleServerSpecDocument.Factory.parse(is) .getUimaSimpleServerSpec(); // Do validation. If XML is not valid, throw first error. ArrayList validationErrors = new ArrayList(); XmlOptions validationOptions = new XmlOptions(); validationOptions.setErrorListener(validationErrors); boolean isValid = specBean.validate(validationOptions); if (!isValid) { Iterator iter = validationErrors.iterator(); if (iter.hasNext()) { throw new XmlException(iter.next()); } } // TODO: recompile XML beans code from XSD. While doing this: check if the number of jars for // xml parsing (3) can be reduced. This is all Apache code, so legally this should be ok. // Also create ant build script for this. // TEMPORARY: final boolean doOutputAll = false; // Create new server spec from XML beans. ServerSpec spec = ConfigFactory.newServerSpec(specBean.getShortDescription(), specBean .getLongDescription(), doOutputAll); TypeElementType[] typeMaps = specBean.getTypeArray(); for (int i = 0; i < typeMaps.length; i++) { spec.addTypeMap(readTypeMap(typeMaps[i])); } return spec; } // Read a type element. private static TypeMap readTypeMap(TypeElementType typeBean) throws SimpleServerException { boolean coveredText = typeBean.getOutputCoveredText(); Filter filter = null; // Check if type element has a filter, and what kind of filter it is (atomic filter, and, or). if (typeBean.getFilters() != null) { Filters filterBean = typeBean.getFilters(); if (filterBean.getAnd() != null) { filter = readFilter(filterBean.getAnd()); } else if (filterBean.getOr() != null) { filter = readFilter(filterBean.getOr()); } else if (filterBean.getFilter() != null) { filter = readFilter(filterBean.getFilter()); } } // create a type map with the given information TypeMap typeMap = ConfigFactory.newTypeMap(typeBean.getName(), filter, typeBean.getOutputTag(), coveredText, typeBean.getOutputAll(), typeBean.getShortDescription(), typeBean .getLongDescription()); // check if for the current type output features are mapped if (typeBean.getOutputs() != null) { Outputs outputBean = typeBean.getOutputs(); // get mapped output features OutputType[] outputTypes = outputBean.getOutputArray(); for (int i = 0; i < outputTypes.length; i++) { // parse output feature featurePath List featurePath = parseFeaturePath(outputTypes[i].getFeaturePath()); Output output = ConfigFactory.newOutput(featurePath, outputTypes[i].getOutputAttribute(), outputTypes[i].getShortDescription(), outputTypes[i].getLongDescription()); // add output feature to the typeMap typeMap.addOutput(output); } } return typeMap; } // Process a filter bean. private static final Filter readFilter(FilterType filterBean) throws SimpleServerException { Filter filter = null; // Need to distinguish the various kinds of filters. if (filterBean instanceof And) { filter = readAndFilter((And) filterBean); } else if (filterBean instanceof Or) { filter = readOrFilter((Or) filterBean); } else { filter = readSimpleFilter((SimpleFilterType) filterBean); } return filter; } // Parse an AND filter. private static final AndFilter readAndFilter(And filterBean) throws SimpleServerException { AndFilter filter = ConfigFactory.newAndFilter(); // May embed any number of simple filters, conjunctions and disjunctions. SimpleFilterType[] simpleFilters = filterBean.getFilterArray(); And[] andBeans = filterBean.getAndArray(); Or[] orBeans = filterBean.getOrArray(); List filterBeans = getFilters(simpleFilters, andBeans, orBeans); for (int i = 0; i < filterBeans.size(); i++) { filter.addFilter(readFilter(filterBeans.get(i))); } return filter; } // Aggregate the various forms of filter arrays into one filter list. private static final List getFilters(SimpleFilterType[] simpleFilters, And[] andBeans, Or[] orBeans) { List list = new ArrayList(); for (int i = 0; i < simpleFilters.length; i++) { list.add(simpleFilters[i]); } for (int i = 0; i < andBeans.length; i++) { list.add(andBeans[i]); } for (int i = 0; i < orBeans.length; i++) { list.add(orBeans[i]); } return list; } // Parse an OR filter private static final OrFilter readOrFilter(Or filterBean) throws SimpleServerException { OrFilter filter = ConfigFactory.newOrFilter(); SimpleFilterType[] simpleFilters = filterBean.getFilterArray(); And[] andBeans = filterBean.getAndArray(); Or[] orBeans = filterBean.getOrArray(); List filterBeans = getFilters(simpleFilters, andBeans, orBeans); for (int i = 0; i < filterBeans.size(); i++) { filter.addFilter(readFilter(filterBeans.get(i))); } return filter; } // Process a simple, atomic filter. private static final SimpleFilter readSimpleFilter(SimpleFilterType filterBean) throws SimpleServerException { List path = parseFeaturePath(filterBean.getFeaturePath()); Condition condition = readCondition(filterBean.getOperator(), filterBean.getValue()); return ConfigFactory.newSimpleFilter(path, condition); } // Process a condition. Check that value is set according to the operator. private static final Condition readCondition(FilterOperator.Enum operator, String value) throws SimpleServerException { FilterOp op = readOperator(operator); checkCondition(op, value); return ConfigFactory.newCondition(op, value); } // Check filter syntax: null and !null must not have the value attribute defined, while all others // must. private static final void checkCondition(FilterOp op, String value) throws SimpleServerException { switch (op) { case NOT_NULL: case NULL: { valueMustBeNull(op, value); break; } default: { valueMustNotBeNull(op, value); break; } } } private static final void valueMustBeNull(FilterOp op, String value) throws SimpleServerException { if (value != null) { throw new SimpleServerException(SimpleServerException.value_must_not_be_set, new Object[] { op, value }); } } private static final void valueMustNotBeNull(FilterOp op, String value) throws SimpleServerException { if (value == null) { throw new SimpleServerException(SimpleServerException.value_must_be_set, new Object[] { op }); } } private static final FilterOp readOperator(FilterOperator.Enum operator) { final int op = operator.intValue(); // Can't use switch because enum values aren't constants. if (op == NULL) { return FilterOp.NULL; } else if (op == NOT_NULL) { return FilterOp.NOT_NULL; } else if (op == EQUALS) { return FilterOp.EQUALS; } else if (op == NOT_EQUALS) { return FilterOp.NOT_EQUALS; } else if (op == LESS) { return FilterOp.LESS; } else if (op == LESS_EQ) { return FilterOp.LESS_EQ; } else if (op == GREATER) { return FilterOp.GREATER; } else if (op == GREATER_EQ) { return FilterOp.GREATER_EQ; } assert (false); return null; } private static List parseFeaturePath(String path) throws SimpleServerException { List featureList = new ArrayList(); final int max = path.length(); int pos = 0; // Check if path starts with a slash; if so, eliminate. if ((max > 0) && (path.charAt(0) == ServerSpec.PATH_SEPARATOR)) { pos = 1; } while (pos < max) { // Find the next path separator int next = pos; while ((next < max) && (path.charAt(next) != ServerSpec.PATH_SEPARATOR)) { ++next; } // Found a slash at next position, invalid path syntax if ((next < max) && (next == pos)) { throw new SimpleServerException(SimpleServerException.incorrect_path_syntax, new Object[] { path }); } String feature = path.substring(pos, next); if (!TypeSystemUtils.isIdentifier(feature)) { throw new SimpleServerException(SimpleServerException.incorrect_feature_syntax, new Object[] { feature, path }); } featureList.add(feature); pos = next + 1; } return featureList; } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/config/SimpleFilter.java0000644000175000017500000000224711625126450033067 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.config; import java.util.List; /* * Represents a Filter, which consists of a feature path (a string like abc:def:ghi) * and a condition (a string like "not null" or "!=asdfg") */ public interface SimpleFilter extends Filter { public Condition getCondition(); public List getFeaturePath(); }uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/Service.java0000644000175000017500000003406411625126450030625 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver; import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.uima.InternationalizedException; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.pear.tools.PackageBrowser; import org.apache.uima.pear.tools.PackageInstaller; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceManager; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.simpleserver.config.ConfigFactory; import org.apache.uima.simpleserver.config.Output; import org.apache.uima.simpleserver.config.ServerSpec; import org.apache.uima.simpleserver.config.TypeMap; import org.apache.uima.simpleserver.config.impl.XmlConfigReader; import org.apache.uima.simpleserver.output.Result; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import org.apache.uima.util.XMLInputSource; import org.apache.xmlbeans.XmlException; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * This is the main class of the project. It represents a wrapper over UIMA Framework. One Server * instance is able to perform one task. The Server object must be created, configured (method * configure(...)) and can be used by calling process(...) method. */ public class Service { private static final String noDescriptionProvided = "No description provided"; private static final Logger logger = UIMAFramework.getLogger(Service.class); private AnalysisEngine ae = null; protected CAS cas = null; protected ServerSpec serviceSpec = null; protected ResultExtractor resultExtractor = null; protected volatile boolean initialized = false; /** * Default constructor. */ public Service() { super(); this.resultExtractor = new ResultExtractor(); } public static Logger getLogger() { return logger; } /** * Configure service with a UIMA descriptor. AE code must be on the classpath. * * @param descriptorFile * AE descriptor file. * @param resultSpecXMLFile * Service specification file. * @throws XmlException * If service spec is not valid XML. * @throws IOException * On I/O problems (file not found etc). * @throws SimpleServerException * Other initialization problems. */ public void configureAnalysisEngine(File descriptorFile, File resultSpecXMLFile) throws SimpleServerException, IOException, XmlException { assert (descriptorFile != null); try { loadDescriptor(descriptorFile); } catch (InternationalizedException e) { SimpleServerException sse = new SimpleServerException( SimpleServerException.uima_initialization_error, new Object[] {}, e); throw sse; } configure(resultSpecXMLFile); } /** * Configure service with a UIMA PEAR file. The PEAR is installed during installation. * * @param pearFile * The PEAR file. * @param pearInstallationDir * The installation directory for the PEAR. * @param serviceSpecFile * Service specification file. * @throws XmlException * If service spec is not valid XML. * @throws IOException * On I/O problems (file not found etc). * @throws SimpleServerException * Other initialization problems. */ public void configurePear(File pearFile, File pearInstallationDir, File serviceSpecFile) throws IOException, SimpleServerException, XmlException { try { loadPear(pearFile, pearInstallationDir); } catch (InternationalizedException e) { SimpleServerException sse = new SimpleServerException( SimpleServerException.uima_initialization_error, new Object[] {}, e); throw sse; } configure(serviceSpecFile); } protected void configure(File serviceSpecFile) throws IOException, SimpleServerException, XmlException { if (serviceSpecFile == null) { this.serviceSpec = ConfigFactory.newServerSpec(noDescriptionProvided, noDescriptionProvided, true); } else { this.serviceSpec = XmlConfigReader.readServerSpec(serviceSpecFile); validateResultSpec(); } this.initialized = true; } protected final void logInitializationError() { // TODO: log which service could not be initialized!!!!!!!!!!!!!!!!! SimpleServerException e = new SimpleServerException( SimpleServerException.service_state_exception, new Object[] {}); getLogger().log(Level.SEVERE, "", e); } /** * Gets an XSD for the output format of the service. * * @return A string representation of the XSD; serialize as utf-8. */ public String getXMLResultXSD() { if (!this.initialized) { logInitializationError(); return null; } try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); DOMImplementation impl = builder.getDOMImplementation(); Document document = impl.createDocument(null, null, null); Element root = document.createElement("schema"); root.setAttribute("xmlns", "http://www.w3.org/2001/XMLSchema"); document.appendChild(root); Element resultElement = document.createElement("element"); resultElement.setAttribute("name", "result"); root.appendChild(resultElement); Element complexTypeElement = document.createElement("complexType"); resultElement.appendChild(complexTypeElement); Element sequenceElement = document.createElement("sequence"); complexTypeElement.appendChild(sequenceElement); for (TypeMap tSpec : this.serviceSpec.getTypeSpecs()) { Element element = document.createElement("element"); element.setAttribute("name", tSpec.getOutputTag()); element.setAttribute("maxOccurs", "unbounded"); element.setAttribute("minOccurs", "0"); Element complexType = document.createElement("complexType"); element.appendChild(complexType); Element simpleContent = document.createElement("simpleContent"); complexType.appendChild(simpleContent); Element extension = document.createElement("extension"); extension.setAttribute("base", "string"); simpleContent.appendChild(extension); for (Output output : tSpec.getOutputs()) { Element attributeElement = document.createElement("attribute"); extension.appendChild(attributeElement); attributeElement.setAttribute("name", output.getAttribute()); attributeElement.setAttribute("type", "string"); attributeElement.setAttribute("use", "optional"); } sequenceElement.appendChild(element); } DOMSource source = new DOMSource(document); TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); StringWriter stringWriter = new StringWriter(); StreamResult streamResult = new StreamResult(stringWriter); transformer.transform(source, streamResult); return stringWriter.toString(); } catch (TransformerException e) { getLogger().log(Level.SEVERE, "", e); } catch (ParserConfigurationException e) { getLogger().log(Level.SEVERE, "", e); } return null; } /** * Calls the services analysis engine on the input text, filters and produces the result. */ // If UIMA-AS is included as an ADD-ON to SimpleServer and UIMA-AS servlet // is invoked, UIMA-AS (UimaAsService) will override this method public synchronized Result process(String text, String lang) { // Check that service has been initialized. if (!this.initialized) { logInitializationError(); return null; } this.cas.reset(); this.cas.setDocumentText(text); if (lang != null) { this.cas.setDocumentLanguage(lang); } try { this.ae.process(this.cas); } catch (AnalysisEngineProcessException e) { getLogger().log(Level.SEVERE, "", e); return null; } return this.resultExtractor.getResult(this.cas, this.serviceSpec); } public Result process(String text) { return process(text, null); } public ServerSpec getServiceSpec() { return this.serviceSpec; } /* * initialises the AE, in the case if the AE descriptor was passed to the configure(...) method. * * The code here is actually a copy of code from the UIMA tutorial. */ private void loadDescriptor(File descriptorFile) throws IOException, InvalidXMLException, ResourceInitializationException { XMLInputSource in = new XMLInputSource(descriptorFile); ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in); ResourceManager manager = UIMAFramework.newDefaultResourceManager(); this.ae = UIMAFramework.produceAnalysisEngine(specifier, manager, null); this.cas = this.ae.newCAS(); } private void loadPear(File pearFile, File installationDir) throws IOException, InvalidXMLException, ResourceInitializationException { boolean doVerification = true; PackageBrowser instPear = PackageInstaller.installPackage(installationDir, pearFile, doVerification); String pearDescriptorFileName = instPear.getComponentPearDescPath(); loadDescriptor(new File(pearDescriptorFileName)); } private void validateResultSpec() { List exc = this.serviceSpec.validate(this.cas.getTypeSystem()); if (exc.size() > 0) { SimpleServerException e = new SimpleServerException(SimpleServerException.validation_warning, new Object[] { this.serviceSpec.getShortDescription() }); getLogger().log(Level.WARNING, e.getLocalizedMessage()); for (SimpleServerException sse : exc) { getLogger().log(Level.WARNING, sse.getLocalizedMessage()); } } } /** * Delivers the service description as an XML document. */ public String getServiceDescription() { if (!this.initialized) { logInitializationError(); return null; } try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); DOMImplementation impl = builder.getDOMImplementation(); Document document = impl.createDocument(null, null, null); Element root = document.createElement("uimaService"); root.setAttribute("shortDescription", this.serviceSpec.getShortDescription()); document.appendChild(root); for (TypeMap tspec : this.serviceSpec.getTypeSpecs()) { Element typeDescription = document.createElement("element"); root.appendChild(typeDescription); typeDescription.setAttribute("name", tspec.getOutputTag()); typeDescription.setAttribute("shortDescription", tspec.getShortDescription()); for (Output output : tspec.getOutputs()) { Element outputSpec = document.createElement("attribute"); typeDescription.appendChild(outputSpec); outputSpec.setAttribute("name", output.getAttribute()); outputSpec.setAttribute("shortDescription", output.getShortDescription()); } if (tspec.isOutputCoveredText()) { Element outputSpec = document.createElement("attribute"); typeDescription.appendChild(outputSpec); outputSpec.setAttribute("name", "coveredText"); outputSpec.setAttribute("shortDescription", "Text covered by annotation"); } } DOMSource source = new DOMSource(document); TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); StringWriter stringWriter = new StringWriter(); StreamResult streamResult = new StreamResult(stringWriter); transformer.transform(source, streamResult); return stringWriter.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/servlet/0000755000175000017500000000000011625126446030044 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/servlet/ListServices.java0000644000175000017500000001670011625126446033332 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.servlet; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import java.net.URLConnection; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; public class ListServices extends HttpServlet { private static final long serialVersionUID = 804273796737974862L; public static final String CONFIG_FILE_NAME = "list.properties"; private Properties properties = new Properties(); private File myDir = null; private Logger logger = Logger.getLogger("org.apache.uima.uimaserver.servlet.ListServices"); private BufferedReader readUrl(String urlStr) throws IOException { urlStr += "?mode=xmldesc"; URL url = new URL(urlStr); URLConnection connection = url.openConnection(); return new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { String server = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); PrintWriter writer = null; try { writer = response.getWriter(); } catch (IOException e1) { this.logger.log(Level.SEVERE, "Could not obtain response writer, aborting."); e1.printStackTrace(); return; } if (this.myDir == null) { this.myDir = new File(getServletContext().getRealPath("")); File iniFile = new File(this.myDir, CONFIG_FILE_NAME); try { this.properties.load(new FileInputStream(iniFile)); } catch (IOException e) { this.logger.log(Level.SEVERE, "Could not load config file: " + iniFile.getAbsolutePath()); e.printStackTrace(); } } String mode = request.getParameter("mode"); if ((mode != null) && mode.equals("xml")) { try { writer.print(xmlToString(produceXmlList(server))); writer.close(); } finally { writer.close(); } } else { Document document = produceXmlList(server); Element root = document.getDocumentElement(); NodeList nlist = root.getElementsByTagName("service"); String html = "List of services" + "

List of UIMA services available on " + server + "

" + "
    "; int n = nlist.getLength(); for (int i = 0; i < n; i++) { String url = ""; try { Element serviceElement = (Element) nlist.item(i); url = serviceElement.getAttribute("url"); } catch (Exception e) { e.printStackTrace(); } String desc = "No service description available"; try { Element serviceElement = (Element) nlist.item(i); Element uimaService = (Element) (serviceElement.getElementsByTagName("uimaService") .item(0)); String tmpDesc = uimaService.getAttribute("shortDescription"); if ((tmpDesc != null) && tmpDesc.length() > 0) { desc = tmpDesc; } } catch (Exception e) { e.printStackTrace(); } html += "
  • " + desc + "" + "
    URL: " + url + "
    For further details, please see the detailed service information or " + "try out this service. Description " + "of this service in XML format is also available.
    "; } html += "
"; writer.print(html); writer.close(); } } private Document produceXmlList(String thisServer) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); DOMImplementation impl = builder.getDOMImplementation(); Document document = impl.createDocument(null, null, null); Element root = document.createElement("serviceList"); document.appendChild(root); for (int i = 1;; i++) { String url = this.properties.getProperty("url" + i); if (url == null) { break; } if (!url.startsWith("http:")) { url = thisServer + url; } Element service = document.createElement("service"); root.appendChild(service); service.setAttribute("url", url); try { BufferedReader reader = readUrl(url); InputSource source = new InputSource(reader); Document readDocument = builder.parse(source); Node node = readDocument.getDocumentElement().cloneNode(true); service.appendChild(document.adoptNode(node)); } catch (IOException e) { this.logger.log(Level.WARNING, "Could not retrieve information from service: " + url); e.printStackTrace(); } } return document; } catch (Exception e) { e.printStackTrace(); } return null; } public String xmlToString(Document document) { try { DOMSource source = new DOMSource(document); TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); StringWriter stringWriter = new StringWriter(); StreamResult streamResult = new StreamResult(stringWriter); transformer.transform(source, streamResult); return stringWriter.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/servlet/ResultMerger.java0000644000175000017500000002653011625126446033335 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.servlet; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.uima.simpleserver.config.ServerSpec; import org.apache.uima.simpleserver.config.impl.ServerSpecImpl; import org.apache.uima.simpleserver.output.ResultEntry; import org.apache.uima.simpleserver.output.impl.ResultEntryImpl; import org.apache.uima.simpleserver.output.impl.ResultImpl; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; /* * Implementation of a result-merging service. * The task of this service is to send multiple queries with the same * text to different UIMA Servlets and to aggregate the results of these * services. * * This service reacts to POST queries in the same way as other * UIMA services - it receives the parameters "text", "lang" and "mode" * and sends the requests simultaneously to the URLs received as * parameters "url1", "url2", etc. * * TODO: does not currently work, needs to be fixed. * */ public class ResultMerger extends SimpleServerServlet { private static final long serialVersionUID = -2326819932388842032L; /* * the description for this service is not produced automatically, like for other UIMA services, * so the method which constructs the HTML page is overridden */ @Override public String constructHtmlDescription(String servletURL) { return getHtmlDescription(servletURL); } private String getHtmlDescription(String urlstring) { String html = "" + "" + "Description of the XML Result Merger service" + "" + "" + "

Service Result Merger

" + "

This service merges the results of other simple UIMA services" + "and returns the combined result in the specified format.

" + "

Usage

" + "In odrer to use this service, a POST-request should be sent to the server with the following URL:" + "
"
        + urlstring
        + "
" + "The following request parameters are expected:" + "
    " + "
  • text - the value of this parameter is the text to analyze. Expected " + "encoding is UTF-8. This parameter must always be set." + "
  • mode - the value of this parameter is either " + ""xml" or "inline"." // + " or "csv". " // Jira 1795 + "This parameter allows you to define, which view of the result should be returned. " + ""xml" means to output the result as a XML-document containing a list of found entities, and" + ""inline" returns inline-xml containing the analyzed text in which all found entities are" + " represented by tags." // + ", and "csv" returns the found entities" //Jira 1795 // + " in a comma-separated list. " + "If this parameter is not set, xml output will be produced." + "" + "
  • url1, url2, url3, etc. - the values of these parameters are the " + "URLs of other simple UIMA services which are to be invoked." + "
" + "" + "

Result

" + "The returned result will be merged from results of the specified services. " + "For output details see the description of the services which you use." + "" + "" + "" + "" + ""; return html; } /* * we don't need an instance ofthe Server class to process the queries, but still we need to set a * valid instance of ResultSpecification in order to be able to deliver a valid XML service * description */ @Override public boolean initServer() { ServerSpec res = new ServerSpecImpl("Result Merger", "Result Merger - merge results of other UIMA services"); // res.setTypeSpecs(new ArrayList()); // TODO: fix this // this.server.setResultSpec(res); return true; } /* * We cannot just use the implementation of this method from the superclass, since we need to do * something special: we need to send a number of requests to other services and to aggregate the * result in one Result object */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { List resultEntries = new ArrayList(); // get text request.setCharacterEncoding("UTF-8"); String text = request.getParameter("text"); String mode = request.getParameter("mode"); String lang = request.getParameter("lang"); if ((lang == null) || (lang.equals(""))) { lang = "en"; } // collection of threads that will be launched simultaneously, // one thread for every URL Collection threads = new LinkedList(); // iterate over given urls for (int i = 1;; i++) { String urlStr = request.getParameter("url" + i); if (urlStr == null) { // if the next url parameter is not defined, we stop break; } // a thread gets all information it needs to send the request // to its service: url, text and lang ServiceReaderThread thread = new ServiceReaderThread(urlStr, text, lang); threads.add(thread); } for (Thread thread : threads) { thread.start(); } // now we will have to wait until every thread finishes its work for (Thread thread : threads) { try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } // add the result collections provided by every thread // to one big common collection for (ServiceReaderThread thread : threads) { resultEntries.addAll(thread.getResultEntries()); } response.setCharacterEncoding("UTF-8"); response.getWriter().print(this.transformResult( // create a Result object which contains all of the // result entries created by all threads new ResultImpl(resultEntries, text), mode)); response.getWriter().close(); } @Override public String getHtmlForm(String serverUrl) { String str = "" + "" + " Sorry, tryout not supported " + "" + "" + "" + "

Sorry, the tryout form of " + serverUrl + " is not available. Tryout is not supported for this service.

" + "" + ""; return str; } } /* * one thread which is initialised with url, lang and text */ class ServiceReaderThread extends Thread { // collection that is used to store the results of the query private Collection resultEntries = null; private String url = null; private String text = null; private String lang = null; public ServiceReaderThread(String url, String text, String lang) { this.url = url; this.text = text; this.lang = lang; this.resultEntries = new LinkedList(); } // send a request to the given URL, get the result, parse the result // and add the result entries to the collection @Override public void run() { try { DocumentBuilderFactory factory = null; DocumentBuilder builder = null; try { factory = DocumentBuilderFactory.newInstance(); builder = factory.newDocumentBuilder(); } catch (Throwable t) { t.printStackTrace(); } // read the result document from the url BufferedReader reader = readUrl(this.url, this.text, this.lang); InputSource source = new InputSource(reader); // parse the result Document document = builder.parse(source); // insert the results in the collection insertResults(document, this.resultEntries); } catch (Throwable t) { t.printStackTrace(); } } // sends a POST query to the given url and reads the result private BufferedReader readUrl(String urlStr, String text1, String lang1) throws IOException { String parameter = URLEncoder.encode("text", "UTF-8") + "=" + URLEncoder.encode(text1, "UTF-8") + "&mode=xml" + "&lang=" + lang1; URL url1 = new URL(urlStr); URLConnection connection = url1.openConnection(); connection.setDoOutput(true); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); writer.write(parameter); writer.close(); return new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); } public Collection getResultEntries() { return this.resultEntries; } // goes through the result document and constructs a // ResultEntry object for every result tag private void insertResults(Document document, Collection resultEntries1) { Element root = document.getDocumentElement(); NodeList resultElements = root.getChildNodes(); int l = resultElements.getLength(); for (int i = 0; i < l; i++) { // take every element in the document if (resultElements.item(i) instanceof Element) { Element element = (Element) resultElements.item(i); // create a ResultEntry object ResultEntryImpl entry = new ResultEntryImpl(element.getNodeName(), 0, 0); // fill the ResultEntry with data read from the element NamedNodeMap attributes = element.getAttributes(); int k = attributes.getLength(); for (int x = 0; x < k; x++) { Node attribute = attributes.item(x); if ((attribute.getNodeName() != null) && (attribute.getNodeValue() != null)) { entry.setAttributeValue(attribute.getNodeName(), attribute.getNodeValue()); } } // TODO covered text - DONE entry.setCoveredText(element.getTextContent()); resultEntries1.add(entry); } } } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/servlet/SimpleServerServlet.javauima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/servlet/SimpleServerServle0000644000175000017500000004426011625126446033576 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.servlet; import org.apache.uima.simpleserver.Service; import org.apache.uima.simpleserver.config.Output; import org.apache.uima.simpleserver.config.ServerSpec; import org.apache.uima.simpleserver.config.TypeMap; import org.apache.uima.simpleserver.output.Result; import org.apache.uima.simpleserver.output.ResultConverter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; /* * a base class that implements the specification of a UIMA Servlet */ public class SimpleServerServlet extends HttpServlet { public static final String utf8 = "utf-8"; public static final String MODE_PARAMETER = "mode"; public static final String DEFAULT_CODE_PAGE = utf8; public File baseWebappDirectory = null; public Service server = null; // If UIMA-AS is included as an ADD-ON to SimpleServer and UIMA-AS servlet // is invoked, UIMA-AS servlet will set this flag protected boolean initializationSuccessful = false; private Logger logger = Logger.getAnonymousLogger(); // define possible parameter names // map parameter name --> parameter description protected Map servletGETParameters; protected Map servletPOSTParameters; // for some parameters, we can define supported values // map parameter name --> map ( value --> description ) protected Map> servletGETParamOptions; protected Map> servletPOSTParamOptions; private final boolean localInit; public SimpleServerServlet(boolean localInit) { super(); this.localInit = localInit; this.servletGETParameters = new HashMap(); this.servletPOSTParameters = new HashMap(); this.servletGETParamOptions = new HashMap>(); this.servletPOSTParamOptions = new HashMap>(); } public SimpleServerServlet() { this(false); } protected Logger getLogger() { return this.logger; } // creates the mappings for standard parameter description // this method can be overridden for non-standard parameter sets protected void declareServletParameters() { this.servletGETParameters.put(MODE_PARAMETER, "This parameter should define, what" + " the servlet should return. Some options are available."); Map options = new HashMap(); this.servletGETParamOptions.put(MODE_PARAMETER, options); options.put("description", "will return a description of a service " + "in HTML (human-readable) format. This description is" + " partially automatically generated, and partially created " + "by the author of this service."); options.put("xsd", "will return a XSD schema definition of the text " + "analysis results"); options.put("form", "will show a form with input fields, which will " + "allow you to try out this service"); options.put("xmldesc", "will show a specification of this service in XML " + "format"); this.servletPOSTParameters.put("text", "the value of this parameter is the " + "text to analyze. Expected encoding is UTF-8. This " + "parameter must always be set."); this.servletPOSTParameters.put(MODE_PARAMETER, "This parameter should define, what" + " view of the analyss result the servlet should return. " + "If this parameter is not set, XML output will be produced."); options = new HashMap(); options.put("xml", "means to output the result as a XML-document " + "containing a list of found entities"); options.put("inline", "returns inline-xml containing the analyzed " + "text in which all found entities are represented by tags"); // options.put("csv", "returns the found entities in a comma-separated list"); // Jira 1795 this.servletPOSTParamOptions.put(MODE_PARAMETER, options); this.servletPOSTParameters.put("lang", "This parameter sets the language " + "of the text. If this parameter is not set, the value" + ""en" will be used"); } /* * implements the GET behavior described in the documentation */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { if (!this.initializationSuccessful) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "The service is currently unavailable due to internal errors." + "\nPlease contact the service provider."); return; } response.setCharacterEncoding(DEFAULT_CODE_PAGE); request.setCharacterEncoding(DEFAULT_CODE_PAGE); PrintWriter writer = response.getWriter(); if (request.getParameterMap().isEmpty()) { writer.print(this.constructHtmlDescription(request.getRequestURL().toString())); writer.close(); return; } String mode = request.getParameter(MODE_PARAMETER); try { if ("xsd".equals(mode)) { // just give out the XSD definition provided by the server response.setHeader("content-type","text/xml"); writer.println(this.server.getXMLResultXSD()); writer.close(); } else if ("description".equals(mode)) { // output a service description in HTML format response.setHeader("content-type","text/html"); writer.print(this.constructHtmlDescription(request.getRequestURL().toString())); writer.close(); } else if ("form".equals(mode)) { // create a tryout HTML form and give it out response.setHeader("content-type","text/html"); writer.print(this.getHtmlForm(request.getRequestURL().toString())); writer.close(); } else if ("xmldesc".equals(mode)) { response.setHeader("content-type","text/xml"); writer.print(this.server.getServiceDescription()); writer.close(); } else { // interpret this as a request for actual analysis response.setHeader("content-type","text/xml"); analyze(request, response); } } catch (IOException e) { getLogger().log(Level.SEVERE, "An error occured processing this request", e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "An internal error occured, this service has not been properly initialized."); } } /* * implements the default POST behavior described in the documentation */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setHeader("content-type","text/xml"); analyze(request, response); } /* * handles requests that send some text to be analyzed */ protected void analyze(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println(this.getClass().getName() + ": POST request received: " + new Date()); request.setCharacterEncoding(DEFAULT_CODE_PAGE); response.setCharacterEncoding(DEFAULT_CODE_PAGE); String text = request.getParameter("text"); String lang = request.getParameter("lang"); System.out.println("Given text: " + text.substring(0, Math.min(50, text.length()))); String mode = request.getParameter(MODE_PARAMETER); if ((lang == null) || lang.equals("")) { lang = "en"; } System.out.println(MODE_PARAMETER + ": " + mode); System.out.println("lang: " + lang); // process the text Result result = this.server.process(text, lang); PrintWriter writer = response.getWriter(); writer.write(transformResult(result, mode)); writer.close(); } // just create a Server instance and check where the project directory is // (baseWebappDirectory) @Override public void init() throws ServletException { System.out.println("Starting UIMA servlet initialization"); if (this.localInit) { return; } super.init(); System.out.println("Servlet " + this.getClass().getCanonicalName() + " -- initialisation begins"); this.baseWebappDirectory = new File(getServletContext().getRealPath("")); // File xsdFile = new File(baseWebappDirectory.getAbsoluteFile() // + "/schema/ResultSpecification.xsd"); // server = new Server(xsdFile); this.server = new Service(); this.initializationSuccessful = initServer(); declareServletParameters(); } public void init(File descriptorFile, File serviceSpecFile) throws ServletException { super.init(); this.initializationSuccessful = false; this.server = new Service(); try { this.server.configureAnalysisEngine(descriptorFile, serviceSpecFile); } catch (Exception e) { getLogger().log(Level.SEVERE, "UIMA Simple Service configuaration failed", e); return; } declareServletParameters(); this.initializationSuccessful = true; } // If UIMA-AS is included as an ADD-ON to SimpleServer and UIMA-AS servlet // is invoked, UIMA-AS servlet will override this method protected boolean initServer() { File resultSpec = null; String resultSpecParamValue = getInitParameter("ResultSpecFile"); if (resultSpecParamValue != null) { resultSpec = new File(this.baseWebappDirectory.getAbsoluteFile(), resultSpecParamValue); } String pearPath = getInitParameter("PearPath"); String descriptorPath = getInitParameter("DescriptorPath"); String pearInstallPath = getInitParameter("PearInstallPath"); try { if (pearPath == null) { File descriptor = new File(this.baseWebappDirectory.getAbsoluteFile(), descriptorPath); this.server.configureAnalysisEngine(descriptor, resultSpec); } else if (descriptorPath == null) { File pear = new File(this.baseWebappDirectory.getAbsoluteFile(), pearPath); // get default servlet working directory File pearInstallDir = (File) this.getServletContext().getAttribute( "javax.servlet.context.tempdir"); // check if a special install directory is specified if (pearInstallPath != null) { pearInstallDir = new File(pearInstallPath); // check if a relative path is set, relative path names are // evaluated relative to the PEAR file location. if (!pearInstallDir.isAbsolute()) { pearInstallDir = new File(pear.getParentFile(), pearInstallPath); } } getLogger().log(Level.INFO, "Install PEAR file to: " + pearInstallDir.getAbsolutePath()); this.server.configurePear(pear, pearInstallDir, resultSpec); } } catch (Exception e) { getLogger().log(Level.SEVERE, "UIMA Simple Service configuaration failed", e); return false; } return true; } /* * choose the output format, depending on the value of the given "mode" parameter */ public String transformResult(Result result, String mode) { if ("xml".equals(mode)) { return ResultConverter.getXMLString(result); } if ("inline".equals(mode)) { return ResultConverter.getInlineXML(result); } return ResultConverter.getXMLString(result); } // can be overridden by the creator of the subclasses. // just some HTML that delivers additional info about the service public String getCustomDescription() { return ""; } // creates a service description as a HTML page, using the provided // maps woth parameters, values and their descriptions, // as well as the current URL, // and the additional descritpion specified in the previous method. public String constructHtmlDescription(String servletURL) { ServerSpec rspec = this.server.getServiceSpec(); String html = "" + "" + "" + rspec.getShortDescription() + "" + "" + "" + "

" + rspec.getShortDescription() + "

" + rspec.getLongDescription() + "

Usage

" + "In order to use this service, a POST- or GET-request should be sent to the server with the following URL:" + "
"
            + servletURL
            + "
" + "
" + "The following request parameters are expected:" + constructParameterDescription() + "

Result

" + "If XML or inline-XML output is requested, it will contain the tags listed below. " + "The XSD-definition of the output in XML-format can be downloaded " + "here." + constructResultDescription() + "" + (getCustomDescription().equals("") ? "" : "

Additional description

" + getCustomDescription()) + "" + "

Example of usage

" + "
"
            + "String text = \"Hello Mr. John Smith !\"; \n"
            + "String parameters = \"text=\" + URLEncoder.encode(text, \"UTF-8\") + \"&mode=inline\";\n"
            + "URL url = new URL(\""
            + servletURL
            + "\"); \n"
            + "URLConnection connection = url.openConnection(); \n"
            + "connection.setDoOutput(true); \n"
            + "OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); \n"
            + "writer.write(parameters);\n"
            + "writer.flush(); \n\n"
            + "BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), \"UTF-8\")); \n"
            + "String line; \n" + "while ((line = reader.readLine()) != null) { \n"
            + "    System.out.println(line);\n" + "} \n" + "
" + "" + ""; return html; } // routine used in the previous method public String constructParameterDescription() { String s = ""; s += "

POST-parameters

POST request should be sent to use " + "the service"; s += parameterDescription(this.servletPOSTParameters, this.servletPOSTParamOptions); s += "

GET-parameters

GET request should be sent to obtain " + "information about the service"; s += parameterDescription(this.servletGETParameters, this.servletGETParamOptions); return s; } // routine used in the previous method public String parameterDescription(Map params, Map> options) { String s = ""; s += "
    "; for (String param : params.keySet()) { String desc = params.get(param); s += "
  • "; s += "" + param + " " + " -- " + desc; Map opts = options.get(param); if (opts != null) { s += "
      "; s += "Possible values:
      "; for (String opt : opts.keySet()) { s += "
    • "; s += "" + opt + " " + " -- " + opts.get(opt); } s += "
    "; } } s += "
"; return s; } public String constructResultDescription() { String s = ""; try { s += "

XML elemets of result

"; s += "
    "; for (TypeMap t : this.server.getServiceSpec().getTypeSpecs()) { s += "
  • "; s += "Element " + t.getOutputTag() + " -- " + t.getShortDescription(); s += "
    " + t.getLongDescription(); s += "
      "; s += "Attributes:
      "; for (Output o : t.getOutputs()) { s += "
    • "; s += "Attribute " + o.getAttribute() + " -- " + o.getShortDescription(); s += "
      " + o.getLongDescription(); } s += "
    "; s += "
    "; } s += "
"; } catch (Exception e) { e.printStackTrace(); } return s; } // creates a HTML page with a form which allows to try out the service public String getHtmlForm(String serverUrl) { String str = "" + "" + "" + serverUrl + " tryout form " + "" + "" + "" + "" + "

Tryout form of " + serverUrl + "

" + "
" + "Enter text:
" + "
" + "Enter language(optional):
" + "
" + "Display result as
" + " XML document
" + " inline XML
" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "
" + "" + ""; return str; } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/SimpleServerException.java0000644000175000017500000000620711625126450033522 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver; import org.apache.uima.InternationalizedException; /** * Simple server exception class. *

* * Message keys are defined as public string constants. Note: to know how many arguments a message * takes, you need to look at the message properties file. This information is not captured in this * class. */ public class SimpleServerException extends InternationalizedException { public static final String incorrect_path_syntax = "incorrect_path_syntax"; public static final String incorrect_feature_syntax = "incorrect_feature_syntax"; public static final String value_must_not_be_set = "value_must_not_be_set"; public static final String value_must_be_set = "value_must_be_set"; public static final String type_does_not_exist = "type_does_not_exist"; public static final String path_never_valid = "path_never_valid"; public static final String validation_warning = "validation_warning"; public static final String service_state_exception = "service_state_exception"; public static final String uima_initialization_error = "uima_initialization_error"; private static final String messages = "org.apache.uima.simpleserver.exception"; /** * Constructor for creating exception from scratch. * * @param messageKey * The message key. Use one of the constants defined in this class. * @param arguments * An array of message arguments. Check the message properties file to see how many * and what kind of arguments are expected. */ public SimpleServerException(String messageKey, Object[] arguments) { super(messages, messageKey, arguments); } /** * Constructor for creating exception from existing exception (for rethrow). * * @param messageKey * The message key. Use one of the constants defined in this class. * @param arguments * An array of message arguments. Check the message properties file to see how many * and what kind of arguments are expected. * @param cause * Root cause of this exception. */ public SimpleServerException(String messageKey, Object[] arguments, Throwable cause) { super(messages, messageKey, arguments, cause); } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/util/0000755000175000017500000000000011625126450027330 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/util/HttpClientUtils.java0000644000175000017500000000531211625126450033273 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.net.URL; import org.apache.http.HttpException; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.uima.simpleserver.servlet.SimpleServerServlet; public class HttpClientUtils { public static HttpResponse callGet(String host, int port, String file) throws IOException, URISyntaxException, HttpException { HttpClient httpClient = new DefaultHttpClient(); HttpGet method = null; URL url = null; url = new URL("http", host, port, file); method = new HttpGet(url.toString()); HttpResponse response = null; try { response = httpClient.execute(method); } catch (InterruptedException e) { // If we get here, something's seriously wrong e.printStackTrace(); return null; } return response; } public static String getResponseContent(HttpResponse response) throws IOException { try { Reader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), SimpleServerServlet.DEFAULT_CODE_PAGE)); char[] chars = new char[1024]; int len = 0; StringBuffer buf = new StringBuffer(); while ((len = reader.read(chars)) >= 0) { buf.append(chars, 0, len); } return buf.toString(); } catch (UnsupportedEncodingException e) { // Can't get here e.printStackTrace(); return null; } catch (IllegalStateException e) { // Shouldn't get here ;-) e.printStackTrace(); return null; } } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/util/JettyUtils.java0000644000175000017500000001156511625126450032323 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.util; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import javax.servlet.Servlet; import org.apache.uima.simpleserver.servlet.SimpleServerServlet; import org.mortbay.jetty.Connector; import org.mortbay.jetty.Server; import org.mortbay.jetty.nio.SelectChannelConnector; import org.mortbay.jetty.servlet.ServletHandler; import org.mortbay.jetty.servlet.ServletHolder; public class JettyUtils { private static final String uimaServletUrlFile = "/uima"; public static final Server startJettyServer(String analysisEngineDescriptor, String mappingFile) throws Exception { // Create Jetty server Server server = createServer(); // Set up UIMA servlet SimpleServerServlet uimaServlet = new SimpleServerServlet(true); File descriptorFile = new File(analysisEngineDescriptor); File specFile = new File(mappingFile); uimaServlet.init(descriptorFile, specFile); // Add UIMA servlet to jetty JettyUtils.addServletWithMapping(server, uimaServlet, uimaServletUrlFile); // Start the server server.start(); return server; } public static final void stopJettyServer(Server server) throws Exception { server.stop(); server.join(); } public static final String getServletUrl(Server server) { StringBuffer buf = new StringBuffer(); buf.append("http://"); buf.append(JettyUtils.getHost(server)); buf.append(":"); buf.append(Integer.toString(JettyUtils.getPort(server))); buf.append(uimaServletUrlFile); buf.append("?mode=form"); return buf.toString(); } public static void main(String[] args) { Server server = null; try { server = startJettyServer(args[0], args[1]); String servletUrl = getServletUrl(server); System.out.println("Use the following URL to access the servlet: " + servletUrl); String prompt = "Type 'stop' to exit> "; String stop = "stop"; System.out.println(prompt); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String line; while ((line = reader.readLine()) != null) { if (line.equals(stop)) { break; } System.out.println(prompt); } stopJettyServer(server); } catch (Exception e) { e.printStackTrace(); } finally { if (server != null) { try { stopJettyServer(server); } catch (Exception e) { e.printStackTrace(); } } } } public static Server createServer() { Server server = new Server(); Connector connector = new SelectChannelConnector(); final int port = findFreePort(); if (port <= 0) { return null; } System.out.println("Using port: " + port); connector.setPort(port); connector.setHost("127.0.0.1"); server.addConnector(connector); server.setStopAtShutdown(true); // Set up the servlet handler server.setHandler(new ServletHandler()); return server; } public static void addServletWithMapping(Server server, Class servlet, String pathSpec) { ((ServletHandler) server.getHandler()).addServletWithMapping(servlet, pathSpec); } public static void addServletWithMapping(Server server, Servlet servlet, String pathSpec) { ((ServletHandler) server.getHandler()).addServletWithMapping(new ServletHolder(servlet), pathSpec); } public static String getHost(Server server) { return server.getConnectors()[0].getHost(); } public static int getPort(Server server) { return server.getConnectors()[0].getPort(); } private static final int findFreePort() { int p = -1; try { // Create a new server socket on an unused port. ServerSocket serverSocket = new ServerSocket(0); p = serverSocket.getLocalPort(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } return p; } } uima-addons-2.3.1/SimpleServer/src/main/java/org/apache/uima/simpleserver/ResultExtractor.java0000644000175000017500000001730011625126450032371 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.impl.LowLevelCAS; import org.apache.uima.cas.impl.TypeSystemUtils; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.simpleserver.config.ConfigFactory; import org.apache.uima.simpleserver.config.Filter; import org.apache.uima.simpleserver.config.Output; import org.apache.uima.simpleserver.config.ServerSpec; import org.apache.uima.simpleserver.config.TypeMap; import org.apache.uima.simpleserver.output.Result; import org.apache.uima.simpleserver.output.ResultEntry; import org.apache.uima.simpleserver.output.impl.ResultEntryImpl; import org.apache.uima.simpleserver.output.impl.ResultImpl; /** * This class contains static methods responsible for iterating over annotations, applying filters * and building output. */ public class ResultExtractor { private static class DefaultTypeMap { private final Map typeMap = new HashMap(); @SuppressWarnings("unchecked") private void initialize(TypeSystem ts) { Type annotationType = ts.getType(CAS.TYPE_NAME_ANNOTATION); List annotationTypes = ts.getProperlySubsumedTypes(annotationType); annotationTypes.add(annotationType); Iterator it = annotationTypes.iterator(); while (it.hasNext()) { Type type = (Type) it.next(); createMapForType(type); } } private void createMapForType(Type type) { TypeMap tm = ConfigFactory.newTypeMap(type.getName(), null, type.getShortName(), true); Iterator featureIt = type.getFeatures().iterator(); while (featureIt.hasNext()) { Feature feat = (Feature) featureIt.next(); if (feat.getRange().isPrimitive()) { ArrayList path = new ArrayList(1); path.add(feat.getShortName()); Output out = ConfigFactory.newOutput(path, feat.getShortName(), "No description provided", "No description provided"); tm.addOutput(out); } } this.typeMap.put(type, tm); } private TypeMap get(Type type) { return this.typeMap.get(type); } } private TypeSystem ts = null; private DefaultTypeMap defaultTypeMap = null; /** * Extract a set of results from a CAS and a result specification. * * @param cas * The CAS to extract results from. * @param resultSpec * The result specification. */ public Result getResult(CAS cas, ServerSpec resultSpec) { List resultEntries = new ArrayList(); processTypes(cas, resultSpec, resultEntries); return new ResultImpl(resultEntries, cas.getDocumentText()); } private void processTypes(CAS cas, ServerSpec rspec, List resultEntries) { if (rspec.getOutputAll()) { outputAll(cas, resultEntries); return; } Type annotationType = cas.getTypeSystem().getType(CAS.TYPE_NAME_ANNOTATION); for (TypeMap tspec : rspec.getTypeSpecs()) { TypeSystem typeSystem = cas.getTypeSystem(); Type type = typeSystem.getType(tspec.getTypeName()); // Check that type exists and is an annotation. if ((type == null) || !typeSystem.subsumes(annotationType, type)) { // If not, skip. continue; } // Iterate over FSs, filter and create output. FSIterator iterator = cas.getAnnotationIndex(type).iterator(); for (; iterator.isValid(); iterator.moveToNext()) { AnnotationFS annotation = (AnnotationFS) iterator.get(); Filter filter = tspec.getFilter(); // Check that there either is no filter, or the FS passes the filter. if ((filter == null) || filter.match(annotation)) { // Create a new result entry, fill with attributes and add result set. ResultEntryImpl resultEntry = new ResultEntryImpl(tspec.getOutputTag(), annotation .getBegin(), annotation.getEnd()); makeOutputs(resultEntry, annotation, tspec); resultEntries.add(resultEntry); } } } } // TODO: create test case for this private void outputAll(CAS cas, List resultEntries) { checkCreateDefaultMap(cas.getTypeSystem()); // Output everything except the document annotation. Type docAnnotationType = cas.getTypeSystem().getType(CAS.TYPE_NAME_DOCUMENT_ANNOTATION); FSIterator it = cas.getAnnotationIndex().iterator(); for (it.moveToFirst(); it.isValid(); it.moveToNext()) { AnnotationFS annot = (AnnotationFS) it.get(); if (annot.getType().equals(docAnnotationType)) { // Skip the document annotation continue; } TypeMap typeMap = this.defaultTypeMap.get(annot.getType()); // Create a new result entry, fill with attributes and add result set. ResultEntryImpl resultEntry = new ResultEntryImpl(typeMap.getOutputTag(), annot.getBegin(), annot.getEnd()); makeOutputs(resultEntry, annot, typeMap); resultEntries.add(resultEntry); } } private final void checkCreateDefaultMap(TypeSystem typeSystem) { assert(typeSystem != null); if (typeSystem == this.ts) { return; } this.ts = typeSystem; DefaultTypeMap dtm = new DefaultTypeMap(); dtm.initialize(typeSystem); this.defaultTypeMap = dtm; } public static void makeOutputs(ResultEntryImpl resultEntry, AnnotationFS annotation, TypeMap tspec) { if (tspec.isOutputCoveredText()) { resultEntry.setCoveredText(annotation.getCoveredText()); } for (Output outSpec : tspec.getOutputs()) { Object value = evaluatePath(annotation, outSpec.getFeaturePath()); if (value != null) { String stringValue = value.toString(); resultEntry.setAttributeValue(outSpec.getAttribute(), stringValue); } } } private static final String evaluatePath(FeatureStructure fs, List path) { for (int i = 0; i < path.size(); i++) { String f = path.get(i); Feature feat = fs.getType().getFeatureByBaseName(f); if (feat == null) { return null; } int typeClass = TypeSystemUtils.classifyType(feat.getRange()); if (typeClass == LowLevelCAS.TYPE_CLASS_FS) { fs = fs.getFeatureValue(feat); if (fs == null) { return null; } } else { if (i == (path.size() - 1)) { return fs.getFeatureValueAsString(feat); } return null; } } return fs.toString(); } } uima-addons-2.3.1/SimpleServer/src/test/0000755000175000017500000000000011625126444020005 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/resources/0000755000175000017500000000000011625126444022017 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/0000755000175000017500000000000011625126444024200 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec01.xml0000644000175000017500000000232711625126444026021 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec03.xml0000644000175000017500000000322011625126444026014 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec10.xml0000644000175000017500000000253111625126444026016 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec02.xml0000644000175000017500000000276211625126444026025 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec05.xml0000644000175000017500000000250711625126444026025 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec09.xml0000644000175000017500000000252411625126444026030 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec07.xml0000644000175000017500000000253411625126444026027 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec06.xml0000644000175000017500000000264311625126444026027 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec04.xml0000644000175000017500000000276411625126444026031 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/serverspec/spec08.xml0000644000175000017500000000270311625126444026026 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/expected/0000755000175000017500000000000011625126444023620 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff01.xml0000644000175000017500000001224611625126444026314 0ustar drazzibdrazzib H e r e ' s s o m e t e x t . T h e c o n t e n t d o e s n ' t m a t t e r , a s i t i s o n l y u s e d f o r t e s t i n g p u r p o s e s . W e h a v e m i s e r a b l e w e a t h e r t o d a y . M i c h a e l ' s f i c u s d o e s n ' t l o o k t o o w e l l , I d o n ' t t h i n k i t l i k e s s t a n d i n g o n t o p o f t h e r a d i a t o r i n w i n t e r . I f I n e e d m o r e t e x t , I ' l l c o m e u p w i t h m o r e u s e l e s s n o n s e n s e . uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline05.xml0000644000175000017500000000075611625126444025775 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline06.xml0000644000175000017500000000075611625126444025776 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline01.xml0000644000175000017500000000676611625126444026000 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff07.xml0000644000175000017500000000253711625126444026324 0ustar drazzibdrazzib H ' o t . h o n o ' a r s o d r s g r e h e l e e o . i e u o ' o t w , d t i i i n g t r a w e I d r e l m p t o u e n e . uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline09.xml0000644000175000017500000000223011625126444025766 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff06.xml0000644000175000017500000000036111625126444026314 0ustar drazzibdrazzib e t e x t . T uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline04.xml0000644000175000017500000000060011625126444025760 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline03.xml0000644000175000017500000000061311625126444025763 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline07.xml0000644000175000017500000000224311625126444025770 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline08.xml0000644000175000017500000000457411625126444026002 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff03.xml0000644000175000017500000000011711625126444026310 0ustar drazzibdrazzib e uima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff08.xml0000644000175000017500000000507011625126444026320 0ustar drazzibdrazzib H ' o t . h o n o ' a r s o d r s g r e h e l e e o . i e u o ' o t w , d t i i i n g t r a w e I d r e l m p t o u e n e . uima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff02.xml0000644000175000017500000000016311625126444026310 0ustar drazzibdrazzib e r e uima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff05.xml0000644000175000017500000000036111625126444026313 0ustar drazzibdrazzib H e r e ' s s o m uima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff10.xml0000644000175000017500000001457711625126444026325 0ustar drazzibdrazzib H e r e ' s s o m e t e x t . T h e c o n t e n t d o e s n ' t m a t t e r , a s i t i s o n l y u s e d f o r t e s t i n g p u r p o s e s . W e h a v e m i s e r a b l e w e a t h e r t o d a y . M i c h a e l ' s f i c u s d o e s n ' t l o o k t o o w e l l , I d o n ' t t h i n k i t l i k e s s t a n d i n g o n t o p o f t h e r a d i a t o r i n w i n t e r . I f I n e e d m o r e t e x t , I ' l l c o m e u p w i t h m o r e u s e l e s s n o n s e n s e . uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline10.xml0000644000175000017500000001131711625126444025764 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff09.xml0000644000175000017500000000251611625126444026323 0ustar drazzibdrazzib r e x t s t i s l s f t i p o . e v i a t a h ' i s k o l I n t k e t i o o f e d o n n . e m t ' c w e e s n s uima-addons-2.3.1/SimpleServer/src/test/resources/expected/inline02.xml0000644000175000017500000000064111625126444025763 0ustar drazzibdrazzib Here's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/expected/standoff04.xml0000644000175000017500000000006311625126444026311 0ustar drazzibdrazzib uima-addons-2.3.1/SimpleServer/src/test/resources/stuff.xml0000644000175000017500000000316311625126444023673 0ustar drazzibdrazzib Recognize stuff uima-addons-2.3.1/SimpleServer/src/test/resources/test.txt0000644000175000017500000000044211625126444023537 0ustar drazzibdrazzibHere's some text. The content doesn't matter, as it is only used for testing purposes. We have miserable weather today. Michael's ficus doesn't look too well, I don't think it likes standing on top of the radiator in winter. If I need more text, I'll come up with more useless nonsense. uima-addons-2.3.1/SimpleServer/src/test/resources/desc/0000755000175000017500000000000011625126444022735 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/resources/desc/simpleServerTestDescriptor.xml0000644000175000017500000001142511625126444031041 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.simpleserver.test.Annotator SimpleServer Test Annotator Create lots of annotations with features of all types; test case for SimpleServer 1.0 Michael Baessler org.apache.uima.simpleserver.test.CharacterAnnotation uima.tcas.Annotation byteFeature uima.cas.Byte shortFeature uima.cas.Short integerFeature uima.cas.Integer longFeature uima.cas.Long floatFeature uima.cas.Float doubleFeature uima.cas.Double stringFeature uima.cas.String booleanFeature uima.cas.Boolean fsFeature org.apache.uima.simpleserver.test.TypeWithListsAndArrays org.apache.uima.simpleserver.test.TypeWithListsAndArrays uima.cas.TOP stringList uima.cas.String annotationArray uima.cas.FSArray x-unspecified true true false uima-addons-2.3.1/SimpleServer/src/test/java/0000755000175000017500000000000011625126442020724 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/java/org/0000755000175000017500000000000011625126442021513 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/0000755000175000017500000000000011625126442022734 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/0000755000175000017500000000000011625126442023667 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/0000755000175000017500000000000011625126442026407 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/0000755000175000017500000000000011625126444027370 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/ConfigTest.java0000644000175000017500000002004011625126444032274 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.test; import static org.junit.Assert.*; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.simpleserver.ResultExtractor; import org.apache.uima.simpleserver.SimpleServerException; import org.apache.uima.simpleserver.config.ServerSpec; import org.apache.uima.simpleserver.config.TypeMap; import org.apache.uima.simpleserver.config.impl.XmlConfigReader; import org.apache.uima.simpleserver.output.Result; import org.apache.uima.simpleserver.output.ResultConverter; import org.apache.uima.test.junit_extension.FileCompare; import org.apache.uima.test.junit_extension.JUnitExtension; import org.apache.uima.util.FileUtils; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.XMLInputSource; import org.apache.uima.util.XMLParser; import org.apache.xmlbeans.XmlException; import org.junit.Test; /** * TODO: Create type commment. */ public class ConfigTest { public static final String CONFIG_TEST_FILE = "stuff.xml"; private static final String encoding = "UTF-8"; @Test public void readSampleConfig() { try { InputStream is = this.getClass().getClassLoader().getResourceAsStream(CONFIG_TEST_FILE); ServerSpec spec = XmlConfigReader.readServerSpec(is); List types = spec.getTypeSpecs(); for (int i = 0; i < types.size(); i++) { assertNotNull(types.get(i)); } } catch (XmlException e) { e.printStackTrace(); assertTrue(false); } catch (IOException e) { e.printStackTrace(); assertTrue(false); } catch (SimpleServerException e) { e.printStackTrace(); assertTrue(false); } } @Test public void testResultGeneration1() { test("01", 290); } @Test public void testResultGeneration2() { test("02", 3); } @Test public void testResultGeneration3() { test("03", 1); } @Test public void testResultGeneration4() { test("04", 0); } @Test public void testResultGeneration5() { test("05", 10); } @Test public void testResultGeneration6() { test("06", 10); } @Test public void testResultGeneration7() { test("07", 73); } @Test public void testResultGeneration8() { test("08", 73); } @Test public void testResultGeneration9() { test("09", 72); } @Test public void testResultGeneration10() { test("10", 290); } private static final String getConfigFileName(final String number) { return "serverspec/spec" + number + ".xml"; } private static final String getInlineXmlFileName(final String number) { return "src/test/resources/expected/inline" + number + ".xml"; } private static final String getStandoffXmlFileName(final String number) { return "src/test/resources/expected/standoff" + number + ".xml"; } private static final void test(String testNumber, int expectedResultNumber) { final String configFile = getConfigFileName(testNumber); JCas cas = createTestCas(); ServerSpec serverSpec = null; try { serverSpec = XmlConfigReader.readServerSpec(JUnitExtension.getFile(configFile)); } catch (SimpleServerException e) { e.printStackTrace(); assertTrue(false); } catch (IOException e) { e.printStackTrace(); assertTrue(false); } catch (XmlException e) { e.printStackTrace(); assertTrue(false); } List exc = serverSpec.validate(cas.getTypeSystem()); if (exc.size() > 0) { exc.get(0).printStackTrace(); assertTrue(false); } ResultExtractor ex = new ResultExtractor(); Result result = ex.getResult(cas.getCas(), serverSpec); final int resultSize = result.getResultEntries().size(); assertTrue("Expected number of results was " + expectedResultNumber + ", actual number is " + resultSize, (resultSize == expectedResultNumber)); String inlineExpected = null; String standoffExpected = null; final String inlineActual = ResultConverter.getInlineXML(result); final String standoffActual = ResultConverter.getXMLString(result); try { inlineExpected = FileUtils.file2String(new File(getInlineXmlFileName(testNumber)), encoding); standoffExpected = FileUtils.file2String(new File(getStandoffXmlFileName(testNumber)), encoding); } catch (IOException e) { e.printStackTrace(); } assertTrue("Expected inline output:\n" + inlineExpected + "\nbut found:\n" + inlineActual, FileCompare.compareStrings(inlineActual, inlineExpected)); assertTrue( "Expected standoff output:\n" + standoffExpected + "\nbut found:\n" + standoffActual, FileCompare.compareStrings(standoffActual, standoffExpected)); // final int len = configFile.length(); // final String suffix = configFile.substring(len - 6, len); // final String outInlineFileName = "out/inline" + suffix; // final String inlineXmlContent = ResultConverter.getInlineXML(result); // final String outStandoffFileName = "out/standoff" + suffix; // final String standoffXmlContent = ResultConverter.getXMLString(result); // System.out.println((new File(outInlineFileName)).getAbsolutePath()); // try { // FileUtils.saveString2File(inlineXmlContent, new File(outInlineFileName), encoding); // FileUtils.saveString2File(standoffXmlContent, new File(outStandoffFileName), encoding); // } catch (Exception e) { // e.printStackTrace(); // } } private static final JCas createTestCas() { XMLParser parser = UIMAFramework.getXMLParser(); File descriptorFile = JUnitExtension.getFile("desc/simpleServerTestDescriptor.xml"); File textFile = JUnitExtension.getFile("test.txt"); String text = null; try { text = FileUtils.file2String(textFile, "utf-8"); } catch (IOException e1) { e1.printStackTrace(); assertTrue(false); } AnalysisEngineDescription aeDesc = null; try { aeDesc = (AnalysisEngineDescription) parser.parse(new XMLInputSource(descriptorFile)); } catch (InvalidXMLException e) { e.printStackTrace(); assertTrue(false); } catch (IOException e) { e.printStackTrace(); assertTrue(false); } AnalysisEngine ae = null; try { ae = UIMAFramework.produceAnalysisEngine(aeDesc); } catch (ResourceInitializationException e) { e.printStackTrace(); assertTrue(false); } JCas cas = null; try { cas = ae.newJCas(); } catch (ResourceInitializationException e) { e.printStackTrace(); assertTrue(false); } cas.setDocumentText(text); try { ae.process(cas); } catch (AnalysisEngineProcessException e) { e.printStackTrace(); assertTrue(false); } return cas; } } uima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/Annotator.java0000644000175000017500000000414311625126444032202 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.test; import org.apache.uima.analysis_engine.ResultSpecification; import org.apache.uima.analysis_engine.annotator.JTextAnnotator_ImplBase; import org.apache.uima.jcas.JCas; /** * Test case annotator. */ public class Annotator extends JTextAnnotator_ImplBase { public Annotator() { super(); } public void process(JCas jcas, ResultSpecification _rs) { final String text = jcas.getDocumentText(); TypeWithListsAndArrays fs0 = new TypeWithListsAndArrays(jcas); fs0.setStringList("foo"); TypeWithListsAndArrays fs1 = new TypeWithListsAndArrays(jcas); fs1.setStringList(null); for (int i = 0; i < text.length(); i++) { CharacterAnnotation ca = new CharacterAnnotation(jcas, i, i+1); if ((i % 2) == 0) { if ((i % 4) == 0) { ca.setFsFeature(fs0); } else { ca.setFsFeature(fs1); } } ca.setBooleanFeature((i % 10) == 0); ca.setByteFeature((byte) (i % Byte.MAX_VALUE)); ca.setDoubleFeature(i); ca.setFloatFeature(i); ca.setIntegerFeature(i); ca.setLongFeature(i); ca.setShortFeature((short) (i % Short.MAX_VALUE)); ca.setStringFeature(Integer.toString(i)); ca.addToIndexes(); } } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/TypeWithListsAndArrays_Type.javauima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/TypeWithListsAndArray0000644000175000017500000001462011625126444033534 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Nov 22 13:50:18 CET 2007 */ package org.apache.uima.simpleserver.test; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Nov 22 13:50:18 CET 2007 * * @generated */ public class TypeWithListsAndArrays_Type extends TOP_Type { /** @generated */ @Override protected FSGenerator getFSGenerator() { return this.fsGenerator; } /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (TypeWithListsAndArrays_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = TypeWithListsAndArrays_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new TypeWithListsAndArrays(addr, TypeWithListsAndArrays_Type.this); TypeWithListsAndArrays_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } return new TypeWithListsAndArrays(addr, TypeWithListsAndArrays_Type.this); } }; /** @generated */ @SuppressWarnings("hiding") public final static int typeIndexID = TypeWithListsAndArrays.typeIndexID; /** * @generated * @modifiable */ public final static boolean featOkTst = JCasRegistry .getFeatOkTst("org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); /** @generated */ final Feature casFeat_stringList; /** @generated */ final int casFeatCode_stringList; /** @generated */ public String getStringList(int addr) { if (featOkTst && this.casFeat_stringList == null) { this.jcas.throwFeatMissing("stringList", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } return this.ll_cas.ll_getStringValue(addr, this.casFeatCode_stringList); } /** @generated */ public void setStringList(int addr, String v) { if (featOkTst && this.casFeat_stringList == null) { this.jcas.throwFeatMissing("stringList", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } this.ll_cas.ll_setStringValue(addr, this.casFeatCode_stringList, v); } /** @generated */ final Feature casFeat_annotationArray; /** @generated */ final int casFeatCode_annotationArray; /** @generated */ public int getAnnotationArray(int addr) { if (featOkTst && this.casFeat_annotationArray == null) { this.jcas.throwFeatMissing("annotationArray", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } return this.ll_cas.ll_getRefValue(addr, this.casFeatCode_annotationArray); } /** @generated */ public void setAnnotationArray(int addr, int v) { if (featOkTst && this.casFeat_annotationArray == null) { this.jcas.throwFeatMissing("annotationArray", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } this.ll_cas.ll_setRefValue(addr, this.casFeatCode_annotationArray, v); } /** @generated */ public int getAnnotationArray(int addr, int i) { if (featOkTst && this.casFeat_annotationArray == null) { this.jcas.throwFeatMissing("annotationArray", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } if (this.lowLevelTypeChecks) { return this.ll_cas.ll_getRefArrayValue(this.ll_cas.ll_getRefValue(addr, this.casFeatCode_annotationArray), i, true); } this.jcas.checkArrayBounds(this.ll_cas.ll_getRefValue(addr, this.casFeatCode_annotationArray), i); return this.ll_cas.ll_getRefArrayValue(this.ll_cas.ll_getRefValue(addr, this.casFeatCode_annotationArray), i); } /** @generated */ public void setAnnotationArray(int addr, int i, int v) { if (featOkTst && this.casFeat_annotationArray == null) { this.jcas.throwFeatMissing("annotationArray", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } if (this.lowLevelTypeChecks) { this.ll_cas.ll_setRefArrayValue(this.ll_cas.ll_getRefValue(addr, this.casFeatCode_annotationArray), i, v, true); } this.jcas.checkArrayBounds(this.ll_cas.ll_getRefValue(addr, this.casFeatCode_annotationArray), i); this.ll_cas.ll_setRefArrayValue(this.ll_cas.ll_getRefValue(addr, this.casFeatCode_annotationArray), i, v); } /** * initialize variables to correspond with Cas Type and Features * * @generated */ public TypeWithListsAndArrays_Type(JCas jcas, Type casType) { super(jcas, casType); this.casImpl.getFSClassRegistry() .addGeneratorForType((TypeImpl) this.casType, getFSGenerator()); this.casFeat_stringList = jcas.getRequiredFeatureDE(casType, "stringList", "uima.cas.String", featOkTst); this.casFeatCode_stringList = null == this.casFeat_stringList ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_stringList).getCode(); this.casFeat_annotationArray = jcas.getRequiredFeatureDE(casType, "annotationArray", "uima.cas.FSArray", featOkTst); this.casFeatCode_annotationArray = null == this.casFeat_annotationArray ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_annotationArray).getCode(); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/CharacterAnnotation.javauima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/CharacterAnnotation.j0000644000175000017500000003060711625126444033500 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Nov 22 13:50:18 CET 2007 */ package org.apache.uima.simpleserver.test; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Updated by JCasGen Thu Nov 22 13:50:18 CET 2007 XML source: * C:/code/ApacheUIMA/SimpleServer/src/test/resources/desc/simpleServerTestDescriptor.xml * * @generated */ public class CharacterAnnotation extends Annotation { /** * @generated * @ordered */ @SuppressWarnings("hiding") public final static int typeIndexID = JCasRegistry.register(CharacterAnnotation.class); /** * @generated * @ordered */ @SuppressWarnings("hiding") public final static int type = typeIndexID; /** @generated */ @Override public int getTypeIndexID() { return typeIndexID; } /** * Never called. Disable default constructor * * @generated */ protected CharacterAnnotation() { // unused } /** * Internal - constructor used by generator * * @generated */ public CharacterAnnotation(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public CharacterAnnotation(JCas jcas) { super(jcas); readObject(); } /** @generated */ public CharacterAnnotation(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * * @generated modifiable */ private void readObject() { // doesn't need to do anything } // *--------------* // * Feature: booleanFeature /** * getter for booleanFeature - gets * * @generated */ public boolean getBooleanFeature() { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_booleanFeature == null) { this.jcasType.jcas.throwFeatMissing("booleanFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.jcasType.ll_cas.ll_getBooleanValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_booleanFeature); } /** * setter for booleanFeature - sets * * @generated */ public void setBooleanFeature(boolean v) { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_booleanFeature == null) { this.jcasType.jcas.throwFeatMissing("booleanFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.jcasType.ll_cas.ll_setBooleanValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_booleanFeature, v); } // *--------------* // * Feature: byteFeature /** * getter for byteFeature - gets * * @generated */ public byte getByteFeature() { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_byteFeature == null) { this.jcasType.jcas.throwFeatMissing("byteFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.jcasType.ll_cas.ll_getByteValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_byteFeature); } /** * setter for byteFeature - sets * * @generated */ public void setByteFeature(byte v) { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_byteFeature == null) { this.jcasType.jcas.throwFeatMissing("byteFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.jcasType.ll_cas.ll_setByteValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_byteFeature, v); } // *--------------* // * Feature: shortFeature /** * getter for shortFeature - gets * * @generated */ public short getShortFeature() { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_shortFeature == null) { this.jcasType.jcas.throwFeatMissing("shortFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.jcasType.ll_cas.ll_getShortValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_shortFeature); } /** * setter for shortFeature - sets * * @generated */ public void setShortFeature(short v) { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_shortFeature == null) { this.jcasType.jcas.throwFeatMissing("shortFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.jcasType.ll_cas.ll_setShortValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_shortFeature, v); } // *--------------* // * Feature: integerFeature /** * getter for integerFeature - gets * * @generated */ public int getIntegerFeature() { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_integerFeature == null) { this.jcasType.jcas.throwFeatMissing("integerFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.jcasType.ll_cas.ll_getIntValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_integerFeature); } /** * setter for integerFeature - sets * * @generated */ public void setIntegerFeature(int v) { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_integerFeature == null) { this.jcasType.jcas.throwFeatMissing("integerFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.jcasType.ll_cas.ll_setIntValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_integerFeature, v); } // *--------------* // * Feature: longFeature /** * getter for longFeature - gets * * @generated */ public long getLongFeature() { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_longFeature == null) { this.jcasType.jcas.throwFeatMissing("longFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.jcasType.ll_cas.ll_getLongValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_longFeature); } /** * setter for longFeature - sets * * @generated */ public void setLongFeature(long v) { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_longFeature == null) { this.jcasType.jcas.throwFeatMissing("longFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.jcasType.ll_cas.ll_setLongValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_longFeature, v); } // *--------------* // * Feature: floatFeature /** * getter for floatFeature - gets * * @generated */ public float getFloatFeature() { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_floatFeature == null) { this.jcasType.jcas.throwFeatMissing("floatFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.jcasType.ll_cas.ll_getFloatValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_floatFeature); } /** * setter for floatFeature - sets * * @generated */ public void setFloatFeature(float v) { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_floatFeature == null) { this.jcasType.jcas.throwFeatMissing("floatFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.jcasType.ll_cas.ll_setFloatValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_floatFeature, v); } // *--------------* // * Feature: doubleFeature /** * getter for doubleFeature - gets * * @generated */ public double getDoubleFeature() { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_doubleFeature == null) { this.jcasType.jcas.throwFeatMissing("doubleFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.jcasType.ll_cas.ll_getDoubleValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_doubleFeature); } /** * setter for doubleFeature - sets * * @generated */ public void setDoubleFeature(double v) { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_doubleFeature == null) { this.jcasType.jcas.throwFeatMissing("doubleFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.jcasType.ll_cas.ll_setDoubleValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_doubleFeature, v); } // *--------------* // * Feature: stringFeature /** * getter for stringFeature - gets * * @generated */ public String getStringFeature() { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_stringFeature == null) { this.jcasType.jcas.throwFeatMissing("stringFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.jcasType.ll_cas.ll_getStringValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_stringFeature); } /** * setter for stringFeature - sets * * @generated */ public void setStringFeature(String v) { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_stringFeature == null) { this.jcasType.jcas.throwFeatMissing("stringFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.jcasType.ll_cas.ll_setStringValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_stringFeature, v); } // *--------------* // * Feature: fsFeature /** * getter for fsFeature - gets * * @generated */ public TypeWithListsAndArrays getFsFeature() { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_fsFeature == null) { this.jcasType.jcas.throwFeatMissing("fsFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return (TypeWithListsAndArrays) this.jcasType.ll_cas .ll_getFSForRef(this.jcasType.ll_cas.ll_getRefValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_fsFeature)); } /** * setter for fsFeature - sets * * @generated */ public void setFsFeature(TypeWithListsAndArrays v) { if (CharacterAnnotation_Type.featOkTst && ((CharacterAnnotation_Type) this.jcasType).casFeat_fsFeature == null) { this.jcasType.jcas.throwFeatMissing("fsFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.jcasType.ll_cas.ll_setRefValue(this.addr, ((CharacterAnnotation_Type) this.jcasType).casFeatCode_fsFeature, this.jcasType.ll_cas .ll_getFSRef(v)); } } uima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/ServerTest.java0000644000175000017500000001200211625126444032334 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.test; import static org.junit.Assert.*; import java.io.File; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.http.HttpResponse; import org.apache.uima.simpleserver.servlet.SimpleServerServlet; import org.apache.uima.simpleserver.util.HttpClientUtils; import org.apache.uima.simpleserver.util.JettyUtils; import org.apache.uima.test.junit_extension.JUnitExtension; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.mortbay.jetty.Server; public class ServerTest { public static class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse response) throws IOException { response.setContentType("text/html"); response.setCharacterEncoding(SimpleServerServlet.DEFAULT_CODE_PAGE); response.getWriter().println("

Hello SimpleServlet

"); response.setStatus(HttpServletResponse.SC_OK); } } private static Server server = null; @BeforeClass public static void setUp() { // Set up the server server = JettyUtils.createServer(); assertNotNull(server); // Add servlets JettyUtils.addServletWithMapping(server, HelloServlet.class, "/hello"); // Set up UIMA servlet SimpleServerServlet uimaServlet = new SimpleServerServlet(true); File descriptorFile = JUnitExtension.getFile("desc/simpleServerTestDescriptor.xml"); assertTrue(descriptorFile.exists()); File specFile = JUnitExtension.getFile("serverspec/spec01.xml"); assertTrue(specFile.exists()); try { uimaServlet.init(descriptorFile, specFile); } catch (ServletException e1) { e1.printStackTrace(); assertTrue(false); } JettyUtils.addServletWithMapping(server, uimaServlet, "/uima"); // Set up config-less UIMA servlet SimpleServerServlet uimaNoConfigServlet = new SimpleServerServlet(true); try { uimaNoConfigServlet.init(descriptorFile, null); } catch (ServletException e1) { e1.printStackTrace(); assertTrue(false); } JettyUtils.addServletWithMapping(server, uimaNoConfigServlet, "/uima-no-config"); // Start the server try { server.start(); } catch (Exception e) { e.printStackTrace(); assertTrue("Exception running Jetty", false); } } /** * Test connection to Jetty. If this test fails, none of the others will go through. Start * investigating here. */ @Test public void test() { try { HttpResponse response = HttpClientUtils.callGet(JettyUtils.getHost(server), JettyUtils .getPort(server), "/hello"); assertTrue(response.getStatusLine().getStatusCode() == HttpServletResponse.SC_OK); System.out.println(HttpClientUtils.getResponseContent(response)); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } @Test public void test1() { try { HttpResponse response = HttpClientUtils.callGet(JettyUtils.getHost(server), JettyUtils .getPort(server), "/uima?text=foo%20bar"); assertTrue(response.getStatusLine().getStatusCode() == HttpServletResponse.SC_OK); System.out.println(HttpClientUtils.getResponseContent(response)); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } @Test public void test2() { try { HttpResponse response = HttpClientUtils.callGet(JettyUtils.getHost(server), JettyUtils .getPort(server), "/uima-no-config?text=foo%20bar"); assertTrue(response.getStatusLine().getStatusCode() == HttpServletResponse.SC_OK); System.out.println(HttpClientUtils.getResponseContent(response)); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } @AfterClass public static void tearDown() { try { server.stop(); } catch (Exception e) { e.printStackTrace(); assertTrue("Exception shutting down Jetty", false); } } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/CharacterAnnotation_Type.javauima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/CharacterAnnotation_T0000644000175000017500000003102611625126444033527 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Nov 22 13:50:18 CET 2007 */ package org.apache.uima.simpleserver.test; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Thu Nov 22 13:50:18 CET 2007 * * @generated */ public class CharacterAnnotation_Type extends Annotation_Type { /** @generated */ @Override protected FSGenerator getFSGenerator() { return this.fsGenerator; } /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (CharacterAnnotation_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = CharacterAnnotation_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new CharacterAnnotation(addr, CharacterAnnotation_Type.this); CharacterAnnotation_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } return new CharacterAnnotation(addr, CharacterAnnotation_Type.this); } }; /** @generated */ @SuppressWarnings("hiding") public final static int typeIndexID = CharacterAnnotation.typeIndexID; /** * @generated * @modifiable */ @SuppressWarnings("hiding") public final static boolean featOkTst = JCasRegistry .getFeatOkTst("org.apache.uima.simpleserver.test.CharacterAnnotation"); /** @generated */ final Feature casFeat_booleanFeature; /** @generated */ final int casFeatCode_booleanFeature; /** @generated */ public boolean getBooleanFeature(int addr) { if (featOkTst && this.casFeat_booleanFeature == null) { this.jcas.throwFeatMissing("booleanFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.ll_cas.ll_getBooleanValue(addr, this.casFeatCode_booleanFeature); } /** @generated */ public void setBooleanFeature(int addr, boolean v) { if (featOkTst && this.casFeat_booleanFeature == null) { this.jcas.throwFeatMissing("booleanFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.ll_cas.ll_setBooleanValue(addr, this.casFeatCode_booleanFeature, v); } /** @generated */ final Feature casFeat_byteFeature; /** @generated */ final int casFeatCode_byteFeature; /** @generated */ public byte getByteFeature(int addr) { if (featOkTst && this.casFeat_byteFeature == null) { this.jcas.throwFeatMissing("byteFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.ll_cas.ll_getByteValue(addr, this.casFeatCode_byteFeature); } /** @generated */ public void setByteFeature(int addr, byte v) { if (featOkTst && this.casFeat_byteFeature == null) { this.jcas.throwFeatMissing("byteFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.ll_cas.ll_setByteValue(addr, this.casFeatCode_byteFeature, v); } /** @generated */ final Feature casFeat_shortFeature; /** @generated */ final int casFeatCode_shortFeature; /** @generated */ public short getShortFeature(int addr) { if (featOkTst && this.casFeat_shortFeature == null) { this.jcas.throwFeatMissing("shortFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.ll_cas.ll_getShortValue(addr, this.casFeatCode_shortFeature); } /** @generated */ public void setShortFeature(int addr, short v) { if (featOkTst && this.casFeat_shortFeature == null) { this.jcas.throwFeatMissing("shortFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.ll_cas.ll_setShortValue(addr, this.casFeatCode_shortFeature, v); } /** @generated */ final Feature casFeat_integerFeature; /** @generated */ final int casFeatCode_integerFeature; /** @generated */ public int getIntegerFeature(int addr) { if (featOkTst && this.casFeat_integerFeature == null) { this.jcas.throwFeatMissing("integerFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.ll_cas.ll_getIntValue(addr, this.casFeatCode_integerFeature); } /** @generated */ public void setIntegerFeature(int addr, int v) { if (featOkTst && this.casFeat_integerFeature == null) { this.jcas.throwFeatMissing("integerFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.ll_cas.ll_setIntValue(addr, this.casFeatCode_integerFeature, v); } /** @generated */ final Feature casFeat_longFeature; /** @generated */ final int casFeatCode_longFeature; /** @generated */ public long getLongFeature(int addr) { if (featOkTst && this.casFeat_longFeature == null) { this.jcas.throwFeatMissing("longFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.ll_cas.ll_getLongValue(addr, this.casFeatCode_longFeature); } /** @generated */ public void setLongFeature(int addr, long v) { if (featOkTst && this.casFeat_longFeature == null) { this.jcas.throwFeatMissing("longFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.ll_cas.ll_setLongValue(addr, this.casFeatCode_longFeature, v); } /** @generated */ final Feature casFeat_floatFeature; /** @generated */ final int casFeatCode_floatFeature; /** @generated */ public float getFloatFeature(int addr) { if (featOkTst && this.casFeat_floatFeature == null) { this.jcas.throwFeatMissing("floatFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.ll_cas.ll_getFloatValue(addr, this.casFeatCode_floatFeature); } /** @generated */ public void setFloatFeature(int addr, float v) { if (featOkTst && this.casFeat_floatFeature == null) { this.jcas.throwFeatMissing("floatFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.ll_cas.ll_setFloatValue(addr, this.casFeatCode_floatFeature, v); } /** @generated */ final Feature casFeat_doubleFeature; /** @generated */ final int casFeatCode_doubleFeature; /** @generated */ public double getDoubleFeature(int addr) { if (featOkTst && this.casFeat_doubleFeature == null) { this.jcas.throwFeatMissing("doubleFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.ll_cas.ll_getDoubleValue(addr, this.casFeatCode_doubleFeature); } /** @generated */ public void setDoubleFeature(int addr, double v) { if (featOkTst && this.casFeat_doubleFeature == null) { this.jcas.throwFeatMissing("doubleFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.ll_cas.ll_setDoubleValue(addr, this.casFeatCode_doubleFeature, v); } /** @generated */ final Feature casFeat_stringFeature; /** @generated */ final int casFeatCode_stringFeature; /** @generated */ public String getStringFeature(int addr) { if (featOkTst && this.casFeat_stringFeature == null) { this.jcas.throwFeatMissing("stringFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.ll_cas.ll_getStringValue(addr, this.casFeatCode_stringFeature); } /** @generated */ public void setStringFeature(int addr, String v) { if (featOkTst && this.casFeat_stringFeature == null) { this.jcas.throwFeatMissing("stringFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.ll_cas.ll_setStringValue(addr, this.casFeatCode_stringFeature, v); } /** @generated */ final Feature casFeat_fsFeature; /** @generated */ final int casFeatCode_fsFeature; /** @generated */ public int getFsFeature(int addr) { if (featOkTst && this.casFeat_fsFeature == null) { this.jcas.throwFeatMissing("fsFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } return this.ll_cas.ll_getRefValue(addr, this.casFeatCode_fsFeature); } /** @generated */ public void setFsFeature(int addr, int v) { if (featOkTst && this.casFeat_fsFeature == null) { this.jcas.throwFeatMissing("fsFeature", "org.apache.uima.simpleserver.test.CharacterAnnotation"); } this.ll_cas.ll_setRefValue(addr, this.casFeatCode_fsFeature, v); } /** * initialize variables to correspond with Cas Type and Features * * @generated */ public CharacterAnnotation_Type(JCas jcas, Type casType) { super(jcas, casType); this.casImpl.getFSClassRegistry() .addGeneratorForType((TypeImpl) this.casType, getFSGenerator()); this.casFeat_booleanFeature = jcas.getRequiredFeatureDE(casType, "booleanFeature", "uima.cas.Boolean", featOkTst); this.casFeatCode_booleanFeature = null == this.casFeat_booleanFeature ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_booleanFeature).getCode(); this.casFeat_byteFeature = jcas.getRequiredFeatureDE(casType, "byteFeature", "uima.cas.Byte", featOkTst); this.casFeatCode_byteFeature = null == this.casFeat_byteFeature ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_byteFeature).getCode(); this.casFeat_shortFeature = jcas.getRequiredFeatureDE(casType, "shortFeature", "uima.cas.Short", featOkTst); this.casFeatCode_shortFeature = null == this.casFeat_shortFeature ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_shortFeature).getCode(); this.casFeat_integerFeature = jcas.getRequiredFeatureDE(casType, "integerFeature", "uima.cas.Integer", featOkTst); this.casFeatCode_integerFeature = null == this.casFeat_integerFeature ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_integerFeature).getCode(); this.casFeat_longFeature = jcas.getRequiredFeatureDE(casType, "longFeature", "uima.cas.Long", featOkTst); this.casFeatCode_longFeature = null == this.casFeat_longFeature ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_longFeature).getCode(); this.casFeat_floatFeature = jcas.getRequiredFeatureDE(casType, "floatFeature", "uima.cas.Float", featOkTst); this.casFeatCode_floatFeature = null == this.casFeat_floatFeature ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_floatFeature).getCode(); this.casFeat_doubleFeature = jcas.getRequiredFeatureDE(casType, "doubleFeature", "uima.cas.Double", featOkTst); this.casFeatCode_doubleFeature = null == this.casFeat_doubleFeature ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_doubleFeature).getCode(); this.casFeat_stringFeature = jcas.getRequiredFeatureDE(casType, "stringFeature", "uima.cas.String", featOkTst); this.casFeatCode_stringFeature = null == this.casFeat_stringFeature ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_stringFeature).getCode(); this.casFeat_fsFeature = jcas.getRequiredFeatureDE(casType, "fsFeature", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays", featOkTst); this.casFeatCode_fsFeature = null == this.casFeat_fsFeature ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl) this.casFeat_fsFeature).getCode(); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/TypeWithListsAndArrays.javauima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/TypeWithListsAndArray0000644000175000017500000001456711625126444033546 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Nov 22 13:50:18 CET 2007 */ package org.apache.uima.simpleserver.test; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.FSArray; import org.apache.uima.jcas.cas.TOP; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Nov 22 13:50:18 CET 2007 XML source: * C:/code/ApacheUIMA/SimpleServer/src/test/resources/desc/simpleServerTestDescriptor.xml * * @generated */ public class TypeWithListsAndArrays extends TOP { /** * @generated * @ordered */ @SuppressWarnings("hiding") public final static int typeIndexID = JCasRegistry.register(TypeWithListsAndArrays.class); /** * @generated * @ordered */ @SuppressWarnings("hiding") public final static int type = typeIndexID; /** @generated */ @Override public int getTypeIndexID() { return typeIndexID; } /** * Never called. Disable default constructor * * @generated */ protected TypeWithListsAndArrays() { // not used } /** * Internal - constructor used by generator * * @generated */ public TypeWithListsAndArrays(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public TypeWithListsAndArrays(JCas jcas) { super(jcas); readObject(); } /** * Write your own initialization here * * @generated modifiable */ private void readObject() { // doesn't need to do anything } // *--------------* // * Feature: stringList /** * getter for stringList - gets * * @generated */ public String getStringList() { if (TypeWithListsAndArrays_Type.featOkTst && ((TypeWithListsAndArrays_Type) this.jcasType).casFeat_stringList == null) { this.jcasType.jcas.throwFeatMissing("stringList", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } return this.jcasType.ll_cas.ll_getStringValue(this.addr, ((TypeWithListsAndArrays_Type) this.jcasType).casFeatCode_stringList); } /** * setter for stringList - sets * * @generated */ public void setStringList(String v) { if (TypeWithListsAndArrays_Type.featOkTst && ((TypeWithListsAndArrays_Type) this.jcasType).casFeat_stringList == null) { this.jcasType.jcas.throwFeatMissing("stringList", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } this.jcasType.ll_cas.ll_setStringValue(this.addr, ((TypeWithListsAndArrays_Type) this.jcasType).casFeatCode_stringList, v); } // *--------------* // * Feature: annotationArray /** * getter for annotationArray - gets * * @generated */ public FSArray getAnnotationArray() { if (TypeWithListsAndArrays_Type.featOkTst && ((TypeWithListsAndArrays_Type) this.jcasType).casFeat_annotationArray == null) { this.jcasType.jcas.throwFeatMissing("annotationArray", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } return (FSArray) this.jcasType.ll_cas.ll_getFSForRef(this.jcasType.ll_cas.ll_getRefValue( this.addr, ((TypeWithListsAndArrays_Type) this.jcasType).casFeatCode_annotationArray)); } /** * setter for annotationArray - sets * * @generated */ public void setAnnotationArray(FSArray v) { if (TypeWithListsAndArrays_Type.featOkTst && ((TypeWithListsAndArrays_Type) this.jcasType).casFeat_annotationArray == null) { this.jcasType.jcas.throwFeatMissing("annotationArray", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } this.jcasType.ll_cas.ll_setRefValue(this.addr, ((TypeWithListsAndArrays_Type) this.jcasType).casFeatCode_annotationArray, this.jcasType.ll_cas.ll_getFSRef(v)); } /** * indexed getter for annotationArray - gets an indexed value - * * @generated */ public TOP getAnnotationArray(int i) { if (TypeWithListsAndArrays_Type.featOkTst && ((TypeWithListsAndArrays_Type) this.jcasType).casFeat_annotationArray == null) { this.jcasType.jcas.throwFeatMissing("annotationArray", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } this.jcasType.jcas.checkArrayBounds(this.jcasType.ll_cas.ll_getRefValue(this.addr, ((TypeWithListsAndArrays_Type) this.jcasType).casFeatCode_annotationArray), i); return (TOP) this.jcasType.ll_cas.ll_getFSForRef(this.jcasType.ll_cas.ll_getRefArrayValue( this.jcasType.ll_cas.ll_getRefValue(this.addr, ((TypeWithListsAndArrays_Type) this.jcasType).casFeatCode_annotationArray), i)); } /** * indexed setter for annotationArray - sets an indexed value - * * @generated */ public void setAnnotationArray(int i, TOP v) { if (TypeWithListsAndArrays_Type.featOkTst && ((TypeWithListsAndArrays_Type) this.jcasType).casFeat_annotationArray == null) { this.jcasType.jcas.throwFeatMissing("annotationArray", "org.apache.uima.simpleserver.test.TypeWithListsAndArrays"); } this.jcasType.jcas.checkArrayBounds(this.jcasType.ll_cas.ll_getRefValue(this.addr, ((TypeWithListsAndArrays_Type) this.jcasType).casFeatCode_annotationArray), i); this.jcasType.ll_cas.ll_setRefArrayValue(this.jcasType.ll_cas.ll_getRefValue(this.addr, ((TypeWithListsAndArrays_Type) this.jcasType).casFeatCode_annotationArray), i, this.jcasType.ll_cas.ll_getFSRef(v)); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootuima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/ServerFailureTest.javauima-addons-2.3.1/SimpleServer/src/test/java/org/apache/uima/simpleserver/test/ServerFailureTest.jav0000644000175000017500000000464711625126444033523 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.simpleserver.test; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import javax.servlet.http.HttpServletResponse; import org.apache.http.HttpResponse; import org.apache.uima.simpleserver.servlet.SimpleServerServlet; import org.apache.uima.simpleserver.util.HttpClientUtils; import org.apache.uima.simpleserver.util.JettyUtils; import org.junit.Test; import org.mortbay.jetty.Server; /** * Test server errors. */ public class ServerFailureTest { @Test public void uimaServiceNotInitialized() { Server server = JettyUtils.createServer(); assertNotNull(server); String pathSpec = "/notinitialized"; // Create a simple service but don't initialize it (should throw http error 500 when called) JettyUtils.addServletWithMapping(server, new SimpleServerServlet(true), pathSpec); try { server.start(); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } try { HttpResponse response = HttpClientUtils.callGet(JettyUtils.getHost(server), JettyUtils.getPort(server), pathSpec); assertTrue("Expected http return code 500 (internal server error)", (response.getStatusLine() .getStatusCode() == HttpServletResponse.SC_INTERNAL_SERVER_ERROR)); System.out.println(HttpClientUtils.getResponseContent(response)); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } try { server.stop(); server.join(); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } } uima-addons-2.3.1/SimpleServer/src/docbook/0000755000175000017500000000000011625126446020450 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/docbook/simpleServerUserGuide.xml0000644000175000017500000002732211625126446025475 0ustar drazzibdrazzib ]> UIMA Simple Server User Guide Introduction The UIMA Simple Server makes results of UIMA processing available in a simple, XML-based format. The intended use of the the Simple Server is to provide UIMA analysis as a REST service. The Simple Server is implemented as a Java Servlet, and can be deployed into any Servlet container (such as Apache Tomcat or Jetty). You can make your UIMA analysis available as follows: Package you analysis as a UIMA PEAR file. Create a mapping file that tells the server what analysis results to show in which format. Create a WAR file for deployment into the servle container with appropriate WEB.xml. Deploy the WAR file into the server. In the following, we will explain how to perform each of these steps.
Quick start for the impatient If you're familiar with UIMA and servlets, you can start right here and get your first simple service running in a few minutes. If not, not to worry. We'll go over this in much more detail later on. To follow the quick start guide, you will need to have: Tomcat or some other servlet container installed. Installing Tomcat is a breeze, see . For the purposes of this documentation, we have used Apache Tomcat 6.0.20, but other versions should work just as well if they're not too old. The latest Apache UIMA release, plus the Apache UIMA sandbox add-ons. See the Apache UIMA download site. Doing all this from Eclipse is convenient, but not required. If you work with Eclipse, it is useful to use the Web Tools Platform. Alternatively, just install the J2EE development version of Eclipse. The screenshots for this documentation were done with the J2EE development version of Eclipse 3.5.0 (Galileo).
Build a sample WAR file Create a Web ARchive project in your favorite development environment. We'll show you how to do this in Eclipse, but if you don't use Eclipse, you'll figure out how to do this without. Create a new "dynamic web project" called "simple-server-test" (or whatever you like). Below is a series of screenshots that show how to create such a project. New project dialog: select "dynamic web project" Below is the next step in the dialog, where you can set the project name and the intended runtime. If you haven't done so yet, point Eclipse to your Tomcat installation. New project dialog: note server runtime Hit finish next, accepting default settings for the rest of the project setup. We'll now describe what jar files you need to package in your WAR file for the application to run. Note that these are jars that you will need for each and every UIMA service you deploy. So if you deploy several different services into the same servlet container, you can also copy those jars to the shared lib directory of your servlet container: you then don't have to deploy them with each UIMA service. However, for the purposes of this example, we will deploy the common jars with the WAR file. Below is list of the required files from the SimpleServer project. SimpleServer/lib/uima-simple-server.jar SimpleServer/lib/uima-simple-server-xbean.jar SimpleServer/lib/jsr173_1.0_api.jar SimpleServer/lib/xbean.jar In addition, you also need ${UIMA_HOME}/lib/uima-core.jar from your UIMA distribution. Make sure you have the UIMA core version that has the same version number as the sandbox distribution. An older version may not work. Copy all those jar files into the WebContent/WEB-INF/lib directory of your sample project. Note how Eclipse automatically adds the jars to the Java build path under "Web App Libraries". We now need to add some actual analysis to run in our services. For simplicity, we'll use the simple tokenizer that comes with the sandbox distribution. In your sample project, create a new directory WebContent/WEB-INF/resources, and copy WhitespaceTokenizer/WhitespaceTokenizer.pear there. Your project layout should now look like this: Sample web project layout Finally, you need to update your web.xml descriptor. Edit the WebContent/WEB-INF/web.xml file in your sample project. Minimally, it should look like this: simple-server-test simple-server-test org.apache.uima.simpleserver.servlet.SimpleServerServlet PearPath WEB-INF/resources/WhitespaceTokenizer.pear simple-server-test / ]]> If you're doing all of this in Eclipse, and you have Tomcat configured as a server, you can now right-click your project and select "Run on server...". This will start Tomcat and deploy web app. Alternatively, you can build a WAR file out of your project. In Eclipse, right-click your project, and select "Export/Web/WAR file". Save the WAR file to some location and deploy it in Tomcat (for example, using the admin web app that comes with Tomcat).
Trying it out This is it, your first simple service should be ready to run. Make sure Tomcat is running and direct your browser to the following URL: . You should see something like this: Info page of sample project This page basically explains what kind of requests this service can handle. To actually try some analysis, the service provides a simple html form you can use to test the service: . Sample app html form Now enter some text like "This is some sample text.", and at the bottom of the form, check the "XML document" button. Hit the "Submit Query" button. Sample app html form You should see output like this: Sample app html form result Use your browser's back button to go back to the form and experiment some more. Programmatic access to the service is described on the info page. You can also look at the unit tests in the source code for how to use Apache's HttpClient to call UIMA simple services.
uima-addons-2.3.1/SimpleServer/src/docbook/images/0000755000175000017500000000000011625126444021713 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/docbook/images/simpleServerUserGuide/0000755000175000017500000000000011625126446026212 5ustar drazzibdrazzibuima-addons-2.3.1/SimpleServer/src/docbook/images/simpleServerUserGuide/sample-app-form-bottom.jpg0000644000175000017500000006175711625126446033236 0ustar drazzibdrazzibÿØÿàJFIFÿÛCÿÛCÿÀ–á"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þ÷Ÿiâ]ââ=N×ñßöMøûÿøÕà/ƒ<{û@þÀÖ:GÄ?ÚâÂøI¦þÇ?´7‚üKã 3áů‰žñÌ ø³uûx|NÓ|?ã Ká—Â|DðäzÏÁßè–ºœÕ¦{3/‰GìG‰õkýÃ~ ×t¯ kž6Õ4mTÕtïxbãÃVž$ñmöŸc=ݧ†¼?uã?øGÁöÚÞ¹qzf—?мWáŸC}ušÞ¿£é«s¨[ÿ6Ÿ±çìÉã_‚<`?à‰~3ðgí£¦þП¯ê>Õ¿jOÙÓMñ^¤|K×õ_ ßümøggâ=;Bø1s¬Ù|aÖo´KÅ©Úi o|9â?‰:…Å´vž»Ðµ›M¥Í¦^¤)ðwþ û|eý—ü5ûaiÿµÀïü ñ©aá›ÿüRøÇð›Áv^ñÞ¥§C¬[|2ø…ª\xæïÞø›ý‘ugªÍàMK^_Á§ÞÚ]Ib±Ì¦¿¾~Å_´çÂ}#öbмÿÖñ—Áø¼+ÿsý¬j¿‡|Eûhzg…g¯Œ øåðïá¶»¨Ûø/ö›½—R¸Ð|ñ³Áž—Ã>±×üCá¿ ü-ñV‹¢éÓYé,ügÓü1ýŠj]à?ü–Ëâ÷ì‰û^ø’Ûö?øñWöHøµðGöxý¸¥âmGÄüN¿ð׈¬¾G¤Û]¿.ô jÛÃcR›J¾H>}ø§ûSüGøuÿýfkŸ|2ÓþüYý›?iOŒ¾'ø“¬xƒ^>?Ó¼Wð7]øMf4˜ô©,´øSÁÄ?ímK冻âÝKÄwWYÿdx ÏÂ_Úž8üÿý¿aXe¿ø(—Ž|ðÿþ á/ìÓð+Sý„þ|ðoÅ|uð#â=ÍŸ‹¼ã_ø¯ÄþñWŒOÅÿ~Ò&ñÿ‚u¿„¾ ×üI¯øgÄ5÷ˆ¾ÍáÈ þÖŸÿjO†~-ýž¿e+ãv…áØ;öðøNþ&ø§©|Ôgùþ,||ÒþÍð×À?~øûâÆƒñÅÞÕ®¾]èþ3K/†Ú÷„„~7ð•½õíî'çðb%ìã—ס³YqeJØz±‹(`p\U…É(bc‡I9âkåÙ^aJº«Ac*cð4(aà§­Æ*ØŒF­JTèÇî8Ç'OšY.ÇfU¨SÄFŸ,°±Ì±¹f#:Xšøà±ò©Së4ðŸ¤ÿ¿mØÓâ×…&²ñ7…>ÝxÓÇF÷èý­¼ûBüYñO‚?dßøÇßÿਠ¾?~ÆVÚ߈bAã+á§ìâO‚ßüIgð)¿nÏ‘|CµMá¾»i7„¼SñËà7‰ü)á_ˆ~ø™áýnûÅ>×þ^tJö’Jo“Û{ául¨æÜ)ÄâïR¾SÃÏšçù–”iÇZ†QÆ3œq\ôेIU¦ªSÁUǸÔj‡´”ø0ÍpÙ\båW—K1§€Éñ¸•R­5‰–'êøj®xe/ÝOÁH?àž[ÄËà/ÛÓö/ñ»x/ÂïÄ/¯„?j?þ%o øÂñÃ7‰¼qâa£xæôè>ðì7òë¾%Õ®‹¤G›Lð6¯|}á?Z’¯ÿ`ïø(f±û韲ÿŠ?bŠú¾§ÿ¸ðÿìÍeaðkã/ìYðãPÔ?hOê¿ámö·øßoñ»HøÑã_ºlÓxÅß¼ðkÆÚßÂzÛâ?Ämö˜øm3kwšW„³MsÂRNXu,IN¥±¸¨^iº¥Ž§“Y]ÝX^ÛÁ<’ÚΑ÷¶ÿ´ìówñŠÙÞ×ãÏÁ‹ŸÚ×@_Üü ·ø£ày¾1[øYì Ô“ijü2\oà>uk~ºÌš"éÍesй0Mü×ø‹Wøµ§üiø÷ñ?ÅŸ³oÇ#öHðoÇߨßãwí3aàm?ö(øÅñgÁßeï߳ψ­l‡Ä½3þ =áÿ|;›Ãš®‹ðóÁÿþü6ý˜jmwÆÞðæ½oðgâ0ñÆtð÷ƒ¾›øKÿô×íþ3ø·Ã?fÚƒÇ^(Ò¿iÏÚã¯Â/Û*_Ûçâ<Ÿ²~‹¥ütÕ> x“FñÖû'kµ–¡­øã·üñsÄ_®ü!cû"ÝxÄÞ Ð/uÙ¾'èÞñ¥Ö¥¥ˆT¥…§VŠŽ'8ã±èÂJœq8%„ɪå•põ¦þ¥ c*æXʸe‰ÇR–aÀáëžâóìxÎTeQTÃ*˜\²ue8}b8Lf&8Éæ8Z°¡/®U©”Ï ƒÂf40ø*¸Œ#6‚¯NUrç„ÌQ¾~ÖºG‹~ø÷ö±ø£âÏ„??c²ÑÏð{ÇÞ;ñl›\ø{¥kšžˆÿþ$øóÅz§‡¼ àüY½¸ÑçøOàT´½Ôtï[h^7ñ_fñ'ž|!õÛoÚ§ö`½ø{àÏ‹–´À[¿…îu{?‡¿­¾0|=Ÿáï.ü?¥x“]×­|ãH¼DþñEΉ¢x;ÅÚÆ¯‡©_K¦é^ñ&¡x°ÚhzœÖ¿‹¿ ¾ün¸ýŒÿà˜Ú? ÛüZøÉÿ™øŸð¿áçíQû#Ëâo x;Å>6Ö>|ñGìï∼7uñWðÇí¼sáý3Ç:/í-û;ÜüBñ'…>|GðÃxCÄÚOŽ4«x[űü‡ûRþÌz·ƒ?hßÙsö¼ñïì]m­xÓãïüÃþþÉš°ýšõßÐt¿ØÆšGŽí—Æ·<Ô>hŸ¾.|Pø+§|}Ôü?¢ür“áõ÷‹|5ðÓXñÄ‹YßjÞß +4x<6"52ùg9>OÍ>«Zœñ¸LÇ3ᬷœRËëT£Sýµ†Ï«æ°Ž½*XW–W¥Õ§‹§K/ÖJ£†'_õlM,—<ÎqYr«ÓÁâòŒ¿?Æâ2¬Ð§Ya%•ÓÉ0´3FK2XûÖÄÇ1ÃÔ­™þéüXÿ‚§þÀ?|/û=xûÄßµ_À]Gá·í9ñ7Wø]ð·â‡‡>5|!Ô¾_j>Ò|A©xÃÅþ:ŸÇv>Ox&ûB‡Â¾0ñ™¨ê©áïø›ÂÔ-bÔüEcwZí]ðÿá¯Âß|Tý¬¿iOØ×À Ñþ?üZøi |Hо1èžø[¥èúÄh¿¾øëƼGa¥Y|Ñü;¤G¤üZ𥖣®ŸñKñ%†‰a ’Åäo‰ÿdÚ¶Óâv‹ûgø{öXñÃÂIÿHð¿í®þÆø…û6/Æ?|;Ðÿbo~ÊÚ÷‹5=s]øÑáOÙ»Pø­ñƧHø…ã/øãι¥YxnûNþ.ñ'‰íu›¼Óö5ý—?m/ÙgÆ ~<é¿°gm>|2øÍÿ#ðÄŸ±¦ñö3Ñ<}á/…¿¶Æ ünø7ñ¯à]¶ûHÙÆ-KÀÚG„m> |Cð?ˆþ/ü=×4OøÄr|?&Ь–ßÅœX7*³¬«©a%ì13•Jïë8|4ªe<˜árúp£ 3ÅÕžm˜qGK6êžÅÐÇc³ &Æáè팎\,°³úÌܰujÓ‚úµzŽ8ßp¸Ú’•tþ«]—ðî7—ÎUcšVÄàá”â+×ÅåÏý xÇö¢ý™¾øSÃþ;øûE| ð7üYà»ß‰>ñ—Œ~.xÃ>ñ7ý7þŸíxÄZ׈,tgÁvðšø7í¾)Ó¯.t;_øK|3çßGý½¥}¯â'í›û| o‡Iñgö®ýšþ¿Æ *Ó\øHŸ>:|/ðK|RÑ/Ξ,u‡Kâ_釯úUéÕô¡i¨xdjv—'SÓÄ39½¶óþÁ>~6|ý«ÿf_×ß°f¡ñ3Ið_Ãoø)ŒšãÁZ·ì{uuû<\~Õ¿.þ)þÎ߲߅µ?‰?~k÷Ú¯ÂÏÉñÁ·ºŸƒ¬føAáüoÖ,<ã‹ßkÞ7ñ.‘ó®©û ÿÁD¼Oû iß³‹b/Šö­çüÓŸ²Î“§ü!ø¿û|/ÔµŽÿæø»§Úhµ¯Æmã½—Åÿ| ÑQ¾ø‡à'Ã߃>:×~k©ãï‰ZOí/ðæõ5Û‹O kFJP¥V¼'FRž¥|œ*ÔÃÒrâÅŽÁ,e>j8ŒnäÙ=*8º4[ŠžmJµ*²ÁâðŠ£ÃS”•:xê.W§Ž©FtéÖ•|nK‡ÂfrÀJªÅapÂãñùŽ/ˆ¬³:40“¡V–†Äá_ì5‡üö†ðïÅÛ“Xø¡ðãàå§ì×û~ÑZÉÁÇ5_‰ú'À¯|ø=ñKJý£î|G®Å£xsÄ3ü;ÆZçˆ~1| Ó|£]iÞÔ¯gøñÇ~'øGm£|}ýYð¿Ä߆þ8×¼oáoüAðG‹üOðÏVÓ4ˆþð¿‹4kßõÍkE²ñ.£xßHÒoîõ jÚ·‡5-;_Ó4ízÞÂòÿE¿²Õma–Æê äþr¤ð·í¡|ÿ‚¾x{ãìÇñ/à‹?à¡§Á¿d|Køû2ø—Ä~'|BýŒ¼û.Ùø;LÓ¾|~øØö:§‡üMàO|DñeΦm4Oü±Ô~#jzŶ‘á @ŸÓÄðê|,Ö<ãÍÇàö‰àoh|_}ðîëGøËk¤ø+EŽóÆžµðÄx³OÓ­¯Ò}Vƒâo†þx†MvÎú}+EÕ|>ú~¿½:\˜XRœ¡Wê™vIãa8JXìζYƒ©žáëºs:Œ®¼°˜Ê˜*ׯÖ\MP© ·)†øŠ¾Ò9uxQxic*æßXÁû*¼¸,5 ˜zÙ\¡Vj2ÄÇñyŽcS•K‡BžaŽ•i{EQXQEQEQEQEy÷ůj>øUñ3Ç:<6W:·ƒ>xÏÅš]¾¥óiׇ|9©kPßÃksgs-”·6q%Ôv÷v³¼ "Ãs…e^cû öˆÿ¢¥ð_ÿ /Ž?ú$(ý¤?äÝþ=Ùø¥ÿ¨>»^Ñ]±›£„¥8B“LF&•Jk7tð’‚^ÚNTI¿v׿÷¯enIAUÄÔ„åUF(J*jÔ—4êb›öS‡3jœ½{%¥¯+ø¿öíÿEKà¿þ_ôHQý…ûDÑRø/ÿ†ÇýíT}n¯òað‹ÿÌþ_ŸvWÕi6'ÿ 1ü¿ËóîÏþÂý¢?è©|ÿà ãþ‰ ?°¿hú*_ÿðÂøãÿ¢B½¢Š>·Wù0¿øEƒÿæ/Ï»ªÒþlOþbÿù—çÝž/ý…ûDÑRø/ÿ†Çýå_¿fÍgöˆð€ø}û@i¿²Ç? RË\øÅû!]|Mð€ÖôÕ¸M;Xñ¯ÇoFþÔ°K«¤²Ô>Åö»U¹¸X&ŒM o¯h¨–"SJ3¥ƒœT¡4§€ÀÉ)ÓœjSšRÃµÍ Œá-ã8©&¤®Tpðƒ¼*b¢ÜeãÆ&ã8¸N-ªé¸Î ÂKiFR‹MI§óO€¾|KøUàßü:ø_­þÍ? þxGN‹GðŸ|û0kþðo†4ˆÚ /þð÷í §hš. H펛cmm;”ˆ$õߨ_´Gý/‚ÿøa|qÿÑ!^ÑEi,myÊSšÃÎr“”¥,R”¤ï)JNƒr”ž­¶Ûm·vÝâ8:Œa^0„TcâñQŒc”cªÉ(¤’I+%¢ÐøSYý‹<7â?gí!â†ß°¦½ûCè’iòèßµŸØvÃTøÑ¤K¤X6—¥K¦|R¾øÙ?Ž,$Ó4Ç};O{]v&²°v³¶1[±Œýý…ûDÑRø/ÿ†ÇýíTÇVT¡ ,iFs©qÀà£Ϋ‹©5‡QS¨ãRI^m'&ÙRÂÓ”ÝIO*Ž麒ÆbÜÝ:IÆ”w' iµN-òÁ6¢’nÿ=Aðë㯉uO[xÃöz·ñŽ·¢h~Ö¼YìÝâ˜|K«øoÃÞ Õ<7áýS]öˆ]SPÑ<=©ø³Å:އ¤ÝÝKa¤ßx—Ävö÷Σ%Ï™|Sý“Óãž½à/|mðŸìYñ‹Äÿ µV×~øâŸìb> ëß õ·½ÒõÖ|¬x·ãž¯¨x?U}CCÑoÛQðõÆv׺>—tf3éöÚTSúånjsåÃsÑ”gJRÁóRœoË:rö„£wiE¦¯+=]ÛÃÂ^Óš¦*^ÖŸ²«ÍÆ?iIR…eRõß=?aQä•ãì£väI/ý…ûDÑRø/ÿ†Çýa~ÑôT¾ ÿá…ñÇÿD…{E}n¯òað‹ÿÌþ_ŸvOÕi6'ÿ 1ü¿ËóîÏþÂý¢?è©|ÿà ãþ‰ ?°¿hú*_ÿðÂøãÿ¢B½¢Š>·Wù0¿øEƒÿæ/Ï»ªÒþlOþbÿù—çÝŸ=\ü:øÅyâM#ÆW~0ýž®¼_áý^ðîƒâ»ŸÙ»Å3ø“DðÿŠ®ü?¨xŸBÒ5Ùh†Õ4ÝÄwþð­î½¦YÝCe¬]øgÃ÷:„hÚsÛnÿa~ÑôT¾ ÿá…ñÇÿD…{E}rµ£\7,”cõ,¢¥9U’ŠöJU':’·Å9Înòœ›o MÚóÄ»++ã1ŽÊ÷²ýþ×ÖÝÛîïæ?|Qâ/x-õ?I¢Ï¯éþ4ø¡á û¯iwÚ.}ÿÄïx×Q³Òu-oÄwºwö—‡-¯®-&×5?&êâtŽå¢ªúux¿À_ùõßû-´‡þ´GÅ*öŠœ\cV&1J1Ž"´c¤£ª’I$´I-Z%¢ $¥,.RnR–Œ¥)6å):qm¶õm½[z·« (¢¹Î€¢Š(¢Š(¢Š(Åÿiù7_öEþ)ê®×´W-ã›ÿé^ ñ~§âÝ"ÿÄÓ¼/¯Þø—AÒ¼¯|EÔõ½×J»›XÒ4ï‡þÑ|IâoßjZr\YÚøCþ×uÏO2hÚV©ß^Ae7㾓ÿ ÿ‚6j~ѼoáKo|0Öüo7Ãx~6|]ÿ‚qþÓ¿?gý+Ǿ,¾ðÿ‡ý‹u?ŒßÀ[…_n~+øsá§„þ0ëOƒK_‡8ñ/‹¼!áo'ˆÁëá{µÕ|EàOië¥ÙkW:Ý ÒÅíþ›ka¦Ý^zü3ìïÿDà¿þßÿòŠ¥C(B¢Äb]:Žª„Ö“„Þ[ ˆP’ÆòÉÐÅáñZ©6éâ(V£>Z”çŽX¸ÊP• :œcBrƒÅURŒ1XjÜ4åƒMGƒÄáñt$ÒU°ØŠé¹R­ ¿h¢¾+Õ×öо?x3öYÔüû;ÃûBxÿá犾,ø_áL ü'}⛟†¾ Õt­\ñ¦§‡†.­|7 ÿlëúV‹{â[­!|S¨YëÖžÌþñ"i^Ùÿ ßû;ÿÑø/ÿ†·Àÿü¢¢1ÁJ©F&P›¨¡8á)8MÑ­S YFKi:XŠ5èT³|•¨Ô¥+NŒ\ž6qž„d”$ã,MU%´áVœšx4íR•HUƒµ§Npœo¦{EâÿðÍÿ³¿ý_‚ÿøk|ÿÊ*?á›ÿgú ¿ÿðÖøÿ”Tù0ôŠÿÂJ_üÛëý='›ÿ>0ßøUWÿ˜ý§§´Q^/ÿ ßû;ÿÑø/ÿ†·Àÿü¢£þ¿öwÿ¢ ð_ÿ oÿùEG&þ‚1_øIKÿ›}§¡Í‹ÿŸoü*«ÿÌ~¿ÓÓÚ(¯Šþ/ìñÏÅ_|ð‡Á¿³¿ÄþÎÿÇÂoŒÖÞø_á;Û/üJMKñ%ï‚ï5¿øFCÔµíNÖ, ñ–…©jáuu ø„éž&Ò5m"ËÛ?á›ÿgú ¿ÿðÖøÿ”T”pN4æ±— ´©W¥5„¤ãRzp­Bµ9,m§Jµ«J¤[…Js…H7¦Tž6œ'‡¡ÓœéÔ„±5T¡Rœœ*Sœ^ 8Μã(N2JQ”\d“M/h¢¼_þ¿öwÿ¢ ð_ÿ oÿùEGü3ìïÿDà¿þßÿòŠŸ&þ‚1_øIKÿ›}§¤óbÿçÆÿ ªÿó¯ôôöŠ+Åÿá›ÿgú ¿ÿðÖøÿ”TÃ7þÎÿôA~ ÿá­ð?ÿ(¨äÁÿÐF+ÿ )óo¯ôô9±óã ÿ…Uù×úz{EâÿðÍÿ³¿ý_‚ÿøk|ÿÊ*?á›ÿgú ¿ÿðÖøÿ”Tr`ÿè#ÿ„”¿ù·×úzØ¿ùñ†ÿª¿üÇëý==¢ŠñøfÿÙßþˆ/Áü5¾ÿåðÍÿ³¿ý_‚ÿøk|ÿÊ*90ôŠÿÂJ_üÛëý=l_üøÃáU_þcõþž‡À_ùõßû-´‡þ´GÅ*öŠÅð÷†ü;áÏÃÞÐ4_ hÚ>Á¡ø{K±Ñt{µÝO}uö=3M‚ÚÊÛí7·77—L ç]\Oq&ée‘Ûj³ÄTZõêÅ5•ªTŠ•””g9I&“jözÙµ}›/NT¨P¥&œ©Ñ§NN7qr„#Ói;]it·H(¢ŠÄØ(¢Š(¢Š(¢Š+ùÍý›~(~οÿà†¿´Šÿj½cÂ_Àû‰?ðT? xºÇÆ`úw‹‡‰¿lÏÚ“GÓü ¦iwö÷ÇÄ^'ñ…õÔ:†|7a¦ê𮳬ÝÚZiºmåÓ¤Gúñ?†<5ão øƒÁž3ðö‡âïø·DÕ<5⯠xŸI°×ü7âok–3éšÞâ U·»ÒõXÓn®týSJÔmnlu ‰í.àšÞY#o“~Á8¿àž_ |gáïˆÿ ¿`ߨÇáŸÄ? _Sž<ø}û.üðgŒü3©ˆe·‡¼QáÏiºæ‹~ žhEÞ›}mp!šXÄ›$u<ø¼41ø,Ã+ÄJT°™–à«×£ËS ‰8bÝ*5b¨ûU‡maåRs§í§ÍVŒ©Óp­ÕCõY`1¡íq ã›Â•Gì¨Ôž˜aðÔgZ>Ò¢…ZÙƒyF—5:Xu |óÄsáÿc¯ˆ?ðTφ¬cø|c¡Çñ[á?ü—þ Õ㆟ ï4¯‡_ ¾)xSÆ>4ñçÄo|Uð”>4iß|¯~Ò:·‚>?†>ÍñCÂv?ôOÁá ÆŸbŽÇÆž2ñµü8ý¦?kÿŒŸµìqû:øcöáøÉðÇá×Åo‡Ÿ·Ç‡>-Øüoý•¿e/ ~Ýžø×û2|Oð5œþÖ¼MáÝ7Ų¥ÇŠü-¡xÂÆßÁz¯Ã/€:ïÃ-á–âOjÖïüqá|/ý¯ñÿì=ûüXñgü{ñOöAý—~%xëâf‰¥øgâG<ðá?Œ¼YñÃzþºÑ|?ãø‹ÂZ–±â½Gºð….t½'^¼¿°ÓçðLJ¦´·†MMko~3Á'þü\ý¡¿eŸKàÿØúØïöeøYñOá…ìGâ¿Ø«Ã~6ð&µoñs_ð§Š5íg@¼oŠžø]àk^øàÍKÂÐüñ iãK»ÙõkÏiW>ô*âªâñ´ëâ §õÌˈ±xùºµ%*/6—b²ç)~Ï¿¾;ü_Ñ,|Cû8þË?ð\ïCûW[ü)´ñ‡> øOöpøÏðÀ¾ ý¤âøAàcšŒe×ô iÚïˆ<-àm[ÁþñGŠìuØü(¾𾡧Ùi~éðïâ7üÆš¿í»ðÛö øÕ¦|IøSû3þÊ_µgÀ‡ñN‘ÿÿñ‡í#s/5OŽ–Þ<ø5ñÇà÷ì¥û3øo‹V_ í¬|'¡øvÏöˆÔ< }sáYüuñv—«ëìÿsõ¯ØßöCñ'ˆ<âÏ~Êß³~¿âŸ‡?Ÿá/Ãßë_¾êž ð©t}cÃÒ|3ðf³}áyõ ü>“@ñˆ47ðf‡scáÇÑõÍcLm4Ùjw°OåOûüøO§G­þÄ_?c/ÙãMŽ“'ƒô‹ºìuàVûÂÿuÍtk^6ð¿‡ôχ>"ø!«Ù¶¿p÷:€›Å÷^³ñSÛø‡Ä~ ñ”PÜi¼PU(aIÖÄÇS T©Ò)ãÿ´óÌʆl²Þha°r«ŽÌð¸Ü× †­<#K•¬&'K Mõâ*Ó­/i1§lULd({IµFjù4ç”ÇÔ«c0ø\·˜dù}|l]^lf3SËñ1Å:µÿbßí?¡|Lý©¼ñ‹ÄÞ3ýŸ>4Þx]?f ø›Â~ ÒôøgÁž Ó¼9ã_AàüL¿Ô¸øuð×öký—>xOþwLøÇïxŽ…?´ŸÅŸ ê¿ 4 õÉ4_ø«Å¾=øSàÿ7‡gø¹ðËâ÷‰|-âˆ~8þ‹¼àm á·|%ðóÂùôøwJðÖ™&¯{6««]Ùé6QY-î³©ÜæãUÕõ)¯5}NèµÎ¥¨\\ÞܳM<„ùwÃÿÙ/öVøMàOü,øWû3þÏ¿ þüTþ×ÿ…ŸðçáÿÁŸ‡> ð'Äíý ø^ÿ„÷ÂðÞ›áÿmè$èš¿ü$:~£ý¥¤¦ÞyÖGÉ®ŠþÍfЏtåYt2ú8iU|دešdõ剫ˆ•ð˜¼fW€Ìð5³&º5sª˜¼-,4°XZqÊ„ÿØhЬÚÄÿhañ2ż= T£…§•f¸5GØF§²ÄÎŽ;“cåBµiaqÕ2ª±ÆÎ´qø¹Wü”¼¼ÿ‚»xàŸˆüãoŠþø¥ñOKøóà½qì?e¿²·nHeÝoÁ:•οcáCöý†eÏØïÅÿl ~Æ?±ïʼn|?Å?ÙCöjø—7Ã\|>øw7Ä_ ¼e/€¼u¦¾uàÉâ/ jOáo\éÉ¥\xkC6:4Úlc%“Z»Dy1TëU…xaëF—´S§J£„ÕZŸã²Ju#ËUÂoT˳µJq•l~+ ‰ÅWÇP–.\>˜*´èÔÃÏB8ˆÓör­O™(U.˳§œÚÆät3<ެãRœ0¸l} Ãb–ë8å·]Óþ'üRý¸ôÓ¢~Пþ ê~=ÿ‚ºþËÑø›[ø[£|º¾¿×uø#>‡âØ|RðÿöƇu¢jvF–ú,ž kk×:¿…5mwLð6³àïècþ ñKâ|/ðáÇÂO‹¿~üWø÷ñÛLøiàØ>øàGŠþ*üCm/À<ø…â øgÅŸ´Ó]~Ïí¬|=à½Gƾ2ñ ñ?Rx_Ä^øaðÏÄŸ•àßê>ÕüWá-7öUøcáŸjÞ:£xSTñƒkà8´­kQðÃkšÙðõî¥iss¢cT:l¶ÇP»ó¾ø¿ðàoí àÔøsñóàÇÂŽbÔ¬5˜ü ñáׄ>%ø6=_KŽx´ÍU<1ã=ZÑRÓ¢º¹ŽÂùlEÕœw¥¼±¬²ë¬è¼7Õðôk<Áfp¥FPÂÆž ’p~Q,*« U¹á~®Ö¥ ajàñrùÆu%¹ç9aeZ~Ö¦†1¯V>Ú¥\]Lwãéæ#)BR—¶Ï¡¯·Xœ-L$ñ8\Lkây¨ÿ;Zíiÿñ/ìOðßâ׉~)üOÖí~|Fý¼¼%ûWüJýˆáýŽ>$þÒ6ºìíñ§ÇþüOÓ~þп³¯†¾ü~ø=á­Â†Ÿñu~ü,øñ“ÅZÝǃ|Gðçáí´7>#ð!þ—ü/®é~)ðχ|M¡ê‘kz/ˆ´-#]Ñõ˜a{xu}/WÓíõ ?TŠÞTŠH"¿´¸†î8dŽ7‰%茥GÉ·_ðMÿø'…ìÖ—¿°_ìawqaâ«ÿXÏuû.|¸šËÆúªé ªxÊÒY| ïmâ­I|? ­ÿˆadÕïDÒÅäƒM³ýŸZJ¬gJQ”)©Ê¬*§J’¦¡9Bkï¹ÔrÃÕ—Õþ§„„(Çèâç:øõ˜Q¥•a(?¬)ӔㆃÇ*TªT•IÆ–#ë`éJvƒ­W…„hUÅâ%^XžjqÃáòçC[8(¢ŠÀÔ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+àOÚ—â·Ž®þ"Y| øã¹þèÚÃFøÛñÛâÆŽ4™¼]áOKâGFðw†|+ˆt=sAÒ§ø7ƒ~%I¬øºöÒ{ßh^ ¿AµMkV³Öt?¾ëäÚ à¿Žõoøgã‡Â ? ø‹Æš/„õ†ž:øcãMSþß |Yøc¬ëv:ÃXMâh<=â;Í Æ »]nÿÀ÷}χ¯×Äþ(ðÿˆ"´¶×a×´>̵JªÃÓļ=xàjc"§ƒ§p~ÂX˜É¨:wº‹©(Ò…gJ¥yF„*3ÎÍ#ˆ–Kç~x:Š’¨êºI¾nEFp­(©rJµ:XЏxÖ¥†k:R_|,ý¡´¯xsÇ¿>üuø¹ñÀ_59¿iƒÿ|o«|@6ÿuB)üCñw¾+ñlž/ñφõ/ x[Kñ?޼?¤iþ*‹ÀZæ—¢øƒÂ—>ðæ¡•ç‡ÿk5{+KJÔôë=_PÐ//ôûÛ+]wH‹J›UÑ.n­¥‚ _L‡^Ó5½]CM–E¼²‹Yѵ}*K˜b]GL¿³3ZËùoð÷öYÕõ}çàÿƒÿf];ö@øâ¯Yxßã‚ë:ðw¾(üY»Ñ|A¤kgÀZ>™àýcâW†ôï†þ/67·­ë~<³Öì<[žð†[VûO‡¿PõÙµË}X¸ðÎ¥jþ$ƒKÔ&ðþ“®ë7žÑ5=n;I_KÓõiúŠoô-.òù`·Ô5‹/ øŠïM´’[ËmVš°ŸÏ§Ú?—Râ¬V]Žâ8QÆÿkâ²VT*Q—'ÕU¸j•+ÕÄÆ*¿¿ “Æ^TÔ];P¡GÈàÊYõ,äð3ÌU<4q2Áá±8,¦Xõ[êÏ„Íí^†êòÀÓ¨±¥…ž"ž&´(Ò§Riÿ?ÚŽ?n߃¿¿hoØãwí³û@xÿãÿí+6ãOø&wíÀ¯Ù#ÂÞÒ¾øV(õ/Šöšüzì½ÿ Æïâ·ÀÙ[ŽÚWÄ;Xâ—ÃMgáæ¡ð¿ ¼iâ dé]÷íñ{ö®ý?iÙWÆž0ý­>"þÐ_²埇~~×ú7Æ_þ̼ð¤ÿÃŒÆâjPÉsŒU8ל8…Ðâ/í F6tp™Ób,D1ðU+aic©P†KSë9V*·dlëO ßN† ˆÍrl5ZÔèTË#Ë©åØ<&7S;óø(íûGGûYþÄ_³¯ìõñ«ÄŸ<ãþðí1ãßx3áOмkª§Ä¿„¿<}ðßáï„/>6|)ø±à={h>kž$ñÝÝ¿‡æñ5Ž‘¯ø6²·ñ!¾‹Öàžºí¯üPý»ãøÍûUüYøùáÏ„µ^¿ð+ág…<{àoÙ«Âzo„¼¢|2øIñ=RmGàŸÀ_…"ñ‹.uˆæ•=þ¹¬Ýhká«= ÖG¯Zjž$Ö¾Q°ý€n¿†ÿ ¿`½@Ôg/Ú?â÷ÀÚCGý§j/Ÿ>6|Fø)®übñ—„>øÓögð† é^ ý•~3®¦m>ëþ ´ŸÅþ%Ô´}E'ømi¦Í¢j¯â‹¯h~™ðágü‡àγûb]xOàÏüåçý¦¿hOülðW‹u_Û/ö‰¿›á#øá‡ÃŸ†úJkÞ‹þ ùcmñN}÷áúøÊëJ´ñÿÃ;}r-Px-uìMã;ݲèP£[3§*òÆF­>"†[‰ÅR©EVÄbkø_õ4¨âùià¨á£G°™]|U,XJŒtáG™J¶)fÕÿ±§K—•>–uJ”ªV§…T#â*Ç8TÂÑ©ŠÆº³«ÁøÜt0ÅbjÊ­ ¢èྡ…ýlø™ñ3À?ü⿊?|W£øá÷ô{{Å^*×®E®™¤i–¡CË+…y®..&xlôý>ÎGTÔn-4Í2ÒïP»¶¶—ñ«à'üÑ'èzÕ¯ˆôOÞÐ~6ü[ñWŽÓHðšx2óÂþÐü)âEÖ<1àŸøPñ;¹®x·ï/ÛÓögøûOþÌWŸ ¾øûþøÏàï|øÙð³Ä´­SSøo¯|Rýžþ(ø;ã„<=ñgAðÞ“©Ý|9ñψ<káÿÿa ot-;V—Ä:.«j%Žyùqñ·þ õÿýª>=|\øããÝ/ö?ýžuýcáìŸï>þÑ¿hk] ãÏìIûJx—öšø_wñ¾'ýÿgX!-ݽŸÃ6·ðÂ|LÕÝ´/·ˆõ¨¥°O:ð—ü#ö+ñ¯Œ<ðûFñçÅ ?xï⎿ðKIð‹eŸÚ¿À$Ѿ.øwáõ·ÅyþüCѼwðK×ÿ ü_­ü5ºOxEø£ƒ¯>#xjíWáü~&¶Óuµù?â§üÿöœý¥5ϋߴŸÄ»Ÿ€ÿjK¿ ~ÉšOÁ‡?øçVðÿ¯|!ÿ‚“þÃß5{M+áOíáŸÚê_u¿º7ŒCñ¦ƒð»Ä? ü%q¢Yx÷Äþø¿âo èß üO?ÂíKÄz6‘ñÃ^ñŽ¥âÏ„ÝáÑ>'h^Õ­®ìàü˜øÿõÿ‚•üý¡|1ñkWðoì5â­ÁºÇüÓ_´];ö©øùáÍWÄW¿··Å_ücðݥƋsûx†ÓÃ6¿µŸi~Öî"ñ?Š¥ÕôÍnÿÅ–[Ýhvþ×y Á$m¯ü!ý¿fÿŒMû.xGá—Áßø'íOû ü[ñçÃoŽÿ~!ø¯PŸãõŸ¬tˆ^ øeã_ÙÀÞñ^›áÖøOá=KXðgŒ7üT“âoíI¨þË^.Ò<-û3þÕ²xóáWŠ4_„×ÿõ;Ýám—ÀgâF£©^ø^ojþð¬>±Ô>'x;Åw~ÝøƒÁ ñ†±¥|]ã/ø&?í¨þÍw^ø?û ÿÁÿeŒWßeoxÏYý›üK㟆^ø±§|øÏàŽZÞµ¬ø¿Â¿°æƒâoÙêºïÃè¼9ᯄ:Ÿ…¾-[i±xâëÅ÷_þ×àUðÇÄ>›Å°'üRý¦¾!~Òzg†ÿd[‡´ÿ‚ˆ|2ý³~ü=Ô¿iÏVV>$🄿cÏþÈ~ ð¯¼Soûêgá׉î¬O†¾#Ø\øwŸtÛÛ›SÁ·60èV2׺0ôâñx:x‰óaÖo—ÓÄΔ¡Frøçü õ«*³†‘f2üsøwðö!ø¨êhÚæ¯káï øsÃz³âïx¿Ä­ˆ4 øSöz†µ«Ü¤{îõ áµv‹¦Cu¬k—ºn“iu}¯×ç7Æ­:Îۓᆩ㕉toüÖ|ðOV¼²iúWÄo¶µñˬI ØÛx—ÇÞo…žÒÍÍž¡ªéŸ|`ÖQj1YÞ-Ÿ^Œ+TªêF¥HÐÃÖÄ:ZjþÆÎ98ÍFÊõjÍÆNžiÆ3”c qãkÔ¡JÉ­^ŽUªœ©Qu¦¢ªTŠ”®íN”£Ï^¥(JQŒ¥(û?ßÛÀ¾7ñ~‰àxâßÁOx³íçÁZgÅß éZv™ã?ìôŠy-tx'Äž:ðkóÙJ5ojž*ÓÚ ‹Ó§|8ñ5®ãïjp­½¾àÿë—ºŽ£§X¬×I÷'eñ4ñœþ Ôô=ÆøSÄ3xSXñ6ƒ}â¯i^#‹I»}Q×ü1¥ø“ÁÚ—ˆ´[-Im®uMOñw…ïuk(§°µñ<é¨ÛašÔ£‡ÊmNŒ°ÍRÌe: ›ö4«*ØxÔ«F¤éÔö®—±©ˆþ- ‰bâ§j5—*õ±ó˪V§YÆX% L£ìšúäêÓöxˆÒŒâ§KÙ*²*Qn•ziaï*¸þ0|:ý >xãWÂ?Â[ðÏâg‡4ÿø#Ä¿Ùîƒý·áíR?6ÃPþÆñ6™£xƒMóãù¾É«éVÑtšÚ6â¼GKý¼?dwÇú·Ãüjðÿˆük¡~Ñ–Ÿ²F³¦xoJñOˆl´ÏÚ6ïᦵñyþ^x‡EÐo¼7½¥øÚõïˆî_W/…µÝ#PðO‰uM+ÆöÒxušŸ~ß?ðSoˆÿ³¿ÅŸ‹Ú—í“¢ø_þüàoí÷¤Zx/ögø7ˆ¼Uñ²þëã™×íÕ~x›Âþ0ñÇÅLÓ¿iÚgÁ¶ÿÆmCàÄOü;ÓiOø)ÁÏ|HÓü]ð•þ"mwþçኞ¤oˆŸIðg‡ücà«=OÆ^ðýÖ—ãE¦h?¾ØXëñø»žµXP¯RSOêØzžÏF ONëæƒiFUZ§F4qµð¼A‡¡‰…:Õ(VÃa±õ°SÃÂX[|X³ø!ª|Aø“û~Ûß üá߉×Þ(ƒÁx{Åž2ñ×ìëáï xBÚ\EáMCÄž(Ôô é>#-¢êšÝž£¶éåÿðRo…>;ý¡µo YþÆ^ ý¾ÿeÍ+Ä< ñ/Hñ.…¡[øÂ>6ðæ«¥j?~%O«xkÅöwúí[†<%£xwTÒmáðµï‡­¾>ǨCª|%ðƇã ñx‹ö[ÿ‚€Á>¾è~ðl?ð¡~-xßÁ~#üñ2ùž'øw«¾«¨x3â×Á¯‰¶—7z—Ä¿ø‰õÍ ÆêW7:¥çˆ­¥ñ*jZŠêVšÅç *•ªQÂÆ‰Æ¬Ó!ʱ8xÕXXcžsÄ´rØæ8 ÕcZ|Õ¥_(9K1«—gøyâ³9PÀ×Êpy¾˜‡Bœ±U42¼×3i(⥅žU‘æXÚ™~"•)QuqU«ÑÁætIeî¶Qøl%,]j˜œË'ýøûñûáì½ðgâíñ߯–žø=ð·ÃÒø§Ç>3ºÓµ½n DŠh-…ÄZ?†4ÍoÄ:ÍÍÅÕÕ­¥Ž—¡iž«¨ÝÜÁiaesq4q7;ÿ‚”þÊ_þ.|1øáË¿Ú"Š_¼qñá÷†üWûþÛ^ƒVø}gy§éÚ‡Žu/ø÷öyð×…|)á /QÖ4-;Wñ'‹µ½ GÒ5xjÇS¼µºñ&‡¡øMãß|Qøßÿíý¯aÿŽÉ}¯|Aÿ‚Z~Ì?µ×†i¿ê–×/añgÅ~x‡Mý†¼} jzn§e¬Û|[øa¯ÚGX–ßÄ6Þ ðOÅ/†þ‚êÑÖñßõCáÍÕ´ðQ¯ØîÍî K»Ÿø$ÏÄ™íí^hÖâxm~2~Ëks40˳][,ò"²B× ™c Ý„¥ No,4k,FYYPÇexª4åB¶?$ÄpŸˆ¼A†ÇÎiJ®¶>¿a•.# ͇˱ÅJX— °|ÙƒÄ`r¬6*T¡{«ŽË³?´öÔ°YÆ ‰ø!ÄÐ¥Rœcf CŒ+b¾·N¬#©J”(ý^…WÆ~¾Q\·„¼oá/ØêzŸƒuý;Äšnâø/RÔ4™¾Õcoâ¯ë×þñŽ„.Ñ|‰ïü1â+UðÞ¹¼’7^ÒµMé£Ô4ëËx:šÅ¦­t×4c8߬'8IwŒá(Ê2ZJ-I6šfí8Τ$œgJ­Z`Õ§Jµ “£^H½aVhN•ZrJtêBpšR‹H¢Š)(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ˆø‡ðÓáÿů Ýø+âoƒ¼;㯠^ÜXÞO¡x›KµÕlþ—w¡¥jvñÜÆígªéZ…¼úV©fÐjmôÞXÜÛÜÅ«Û×ÁŸ´¿Ä‰¾#ø±áÏÙ·á'‹o~ŸøA­>*ü_øáø´«¿h>Õ|Uyá¯ø?ÁÖúþ‰®hzu÷ÄCŸSñUå¤÷ÞѼ{ƒjšÖ¯i­h}XJu'YNe†öx‰âœ§†…&Ÿµæ¦E%7RTÓ©:Ó§N ÎQG.2­*tZ«Iâi*Ã(Âo*·^Ë–£7iTsj¥“›PŒ™î¿ ¿eï¿ üGÿ Ÿ„<<þ6M6ïD´ñÇü[ãoŠ>8Ò¼?}-¬×^мeñ;Äž0ñ7‡ü/+ØØáU°ÐcŽÂÆ´ä†ÊÖ8½‹Äþð×¼7âxÏÃÚ‹¼âÝTð׊¼)â}&Ã_ð߉¼9®XϦkzˆ4-VÞïKÖtMcMº¹ÓõM+Qµ¹±Ô,n'´»‚kyd¿5õí/âgìá¹¾8økâçÅ?ü4ðA‡YøÝðÓ㵯‰Z|ÿdÔô×ñïÄŸ xÇÆPøÇ¾ñGï.³ã;_ØøŽ?‡úÆ—cªxwþͧÒ5môçP¾µÒì/u;é–ÞËN´¹¾¼þä¶½ÅÄÍþÌpÆîÞÊhÍ'ažaŠÆ¼n ¥,Djb1Žntéáaâhâa^U9cNhT|³«BTê®ZŽj¬!9\¹+}W ƒúŽ.JcG¢”§^R Øiáã)N­ÓáJº©KZj.”çñ.•ÿÁÿ‚jhV~ ÓôOø'—ì5£Xx·GÃÞ*±Ò¿d¿€z}Ÿ‰´µ#ÄQh~ ¶´ð0ë:<~ Ð4-v=3QK›$Öt]#TXî›g<8¿ðéßø%—ý#OöÿÄ7ýùÜ×̱çŒ?l_ø(7ÁOþÜú?íYâٓ®|Kâ_Ù£ölð‡ÂÏÙ÷â?Áø~é:þ¹¥ü3×?iÍGÆŸµßŽ_<_ñ (9ð5­´? uÿˆz|ž0¶Ó¾8xóÀ–zW‰9¦ªS©†¡^¡Œ¯^†:ò§N½*Õp9Žc*e9¬<+Px¸*¸U^X‰f¸¼_‡£_Œ„|W=ej3|. 51kQš*”Ö/ €–' *b(IT§Š–.9aá–aêãëV§ƒ¢ªªžý„aÿ†~'ð¾þÆß²§Ãïü*Óõ=#ዼû<|"ð§‰þéZÝ׈/µ3ÀZþƒá WÁú~¯}âÏ^jv^»Ó­¯î¼Mâ ‹¨¥›YÔ^ç»ø+û2~Í¿³]·‰l¿gOÙïàÀ+?꺷Œ-> ü'ð»oê–ÜÅc©x–èZî¡gåÜv·š¢]\ÛÇurÈ‹<¡¿0?lŸ~Ù¿ü9û ~Ð:—í¡®hß´Ÿÿ ~~Ýà?Â?Ùê/…þ0øoñ_ÄŽƒàïŒþŒ¿ ¾4x÷ែì> kß 4ˆúgÅ}t?ƒÚÖ·«Øø§þoMñRûtŸŒž*ý·.µ¿~ÐÞ;ÒÿgÏ…¿4í+âÀO |½ðо3øÊÿQ½ðÝä¾7¾øS{ñŸEÔ¼+àDÄž+ðÖñRÇO¿|'Ô­4í3I>%±ñ–”ÝZ’©Í*”—öŽo“×eV ²ì¾†RU—+¨ð¹Œ±X8`åÉ'S5ÄÓ£‹§…«K¶*<éQÊlF¦"Ž"œkzŸ†eßÙ›Á^<øñOÁß³·À¯ |NøÇg§ü]øáŸ„~Ð|yñRÃU¸K½RÇâ?‹ô¯ÚøƒÇz•ÔqÜßÛxŸPÕ!¼¸Dšá$‘C ´ÿ‚_ÿÁ4tû84ûø'ì1eam¬[x†ÚÆÓöIømgo¯ÙDÐYë[Cðý!‹X´…šmN4[Ø"fŽ)Ñ îz+iRT•$©ª4èR¢©ûŠ•,5g‰ÃS¤£ogOˆn½BÑ¥Yº´ÔfÜ&•GQÔJn­Jµj¹¥'V­z+Z­G+¹Ô­‡Š¡Vr¼ªQJ”Û‚Q¬¶ ªÿÁ9¿a It­: #K]CöDýŸ¯MÒmdš[m2À\ü=YéÖòÜ\I•¿—m“ÌñÄ­+–ûºŠ•Næå„5_o+E.jÜ’¥í¥e­_e)Söß䔡~VÓ«¿wWîStaýÊNq¨éGùiº‘Gh¹Æ2k™&q¾|:øAà¯ü6øKà|.øuá;I4ÿ øá×…´?ø+ÃVÝO{-—‡ü+á« 3BÑ­$½ºº»’ÛN°¶…î®g¸d2Í#·iE¬å)ÊSœ¥9ÎNSœÛ”¥)6å)I¶å)6Ûm¶Ûm»‘Bœ#NœcB1„!¨ÂŠQŒc¤£¤”b’I$’² (¢¤ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯‘>>|ø‡yñÁÿ~ Eáýcâ…ü7yðÿÅßü[«·†|9ñCáÖ¥¯iúìVãÅvºˆo¼=ã_jk§€ï%°¸Ðo‰&´½¬pÕß4cNT¥Ô§VeNKÄÎ1Ôh<.X\ÉÅûjøhe« õŠ_Q–Ï¥ŠÄaè¯e,ErN¢«J)N‹©õ~»áO´¥¶™ðïÆî?gÏ‚’êºF¥ñJOxãÀ>/ø—ñÇÃ:ö­‡>ðÿÃÛÏø;Kø{ã™tû7Åþ*׋eà½Q×'Ô´/½n­m¯­nl¯mỳ¼·šÖîÖâ4šÞæÚâ6†{yâpÉ,3Dﱺ”tfV+ó7þƒö¿ÿ¤ŒþÒ¿ø/ý‹ú«Ë>0xOâŸìõáãÿ¿ðW¯ˆ_üuK-xÛ㌿`†ž:Ö¢“¾Ÿ¤xÓöÑtcª_¥­ÓÙiÿmû]Ò[NÐC †B½XÜ£ˆ¡=^"àÚ4çMa£_9t*O*tj*•שZx–©Pä©RjiS¥¥h¾Le‹¡VuañN#5 ʼéäÞÚ0ÃFU  °ùtáAJµ[œ\[©RrníjþÍ?³íáû xÏöRýŸôŸÙKãwì±àÍcU¶ø ñã7Æ‹Ÿ~5|ømâojúÔ_<]ðËÁ³ÏÅßþÐQü':³Ûø7_±ø»û=^xßÃ6Z_ƒõû_ jVSüAÔ=¯ã7Â/Ûóû_NÑ-f?Ûá_Ž~ xká?Å_Ùûö¬Ô¼EðsÂ7ñÖ|}ã_ˆQxÀÿ¿h¿ iÞÕü?â'ÁZ¯ÁcàGЇŽt•ÑïõOо›áíŇÅOøyðŸãçÅßhþÁU~1|Nøyâ»I/ü/ã߇šÏì#ãOx’Æ+©ì¥½ÐsNxx,E: F…X`pøxÏ.Âá©ex¼^ Þ~Î_ðOü9ÿ‚r§üóâõΕã¿ø›À_|ã-Gmtø?Ã>øÍâŸx¦o†ß åñ ý׉í<ð‚ÏÆqxá>¡¨ÞÛx‚ÓÃ~ðÞªÑ躚-‡Ð?±çÁ/|ýŸ|à‹føÑñªK¼øÍñŽîÎ߉ß"Ñ´½Pñ4ðCke¶Þ 'EÑ|;£$ÖñÜAáí Hµ˜o·5óü3íÿIý¥ð_ûÿôW=âoß´§‚ôû][Æ?ðTŽžÒ¯uÏøbËSñ5×ì7 é÷~%ñ†»§ø_Â^µ¼Õ?`»[ksÅ>&Õô¯øwIŠG¿ÖõÝOOÒ4Ë{­BöÚÞ]å’Ñ©ˆÅÕp­™Ï F²Ž'9œ«{*õç…ÃSu2Š•m,F.W§ óc+,,±?X«…ÂJŒC8Äû- pïÕŽ¦/EÊ–Nœ+ãa‡Xêü´ójtÔëÇIÔå§tãIÆ”)Sr‰úµE~a?ì·û^ÈrßðQ¯Úd1òZþÆQŒdžV?ØTžz‘œ`gc¼moâo†Ÿ¼ðKâ?ü‡Å_þ3|FM2_‡¿ümñSþ ñáO‰Þ;ZÕ.ô=Oø]ý‰ìÿGÓDÒo–ÿT²»ÓíL·vÓB˜®ÃÊ¥:Q⎕JÓT¨ÓXœÝÔ«RIµNœJå9µ5§&¢ÚVL·žb:•eÃ|Ctiºµª:YB§F’”"êU›ÎiÓRœbç7©4›»IþÙQ_—ÿð˵ßý$oöœÿ¿?±·ÿ@Eð˵ßý$oöœÿ¿?±·ÿ@E/ì ?ý/ÿ…Y¿ÿ9CûsÿDçÿଣËþ§ƒì~ Q_—ÿð˵ßý$oöœÿ¿?±·ÿ@Eð˵ßý$oöœÿ¿?±·ÿ@EØú*8_ÿ ³þr‡öæ#þ‰Î!ÿÁYG—ýN<ÿØý@¢¿/ÿá–?k¿úHßí9ÿ~coþ€Šç|9®þÑ?³×íMû4|2ñÿí3ñ ö€ð§íâxWÑ~%h_RãÃWÚ_Á?‹ÿ¼9â¿ ëÿ~ |–ÑíÀÝ{Ãî…â]ÆVšÅ·Œ´íOM½ðõׇfMbãÃR«O<&ycêa0˜œuL6˜Ë,>Œëâ'Mb2¼=&éÒ„§iU5¬›“IÏúÁÉSNM`©â18|$1šYw±|UZt(FWÌ«ÕJujF)r»¹Z)µúÅEWÍBQEQEQEQEQEQEQÕ?ä¨ÿ×ßþ“É_ðH]TÍÿÿýœÔ²Ÿ³|(øEh9$Á_†€)ÈàŒôè?ý~ÔUŸO¾D™ìî•Tu,Ð8{’@ü²~ÃßðQOÙ£ö,ý<û9þÑ>2—áÿÅÿ‡„¼3ãox…tÿ kž×¼/àø;ZÑõ-+Åú—‡uE–ÓZðÞ¤ÞÁe6•©Z}žÿL¿¼´¸IOÞðÆGšñ ñnY’`1¦hñ¼/‰¥ÂCÚâg‡¡<ê8šÐ¤š”©Ðu¨ª³IÆ­5&¹ãϳ WŸpî/ˆ¥„Â}Oˆ(ËZ\”•j¯'•*Nv²EJ¬¡ï%Nm& Úþ“~Ýî¿çð¯ÎÚëFÅ?´·ì†¿ ¿h|ýªü;¥~ЯÁ]ãOÀßüpøAñ?ÁºŸ†<'£|_Ò"д?‰·Å ÙËá/xNûßt?Yx"?‰‰„<[àCDzhþÿ¿ÿ‚}ÿÑbÒÿð}àoþl+Ìþ,ÿÁU¿à“?ü0øãÿÿÁJüGðÇöÎ?µ–úo­<ÚŒeo$y›7Å?·ÇüÇ>Ó¼ão‡²ßŒ|¤Gâ´Ÿx§ágìñâ éqx»Åš_|WáýZâïI²Äþ9Ñ4oø…-­"]kÅšF—â-H\ë—‘w? |K—Õ¿ãÏéO…«–áëáòʸ{ájð–'†Ö"jXˆ¬¡_'| øÉû@x{ö‰›áTŸ¿à–¿³‡í¥¦øGÁŸ ~ kø»ñƒ]¹ý«.u«¿<ñÅP|øÇ£ü!ðαuá¯xóÂÞ8Ó4K­ ü ñKÃ-¯^øƒé~ÑÿµOÀÏüPøO©~О ø™{iãßø%4ÿø§À_4Ûÿ h¿¶?í—âO‚~x[Oð_Âï é3|3_øk?ê>3°ñwÅßGâMRãPø¥®êöº>«¦ÕÕÿà¬_ðJ?GâøuíOáF·Äi¿ |{¯¤|!Ô£ñ¿Ã|@šG€<_î»2ø—ÁZRø³Å+¦øWYºŠø—ÄÖÂ!¬ê"åuø+ü—ÄZ­æ»â SáN¹­êð¯þ߬kOÂ-OU¾ÿ…MâkÏü+ûf¡{®Ïwsÿ ÏÆZŽ¡â߇þtÏÿo‰¯ï5ïfê·SÝ¿BðÃÄ®ÑÄ?¸ŠtmÇbiK/„}¶†qG1Åàã 1¥‡£^3Á:T(ÑÃCÖ©á¥Z”ò—ðl©®\ß.§Z8,= n8ê’§ ôrîÀºÒII×r–]ĵçSí+VÄg”±˜‰ÔÆaiÖ£ô§üK@×<%û4üH´×>,øÛâµÄÿ¶‡íÜ©yã›/…Ö7ššgíñ§F¿·³á߇Vdø—QÓîüw­.±g©M‰\k7Zvƒ«X_|9ð¯în<]âJÔ`ðoü³þ [ðçQñ¶±ð÷\ø_àM_â_Š.!üNÕ¼-ñgà?üöAý¡|:ßô]øÇÿ´oˆüûLé?|mâ9uÝôø¯ÄÞ+øwðûN×ôŸ¾¿á¸•¬øCÀc\¼¿o øgWÒä}7UÐô6±Óu=ÚÎòÚkf1×m®ÿÁL?àŽ¾)ø­á?Žþ&Ñþx㇀´è´üe×|ð;Wø­à½&Õ/Âõ NãÅÞÓ¢]sZX¬t}bÎÚ5Õõ@‘¨]‰½¼W†þ#âóiæ’ð÷<¦ªæÜD°”òÕõXR­œa±øjÎŒã%‰œ2úUòÚ¸ Î8^|mL[¯V8xaeåÿ®<&²ü6 Žu”a5Ya¥JµqáþÊ*áðóq¨ðÞa•csœ>:Œ'ÂÖÇUÃÁ5ŠÌ+â=áwÇßÚŸMð΋ûW|@ý¡·w?èìñâ7ÅOƒíñ{âµ£iñoÇ9øƒð§JƒOÓl`ð·Àmg_¹ƒà–’$²Ñô›ÛûícáÍŽãzç]:¦­oâ?ëLzµÆ¦é0Û~(þÒßðQ_ø'—Æÿ€>,ýš|ñÏá'Áß…ŸµOi¿´Ëx ÄW/øqñ;Q×5_g‚"Ñ>3|?Ñ< ñOâ>¥â_V—âψ´_‰vÖö­¬x‡Tð‰µ½Ao­~±Óÿà¶ðNí&ÂÇJÓ>+è–:n›gm§éö6º×!¶³±³…-­-máO„Š x#Žc@#EU+͇„Þ$Æwþ£ñéa0Šx ³©O°™ZÄ{eaV¤±y}ø\ÂJY¿µÅgô18…€ÆP§SlgplUJ”sÌ*U±ØÜr¥ LiÒÃÒxÜ×û/ í'(`3IÐÌh^žZã–ðþ#J®>–:­Ú·{¯ùü+ó—ãæ¢fÿ‚†ÿÁ9ìw‚ÅŸÝlõ±‡íÕìcñœç·jð_ø}ÿüïþ‹—ÿƒïóa\ÃOÚ›á?íÇÿý|Mû:kÒxÿEø=¯|BñOĉô„‡V¶ð‡GìÛûOxß\ñ§ Üjú&m¨ø¿âßü=¤Ûêz¦£ªßjsÿgÙÜÁa{4ÞAÀÏiuqäéPIä[C¹|Û‰vùpǹwÈÊ»†s^ ÞÑ5MEº‹Ä:rø¢=Jß]>#‹MèɦÜhÚµ‚è>†=SC˜é&­ ýÆ´.c»ñ 핵íå¬hÚ>…ÓR½:1‡;·5’ùZïKíuÿq¤ÞÊÿðöýN^Š›VÓ.|?¨éZ}Æ·g®ÿkØë7©-¦…q ›ìkŽHç×õÿ¶ý·ûm]^ËìŸbudºûZµ¯ ãÿÞxcC°¸Ó…šjZÿ¾|?Ónõ yïl4Gâ‡Ä ü6°×ï´Û[½:çX²ðõߊá×.´;}WE›\ƒO“H‹]Оõu{.|vg„˲ÌvoЍã˰X¼~*¤bäá†ÁP©ˆ¯8Åk'T¦ÔV­«nm†ÃÕÅâpøJ):Øšô°ô”Ÿ*u+T:jM윤®ú-NÖŠå.¿g_ø£Äž¼øÁñ7Àž5ðWƒ|C«x’ øcàÇ‹¾k®©wà?ø/Gº²ñ´ß|_wá›ÿ ßxº/h𿇤Ãâ-'ÄZ¨èZÆ‹©ZÛêVðè·÷z‹|eðâÿZO\ø?L¾6µ‚Öí+Ú^ê:Nƒã;]:ÚÏIÐþ-èzM­–¥ãM F¶·Ñïü;â_|HÒ4Ï i_,¼áˆáïòÌÿ8–R°²ÀËRt²—S€Æâ1Ά8ìL±|¶¾2–‹ $¥‹Ä*ßÙØ·Šú„êå”ógÏ ƒXªX¨âý•5W©á±XzXxÔļ55J®2–x™)K*éP§È±t=‹ÄªxÉa;+Ç¿hj~ øñËÅú%üÚ^³á_ƒß|I¤jvÅVãNÔô?kz…ü êÈ&´ºµŠâ"ÊÊ5,¤dWó¥ñöõÖ¼'ãïø[MñO‰ntï x¿Ä¾°¸¼øÕûM½ÝÅ–­^éÖ³]<_m¢{‰`¶ŽIÚ;kxÚVbD¤F¾Ÿqž…ëa¨âpµ+¼M7QJ5¡J1\î +š2r“q“zE%Ëg+¾_Ú¼ú6qŸ8l똌=5’W§CN­ •¤ÜáJnnQ©JV­MAsJSj¦‘PN_Ôuó¯ì©â{¿|Òµ{½gRñ‘㟌þ°ÕµFûWÔîtOüiøƒá/Gyªj“\jšŒÖz‰§YíRæçRºë6¡sqvóLþÛ«x›AÐï4?VÔ಼Öçû> ¢F2wa¦¤÷oŸc.³¬h^‡RÔ×OŸÄþ$ð·†!ºx£Ãún¥ôTsL$òÌ&kˆ«K†ÅaðUÔñu©Ñ…'ŽTVŒêÎQ§í'V½:\שZp„”âŸâæE‹Èø‡;ẉⱹmšåÝ Uµ«”â±\MXRqö±…ðÕ*µ8©S¦›¹eiï5íOÕ4}ÿZÒlu¯ÿh`h÷š¶©®dÛ­æ«ý§Í2]êÙ–Ž—Z‡Ø¡Ÿìvî³Üùq0c­_ÝøÐxª+7LøaâïŒÒø×âE׎¼=ñ/¾#ñßÂ=_Gð­—Ãïk>ÒµMjÂÇEÔ¾ëðG‹mü'ðãÁ~3Ô¼#ðãâôtoŠö%þ>ø} ýCð³Tñ>³à]Qñ}¦£i¬O.´¶³a‘®ê^µ×µKOøƒÄ,VÖ  ø‹ÄÞƒDñˆ<>ú^‹>ƒ¬ê—ÚE΃ ÜYK£Xþ{Á$Ôã ÷;ÊŸf˜XªùFuì%_&Çà°-¥(kÑu2ÌV3³6g–WŠÆ`ñ9n!ºUê,Åc;óÎþÆÀà±oB­Z¾Êž+ *´a‹¥Z·Ö¥Çí6… o [ ^8ì>KI)ÒŒ«:~‘›Æz׌ô?xCðÆ««j¾ñg‹..ÿÉÄxWþÈ¿ÆýN>×Í:GíQûA|/ý¡ÿi[[ÿ…–gˆnÿƒ_ïü{âOº®•㿇üiø9û+x_ÂzÂ/‚íðÓÅþñ/€ô¯ˆ_\ñÜzÏÅŸƒ·Z[kþ%×¼-áŸjm4§ë ¬+€§†¥SŠÁ{zRšÅµ_W?Ë2<6S¥Zpî½|ã u«{:”=œê{jÔ¹¾"J¯&?,MhPÂWå:QÃÊP¡O*«˜Ö:rÃÔÄbgákKØPUqSn7mGéoøU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8ZøÂ?µ÷ü†ïKýœ5+ÿ†ÿ³n­ÿ ÇíÑû_ü&×à›öñ6™ÿ ‡Â„vÿµúN‹©Ëeû Íÿž¥àŸøV0§‡¦ðôwÚ§Ž¿áð£x·Å:/ü,o¯…}Ãáü3ö•ñÖà©þÅ^¶ñoí ûxóö´ý’<àÏÚ²ËÄú¯ÄÛχºg›ÍOàÏÅýcÅÿ¾xWàw‹õ›¿>·ð߉´Msã'‚&³_Þëú߇.4?M×r£Šöó:8,<çNš«8¸ã©¸ÂYn;7Š~×M:“Àey•HRMÕ\# <\¥`ñ´h,]g9U©F>ö^£)RÌêe5j9: “GMUÄb§É†Ã`kSÇâkQÂ9U§ôgü*¿Ú#þ…_‚ÿøxxcY:|úƒh—_œ²—íWû`xÇâÂ;ᬿ´§í)âÿxÓ㟈¼7ñëöŸñÃχÿ¼¤~Í?±÷Äoˆ¿|5ñ/…õÃ6ŸñSö†¶ðÇ¿‡~øc¤ø=9|I©êÞ(ð%ž¦Ûø†(ãèÖ–-F†Ç–â³:•#ZµH{sˆÉkéO)¨R¯–çuëb>¯‡ÂdøœUz”ðµð5ñ."O ‰ÅBxªô¨S†"8<,¹êå¸lÖ*K…¥ÉRX\Ç(ötgÉZ¥l× ‡…?nãN_¥?ðªÿhú~ ÿáàñÇÿ8Z?áUþÑô*üÿÃÁãþpµäÿ ÿà¡ZÿÇ}ïão†Ÿô¯Ø÷Á¿|!ã‹??hÚ#Zø%â¯ÜøËàG†hHmô†z7À_оÕü+áoüBø{¼iãŒ_ SJÔõCñŸáK+ÿ~XþÑÿðSŽþxªÂÓÀ?fŠ? #ø¥âí>kßµw‚lþ!x3Å¿°¿í“âß‡š¦…ªþÔ_²·ìñ'P»Ó|ð–çS³¸ o¾ÙëZ'„|EΈZ¦·iªÚøG£ž´jâ¨ÔË©S©¥ øªs†9U§B¥UJhQúÊ«^–"MO <.|_¹ýšì<]ðË_ð§‡?g‰xŸÂø+ñÊÚoßxMðÇ‹$¸¼ñnày§Z¥YÂ<S«‰£„¥ñpjõð¿\¦©Âx¸Êpö)Æ¥h'F†%OZ¥øÛâ¿Ã/ÙzËá/öŸÇŸÛàìé§üaÿ‚xë ¼ž*ñ7Ç> øË«xíþþßšf­ñ¢îÕÿgßêÞÔ¼1¯|H}K:8§ˆÆappXZ˜¬rQÁÒukR–#S ±X\ öøê^Ë5* ì(FµxkÄíÇÄ«ÝW®ðícûKüE²ÐÿhÅøü­á¿…?`Ù¿Æ>ø áåÏÀߎëûTü;ý•u¯‰ÿnuü6“ö‘ð¯‰ü?¯~Öw7þ Ñü=ñSÁ'…´Ÿ„º4~:ð7‰®ïüa§_탪ñÕiRÃa°5_õzq“©‹‚XN'ž†UŽ”g‰_ªÏŽÁåµ¹iʽ,f"¸–Ä`æ¦ N2~ß9Ç ›bÕ(<¹Ô—öN/ …xkº*•ªÜ:Õ)A`«S©Ž©‚©R•þ«ý¢?èUø/ÿ‡ƒÇüáhÿ…WûDЫð_ÿŽ?ùÂ×Ä_à _¾üZøÇñLøs¥ø»á>½ñ7Å´‰>=øÓàì‘ð³Ã¿²÷„ü§øÅ¼UñkMøñ§á§ÁÏ‹ß~?üQøðÛáãüiÿ…Ià/Šòü*Òô+Ÿ–úxÁºÅ½3þ qñ¦ c[ð÷ƒÿfˆ¾,h¾ø¥ xÄž4ñ§íá?x†×Wøßûe~ѲŸÂM'þðŸìñ‡õ¿ xkÅß <=yâÝKP¾Ñõß ü(×$Ô´ûߎ?|/qcãü©bl>_Š£‚ÃÕ£šO/¥€?­ÔxŠ™ªÂ<cx¹JXXÜ*^ÕSös¯u•*ŠP‚­„Äaý·¶Åâ)ªª¹¬y_Z®|5L6/^„èÁγp”£MÅK“í/øU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8ZøÎÿþ ¡ñïþŒ>?Ðÿc?jz/ì±ðƒRøÁûRA¨~Õ×zF¥¢iÞø¡ûHü2ø§áïÙþ¿gVÛã.µ¡Kû2ø»Äž—â=ßìí¥xãH×¼7m­jÕßT°Ó¼GÂðU߈ ,­¾xSöxøåûXjÖ^7øýñ+∴O~Ø?U,."4]w‰Åªq»”¥O (SÃT¯¥„NXŒ3ÇeÔñX8§‹ÃO‡U¨Óm¥úuÿ ¯öˆÿ¡Wà¿þó…£þ_íÿB¯Áü<8ÿç \íQÿ Oj7Ã<}ã Ç^ð§Ž0ñ–›ð¶ûE³ð9ø‡Ï tjS•Xa0Ó§ ^iâÜ\\iÉTƒúÕªRµZiÖ§ÍINj›šŸºŸÔñ *OˆQ–X´ÚÁ$éC°Ò‡û¶˜•U§õ'lc£%‰Tª§Ùÿðªÿhú~ ÿáàñÇÿ8Z?áUþÑô*üÿÃÁãþpµåß ¿oï^|1øñ¿ã÷À?|øGû@|1ñ¿Äï ëš'ƫÿ„­<7ðSAøïáÏü@Ñáø?à¯éï‹|¤ün¼BñŸ‰´­%>x^Ôµmkâ=·àOþ ³ñP|tðïÁÛØwâ´Ðh÷ÿ|ñëX𷇿jïˆÒü*ø«ñWá¿€~!júV…ã_‡±7Šÿeo|7øNŸ|5§üJñïÅÚ¯à7Šô›-Çž$³øU}¤ižˆºUÄJ…jøzØ,-;ürøã†ÿ´9ðN¡ð«Á¿ü+ñëöÊ×l<5ãÏøwÄÚ6©ñ’ïà_ìïs¦|’-KSÕôíGSÖ'Õ¾éºE†¬jíu]nÿÂÞüñÓÿà©?µ·ÂÏèZ?Ä?Ù‡Ãß>0|@øÃûe/€"ø]âÚ×➇ÁÏÙ×öƒÔþ^ÿÂwmû)Á4~7ø÷Á>)Ò5x?Á>Š_„:oá¯êÞ1ø‡ñ‹À~:Ô4øœ­‰x|D°µ°XjxˆJtåI¼dš¯F鿳N›ð^?ü4°ñÃÈ¿kOŠ^:ýšþ9|Bñv³û8Ëñâ{„¿üaû7ëøÁá…ÚΗðËãñøwñŸÄ¿¾ø®-vÿâ/À 7ö~Ô'jÿ¼)ñá>á¯øEìtøƒÃ–~(ñ_…­/šúÕJŠ­ZupXZ+ ['†"u*b#Ðͱ¹– â)IãT+¼Ê1øŒFXº´¡©ÑÄsMÑÎ¥*”áJO‹”±^; MRÃs׆GB <P–>5éPÂΧ-â'ìñ(IÓRúOþ_íÿB¯Áü<8ÿç Gü*¿Ú#þ…_‚ÿøx»úÂýø¿þjþ®ü¬{ ¿ô‰ÿÀpŸüËý]ù[á¿øU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8Zû’Š>»úÂýø¿þjþ®ü¬{ ¿ô‰ÿÀpŸüËý]ù[á¿øU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8Zû’Š>»úÂýø¿þjþ®ü¬{ ¿ô‰ÿÀpŸüËý]ù[á¿øU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8Zû’Š>»úÂýø¿þjþ®ü¬{ ¿ô‰ÿÀpŸüËý]ù[á¿øU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8Zû’Š>»úÂýø¿þjþ®ü¬{ ¿ô‰ÿÀpŸüËý]ù[á¿øU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8Zû’Š>»úÂýø¿þjþ®ü¬{ ¿ô‰ÿÀpŸüËý]ù[á¿øU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8Zû’Š>»úÂýø¿þjþ®ü¬{ ¿ô‰ÿÀpŸüËý]ù[á¿øU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8Zû’Š>»úÂýø¿þjþ®ü¬{ ¿ô‰ÿÀpŸüËý]ù[á¿øU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8Zû’Š>»úÂýø¿þjþ®ü¬{ ¿ô‰ÿÀpŸüËý]ù[á¿øU´Gý ¿ÿððxãÿœ-`ëÞøÛᨢ›YÐ> Z¤âVˆEñSâ=ô®°yBgéÿ³åÔÁ#3BÌaH‹œ°ô ¾Tý¦õË­ ^Yiz†¹u㻫mI›L·Ôõ››%ðÄÐiZtÚÞ©¢è±ßê•´³“XÕô½.;‰£{ýJÆÐMs¯R¥›æØL¾¦ŒaˆöîR§3Ï~4:õ_ÙœŠ—Iñ7ˆ¦×t-/XÓüÖ#Ñ|g©éÚ§„|]âr[{Ïj^°Õ4Í_JñWÃ?‡×v\GãÍ6îÊxÍà’(%- G5¼Ïùš¿ðQ_ø³Døs§xsÀ¾;Õþ9ø·Æ§À!ýž¬¡[_ˆ×´+»5ø…q¯Í­.¦Zè>Ó$¼Ô4oX—Bµ×d·’ÏY_®ƒñ ïÀŸ¡ž}úÿÖît¯Ú=ùû_ìÁúôÎkïøƒƒòŒ¯&–? «Ê¿;¦ÕJÎp…ðøŠ±vŒ`¹ù©BI9I(É©CÞ¾w/Ï1¸¬l(N¼eNô›J•(¹)WÃÓ’¿%ù\jMiÊïf¥îÙû-៵·ªxgöhý¢? t8ÅÍ¿áÙ¯`rlV ކ&0ÇF¼£Š¥EÖ¡AЕòâ7*ÐU=²ös…*\“u4“{qäœ/ÂàóšðÂÓÅaÕxוZiÆ>Ötå%BN5+S¤©·YÐuq U(BŽ¿´œ©~ÎQ^-ð㯄?h߆úwÅéþ"ÓtGPÕtÈ­üIe§G9¹Ò.ÚÖæK _Ãú·ˆ¼â]<° ý¯àÿø‹IµÔPðæ¥{câÍÄší5íÂp©Ô§%8N*pœ]ã(É^2MnšwGÔá1xl~ÁÖ§ˆÂbèÓÄaëÒ|ÔëQ«:u ûJ-;4šÙ¤ÓGæ§í-ÿ#ð§ìÏñG\øe↺¿ˆ®4‹-P‡UÒ¼Mej—VÚΓg¨¢Íew¤is ÓÜÁä¥ÕÚ½½´w­4?iû4?'êð]¿ƒúQ”OðKÇRˆwn6þ'ðë“†Ø ,–ñV`Tœ¶†Šþ|Á\îm5Oۣкñžá»ðgÃáo/ˆÄ‚ ¥—Ã2M=¼Wz‡uË{&¸6ðÙ¤š´ÚlRMv¸¹ŠÚ+‰âøïöø‰ð'Áß5X?jŸ~Î?þø‹D>Ò¼! M§j:ž¥ª¬ºz½þµá;WƒWº{‰ ½Ïöâê)t©“%œ–¶1Úÿqå~xUO‚¸S3ÄðV+;αü)‘æÙ”pùþs„–#ŽË(bj:4¿µéP\EjœÞÊ£‡‚œ½š§Æ'áyLüMâ<ÛŠ*Pãg’dø.%â³*‹Èò st²üß‚ÃÐWÊå_ÙSTiá£SZ¦"¥HÊ¥IKi~ü| ÿ‚Õü/øûñ£á×Á/ üñž•∞)°ðåž«¯xŸB‹G°ŠFûF§{+iÖš…äóÙéPÞÜØY}–uKè­tã¨X%Ô·ÖŸRþÜêü=þþ“ÿ ø¶¿œ_ÙïàÿƒÿðU_„Ö~&xoVðÎñƒF›Ã^ žãƧŽt¯ø§Gyt›-cW›Àú7ƒ®.¬l5n­4¿ÝÞYý–áo¬!¸‚ñSú:ý¸?Õø{ýý'ÿAñm~%㯠ðŸ ãø]ð–U[)Áæ¹MLf&…|VaŠªñ®©ÚrÌ1X©BTÓpjŒãM´Ý›³>§Ã|ÖÅñfSÆ9ö†a‘æ8L,ÕòÌ;¥´±’qË0¸X·QBœí^Ÿ"Ö¯µ sÄ:åþ¡­ëz…þ­yy?¼ÿ—ñOüÿèø¨ÿòªøRþ)ÿŸýÿµþUW–p¿ dÙž;8ʲ|¿/̳0ؼN‚¢çC—%Tãj8jrq§*ñÃS¢±S£B¦'ÛN…CÒÆg9¦a†Ãá1¸ìF+…r•V››NR©+ΣýågV¯±öÓ©ìjÑ£ìãV¢—Ì>ÁñcáOÄï…—Z¥Æ‰kñ/áï>ÜëVGuu¤Aã/ ê^›T¶µ–H¢¹¸°Rk¸`–XãšHV7‘‹ÊÍsþ Cwâ=kXñ³ã¯ÙâïW×µMCZÕn—öuøåh·:–©w5õõÂÚÙ~Ü6övË5ÔòÈ-í-à¶„0Žb‰Q÷Ëþ¿Šçÿ@ÿÀ­Gÿ•T—ñOüÿèø¨ÿòª·Ír‹;*™® Ž2T"áIÔhòFO™¤©Ô‚w}Zm]¤ìÚ x{ãgŠ>áñøO¸»Ã43:ñÄc£„Áe8‰â*Ʀœ«cðºÐ%*iÓ§R¤áJI3ãÿ€ ®~ |0Ò¼âOjVþ!ø…â­[]Óü>ÞÒîõŸ‰|Wñ#X‡Gðܚ׉&Ñt]?SñeÞ›£i× Ö®­´»KHîµ;Û-ÄŽ|{âQo¨è:ž‘¤x’ÓH×¼3æx›Ãcƾ× Õ5kÍ[U¹Ö¼iyáûÝzïü)ÿÏþÿZÿ*¨ÿ…/âŸùÿÐ?ð+QÿåUrp e‘`ø(©‹«„Â:µ%ˆÌ1/ŽÅâq\N/[’7[VR©8aèáðÔÛäÃáèÒŒiÇŸ6Í1Æ:¶? §W–1£…¦éaèR‚Q¥FŒe*•9)Á(ÆUjÕ«$¯R¬äÜŸ›|+ÿ“ˆð¯ý‘Œúœ|¯zÔgoƒº·ü%¿ÚûGü'?|ñóÅ?ñPx¦/íO‹? á^ÿÂâ¿Üëqý‹ûþW€¿âE§}“ÃZ—öüMôkÿíMgûGʼCû2Aâï±ÿÂW¡ü;ñ?öÚ>Áÿ ˜š×Ø~×ä}«ìÚZÏÙ¾Óöko´y;<ï³Áænò£ÛÍÃx#þ‰ÇÁü$4þe«êù°²–·Ökañ)š©F„%%ì³ YB¯ÖhÎ>φÁbà’^Ï‚Ââ"ý­ S‡…ɈŒ± 4èU¥^¯´å©Zpß Ô °õbù©J½6ùŸ5õ)µËRiêkß°ìÇ­éZî™…üw [ãF±ûDéSøkã¿íáƒà?"¶ñM¿Š%x§â¯Ç_Ú7Ç×ÇÃ{ÏÚè~8ð×Âí?âOÆŸˆ³‚ü{=¥¶¥­xàFµà¾‘á%7‡ÀÞŸGï¿áŒ¼ÿDãà¿þGÿ2ÔÃx#þ‰ÇÁü$4þe«*4°8xâ!G^”qTð´k¨`é%:8<-l +ý·Ü¥"¦téò¶z£R– K˜N¥*Ò7Vyb©ÕxÚþÒ8™fÚßXçú§4«Ã5u3:U¤ÝJ9…lF2”¡‰Äâ*TwŽÿc%ñÅí¦Éñ :Ïö„›à?ƒ&ˆø:}A¼-û<ü ‡Ãx‡àÇuãŸÄxþ+¿Œª<[q.§øxüV‰îüâ‡ð΢Þ3Ûø³ûþ˯u_ƾñe‰5ÿk¾3Õ›Sñ_€üðËÅÚL?> |Jðl| ã|9ð‘ã/†võ¯ÃÏàïk>#ð®§®é6ZœX_ðÆ^ÿ¢qð_ÿ #ÿ™j?ጼÿDãà¿þGÿ2Ô:XJSž3:“‹ŒêÏ Õœe<5YFugŽu'ÖÂañR“U14a‰šx‹Ô&•\nRXz\:¢­Iañ¡ì—ÕÞÐöX(r¯«Jx{+/c9Óø*M=¯~À?²·‹iGÄ€¿ ~&øGà—Ä9ôO^'…4-kÇüA¯hz“á?IÔìàð—…×Gäm?à™?±¤6ºä:·€~"xæ÷ÄÚwöGˆ|KñWö”ý§~0xçZÒÓÁ~ÛiúŸÄŠüaã‹Ë=?Á_~'x{J·›Ä/‘eâHΖ¶—†æÑõ?ጼÿDãà¿þGÿ2ÔÃx#þ‰ÇÁü$4þe©Â:r«8c±0w)W”0°Œ«J¥W^£«%ŽN£yJ´œÛrªÝI^rr3ÿiä£OêØNL=:t°ðúÅNJ©R†:1ú©S§Bœ(Ó„c TáN)B*+Ñ~/~Æß³·ÇMCVÖþ"ø/[¸ñF¬Ÿ<¯ø?âoÅ_…ÿ¼3wð’ËàcáïÄ?…þ7ðoþø“F·ø£ñF¹ñGíÂÞ"ñ†!ütðŸÄojþ2¼>*Ö|I¨kð[jÑÿ†2ðGý‚ÿøHiüËQÿ eàú'ÿðÒ?ù–¢ðPw†7õªxëà N/ë´h¬=,eÖ5µR¡ûŠxâŠT£5uS–.IFT0ÒŠÃ<‹ÅUi`å:ue„Iàì°Î¥:uû§:tæá͸öú/ìIû5xÅZ_Œ4¿k‘jšÇ~ÓÓî¾)ü\Ôü!á~7ðß<+ã?x+áþ§ã»Ïx2ßÅÚwÄÿˆþ'ð—…¼7¤x'^ñ_Šõ꾺ñ¬ëââ|-ÿßý޼eã}3Bøcâ¤xßÂ:×€#Ñ5|M¡|/ð?ˆ5Ëê^ý›ô?|KÕôŸÙKíâ]Ã> ±Ò?f[?„¶:F·àŸ‡º®‘ ÷ÃÏO 'ü1—‚?èœ|ÿÂCHÿæZøc/Ñ8ø/ÿ„†‘ÿ̵B¡—¨:kYAáç„pX:\ S L3×lðóÁS†tmìç…„0ò‹¥³ÅfNn£Ps•Xâ%7Ž®æëÊÌcYËê·ua˜cñØøÔoc1˜¬R’¯‰­9C}ÿÜý’/¼á |VÓ¥ð‡‰|qâÝ+âg‡ÿjOÚ§Ã?´Eî·ñ.;>!Iâ¿Úÿ´¿ÚKÇzom4_ iþ&Ð|oñWÄ:³¥ø'áö•}¦M§|=ðM®ƒ×ÇûþË¿>|GÒ~]xwUøG¥ø'Kð'„<-ñâ—…> Y†Z=߇þë:÷ìïáŸé|qâφÚ=Ô6¼kã‡!ñ‚`Ñü07‡Ä¾*ðÅß³¾ñ_Yø·âX ÿá!¤ó-Gü1—‚?èœ|ÿÂCHÿæZœ!ƒ¥È©cq•?‹dÿ„Ÿà‡í3ûNþϾ%×í4êÚo…ôý3·ïÅßxÛ[Ö|+¤hÞ×5 KBÑôÍ>Ó/þËÁôN> ÿá!¤ó-Gü1—‚?èœ|ÿÂCHÿæZ²ú¶[ïÿ´Uýì”ê°ÑýäãMÒŒçþÙïÊ4¥*jR»TÛ‚j-¢½®;•CÙÑäT^C땹VUaˆ•ª[ØÊ¼#YÒ·#«TqçJKÚµŸÙ‡àWˆ~øà·àmOá'Âöøh|àû½oÄÒC£Çð†ëHºð¬ú·öÐ×õ« ÐìtíkN×õ]RÃÆzš§‡KañSÂÿ5[ŸÞø®_†´wíð{Àßõ iñhÚ§ñwáŠþ øIñ‹U²ðõ®Ÿái5OŠ^ñ~¡}á #CðŽ£swá­ GÒ¬x?øc/Ñ8ø/ÿ„†‘ÿ̵ðÆ^ÿ¢qð_ÿ #ÿ™jº”ðU¥Ru±˜Š³«ˆ¯‹«*˜Ju%SŠ¥‡¡ŠÅT”±­Ïˆ£…ÃQ¯ZMÔ­K ‡§RR…*jã!Npð¦ððÂ8GV0xZu]zxgƒQxzuç:Т׳Y:‘Šœ›>¶ð<+ð»À¾ økà]+ûÁ?ü- x/Â:/Ûµ-Oû#Ã>Òít]MþÑÖ/5 Zÿì:e•µ·Û5;ûÝBçÊó¯.®.I_äoÿÁ8?d¿^ê: ð·Å ë7ßüwñBÏ_ø[ûR~Õ?ø‹á?ÆŸë ¼ñO^x»âÃ?†—þømñÇVš-ø£á%ÏÅ+Ø.…«|[ºðDßµÑ{­êZß‹u _ÄZö¡©e| ý‹>~Ïôÿ|5ÔuÛ‡>ø:>|(ø[¯x—âSá}ž¹ã‹¯xøx_ÅÿüãmOHðF·i¢ü*ðσ¾øbÃÂþ øg¢|8‹Mðí¬Ú6¥¥èÞÃÿ†2ðGý‚ÿøHiüËQÿ eàú'ÿðÒ?ù–§x8U¥^ÜLjѧ^•9¬,,N¾½/÷ë:sÂâ±9'§ÍÆ„ÊX©Ñ©‡– *5~§Íˆ›·Ô11X7N_Ræ¤ðõ°ôÕ9R”±ö˜i7†¯^”þ䢾ÿ†2ðGý‚ÿøHiüËQÿ eàú'ÿðÒ?ù–¥ìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrQ_ ÿÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËQìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrQ_ ÿÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËQìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrQ_ ÿÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËQìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrQ_ ÿÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËQìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrQ_ ÿÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËQìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrQ_ ÿÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËQìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrQ_ ÿÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËQìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrQ_ ÿÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËQìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrQ_ ÿÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËQìp?ôˆÿÂ:üÛëý=l_üøÃáU_þcõþžŸrWÊŸ´¶‡âmRóÀWz­k–öPø²ÛPþÅÓnu9-d¿o Ëdg‚ÎçHæ]>ód¦1x¶<ŠòD¯ÃÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËW«’f\“3ÃftªÏ<2®•ØHªsXŒ5\4®áŽRN1­)A§¤ãÓWG.; ‰ÇajágN8ÕömΪŽQtꪷ6 §yBÎû®ÍÝ|°~GeãÝ⦙ð?_³øâ­ Lð׈¼ciàmv=kVÑ4WwÓìnî“NLŽm!½¸D[­VÏFðÕ–©=ퟅ|7•Ühš¿ xƒá¤"Ñõ=îóEý ¯­í5{9ì/Ìê?³5¢\5¥ÊEqoqgsy±¡q‘DÑ»{ü1—‚?èœ|ÿÂCHÿæZ¶ôÙcLð­äº…ü1ðËÃz„ÖÏe5ö¢Ûè÷’ÙÉ,3Éi-Îáëyä¶’{kyžsK22‰ ý^sÇ‘ÍòÙåÏNŒe7Sšä¤åìjÒKšXºŠ1N¯3|’o“–Ë›š>†eƒÇGí¹šäN.³œTcVWh}VÛö<©¹«s9kð¿øÏððü]ø=ñ_á@Öá?þøëáàñÓÿµŽ„|ká}WÃcYþÊûv™ý§ý˜u/¶ÿgÿiiÿlò>ÍöëO3ÏäφðO…º$Ë­|i»¶øíâ]†ªør |Ó‹-õ³}‡ájÞ%‹Äßk´“I¿¹ÿ…ÇâÏ‹gEñv‘Š>Ÿ4ãL·ýZÿ…/âŸùÿÐ?ð+QÿåUð¥üSÿ?úþj?üª¯Ëñ9~WŒÅá1ج.‹ÀF²ÁV¯MU–ÛÊŒªÎ‚šp§VN…$«F*¬cN1œÔ½\w䙞? ™f9v‹ÁÓt°ÓÅ)Ö¥NîªUœžu!QûJujP•ZSJTç“^EEzïü)ÿÏþÿZÿ*¨ÿ…/âŸùÿÐ?ð+QÿåUwûH2=£ø.ÿ‚ãÜÞ¯ü Åëš8¢ðWÃ/"T "{« X]¹¿rÓZùÖòº¶æŽ;ˆ¤¹ÛŸÍ†Öö×ôÏèÿ ¼þ3Óî>Ý¥ø‹W:æ©«‹˜î­µˆ<'ªj^žêÉÁ{;}GB½Ó``ÔÓíÖ–×1ÿ¥F½û|?ñV³¨øÄÿ >x“Ä:¼–²êÚö½à­XÖuIllm´»)5SPð¥Åõì–ze•žj÷3ÊÖö6–Ö‘·‚(Ó‚Ö?c€^_àÿìýh±Í$*á^‹|ò˜íìîæ’(4ï^OåDº…²É#ÄŠ&”/%”·öý!ø; ‘ðžIŒàÌï4Ì2 'Ê)ÖÂâðªU«e™n Z¥B>ßÙUž×…9s8%»N Kð~ø‡‘ç|Eœðßå¹5ã=Í3ˆÆqÄ·CëÙ•|nSæÃJ]ý¼,ÒÂOÁýޤ†¯c»Ó¤š[Ymõ-?Äš•›£Ï´„Mewm8Ì@l•'5ù—Ž^ aüAÇpÞ7ÿ ár¼¾¾_y>Uˆ”«ªüÔ'pƒPƒJi·;ÉIï¯ÔxaÂ9‡ ® žkžàsÜvsŒÃc*â0µêÖ©zP¯Kê¥':’ªåÌ•›RÛD¿m>ÿÉ-økÿbƒõÓk¿®á?ü’߆¿ö x7ÿQÝ6»úþ}?V (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ø?öÌø«£üð¶©ñÄ6Þ ½Ð|)¢øç^Õ¬ü/£ÝëÚåÍž™¤|=’D²Ólל 7\jóØhš5 ¸Ö¦—e•1u#Kcç5Íʦ]Œ§JñZÊõ§M{©´›•¬™åçQ©,³1r¨ý‡*I·îâhÊ[vŒdú_kÝ£ðãáßí'ûMÚüHðµí+ð‚ÿÂ^ ý¢nç½ø6<-a¨kڗ«Û{+©-~üW¶±²”Ž¥á­øêó^Ôôû+êÿ_ŸX´Ò4 +ÄÚÁßbý±îy­˜”‚ÛáP‚xXŸà§‡®¶Aæ\HØõb{××Z‡‡Å¹_À˜´ºŸìÂO,[ö­ ·Ÿ¯dâ¾aý¸¼;/‡¦Ñ„é5»êv¾¹K›>öîÆÏIðDþÓ#¾¼Òn.ô©õ ½/ÃvZ®¢ºeÝî›g¨\éú~¥«ÙZ[ê÷ÿ¢øƒËëe™m>*ê*ÕÔcJ.7xIîÔ\¯U[’N1º„§Í:j_/Ãq‘ÇbeZ”áM(J2•ýåË^-ê’^ô ”7zÊ1匜q~ÿÉ-økÿbƒõÓkòoþ iû/üiý ?f›?eoÚ?ã÷ìÍûTÝxóá§Ã¯„ž:ø[ûM~м %׌üocau£|BðGÂïh~ ñ ¦º—M¦k^×|Yád’ÞïH¼’ÂÒçDÔY>ÿÉ-økÿbƒõÓkç¿Û/Äžð/ˆ5íBm{ö¿ý™4 uRÇL:λwñ3K¸´Ñt¡{<QÕ®­ìîç·ÓlüëÉáµ¹–(Y •—ðÊøZxÌNI…©:”–'Š8WêК§ˆ§ å˜ êF¥Ë:ØlU|4¢ã(U¥Z¥ °©J­JsýbgƒÂg¨BIax{ˆñ‘§Z.tgS‘fÚÚ Qr… Wú ýœÿà¥ÿ±gíUâï xáÅhxßÇ_ô¯‹ <%ñcàßÇOÙÛÄ?¾ë6·÷Ö_~ i?´7ÃO…·¿|–mÕþ£â…Pø¿EѬÎûX½±µÔtù®¾ï$I 2Ià:’{_ÅGü:ñ5ôzv§kzþ¥okqüIé¾1øyüã Mâ? [øÊÃö¼ƒÁw~ºÔ´«_Åñ~ÒÞñãxdi·ŨËâôøV[Åo¥Å š²xUá]Òæh½‡þ áñ;ÅšüGþ éøíðƒÅW>/ýœþ/À8þ=x£áF£á¿¿€þ3ü7øUðÏD𾛬Xjv~)ðE·‹<%ªøwâç…ÚÃâ‡5m#Gñ·Ù<3â*S¬K£ê{áéÓËò¬ó R¥â1|qá>ªéPÃáéq ОeŽ¡ ÕRÀåñ«šÒö«ãjÑž2¦¬ûJ­ g'‹Ì2Š“ÃסKÃ^#V¥u$«âjpî}šK ‚©]aZ©ŽÄÃ)©BUià%:|ÕÝÕF_ÜßÀÏÛ·öWý¢eø±aðëâuÆ›â_1Y^|gøñƒá÷ÄÿÙÓâ¯ÂýTðÝ—Œ4øãá'í à¿…ÿ|9àMoÃWñjÚõ/ Ûø+\··Ô×HׯfÑõh¬¹ï€ßðQØóö–Ö| áï„5]_[ø¥c¯ë ´ßü&øÏð²çâÇ„|/¦&­¯|EøR¿¾x%~&|(Óíf´‰þ-xµÿ†“jz–‘¢Ûx®mgXÒì.ÿ¾üÿ‚]~Ôž0ý¤ÿmhà¨?´í¬ßÿà>?ø=ûPøÊOþË6~ø;û(x—@ÿ„‰.>1øösý˜~ ê?>)é©®j^ ð×t _ˆou¡øäj~ Õm|âDÑ>Aÿ‚c¿íëÿ¼ÿ‚†~ÈŸðLŠßþÁAaÚKáÄ‡í ¤K¤ê¾0øàx Ä:ý׈¼3¨#ø‡Yðï‚õÏ_hÞÔ|+/м[ðêox³Âw~!ÚEeãkYÒÃÖyƒÀW¡^†!äØŒ] •F±9ž|IˆÅàዜ)„§’äÔ3L5V•:•éçu<ºËgŽ0¯V0Ë*f4jÒ©O¡W=¡Ueµp¼?|e /´”«N9žm_ VŒk¼M-l—."¶c"þ‰?i/ø+—üëöKñGÄŸ|nøë©iš·Ám7ÁZ§Æë¯‡ÿ?hŽ^øÄ›û­7áõ‡Çü øWñÁ¿üAã[›7 ø_âf½áokv7v©§i7f­¥ÝÞYý¦?à¬ÿðOïÙNø)¯ü}øõ?…üûFézF±ð;â7…þürø³ð§â]Ž¿:)ð×Å„ ü3? u=FÓ4O…ž'ðÏ…5éz6‰w¦Ùi¾¿ð†Žš%¤šm©Ò­íÞÞæÂ¹WÂp½~ZueŸãü?„ªÑ¬ã„Ž‹q8L¿0Â*ŽJ¸l^ 0ÄW¥ÆT§ˆŽ&,R©–FTÓ—n*4(ã8‡ §RŒr8q„%*Uç9pî¦'ŽŒ!ì# ŽÃajâ«áiΔ©Cƒ¡O*”+Ô«ýüaÿ‚­ÿÁ?¾"xgöêø ðûöÏÖ¼=ñOöeøGãøëã?€¿ >1ü^ñ—ìëg¨ÚÿÂ%ñGÃqøá‹ô¯Ü|×õ«KïËày|Qà í'Q?&ðŠèzÅΙòïìÿýÿcoø$çßà¥ß¿n?Ú7Äß|?ÕÿnŸ‰³íY©kº—ŠuëWšw‡*ø£­êšF©¬6— h~)‚SžÓþÓý½þüøqÿóý¿üoø…ð¿ÂÿüQã« ­Hð¶·ð÷MñÜÞ9ðÿÄ;Øþë¾Ó¾"¤Þáø(güÃß²×ü?ö@ÿ‚zø+áçÆÙ|Qñâ7…üQñ÷ÇÖ¿³¯ÅïÂ> ˧x¦uð§À?xoÀ~#ñßÇ_ø£]Ѭ¬µßü"ð<1á}&ÓÄÒ5«ßˆž#‹áÇà‡ü£[Ò>$ÿÁ àÞ?†ßuýÄ?´/Ž|mûè­|­i—úáñ焾¿€ü_•ý“uq(Ô|'ñ_\ðŸ†|Wv×Sè3žÏMÖ`´Õ“ÊBÁ`üS¢|ÿƒ”¿àŒÿ>;xËŸ>øwàO…#ñ—Å/ø‹Fð¯ôÝCÃ~3øîÞ'»ÔüA¬Üišf›mosâ=ù÷†Ê dÕì­íÔÏ(}ìv†Š2̵b9p¸o1ü!Z¦"tý–e…ÉrìP¯((Á<:R– :Áû^LU8¦«QÃÖÄá#ÁF¬ëpÖk˜(B¦+á‹âl,püò«„Çc³ª¼7Z…;Åòbg ÔÆd؈*õpõ°Ø‰:n¾…xþ³||ý£¾ x§þ 1ûéþ ûVþÍþ-À>V™ÿÛÕÿe¿ÚŸÀß jµø“ájñf½â¿øÁÿ mf²]Kì"=Ðük©xGÄž¼ðv›©|*ø•¡ëGLý9ý ¿à¥_±—ìÅñ*ãàßÅOŠzý×Å3áÖ¹ñÄÿ þüøïûGxÛÀ |6úBjÿ~(øoövøeñOVøSàX»¦=·Š¾$Zø[DÔ¢šYôËÛÈl¯¤¶þ`¿à§zŇˆàê?ø"®¿¥I<ºf¹ð/áî±§Kue}¦ÜÉa©øãö“½³’ãNÔí¬õ+ ÞÞxÚ[-BÒÖúÖBÐ]ÛAoÉeo.¿û3iמ0“Ã~'ÐÞxa‹Uð7†>k tjîÅnl´»˜-4mbSªYN‰óðÅÔ£”PnƒÃÇ ?ñ•(×sræàÈO5§€jU©b1øÜf+Š•zµéa0X4Zê?²Æ½.”ºÇ?„Þ ø“û@xmµ«Éô½7WÔõo€¾ ø”t?ÜkÂ6Þ'ÖáÓü=mâ«?·Zœ>"Ôôí2ëÁü ÿ´ÿ‚YüLøÍð+ö|ðOíàmcâÿí'á? øÓàÿƒäðÇÄÍ%õí'Ç:-߈|§øƒ\Ö¼§xkáÏŒ|W£ÚÇyá߇ŸµŸxûX¿†`°ðÔ÷>-ðÄ:¿ñ¡û4ø+ã„?àÍÛ†ûâ…¦½aá?ünÒücð*×\y–3ð®çã·ìÙ£]_èVw ²Xè:¯Äíâ.£jDÍÅî³ldƒRIååþ>øÁÞø=ÿvÛøKÚN¯âÿ ø«T:u¤p˨x‹Æÿ?fox³V»¸!§žï\ñ.¯¨ê÷$Œ†æä¬I1ÃG‡ÀÑŸÑÉjÕ“ÃbxŸ‚òHÊ/Öp´x·†ñyÅZxŠ“^Φ;'ÆÐŽ»Xz¯ì«Òx|5V§OÇ¥9×ᵚÓöoý‘â/™ó}Jµn «ºº4’ößSÍ0Ù¥i,/ÖjJ›xz´ó*Ô¡%ˆÿIû›ˆí-®.¥YÞ+h%¸‘m­®onZ8cimììâžîîvU"+kX&¹žB±A’º¡ü‰ð¯ü‡þ sã›àï_|K©~Îm—ã¿„´oÙ öѾø…ð—LÑÿá#Oø“Ç ýž[â‡üà[Ÿ êÚwÄßxj/ |5ÕßEѼ{­xsUñ7†¬õ×Úþÿàß?|+ð_í§ÿ.Iñ'ÄþÐíl~0|@ñ¶µgâcGÓï[áƒ>+þ×ñÄFÖþêÞêO øv-cBÅ:ª¥iRë$z¥Í´š…‡›áU­*qÎçzoû7„3Î"¡ÍUÄäøÜ—ì*4äå‡ Ö®"³§Ô£O R¯4àåzTèÂtp•«)Wâ>Ég n.R£âªaœ¨ÅÇý曥j*R”*Ô«8Ç—ßþ°|[ÿýŒ<û"i?·•ׯeñ?쑬i¶zÄ?>|>ø©ñ›CÓô««›­>ãQñ&‹ðÀþ6ñw„lô^Êó@ñÇŠ¼=£GàoÛOáŸ6…¯ÆÚpñoÿÁjà˜>ñOì³à þÖ~Õ|cûiAsuû8x\ø/â¶Ÿ¯xÞÖjž ·º×4½SÀVWŸ íuÏèšÖƒá;Ÿ‹1xê:F©„äÖŽŸvaþM?à˜^ø“á¿ø4³þ k¯xæ[»†ž8_ÚsZø i«Í±cðPðÿ„<#«6œgqe¨|OÑüYai{z·:䟔Dó¸—÷cþ ¸ýœ>ÞÁÿ`ojÿþø£Æ¾Õ¾1|bð§Œ=ðõ÷ü)¯jZ4ú†üLÞÓô¿ ®¿¤Oi¬·†t½?F¸¿žÒÙPû¼5<?¿aíGàöûK|y»ðYý tñ7Á=SÂÿ~<|aðÏÄýY´ØaŸÁÞ/ø-ðÃâ…u›©ÿ¶tK‹}.ÛYmVâÃ\Ðõ(l¤Óõ2êëøðý€ÛÄ ¿àŽ¿ðsÃ?ÚkQ³Ñÿi? |Høÿ?ÆmÅ’YÁâ¶ñwćZ/…‰ù{ÿ1øÑðW\øûZx»ÃðV/‹ðR xkã÷мsâï‹¿´wÃߊŸSöwðö£á/V|x[mB øKÑõ랉{áÿ†z7?ö| Ñë_Úþßÿaø­ñ/ö²ýŒ~~Ûß´k½#âǃ <¦Ã©mûlÞø;áFðÞ±ân²ÜEeŌן¾%ifÞs-÷‚|Aà1ª,wúyµ³þ&¿àšÞø³âø7ƒþ ݤü±Ô5/‹^Õ5Ë=%öêR|1Ð…uß‹Ò[©’1<ß 4ßÝj¶À¼·Z,:•½¬3ÝÉo ¯>Iã QP­ŠÉxZ´ã]Î_VœqxïöÕý™¾ü[øU é­öïÂþ×|_¥i¾)ðö›«ÿd_k?ÙÿöLø}àïþÐßì¼kã=wÂ~ð6‹“âüHø¡ñÅwzv“¡ø#á_¯h¾+ø¥ñcÆú¥þ¡Çáo‡~ñGˆÄ]ê÷|ZU…ýí·ùóÿÁ^|uðÓYÿƒhà…ö>ñWƒoõƒâ¿Go§éº¶‘.¯#|>øOñ#ŸÚÚ¾ß,^ñÝÞ—¡xæh!htŸßéVZÓè_X¤ßwÿÁ|hIü ÿ6ÿ‚&~Ú²ünñ_„?`ˆü øOöªø màOŠö ñ‹!ü×<;›u©êWÄÿ xRù4³x’8$Ð/ìu+Ÿã‡þ@ÿ‚«ü6ø‹û1~Í¿?à›ß¶íSà/ê´$ÿ ¥ñ§ÂOþÚ¿³7Ã_‹ ´#â•§/þYê§áoÁÚIð—ÄíFм_ñOᆟãûÏÞÝø_ÃZï‹ô­7Å>Óuvý·?fƒ1ÿÁ7?à¶´GüÏöÏøÑÿø›ûM|8øEâ/Ú‡âŠ|Cýš¼}ðžK?…Þ&Òõé¾¼ý™>ü"øwañIø ÿ %ÿÄiÚ…þ™à}cFÒõxlëÿ’ðWŸ|4ÖàÚø!}‡üUàÛý`ø¯Á‘Ûéún­¤K«Èß¾üHð§Åv¶°†o·Ë„|ww¥è^9šZ'Ä·úU–´ðêÖ)76Cû_)¯Š‹ÃC-â iâ(Wn•ZxŒû8œóZþÞµ*j¦F°¸ U -ya°ï4Ëëc]«R§ROK fÒ¥É^ŽgKŽÖ´g´¥Èr¬»§V>zo1’ÍaV´¡Š<3*XQ”°¿é?¤;ˤérHí$’iÖO$ŽÅÝÝí¢gwf%™™‰ff$±$’I­à~øïÁ_þxâÃøoÇžñ…tOxOÆ^Ö´ïxcÄš£aö:¶‡®i7zn§§ÝDÁຳ¸špùú–&§ˆÄBqp”+U„¡(¸ÊI'E¤ââÓN-&š³Gƒ”ÉÏ+Ëfäæå—àääß3“–›rrÖíÞ÷»½îQEbzEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_#~ÐW6úÖ‚]ÜÛ$²x³ÍH'xR}šoý‚UB›7>ÍÙÛ¹±Ô××5ñçíÿ!Ï ÿ×_é³áÕ}O%.(Ê“I¯øPѤ֙V=­g¯©ågm¬¯gmpÛØ^ùs^¼¼hâà«4jŦ—•Á8 ¾Ò=ˆÇã_!þزHóÛÆòÉ"[Ûü!†w,°Ä~ xncJNØãi¦–bˆ ²É&7;õ¶¿þ¡ÿÞÿA5ò/í…ÿ)ÿ\þêð½~›â*ŠÊ2ûF){lCI$¬Ôòõuòmz6•á–ÞcˆÕè©-[z*X5o×úVýçøOÿ$·á¯ýˆ ÿÔwM¯3øãûþÉ_´åÿ‡õOÚOö\ý?hMOÂv—ÖÔ~8üøiñbÿÃV¤Ö÷•—‡îü{á~ãF´Ôn--g¾¶Ó¤¶†îkkynG†6_LøOÿ$·á¯ýˆ ÿÔwM®þ¿qŒœ\£8IÊ ¤Ü$ã(9EµxÉÂsƒjÏ–Rí&Ÿè RJII¥%Ë$›JQRŒ”d–ëš1•×4b÷I™Z…¢x_DÑü5á­Jðï‡<;¥iú‡ü?¡iöšF‰¡hšE¤:~•£èúVŸ ½†™¥i–ðYiú}”ZYZA µ´1C"Á¦øgÃz6„žÒ<=¡é^ŽÞêÑ<;¦é6:Zß<òÞÛ&“kož¶÷’\ÜÉu·Ü=Äï2»K!mÊ*ªþùÔu¿zêóûWW÷ާ´¿´öŽwçç»çæ¿5ß5îM$¨ªjŠT•%IRJš¤¡eMFÊ +•FÊ6Vµ‘ó·ÀïÙöKý˜¯|C©~ÍŸ²ïìíû=j>.µÓì|Wð;àŸÃ_„×¾'²Òe¹ŸK³ñ ×€¼3 O­Zé³ÞÞM§ÛêR\Åg-ÝÌ–éÏ+?Ñ4QMÊRQNM¨.X&ÛQ‹”¦ãþå)JÊËšR{¶Ø£¹5œß4ÚI9IF0R“_QŒcwwË­’KãÝsþ åûx›_ø…â¯~ñïˆ!kþ ¸Ô|i=×t=Æ3x’ãR’é_ˆ%fÕ´ûK¸~•ñ·€< ñ/Áž øqñÁ^øð÷ÅšELJüSà?xoFñWƒ!ü:øQà?xçâEõÞ©s­ÝÞøûžÐ4ÍÆwZÍåÞ¯qsâCQš}RêæþWk¹å•½¾Š§9º‘ªå'V4¥B5\›©2§ R£·Ì©J•:tåM>GNƒ\±ŠY¨ÅS•ªR«ò¤’Tå^5'V5¥¹]XÕ©R¤j5ΪNsOšRoçþÈŸ²Å/оøëñ7ö`ýž>"üoð;øzO|dñßÁ_†Þ.ø«à÷ðޝ>¿áGð·Ä?xkPñw‡ßÃíÍεáæÒu{C¢ê÷êZi¶¼–IšÆßØÇö=ý¦5½Äß´ì¡û5~Ð>$ðö–ú⿾|VÖô=K¹oßGÑõoø[^¿Ó4·¾ž{ÇÓì® ´k¹¥¸0™¤wo¥h¨å‹…:n)Âj¸ŠP²ä¥^¼\+×§¡Z´[Z‘Ju"Úœšv4æ—4åÍ.j”éÑ©+¾iÒ¤Ô©R›½åNœ£N¼`ÒqI¤x®µû5þΞ$ø3iû8ø‹àÁM{öy°Ò´] Çà>µð¯Àº§Á›=Ãw–š‡‡tkO…×Úþ·Ò´û íN‡CKM.òÊÒæÆ&·…Óð¿þ _ÿ‹Æ_ðK¿¿²_üö øW£üGøýñàÆ¥­øoöyð¿ìÃû6xh[ü4ñÞ‘ãy¼[ñ#PñŠ~ iZÄšV‡}áÝ û)|]âHµ}zÊÒlôugMþލ¬1XxâáR'V.¶+‹¯:rQ©ˆ«ÆáqôUyJ2ö°•|h¦œœcîÊPœtÃÖxgMÂå4qthSœoOf¾´èE8ªUR1”,¶Œ”áÍ ~DÿÁ,bχ¿ ¿fïÙcÆß`†Ÿn/‚Ÿ¾ü ñ¿ÅøöbñWÇ-jÿá—Â/ |+Ô1|øKñg[øUâH|cð¿Xø—ðãÁÞ;Õ~øºÞ{+¨§$úu®ŸeofðÅkG×ürý‘eÚzçן´¯ìÃû<þÐ×~ƒS¶ð×Ç/‚ß ¾,ÜøVÛ[’Æ]fßÓøûÃZüº¼ºf›&§˜Ö±ßɧؽÚÊÖ–æ?¡¨®%¨R¤¢•:”èÓIrQœà©Ît¡ðÓ”©¥NR‚NPJ-¸«-·:•[n¥ZtéU¨Ûs©J”œ©S©?ŠtéI¹S„›Œ$ÛŠMÜñ_‹Ÿ³_ìéû@x3EøqñãàÁOŸ<7¨XjÞðÅÏ…~ø‘àÍTÒôë­LÔ´_ øËBÖt=+PÓ´›ëÝ.ÂòÆÆ ‹M:òêÊÞHí®&‰üûþ wÿÎÔìô=;Rÿ‚vþÂÚ†Ÿá‹ô¿ Xß~Énìü=¦]júŽ¿u§hv³ü?’ &Æç^Ö5mn{K··›WÕ5JHÚòöæi~颩6ªJ²mVOm:©Ú¤ëZ+ÚÊkÞ•KF+·+F*öJÂmBÓj*j•:iÚé)9ªp‡Ã jr”Ô"”T›•®Û)LÓŒz~ž^>È¥Ž•¦¥±xí Ûm§ØGq5–ŸnYcKkTšâÒÎ,ƲMo³§ñáÿ‚ÿ‚Wüoðwí}ÿ1Ô¿à¤_ðL-Äß³ïí¯ûBÂÿø=¨|v¼ý†h_ü9½ðÿŒÿhoiƒÇþÓ>7üTÖôOêZÆ+Oé:§€ü+ã[;+ù5ëG_Ót9¿µnÿ±Ê*¨MÑÅbqM*òÅe˜œª­:랟°ÄãrüÆu£ËÉUbaŽÊ²üE*Ž«Œg†Œ]9B¥xUš—ž `!)aé,nåBШå€sö4.Ô©¬4éÖ¯Bµ8ÓŒ§F½HóŪr§â?ý™fïŠÿ ô/‚?¿gß‚¾ ø]4ü3ð‡Çÿ <ã…þ¶-¦x]4/x‹@Ô|)¤'†ôÖm;A]?I·]ÅšÓOöäÆfø#û6þο³>…«ø_öpøðWö~ðψ5a¯ëÞø#ð³Àß t-o][;}9u­_Hð&… éú–¬º}¥­ˆÔomæ¼vÖöÂo"Ñ}¦Šžisשwí1Su13»çÄMû;μ¾*Ó~Ê•åQÉþîž¾äl¹cÉFŸ,y0ÑPÃÂË“¦”(ÆÖ¥ªTJ4ÔRU&­ïJÿ7üGýÿd?Œ¼?ñŸâïì­û7üTøÃá$Ðbð¯Åˆÿ¾øãâW†cð¶«>¹áˆü?ã¯ø_TñFŒžÖ4íRÙtVæ}CO÷sI3}smm{mqgyoÝ¥ÜÛ]ZÜÅö×6ÓÆÑOoqªñMÑ;G,R+G$lÈêÊH3ÑPãIÑq‹£'VN“IÒr¯­i:vän³Ö«jõ>ÝËR’¨«&ÕT©ÅUMªŠ4oìb§ñ%JïÙ«Ú|¶¹çßð©>ÿ®_ÿð¬¾ÿ•_'ÃUøAÿ_†ÿáW/ØôqáØü¿ÿ³á OªèiáQ¤ tubØ ¯+ø%û~ÇŸ³Fµ¬ø“öqý”?f¯ÙÿÄ^#ÒWAñ½ðKàWÂï…ZÖ½¡¥ÜWé£k:§<- ßjšJ_[ÁzºuôóÙ­Ü1\DÑ£¯Ò´UÊRZÕ¥'*؈ÎêɹU­ Šª© ÕçR5jÊq›’’«UI5RW—ºTè8§F”ãR•“¥NptåÓ¦ýÈN.E&*m4éÆßxSþ áûxöËRð?ì3ûx7QÓ¼sá_‰ú~¡áOٛேol>%xõ‰<ñÊëHðMœö¾9ðlž!×äð¯‹`’=ÃÏ®k ¤jm©Þ™ýãâßÁƒ¿¼{ðÛã·Â†Ÿ¾jWz}þ£à‹~ð·ÄjúMÒ_iW·¾ñŽ•¬èWWzeìqÞi÷3ØI5•ÔiqlñJŠãÒè¢mÔ„iÔntã8TŒ'ïB3§ ©Î1•â§N– NI8C Bj4i¨ß4IÖr“­UIT«wí*)ºŽju/Í5'V«’“|Î¥KßžWá~|.øgðkÁÃ/„¼ ð«á¿† ¹µð×Ãï†Þðÿ¼áëkÛÛFòßCðŸ†4ý/AÒ`»Ô/o/îa°°·Ž{Û»›©UçžYço Á±'‚>!Ù]i ³ž×Ç> “Ä:üžñlG¯øyõÍa´B͵;Ó?ØtU*•Ybæ«ÍÂS¬¥%VR¥^ªr•KóÉÓÄÓ§ˆƒrná ±µHÆJc/¥‡v½’¢ùc8+Ò^ã´*T‚¼tIÅi)&QE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ø÷ö‡~»á¶Î6KâãŒg9Ó~{Œt÷¯°«ä¯ŽŸ7Œ<Ã'›©ø<±æfÓáªì0ý‹Ró·nÇ•ý¨y™Ûö+¬ù}GË“‰òÉ¥~XæR·{eƒjövÓ­´Üò³µ|¯»Ë ¾\ÃÛñ>G×6í:¼c9úž˜þµò7í„6ÜF¹Îؾ úãào…ÆJúÃÄòx—ÈÓÿ´mõÈ-_QÛ+ÞøcPÒ-Ü7QxÒKÉÿeŸ„±“æ":DÞ0‹{¢•Óï™B§Éß¶ ÍÄgÖ/„ž¼ü ð¹æ¿Qñ5c“eΤiÁÊ®&\´êJ¤RU°0^ôéÒwn2vå²VÕôù•)æX—O›EE>d¢ÿˆ{)Í[]ï~ëc÷£á?ü’߆¿ö x7ÿQÝ6»úà>ÿÉ-økÿbƒõÓkäOÛþ ðïöñ/ÃCñëáÇ7àÄoxoÀ·¿µW‡¬¾kŸ~ø§Äñø–êÚÛâ½—ü-û?ŽžÐ4­?Ã:§‰¾ Û|ÕþøkN¿Óî5ŸÚcRM;ðTÓ©B—ÛÄW¥†¥}#*Õä¡F›´)ºµiBU%ʬéÒRu*B2ý0œ£VPŒ§ìiT¯8Á9ÔöT—5IS¥Ôªá Ô”)BsTã:Ž<”ç(ýõE|»ñ+ö–Õ¾|uø9ðFÃöqøçñ"Óã5½ÝÎñ‡Àš·ìé¿ǤLïâQãþÐø°çÃ+Xø“Qoü+ñ”Z†“ªYÛxfM_‹RÑ,>¢¦½ès­´«IÆO–¤gEÅOš”­V0|ÉÓ©(*u£yQH©5ÑæäRRýÕÊPj¥' ðs§ËZT¥>]jRŒÝZ-Æ5¡NRŠeÍÄv–×R¬ï´ÜH¶Ö×7·-1´Ž¶övqOww;*‘µ¬\Ï!X ŠI]PüÏû#þÖŸ ¿m…z§Æ…Zįx[Kø¡ñ[á<ºoůj? |l^¡äø·ÄþѾÂßÛ_i¶ôÂ@’$ž©'°“Nšk’iМžŠ5iÑÃâ'{i8ªæW‡¿Ê¤å¨¹EÂTã%iU¡LüÔg_†ŒôºW­„ÄC•ÚkÙó8¨N‘Ex¥¯Ço ë~4øIáŸh~.ø“á_Œ^ø…ã=ãoÃ7NñÀ¯Øø@šoŒ>$é:¼ºn•­xñ¼^íðâÎÎßT‡Å á/‘udt.}®„Ô£­c.ußÙÕùéRœã®ü·W‹MŽ.6º·2ºóWkåªjÏ]Š(¦ ¢Š(¢¼Ïâ÷Ä¿øT~›Æßð¯þ&üNò|Kà? ÿÂ%ð‹ÂŸðšxÞ_øNüwá¿ÿoàý¿Mßá¯ÿÂGÿ 5_µøG|  ø“Ä>Eçö_Øçò_ÚÓö»øgûøÁ¾?ø£ |Pñ‘㯋¿ > è|1ø{­xÚK/ü\ñ¶‹à_j^/Õ­Å—„üá =S[¶—TñO޼GáÝ2fX|?áù5ïk>𮸓R•8§yUÅÐÀÓYâñ50Ô°ô"·s­W†§ {®ucÝI*ä—,§or4ëU”®­xznµyË_v©FU''d£öLúšŠ+城µßÃ?ÙûâïìÁðWÆzÅ SÅ¿µŸÄ­[áÃSÂu­_À:»¢ø'ľ<½¸ø‡ñäiÞ ðšO¤ø^ö ÃÍ­ßx÷Ä—-÷‡<ªøAñv·áÁ4êáè­jâñ40xjkYÖÅbªÆ 4âµ”êT’I-¼äãÊI4Õ:õ^”°¸lF3Qé8l-)V¯Zmè¡Nœ%'ÖNЊ”å¿©¨¢Šb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ øÿö†Ùý¹áÝÀæx»nFqÿ߇9Çö|wûD+wÃ[F@—ÅûºÐ7áÎ:óëÒ¾«‚?ä©Ê¿î¡ÿªœyågŸò+Åzá¿õ3|oáo én·z‡t=>æ]Í–“§ÚÜF$ãG5½ºHãvG Ãr3+eIæ_ÛjLp<¿„Çð£|/Ž;q_]k¬¦Ù†rå£õ÷ü:œ×ÈŸ¶~Ñï½å| ÏN¿ð£G…£f8˜Â’§Ý?v mÑÄö²nÉ_N§ïGÂù%¿ ì@ðoþ£ºm|KûnüZý“,~(þÈÿ³Çí!ñ?à6•/ÆßŠ~6ðÿü)ï‹þ7ð6“uñ7Â>1ý>>|2ŸK‹ÁÞ*Õ-n$ñ—á›Aq«êV–rýµðŸþIoÃ_û<ÿ¨î›]ý~*têòÓ¯Nl-NzxÌ=HF_YÂÔ¥RZsS§MÏž7Zšn tåB\êPý*R~ÖIÑÄSp©†¯NR‹¡^HN_qÆ£äån*Z3Œùg‹“–_ÏŸÀO~Ô±ïíƒð»öÔ¼7⟋?³¿Ã‡´WÄoØ öñ6»q¯/‡‡Á¾ÒWö?øßâ åM^ׯ¿|G}§Yü-ñUýæ±/Ä×V†âúÛ_øsâ%ñ¿Ø×ö€ñ¼oûø“á§íñ—Çß·G޼m®xKþ Éû$|Føçñ#Æ64k?†Ÿ'øÓâ~Ê>0ñf»àߨïMø_ûBøSÁ>ø¯ü5ð7ÂmǺ‹4OØ^üBÑ|qo}sý8QZÑHâiâñ*bñ†^«bªÎrÇb¥–ÕÄ·N2¤ªT¯K=ÂUÃá8µÖU1œ@ðT1³Æá1óÄbkcR•†¯…ÂСƒ¡WÛFŽ•7õ19n*¸l$gMQÅå¸Ú3^•”°#ˆÁÑËqe<øßÿøÙá?~Ò_²ÃÚ‡ã_eïØ_âw…þ;Þøãã…>5|Cý˜´ oöð}·¯þ |ø™ûO|5ñÃß|ðÖ»àk¿Œ>=ðõ¢|Uð ?¼[à+Ü^ëV¶ñàì÷ñ—DàO‚~øþ Eð×à/ì{yûbÁOôß~×?>0|mñŽ›¯üb³ý£!ñŸìãáoеGìÛûsþÆßü!âŠu‰<â|mo|t¶Ó.nõ]/ÆÚÝê+šŽ•:Ьé«x ×^UéSÇK2Ͱ9– ôå_’Ã…ÃdÕiO ?ÔrÊÕéâ¾­‹¥˜õׯí(S£MN‹†+‹Uy©Õ ˜¿9ËêPÀûZ2Ž™Ç5UsZ5£‹­^RÌ£…Äà£Ád0Ÿ>0kß >*þÁ¶¾?ý¹­?lÝRËáÿìÛá–økà?Ú“ãGìûU|P×u/Ž1h°~Ö_ ?e |E½øuûü5øŸáÛ[†ø…ð—â>¯%Ç‚<y⯅6ñM·ÄM[AÕ½Âß~øÏÆ¿µ¯Úþ Qñ×öHý½þüeý­ô_üðïí/áÏ Øxà>†ß,~ ø†ØŸââ|eø qðs@ýµ/†ÿãý¦à Ô[TÓ/~#øûâ­·†´ÿøzÛú7¢µÅ*˜ª8ª2©Ëõ‰ñZuãO†©žâp˜…*J‡±Â~â4qtq3úšÄcècêà§^†UNiËF1§R„šN*y*aâ¿s^Y&…››­íëÆ–&5°•¨a¡YPÁã2Ìg(bóoo˜Vþ/þ|j½ƒö<ÿ‚%|U³ÿ‚¬~ÑÚ_ÅÛâšü:øëã Wö¿ðŸŽ¥ñ¦±¡~οôKKkOüV³ñßÃMÄŸ>&êß|¡h~³Òü{ñÄž¾ý¨|;ñ£ã ~ñ6™ßþÂßî¾8|ÿ‚d„_·íûP~Ö_¼âÁB~Ýþ×_|a¯øSöqÖþüM:çþ"|8ð§Š4ËÙ«Æ¿~$[ü²ø/ñûAðïÃŽßµmwH?ð´þ$Ýø»T×5ëgÆþ»ñƒ|Uá;x‡À·¾%ðö± ÚøÏÂPx^çÅŸU°žÆ?xz߯þñ—ƒ§Öt–œ^é±x£Â^%Ð^î—UÐõ;#5œÞûþÌ>ýŒÿg?†?³7ƒþ!üJø›àÏ„ZøWÁ¾#ø´ÿgñµ¿…­&‘´]þïá—Ãφ¿µÐ,Ý4Í>ú_ .¹ugR뺮±¨´×óⱋˆ)Ö^Ê9ža…ÌðÒ‚¦áF“ÁÏ/Åä”"©¹ÑËgJœ!‹¡Bܯ‹ËiVÁ{ r¯Ù'þÑ÷ðJÏÛcTÕb½Oö¤‡ãbx{öÛð_†> ßxD“à¿|aâŸxcâ‚iºWŒ‡‚¿g}RçOø{¢ËàŸÏðïágƒµ_ü`Ö¼Yõ¿í'ûQxcÃ_³ßÇŸˆÿðOoø(_Ç]oá¯ÿÝý > ~Ó~=ñoí[⯌þ/ýš¿i]!~Kû1imâ_Ú\ø™©þÊ?´/Ç?ø³âOÂ=wö{ð™ø_â$K ‹ß‡žø}ñÀ~ñF‘ýQQ„ñÔ±Q©VP¯‰ÂfXooMÊôÿ´jñEMBsŸ´Ààÿ·0O €©9BNɪª¿ìxXáµÃã!‡Çå˜Å†§VŽ]˜á1ÒÁÕkÙâÖ¶MR^ÖTãO—5•VäÆB *®sO…ÆRÌñÔ1?€ðM¯ÚÁw¿·oÅOÙÿÂß¶v½ûMé¾+ÿ‚~þÆ´dÖ¾:ý¥´ÿú¬ÿ|G©|S¶ø£ãhj÷š7Ãû_ø/Wø5âox3á6‡à…Ú]ž¹àßéžÑãñ}ö¥ðŸÆÿ‹GÃÿà±'ëº'Ãüñg‚>/x }‡Å>?ð¬^7ñÇŽ~'øëúè¯ÿgÏØûJýžþ4~ÔŸ4ï¿þ#êßµ´_ˆþ8ð‡Äxþ xGÄ^ðÆ—à] |>_‡_þøºÏOÓ¼áï x9-|aâÿ=Öá« Vþ{¿_ø‡ÄZßV.¢Æã¥Y©à¡S,Ϩ,FÑ…\&'Äx<ß(yrXwK['ÊèÇ(ÊqQÂâêjœ”a^J‡ ¬¾‡4!CR|‚QÂâ©N¦ð5·3«„kP–+ cèâ3\ë ±XyãgšâéÊx‰óÕ«ø3ðâ?íãÁj|aðßö®øÃûO~Û²M캗ìßû8ÚþÑv³à?…Ÿ¼Mû øDx¿ÂV³ÇÁ‰<ðçân‘á_Œ7.økàï ücðwŽt;âÂØî­íìþ9ê_|yã.ëÀšW¿l?h`¯ÛŸö­ø‡ð[ãìñKÄ´ïŒôÏÛö•ñÄŸÙ7ö•Ñçøw{û3x®ÿÆW¿¯þ!~ͼE¯x£â~›ñ öO·Õ|àoè^ÔíüKð:ÚÏÁR%M”V! ñŒkF4㣠–¨`SÂÆJne€ž"‚›Äû:uq8Üs5jô󜧙KW‡ÃVÃTjΓÃJœYa1u+Óúÿûb­‡|º¼)b㫪ը<2*”þ¯„tsœÛ[/«…Ìqô1É·í%ñËâ&™û ü ý¯> |ý¡¿aï|ø¿ûþÅž'ð>½ûT|EÐ<#ñ?ÇŸ ?j¯x3öÆo\üYñ†³?ÅŸ ÝÚxcÅ·GÆMFö/>%ø{ðÓÇç‰þ!j¿ |Eã-7Ä<þÚÿ´wìýñáOÄï~Õß¶wŠ>~Ü ?à¨ßôë¿ÙKÆ_µÿŽ>|9пgþÚÿ æøQ¨øoöNÖ¼sᄟþ k?³,þý¢íÿ ¿Åš†³¬ê¯‹Å]/Âm¡xwûO¢µSrÄÃV4¥^žz¸‚”¡Â41µ1ü9šb¡†R©QÑ¡ˆÇdù›IJU¨à¸ƒ—Ó¬°ÒÆÇ2KØÃcYÓŽ8)N¥u*¸œ- k•a)ãeTþ³(e˜ìÅUµ9c3<›/Í$©N†„þa¾|MøÙñGöÖ×|kâoø)?ÃÏ ~Ñý¡þ:øvçþ ÁiáïòüAøŸð6Ö÷Æq|Ñ—á¥×íÅâÿÙàüñÂ-sáÆm;ö¿øUûiz­¦Žöú·‹þ,M4Ρñß…ÿh¿Ù‹âÄÏø#'ÆÏŠ·Šîn‹ßÛbâÃöÎý›þ5~×>5ðúüø½®| ý üã_ê¿°×Ä_Øx/ö{ƒáÅñ§üø[«øCá€gñ—®hë>¹ã½Kâ¶»®g´Ta£G ,¶J•ÿ³s.ÌhÊ3’¯I乆1Æa0˜©º˜š8<ú¶”³J8š˜îz´hâa%‰­šÕÍUiJ½<Ö3kÚfx<ãÚJ8hÒÍòÌË/Jø:j«WÊ>¿“U ðoƒ¥,¿±´¡•O((¢Š (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ø÷ö‡}ºç‡4¾.ëí¦ü9éȯ°«æ_Šþ ×|_â LÖ<5k›ÄV×Å>ñ»¬³iöâãJŸÁß~kòjQ­¬Zµ¾««kšlË¥hòéÚ~“u£qªûœ5˜á2œó˜cª:Xl;Å*’P©R_¿Àâ°ñQ…8NMóÖ‹z%Êž·²|¥ ج z êUŸ±q4#ü:ôª»ÊrŒR´Þ÷kK^ßë¨ Ã' n‡ÐZùöÂ9¹CëÂÇN~ø\×êT_³—Š/‚‰üEð‘‘›æð­¾3nàg‡ÿ†¦È<àWçÇüÃ)á]WE°ií®ï¦ƒÂ“êw–vÙvW6ú>¿¥ZÇc¦«æ°Ó´Ý#LÓ4m.Ö{ýFõ4Ý6Ðêz¦­ª5î©yöÜcŹ.w‚Áa2êõkV…Z®|ô+Q´fðÓŒ¯R‹ŠXyÅÚ\êR… âå(xSŽÁã+×ÄÓTá(ÁÇ÷”æÛŒjÁ«B¤ÚoÚÅ««rÆWiò§ûIðŸþIoÃ_û<ÿ¨î›]ýp ÿä–ü5ÿ±Á¿úŽéµß×å§×Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y~«ÿ#§ÿ]-¿ôÝc^¡^_ªÿÈÅ©ÿ×Koý7X×6+øqÿÿÒd\7~Ÿª:Í;¤ïý¿¿à¦ÿò6é?õíá¯ý&ñe~ÊéÝ#ÿxÿè5øÕÿ7ÿ‘·Iÿ¯o é7‹*¨§þÛ"VÒôýQúõðŸþIoÃ_û<ÿ¨î›_‹Ÿð^Oø(_íyÿÌø!ð_ã÷ìÝ/ì߯è~=øñà_ÙÿÄžøßð{âwŒõUÕ|}¦xÏ\´ñƇã_þÑ_ ,ôí?D³ðÓî<à­fçW¹Ô´#ñ~‘§öu×íÂù%¿ ì@ðoþ£ºm~ÿÁ˲íû_Á;´];ökø}ª|Zø‡ðöŒø_ûG]ü.ðß—/ŒüwáhÞ7ѼK£ø#Ovk~)¶³ñjëvÓ¢¾×¼A•u£øgIÖüIy¤è÷Õ)R†+'©ˆ”¡ƒ‡ðôs)U8å5ó¬9ž!ÒiÇ O)¯zÒ²ÂS‹ÆÂtjá©×¥Õ…§ía™QŒc,EL‹ˆ_róK8†I«’B“—¶žqO TÛä¯9,5hÔ¡Z­)þüWÕ?mßCû)èÞøÝû+Yx‹Ç~2—À_õ¿þÈÿ1O=Þ½c®&»oƒq¡ëþݦþײ–±ñ®÷öjÒ?iÏÙïUý£4Ùo Ô~é¿>ß|k°›OÒˆ/á½øWkâY|uk-Ž‚Ã[¼Ž}7¶ÒÔ¦ fDÕóÇÃ?ÚDý¯¼Gðo|ý©|Ã?[üVø‘7íû0üxý˜cðT·ß <}àÍ/Àöïñçá×­þ'øÂç_ñ«Û_ÅðzëÇ>ðý‡5­WÄ>2Òã¾ð-§Ž¿&~|5øáû<ÿÁC´¿~Ë^ý¤>!þÊŸ¾?þÓþ=~Ìÿ¶ì‰ã½ Jý’~"øÛCøªëŸ´_ì}ûvjþÓ¾\è¿ ü=ñƉ¯¦ÚëLš¿„ü]ãM#^ÓcÕ4‹ëWN{Í>½Óo-o­Œ¶·ÊÿÅ¿À_‡_´¶¿ûFÿÁþ$Ø_öàý›þ þͶ'íOoâÏÙy¿eÚËÅß ¿cŸüIñ-ÇÃ~ïâ¿ÅOøûãgÅmW‼¹Öþ$|KÓ¼aìíàØ4­"Ãß ¾ Mkâ‹üãûB|@ý†<ûGþØÿ±Ä¿ø(‡Â?…ž×?à´7¶¿Ä_>#øQûbÏû[ü8ñ€›_¶ñÂ_xwÀÿ³W~ë±h^<Ôåð„~=jߴǃNƒ¦Ùø»ÅÏð¦òÇSÒ¬.Ö½\§ :´éb±µ«P¯Eºs«Ë†Ì¸6Ž#J6ý¥ÿgÿøãìzD¿|?⟌¿¼?­üj‹Ä:]žƒ/Â]+Vñ¥ÿÄxõ»½sEµÒÁÖúÊêW:Æ—‘š]BÑfú¿‹ÿÚ[ö8ñ§Ä¯ø*7üNÏöÖ?à¡3~ÿðQOÙ×ör¾5þŸ³æ…ûMø+Åžø£èxø!ãÿÃû(~Ôž*ø1<Þ/^=ð޹á[ÿ…¸„\x«Å~*žËPÐï,¿±¿i’è¾ð¦<Þ ¹›IðÖ…¦Mqâ˽.ÿÅWØiv¶²Mâkí ›E¼ñ¯}fïGfÒî5¹›Ochð“T­—ÑÆNœðõkT«|5IIÕÃN8ÜË _.ÄÆTi8cò§€¥ |®•z˜ÚUèá¨`%€Åæ|u'ìñŸU…JxˆÂ… ’ÄÒåTkB®]”ã(cpüµk9`ó¸ülpŠM{*YsŒëׯ˃ʺZ(¢ Ô(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ëõ_ùµ?úémÿ¦ëõ òýWþF-Oþº[éºÆ¹±_Ãø×þ“"á»ôýQÖiÝ#ÿxÿè5øÕÿ7ÿ‘·Iÿ¯o é7‹+öWNéûÇÿA¯Æ¯ø)¿üºOý{xkÿI¼YUCøô}?öÙ¶—§êׯ„ÿòK~ÿØàßýGtÚïë€øOÿ$·á¯ýˆ ÿÔwM®þ·QEWâ/Äßø §ìyñ‡âçÄ/ŠßüGâÿŠ~;Ö|oã |GøÿûøÁ©êöþ"½ûF¯à¸¿hoŒß±7ÄOÛ/KðŒzyo xHé?´Å—ŠþxN-'ÃüUà-+Âþ·Ð?n¨©P‚­ G,eR:”’šU)J•Z”*Ô§V„ù¨V„êa¨¹Bµ:‘j¶åœÔ¯ÚMSt”åº´ë§ 8N¨Âµ:UiÕƒZU)ÃZ09ÂQö’iÞÍbxkÃzƒ¼9 xCºE†á èšW†ü7 évéi¦hš‡c™£éu¬@Gma¦éö¶övvñ€ÛÃh¨·E­J“«RujÎu*ÔœªT©RNu*NmÊsœäÜ¥9I¹JRmɶÛm˜Ó§N:thÓ…*T¡ t©S„aN8EFéÂ)F„RŒ!£¤’I$QEAaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^_ªÿÈÅ©ÿ×Koý7XרW—ê¿ò1jõÒÛÿMÖ5ÍŠþÆ¿ô™ ߧꎳNéûÇÿA¯Æ¯ø)¿üºOý{xkÿI¼Y_²ºwHÿÞ?ú ~5ÁMÿämÒëÛÃ_úMâʪÇ£éÿ¶È•´½?T~½|'ÿ’[ð×þÄÿê;¦×\Âù%¿ ì@ðoþ£ºm~~~ÞZßÇÏþПðO 3á7íEñKà‚~4þÓ—Á¿‹žðW‚¿gi1ð¶ð#ãwƈ/†³ñƒàgÄïøs\›[ø[¢ønúïÃ~"Òì$ð~§®Ci¦Xxž]3ÅZVñ÷«ahé‰ÅPºÓq,;¯5N«»óª*¤¡ º4ëT‹š—³tã9ÁòÉÑÆVŠçú–_̧M4ªU¡–á+c±Q£ÌãMÕXl=jJ”¡7E>yB2ýB¢¾øIÿFýƒ><øÿ¿ ¾ þÐÚÄ­wÆÿ~"|'ð¦·áüGÕþë_~éúö·ã‡Vß­ü~§ÓÃÖ|k០ÜxâkÇÞ¶‡Çþ²ñ7‚õ ;]»úã§í-ð‹ös³ðÜÿ5?ͪxÊöþÇ ø_ð›âçǯŠ^*mÕ/µëï|"øào‰5½ÃV“ZÜx§ÄZg„.t Ŧ¿ˆ5-4jzÚfr*4qet11¥<=yµ 5á_—ØÊI5 ±­Ïe(JJ§ñBïÆøæo¬~ Û|,øUñ{ã¿ÄOkmŽ¡y¯Xø{à?Á¿ø¯ãv¹àÒõ'øŸ¡[x2ÓTøpÚN­cãßøDï,/¯ågü§þ MðOÆ¿ ¬|5ûT~ÔÚoÅŸÚ—Ç?ÿk»‡þþÌÿ,þ-x×àÇÂ_ž&ð?„ï¼1û$ü4ðoÄŽ¶²ðµš\é> ñÍ—‰>,7†|'ã½sÄz¿‹Ã/‰Þ)Ñj‚xŒ~',§}w …¯‰›«)aqu F4¡ÍV8ê4ó<62Xz´é·U±”£FiK_ì¸|\«G‹¡„§ìšœ¿ÚpÙŽ&Ž*Ú)àç,³…öô¥QG*'ºÐ‘ý Ñ_øãþ 'û|0ñÅï¾&|bO†çOoÚÜüGøà/‰þ ýž¿·|¢k^#ñŸ‚íÿjø+Lý›ï~#xGFð׉îüOðÎÏâ­ÇÄ ø_Äöº¯†­/<9­[Øö?²çí¡û:~Ú>“âìÑã|Jøxt}\Ó~#„ß|ðëÄö~"šEoàxûÀ>ð‡µŸßhÚ¦‡ñþ Öµÿ|0ñEœ¾ø¦xWÄ»4¦TÚ«J­jMT£B©Z­?~•TsTçV¤o p›¥QBSiIÓšM¸JÄ“‡Æœ.Ò\ÉÆíÊK[jçRœRþiÂ;É'õ-ùuðþ Éû;|køkñ‡â†µáß_ to…?´Žþéúgˆ¿goÚroüR×|5ñÆ>ðÕ¯ÂO Ü| ÑüYñ_â?‰£ðN³®xàÂmâÄï„ñC6›ñ#EЯígUû[à—íðöŠð§ñትè:¿â/ x§JÕ<ã¯|BðWŒ¼'/•â/x÷á7<3ኞñÆ–ÞâøÇÁºŠÇPÒu4™l5}.æíFq^/÷O‚Ì¥'xº8,ÃÌ0•ñ0•§…UpxügOUi,M(V…:’ä*µ9ÐÄÔÁÖ‹§Š¥Åå’£/ŽXì#…Åaèô¯*u°x•Pu!VgZŒêQµGíôWÁž ÿ‚˜þÆþ?“àªx{Çÿb_Ú â‡Äï‚ î±›â÷ÁÆñøðÓÇZ‡Ž>øvÇá¼><'⧋ÿ®< ©ë°øcÄ3øvßV‡DÔÞ×µð/íÛû4üDÐ>"x«ÃÞ%ø‡cá†zg†µ­_ľ7ýŸh†^ñnãmSUÑ<«|Ö¾$ü+ðž›ûCi¾:Öt‰t¯ß|¹ø“kã-GQðÝ—†eÕ.|]áXõ–št§]4èS‡µeü(St¨VU'SàŒV·;j>ËB¥ù+Sr—)ºM5QNÝ6Ÿ:©SSN=LuØ8FÜÓÅR©‡Šu¡(/¯¨¯ø ûL|ý¥´_k µß]OàOŸøóÂ>>øgñCà¿Äÿø”éoˆmtü"øÑà߇ÿüsªøwYÒÕtíwB“PÒom¯$üEñ§ürOˆ1ý•¼cðßRñŸÀ?ö¿ðR?ŠŸ²Gí¦|Tý˜þ5éºïÅÏ økÁ_´>ŸðÞ†~9øŸðßÁ– â_xçáºx“àÃøûãΓã{áÿÃmWVðO‰.nüñFJX¼.Î51_ÙÕ9æœhÐÂf™®O“a1øŠ­(Çñ¯†¼/ª|Fñ±âm2-6ûPøiy—ÙÿÿhO‡?´_‡µßü8´ø§§YøkÄMá]oLøÁðã¿ìéâë=_ûFñ xðí ðßáwî´›­_Òîìü'¸øáñ Bø“û~ÙŸ.´O…Ñ]êvž(µ“âïÀ/Ûx‹þ ½Äø?EðÌúψ|n|7âfð~“®'†õÆÓü{à·üWöfñmŸí+ñ®Çö·Ô~2ü,Òþ0|6ø{á?…:ìÕñKJøð[ÆÚ×Áßj7_³æ…ðûEø}?ÇoŽxšÜh_GŠ>èéà NóI´ñ{hÒëZBß}Gðßâ?>0xÁßþx«FñÇÃψÒ¼Yàßx~íotox{Z´Ž÷MÔì.)1\[Ê…¢•"¹¶”Imu 71KZMû[&ý„¨Â½•ýŒñçW ¶þ«Ò§R­ϕէ Î QŒšÅJ-R’”\kÂ¥JM5Zj*5§IíRªµJ¤¡u BMKCµ¢¾/ý¢ÿà ¿²ì¥âk¯|lñß‹ôsHð"|Rñzx#àoÇ¿Œº_Ã/†3j—ú-¿ÄoŒž!ø/ðÇ⇾ øóQÒ5Èl|_ñgUðg‡ï£ð÷‰.­5í<9®Oaç?ðUˆþÁ;?j_?³ïÆ¿|ø“ðWà§Ž¾5x'ƾÐ>øÊ-j÷Á>Õµí3ÃÚæ•ñƒá·ÅO ê> ×îÑõvÒ4}'Ä’ÛAÐüU£‰gyòœÚÃ}nl?´©KÚÑä•7:å‡ÅET”ãNRÂT§Z8Šq›« P«IS•hû'ÑF„«ciåüÐ¥Š«ì\)Vr„퉧N®R‚ŒªF˜V¡*59B½*®j”ÕCôZŠþy5Û“ãoìûJxÏÀ_ÿh~Ú-?à™¿oIãÏüð¯ÇO‚>&ø%ªi6íáÙu¿ÙëáÀ߇ßð­¾9Xë—úWÇþ¶¿mãOߦŸãCK¦mïÖÚüoZý“­mØ?k;#ã½çÁ«ÚÏö,‡á_À ¯Ø½ 'Œ­¾ê>$ºøs/íasqáâ¾Ô~0Ù~ÕZm‰ø™#üC±ø}eðíà½^"t°´18ºõa *f8ÞZ²¥€…,ã?ÉjJ­ÓxüBŽ+…¸†§û͇Ë%8óTÆå”±ÜøGæËÇ£HøãàIüa¥ø“èÏÛ’ÛöàðìQñWö‘ðÿí׫|<ñ‡ìÿû!|Wø¢n¿g/„ß³¬ß~5|Yðþ™âOè~%Ö:|Ôõ‡¶¬ÞÑxWLñ·áoèÞ¼x†ˆUñ“ö¸°°ý¨?gåñ§üËNý›fO?±Ï‰¾-i~:ðŽÿà™càˆþ1ü4ñ—†ڦŸð[ã'íû)øöOø{IJjþ<ñF­¥Üx‹]Õ›Z´™ô🇴©<+kIN8—ƒ¯Máq”©V†&t`°øšy6wžb0•êF¤éÆÁä8¸V¥Ì„¥IÕU¥:yÔ©J&cˆÃ¸{J5°Êua‰¦óŒ“%§Wh)U¡WŸa+ÓÄ(¬?ԨⱫZÄF4WáOí'}û[hßðNß~ן?à¤cÒ¾þÆŸ?h_‡-³ø)ûZx³ã^­¨i¾%ø¯ðºïãž…âÙwÇ ¶±ð¯ÃÓàÿ^§ÁM;á~/¼þÝׯ4Ýæ[aý(ý–¾|oð«]|Xý§~#þÓZŒþÚÑnü7ø¥ãm7Ä?¾3ø^¯ü`ž{…úßÃÝ[ÄŸt­ãøï]µ¹ð†ôŸ„:‡Žu½KÇpMàtÓãHÛAëÞÕ{‘©9j½ØQŽ.U¥.Ñ¥>U$ì©Ç‹ria«8MšqM4å:tâ¬ï*•gƒ§J[¹Õ©˜`)ÓŠ÷§ µ¸ø?†ŸðRσÿ?lˆd?xãuÅÖ§û9ü+ý¡4/‰Z—ìÿûGø³Y|U7Õ4¿x®ãÄ4á”6~ð„7-â_ˆþ,ðÍ…ïuG༉ñgÂ(ðžPŒêÖ£Bœ':¸…QÒŒ!)'yN'=rœÒp¥åJØê2«(GISTJ•èB ÓN!ÙQÂR…|DÛW§F¦i†ÉU^[óÎÍ1t0u¥ÉaêJ¤«û:T+ΟèÕógÄßÚÓàŸÂ_‰žø?âÍGâ%ß|c'…#¶³ðÀ|?á8¼wâwðo‚µ?‹7øOðÛÆ~ø)¡x§ÄßiÚ¿ñ‡ÄÞÐõA£ë÷–š”–×.ôÿοø'GüIøuÏ_µÇMÆ_µ-ÿí›ûh|ðÌþø3âï|2º‚_~#Ýø[á·ˆtm7ÅŸ<ãkoƒ~ÿ„ËÃ? ~#ü_Ö~4ø‡À°øºâóÆÖó·‰õBøŠò¡M6Ö§;^xe¸ì¯ŽÃД9œñXZ™¾µjMESêÕ%5*|’ªÐt0²ÅÕq…8c𠱓q©JYž_šæ8LEU$£O RŽQ^œjÊjS­_ P© ³©KöžŠøRÇþ Oûj~#Õü-¦øóÇúާeáßø§Ã76³§í)yáߌÚGÂësyãÑû2x¾Ûá ¾ý¬5جºÏ‡?f}oâLj®´ÛkÍKOÒ®ìl®î!ù öÍÿ‚¨ü0“ö4ø³âŸØßã]Æ…ñóÆ?°gÅ¿ÛKö^ñ—¿f?úŸ€üSð×á¾…«¯ø›BÔ|wáü5»ñ–‹o}¦Ûx¯Å>#ð6³â? x“ÇŸ üQᙇ…|KɉÆQÃ`ªãß5z°“dzòU•\-<>a‹•Z ž1«†ÊsJðq•§K-ÇN ¬-~NŒ®;0Ãe°•:8ŒN:†_|C”!CˆÄàð‘Ž'–©IB¾a…EìåR/‡Š„§^ŒgûQE~ÿÁI¿à¦°~Íß°Åûÿ†?u þØ>ý•|?ña|O£~ÉŸ¿j |6×|Sá1ዟ‹_ |-uðƒà>¯ñP¶Ô-~뿼E¡xÎý£ñ]÷‚\xjŠ>ø…ð—ã/Â_‰: øåHøu}¦ü*ø©ðûÁ¿üa£üTºI4„Z炼'â-â׈!¸ðßËÿköóé±ú?ÀOÚ_àïí/£ø§WøK®ø’êø˜ø;ÇžñÿÃO‰ÿ~'xÄÍ¤é¾ ´Òj–'Ä™4Ú_Æ´/ÙÛÆ—^Ö5Ó&’Ïâ_ô/|;ƒHðŒüEâ‹Oø7Ŧ“*Qn‚R‹x˜S«†I¦ñëU• 5(%üXU¯Q§:|Ñ©V2§æšV©TniS›têÔ£Q(Iºu©(Ê­)«{•iÆp•Jr´ §$”•ÿE¨¯É¯ŠŸðXßÙkÀw_-ü!¤|oø©'ÄßÚ“Qý–¼]¤x[ögý«dñç¯h¿ ¯þ/êwºÿÂÛ/€:ÏÄGR½ð¼ÞÕü áX|1c¨|NðwŠîþ"ü?»ñ‚<ã cJ÷Û;öõðìY­þËÚ7Œ¼ñgÇ/ûM|i“á6›ÿ ÇáÆ¿Š…ìì¼âÏjž"—AøCð¯â^µ®kPXiúWë{;ø’Îÿ_ñ6‰mu |>ñ½æTÔª¬,©Â¤£ÍpY.^Îib³ÆŽQ‰ÀÒ ÜR«G‡ÏrªðÆÂø%GêËañR :sæœRæ”2ÌÇ8”`ã9,¿)­›aó*¶ƒ“upUò,Ö…|¾2°¾ÏêüõðÑ­÷mñÝßíñû+X|aÓ¾ß|B׬ü_«xî?…:‰n¾üg·ø!sñr[Iîãø)xK÷šM‡ˆ|[ð'âg| ំ´…4A:׉~ø¿â‰¥[ëº%íýý½ž¯§\\Ý;U§—Ô¦ùÖi–as|"›©S ‰ËèæS|–æsÁaêòãÔᆫJ¼eQÆ››+GØb3<åò¼Ï•bjÅþçël~#/§8NJ/Øãªá§S/•HÓ©‰¡:sT£)8GêŠ+æß‰Ÿµ§Á/„Ÿ¼%ðÅÚ‡Ä[ÏxÂ_ Çoeàþ.h‡Ç~'oø/Rø¯ã„ÿ |kà_‚zŠ|I ö øƒã‰< ¡êcG×ïm5 tÿk—Zžøóþ !ûü,ñÞ¡à/‰ßâøpÚdž)²»ø‘ãÏüLðìîuïèºßˆ|iàËOÚ—Ä> Ó¿f½Câ'„´ øžóÄ¿ ôÿŠ÷^=Ðÿáñ=¾§áËk¯ë0XĪS„#RS„iÎUã ’”T',/'Ö£6£)a½¤=ºMº<ðöŠ<ÊíS¨å(¨MÊ ‹œTd刄ªaÜ•¯^”è¶’«ÊPæI³íJ+óWÀ?ðWOØ?â¥çÀø~|Cø»ã­ö“ñ&‰àï¾=ð·ìûdk_þ#x³[±Ôµ#áÍãEÀ¾Å­xjÇCñ,ÿôíOÆ–_ ‡„|jŸ"𬞠ñRhþÇâÛ×ölðŒ^6þÑÔþ0êz‡€>!xᎹá¿~Ë_µ7Ä?ê^&ðm¶“uã+ïxÀ?|Kã?ŠðzkÚ-ø©ðÓBñoÂÿ ßë:V™®xÂÃQÔm-fºßìüÞß÷ŸXçöß»åú¥lÍÏËËõjù–]C{{Øü*œ³ÅPD¡7(EBNU'N*/šjµ,mz. ×’«G-ÌkRqMT¥€ÆÔ…á…®éýE~}x/þ £û|Oø§¡üøEûCèß>*ëþøiã|ð+Á~7êÚ/ƒ¾-Î ðŒðVƒàïÙÇã‹wö=/â­ÇŒ†µ®ø£Fûv¡áè|#ý“am¬¿‹ô·~ÿÉ-økÿbƒõÓk¿­âå ØzМ¡,6"–&)(8Î¥ {JJ¢œ$ù!YS­h8JS¥ÊR¤êS¨ùŸ²ÅÑO•c0XÌY/Ž8|~¦ õŠ•\-jÔ9¥òF¬§±§RÏGÃ/Øþ áKŸÙ—ûkÂß±õ¤ ¿à©_´ŸíÕã©ôÚ“ãuýÌÿ þ?Œ0§‚|1ßìW¡¦µã ÛãïŠÖöbëÃz°<¡B5k8þ êOðûô'ö¡ýž?h[ßÚsözý²¿eËŸ…>'øð‡áÇÆO9ø-ñׯ¾0øeð÷âGÂ?Ãÿ]ê:Å?ü2øÕ®ü:øƒàψ ü ªÚ\ÿ¦ñ–“ã ˯xgSþÁ¹:F½aö¯Äï²ømñâ?ü"9øƒÿ‚¼SãOø@¾øþω>5ÿ„_C¾ÖÿáøáoµØÂIã_}‡û#ÂÚÛ¬¿µõË˵[ý£ÍO›¾>~Ý_gO‡:WÄ?¯µ™/¾)|ø7¬øÀ^oüAøyãßÚ/Zð¶‘à7âæ¦ß 3á%”0x·KÖ5câ6·á­(YIg¦èWz÷Š|Gàïø’hIP† „›ÃÔËëåøléÉËÍ™dxNÂ`¢ëûXÔ§Érµ“Μ å?¬bjÎPÅâã]\e|N/N5?´¨æžÚ:Æ‹§‡Ï1¼_ŽÄ>IÆT>¡›ñLÒç8F‚Y:9ÆŸ>ÿ‚wþÕß³ŸÄO´ïÀoöø‘ñ¯Mñ?í¹¬~Ðß>,øëâÃ/‚:ž›ût|TðÿǯÛ| ø±á†?üIà}gàçÄOø7ÂúF±âÂ|_ð-ÇŠ5 rÇá®·y§XÙù‡ìoûÿÁAþþ×_¾4ü\ðwìmcðçÁž;ÿ‚‰ø«Å?ð®jO¾7ñ´v_·—Æ_ |i‚ß@ð牿bo†º¯uðºÿÁ–ž˜j>3ðü^3³Ö.|J’øZm*/ ê¿Ðý|“ñCö×øð·â/ìíðÆæÿÄ~7ñí-ñÏÅ߳ǃu/†šxËÁžø“à/ x«ÅÞ1Ò>)xêÎê x PÐ ðŽ££¿…5Maþ!jzßÚ¢ÐüªiÞñ¶§áz¡8PÅe¨F x<%nÉ0)ÊQÃe™Æ? N®U†‡3¯W [0Äá鯶"­lNx˜Ó¥‹¡NPŒb¼ñ¬6:Ug9ûJÕ³ÌÓÔ\N?.ÁgXÚù¶&\¾ÇëTrüFmZ¤(Ò§B­ <ÒÂÔxZn›? ÿà˜Þ)øñoâLjüûÿÁ0~&êW~:ürøAûe|BѦð§íš—ÅígÄŸ­þxõ|?û+x¢M?RѼkã/ü1Ñÿh_|vÕu/|)·ðψ.~øÃÄF§á?}íÿÕø ñƒö[ý‡?g/ÙÃã­¿ÃXþ#|øy¥ü6Õ/~ø×Å=ðN¹eáŸ2ÇIñ†µã†¿ 5Ûk­fÁa½Ôt; 4Z%ä’éöÚæ» )©O÷5r^>ñß„~xÆ<®Ùø_ÀŸ<)âxÓĺœl<=á? iz»Ño÷×JÒ,//®Þ §h q RHU5V– _ÚU§G O ƒXŠ•ç T©SÊib!GR£téÑ•<%j”±÷(UŠ–/NXÙÖÅÔŸgS‰Š£JsÄâq•ªBN¥Jõ±Ó‹ž/ÞI¦6U14(ÑŠ••þ§…tòÚ8<ð÷Eÿ‚v~Ù~6:ç‚5_ÙÍñ‡ö¶ø§á‰^7ø}ð«Å"ñ¿Ã†ÖÞøOàƒ>ðï†|qâ¿ü5×ü{©ßè>ƒÄþ+ñ¦£ð×áûßë:ëè–Þ‹Oðå–©ª÷ß³—í//í Þ6KÙûöˆøÿœž¼Ñ®¾8øGÁÚ^‡ñ;Â>5Ñß\ðÇŽ~x·áÇĉž×ô{Û(Ý5 ê> Ñ>%øôÛiÿüá+ÝCN‚óæßÚþ ±û6þÍÿüqð'Ç>ý õ?x_Ùf×Y¿ð§Á_ê> ¸½ý¯>(êŸ ~ 3Æ:›èÚƃ¤ë:MÕçŽ> \]Z|3Ñgh>é¾4×>3H~®”°ÒËò¥‹S‚Èp\LgõØRÁåÙ>àU*ÉVÃW.Ê¥ŒÂT…'…Ì0¸¯eCŒÌóxcÕJ’ÌgÍ¡8Ô¦ªâs,~' 8<#§˜g8¼W·•H9Sžû[ˆñ¸šˆNTgO2§Ru«`0™kÁ|Ciÿíý¹<5ñ/á6•áÛÙ'[ø!ðgþ ñÛöìÒ|IâOŒ¿ì>%øÓáßíǘ5ßk_lf½SÂ>ñgÃsñ¾êãOŠÛâGŠ4?ŠhÐé·š·Âã<š‘ÃOø$ÏÇ¿|ý¡~êþýœ~ |6ñEÏÀ߈¿b³ñÃãí§ûŸ_>5_üuÔä»ðÇ€Ÿ µÙãà'Æ­HÚ|8ø‘û?|ðß‹¼ ¤øfâ?x*ÏH×ô)4EVXZQÁá°¸z._ìr˪aëNÓšÄe^S“å•êÒ’úž*X<I–º41Xjø?®áhf“ÃO3Ãá±t+ZXìMlV&1©,Lñ’ÄS\ЧR–a™çYÆ? F¶–3ŸæŽ¼ð•hb^[,†"f#ƒ¯ñ7ìGû;Çû>ø7ÅÖIû&þÄ߱ľ+×lµ ¯…ß±Šßø7Q¸Ó,^ËþÏxü| ýšÅšî¥YÙiR|ÓÂV:sÃÿ w‹WHô?Ì]'þ ûû{ø;âoÁM+Ãþý¼Eðoà§üãÿíéiãÍgö–øÏቾ+ðOÇ»ß1Üøãá-—ìmâ¿ xwÅ>Ó¾:OuܼA¤ø–÷ÂqXI?‡`ñ êZî>½ñ/ûâ¯Ã¯…Ÿð¯þ&ë?ð±<5ñÄŸð±ô hü*ð/ü+É|öÄ_ý¾øF·J…üÍü)ÿ‚lÿÁD|?ñoNñÅ„ŸðOˆì ÿ‚ ¶£ðûÄ?µÇh3²ÿ‚ƒüOÐþ0iÞñG‡5¯Ø?DÓÁÞÕ|/oàOöËãâ Å¿Œìü? æ‹‚øáã_-¡é~ øùâoÙ â¿Á/‡¿gŸŒ>Ót×¾#k¿ ¼}ãQñƒT×|S¢xõõéõ[_é~Iã?ø&?í¨þÍW~ø;û Á¿eŒ—ß?eoxÇXýœ|M㟆ø³§þÏÿ¼ñËYÖu¯øSöÐüOàë-W^ø}†ü7ð‹Rð§ÅË}2/]øÂçã¼ð*xcâÛ7ðTr þé«ÿãý¼çñí⿉> øaáÄÖÿàžÖúž©â/…:_ˆõÏÚj:‡íõg¡é0G¢øCÄÚ¦—¨^ë §ê¶ºC-¥ÓÜê:,––£ÿaøKiû#|qý®,?gÿÚ“[´ý—þ%xËá?í-ð×ÂßtoÚà—Œ~ýšãÅvÞ#мañ³Ã? ¼[ge¤jÞñ—{ðŸâ—ÄDñfâÿê_ ïãÓŠt!†ú»¨ç–PËgAS½jøz^k†ÅC ÏÙåø|^o‡Ëñ1§‡†K…†7.…Zzë-­O7:uñ5'% ÔÇãqum.hÓ©‰ÆåÑçÃûnhºØœE,–9†âkVÌñ5²üd°õëa±9¾ê´oì{âOŽ?¿gÚŒl~j>Ñ|iðƒö›ðÝ´Ú†±¥übý™~!iVþ'ñÂkKƒc¦¤ú…¿Å¿øMÅ–™¥]ØxWø¡ma›©x™-ëá[ÿØöÖ´ý©¾=þÕž°ý–âñ%ŸíÃà/Ú«öpðn±ñ“â<ú'Äiß²µÏì[ñá÷ÆgþfëPøâ=gá]ÍßÄO xÃá¥ÆØô/_'uM+YðÍߊuïÛO‡¾)Õ¼màŸ ø·]øã…z¿ˆ4«}Jÿáßîü }ã?Ï>ãý‘â;¿†^5øàõ8P+Ìþñlj´°$U‹S–A"GÙV‘Œ°•­EûAãiÒ¥N~Ö…ŒÍðÖ*•9V„°ÕsL¾8º¸iJ®W™ÔÄÑÄK4ÆÊº§R•|<ÛŒqñø|4q5f§ ¸ÊÀW˯VTÝÓ«_+¯Oñ ^ ƒËã­ƒ©‚¡8~.~Õ?°ÇƿڛƳ‡íñwö]ÿ‚uþÐÿþè?~xÇöIý£uïxûöy²ðÅ9ü­éþ0øwûAø«öNñ÷‹ãƒüSð¿BeÖîÿeoøÄñçŒü.—¤jš“ãm{ìÏÚ¯>øÿáçì©gû;ü"ø{ð«Ã³ä^6m{à6ñGÁ¿ >xšO]i|᫟€ÀËŸ ézgÚ :Ž…ñçOø±©]ZGâSödð‚¼Ig«ißkÑN”Õ(CE`éÔÄÔ†.qŒ=¼3ª1¨¥íj¸æyLÎuñ’ÅbêÕŒèK=zé©ÎUäܱr¡F‹ÄË–R¨éWÀ'V­>U?ìÜ rºTðË †§EÒ­*ká©ÉþÁNÿ`_ÚÏöÎÖ~7xKƒö{ø¥ð7â¯ì§?Â_‡ ý¡>3|fð…¿gOÜ|BºÔ~9[üøðoâwÃOÚÄzĺŸÂé|âï‰Z§†¼kû?jÞ¹ñÂkØ®uÿYkßKþÚ¿ÿjOÚCþ £ñ3ö[ðO„¿gý3ãÏÆÿ€z—ÁZø³ãÄK/„>-ðUï…üCâOüBÒfíwÆ_“@¸–ÞçHѵO„?ÿá&ç[íOÂÏ Òê+ll“öŠÑ­U(Q2UqU'IÂ4•'ÐÆV¡^¬©¼UZ*Ÿ6#ÚÓ…UÔ±Ž3 ŽŠŒkà•O«µÌã •0ùVÛYÉ·(,›Z¯õo¬F½YP“ÅbOÏ‚Ÿ°ìóá¿Ù?ÇõÙö^ý›dý¡¾ê ¿i_~É>…£øWÅ–š¯‡uÏ\ÌŸ´Oƒ|GãÕÐ5»û½/Ä øy¡êz§«ßÅc‚#¨ßøF“û>ÁKôÙÞ?ØrÓÆ¿²û|6Óþ‹Ò?nëïüSÔh¸~Áá…ð͇ˆµØúƒIðÏRøÛoá•_ Íâçý°!ð]׊Q~3IðùlþŸ×ú+\SŽ6®>XªtëÐÍ)Ñ¥˜`ª)K Š£…x¯©Q«/hèàáŽÇP¡IUTÞˆÃÖj5\$^ †Ž¤éÏ+Z¸ Wºñ8jØŠxXbëÂn>ÍÕÆ<¶&S§%WÂViN„üÃñì¥ñ£àçÃï üý›~~Ìÿd?þÌ eÖý‘¿kOøçÁžÕ4Gã "ÿÆšŸÅ àïí£êöúÇ‚¯´ x×á׈~k±üRšKo]ü@ð^>ø‘åðOÏÿ à^8ÿ‚zü½øIâïŠ8øQñ£á‹øóÇÿþ|øg¦ü}ñ޵›ï ø']³øuñ³Ç·¾i^; øSáíSÃ0_x›Â¾Ðlµ}WÁO{3韲tSÄU­Šúô±ªV­˜â#‰›Œ±5›Äã1u)Õ¬ãÍ^5kãñ’ö˜kˆÃÓ®ðø:øl5:4ið5òÜF0ÃË)ö3ÁS„S¡O…¡C …Å*3æ§´(a¨ÁÂ’§†ÅÔ„±Y†Œ«[SåÛŸW~ü7ø}ûD'‹¾ø«C°ðí÷‰´ïÙkö±ý¤¾Aaâ]I»Ñ–‘ñ¿àÍçì¿ñOÅþ–Þî[™´Bðö¨^ýŽïPð´·Ú6•{oÚ;öQðÇíû|\ýŒßÅþ6ðÇ…~'ü ñÀëoê^'ñ7ÄŸèz~¯áY|3§x“YñWÄk~.ø‰®Ym­ê7ñF©­øÎXï?á$×.îµ;Ëçú®ŠX©Kõå)T¢³ µ+â~«V®N´á:j´*QœjÓ¯FICˆE^„mìêE«™`¹° /Xy6òºThà¥UF³£N„ãRJ¤eV ­JnÎ¥KÊpwgàí'ûÁ@?l…#—ã5§ìáß~ ýˆÿhÙáeÇÃß?ŸáÏÅþÕzGÃ_|MøÕñKQÕf›?|м%¡ü;ÿ„“Áü3áߎ‘ê~$ןLÕ~0i6Ú=ž¿qûEðÃ>,°øðëÁ4O iÞ0Ó¾øwž:мâcÆÞ ‹R±Ð-´]^Ï@ñf¹à߇ZÞ¿£MäÉömKQðO…¯g†\ˤÚ8Û^¹ELùjSÆÒ©NJy‚ ±”Ý 1¥[Øâs¼l×°§aáOâ<çZ…:QÃÃë‹ †¥‡Ëð¸<&ÁºpËéÒ”éÃ)–5åÊ5*saaŽ¥’Е*u%)Uq¡G‡òØPœç:üÔêׯZ¶'Z´ÿ¼ûþÞß³'ì©ñoþ íð./ÙcãÏì¯â |_ø}ðâ?ÆŽ~üjø ð«âÿü%ÑY|1ñ?‚ü'û3þÒøÝÁëo‹_xÚˆî|]¢YÙè·…<3-Šë÷ÕŸìÅû{|ý¡¾xãà¯Ã/ÙãÃoÙßöÓcPø©ûVüføã_ˆË?Á­sXøƒ«ø?Â±í  ø"-_á…ö‘§xVÓǾ8mWLÕm5»¯è÷PÍ ·í©sR­,R©R¦.¥:Tq8¬DÞ'Œ¥‡Êsü“ eLG´úÍZYgq˜Ê‰ãñõ³JØìÓŽÌ(á1X|ëÑ¡‰Š§V?a^x|5$ðô0•qYÆAžâjaiáåIR\ˆ2J”ð‰¼† `ðL&­j?)þ/~Ο¶Äïø&_Ç?ÙrÓÁ߲dž~4üZøoñà‡‚~h¿~(ØþÏ_>xŸE¾øsà/Køµ7ìëª|Lø‰ªø+À ¦ø‹U}[à¿„ãñ_.µÂçÁþ‹G½³úÚçàU߯߀ þ~Ñ â*Ðì<;}âm;öZý¬i/†Xx—CÒnôce¤|oø3yû/üSñ„å·»–æm'_м=£j¿c»Ô<--ö¥^Áõ¤¤§ Ôåʧª9Ö”?³©T¥…^Ö´ªW¯QJ­LEl^2®'‰ÅJXœF*¥Vä÷uj¿«~ökê¯7•5Zk›;ž æöq¡R– †§BŸ&޲§E{J²ŸåÏÃÿÙãgƒÿo‹ÿæ²ðß²Ç?bƒ²…uíWö‚ø¿ñö˜_ 5¿ˆž#ÿ„“ÆšoÄ„ÚÔ#¹×¦ø«¬èמ(ñ'í ã?Ý¿…,(ø¥á/ž ðߌC¯\x{â4ú\V~/øo¦<º~…á߉75õþ’¨­a*‹OZ§·Ì¡‹­–)Ó£ rÌ;‹1¸<Æ8HÓú¼1˜Yq–p¥O•å•ê<5OìÊPÃÓ¢¢S‡Õc—S¥eTð±ÁSÀ¹Õ’ޤxgë¸b#8W©‚ÅTá,™ÅT”±Ô)Ò­Oëõ^"­I~ø‡þ çâKßÙëþ_ÿÁ9¿à™õ럌~øÂÿÙ«ö„øÑû)EàOø7@Öm¼?ñïáÿí“û>~Æ^ø©¢üo°Ôî´ÍK²Ðÿg¿ 6—à‰|SáíGâ‰ôŸÝh‘ú‡ìÇû ~×ÿ?jo‡>!xïá§í¢ø‹öøû0|{ø“âïˆÞ/Ð~3i¾8ø⌾2°ñžáû‚šŸ…¾8\üHÑ<9â_xÅÿ5Y¦Òµ¯Ÿ Üßj±ø6×**¡/gˆX˜§Î«¼B‹_eígÃøÞ©9Röœ³L·Z.¬Ô«BTð´©T§ƒÂÐÂÃðòÃ6Ý9ág„“j§³yþ‰i5S—š/še¸Z”¡5¯,M,F#Н[òö¾ýþ<|cý¨~üfø |.øMâ?CðÓM¹ý­¼7ûL|køWñÖËÁ>øŸmãüø‡û8øCà—Š~ ~×;ðåí âã#j·^е)~ø}SU³_j/ðûú0¢¹éáèÅF)ûzJUÛ¡Vu SÄç9>}^‡±£:TáJ¾e‘eÕ«ªq„ñ¸¬N¬±˜©ÖëúÍe*ó„ýœëÑÃÑ•H+ÕÕòLû‡áR5gÏUÔYgfTcí'Rð¿V§BZ0âÀßø'ÇíG§xGö ý›¾>ëßo>ÿÁ:<_ˆ~|køaãKñÃãž‹à…_>|ðßÄOƒúׯxà´ÚWÈv÷ßõ¯ |jøÍmãÏøB;]/ÃÞѼWv4¦k„Áa#+ÛC4©,tiVuœçþÍRsÀJ¦ÎÏ?àŸßðQ­+à§í×ð;ᮕûø×¿ðPŸƒ~·ñ}ÏÄoÚ+ã¯üKû7|oÔ¿f ~ÌŸ4ÿ ø‹Fý“>(ÃûCü]3áß‚üeðìêúìëâ-îóÅ^¾Ñ$°ŸKÕ->ÿý¥¿eÿ´7ìà¯Kÿ «Â?<uû0xìèíãkß5~Î?þ|SoÿÂÎ ôoÚxSÆ7?‡WÇ¿ð¦.uÁ«lü:Ö¤°:-çé=׈ÄUÄÕ­ˆœ¹qjä5!^Š–p¼±ráêTa%*.žT±s…/oJ¼ñP§IfÆrÉÏš’T£§•¾–aN~I<Ú†U‡Í*Õ•ý««†Oƒw „+:õpС:óoðãö‚ÿ‚lüqý²´Ú â×íaû4xãÇüû3x;áÀÕ"• XŠ“«)¯‰­K^R«Š¤©Sx™ÚUja°Øi`ð89Ý:q¡€ÃÉÒÂÊ:XˆÓµ*µêÒ¼á‰?à˜_~*ø÷öÀÐ/¿á[~Ê_jo…¿´Ç€~"øgà_íñkã~8x×ãKhz_ƒ~>x›öBø¯ðKáßÁoÙçã‡ôÝ5ïˆÚïÂoxÔ|`Õ5ßèž=}z}Vׯú_’øËþ ûFê?³]×€~þÂÿðG¿Ù_ã÷ÄŸÙ[Äž3Öfÿøçá—‡þ,iß>3ø#ã–·­k>/ð¯ì9 ø›Áöz®»ðú/xká§áo‹VÚl^8ºñ}ׯ?µø|1ñú6¢£¾­õdÝòøå±Â¹6ýŸöV2¾3£Õ:tcõšØi`èžaÝO N¾_sj¥lEiÂ2–'‹ÅTO™'7ùïñGì ÿÔ¿i¯ˆ_´ž™á¿Ùáí?ࢠ¿lß…¿u/ÚsãU•‰<'á/ØóIJˆ<+ãoÛþƺ™øuâ{«ᯈö>ð§ÄÝ6öæçTðEíÍŒ:‡ŒµïÐÿÛ¯ö|øáñž÷öBø‹ðËáN¹ãÿÙgö¡Ò¾=Oào‹¿|]ðÃÁþ7ÑáP|\øYªè1|FðoÂŒúׇµKI>%Ûëz|ïðÇZ´Ô“I›O¹m)®ÒöÐ(¢£B–8¥ »4Éó|5Üå/­dX^Áà#7)>j1Ãð¶S °ÑÔä­.xʳkZ¸Š•ëV­Y©¼FO˜äUaeK-ÌåœÏGÜåœgÏŸæ²§Z3U`ñ)9J40ê—ᥗü§öŸOx¿ö,ÕõïúÇì_â?Û%¿kM ã[xëâŸíGà½ÿöšÒÿl­gàªü&O„óøÅ¼Ÿañ…4Ÿ’|}ðæ¡§ü9ñ¦£uðRñ>‚ÑëeþÞ³ßÆÿŒ×ß²7Ä_ÙþÏáWˆ<{û,~Ô:oÇ£àŒ_<]ð«Â:Ñ‹¿ 5|DðWÂúφ5Kgø—k®YMÿ ÏÄ6—Ë¥\iÓ¾œnc½‹ôŠV’§‚„jN3ÀffiF»å©ˆž;(–SõF"¥hÔxš¥‘åtkβœñŸV©‹ÆK˜ãqøÜT*“çÇNoÚ,Ç ›a1tåîÓ<òŽ>–m(FŸ³öU1’ÌñÕ¥*N „ëB–8|& †¡üçø#þ ãÿµÑÿgžý4«_ÿÁL¿iÿÛWâUÇ„¿j¿º¥Úü1ý¤l~3i· ð[j_±¿ã/ ÚþО/Y?·ÓÃÖ¿á_ø}òÆ?ˆZšü=úSþ Ëÿâ¼ýŒõèš§ì‡ÿ×ðUÇÂê¿4_Ûà/¡Ó?j¯Ú ÂVAü?áOâo†¡ýŸ¾Û|"ñ§Š<9g ø‹ã§¥|xøñ¢ø»Æ6ºÝ¦—¡hÚv·c©øörŠÓ %‚£õ|4#N‹£ƒ¡8'RR©K-Épœ?–BU¥7^0Àe¸EN•:uaKR¾&¶>º•oÆÊYXâ1rö˜ˆUÄÖ…{F2„±ÙæaÄY‚%«ÛšfU«Vn‹(RÃSÁÏ ?)?kߨÿã¿ÆOÚáGÆoÚÂÿ„¾!ðd_ 4Û¿ÚßÃ_´¿Æ¯…¿¬|áÿ‰ö¾8ñ÷Á¯ˆ_³‡„> øŸàÏíyðgÄšf“–‹à¯Œßümá­KÅž/Õ<(þפOê?|+ÿ‚cx§à?Å¿‹#ðìkÿÁø›©]ü]øëñËáí•ñ F›ÂŸ¶Bj_µŸ|J·ømãÕðÿì­â‰4ýKFñ¯Œ¼CðÇGý¡|9ñÛUÔ¼=ð¦ßÃ> ¹øãiŸ„üAû¹Esû}]á¯/fÖd’ækÙ¼Ò¶ZTcS¡(bp”± T!MâjK³§ŒÅÓ®ç%R»ÄNœ¥²2Œ¹­%•ÓÅaé*••z±­„Æâ°•iÕ­:TiN…L <+—b0ŸŒ¿ ¿àŸ?âÿ‚KüýŒ|yâ/…Ÿ¿jŸÙ¿Âž¾ø%ñWá—Œükñáç†~7|×í|QðWâDúž¿ð×áOŠäеmcGÓí~#ø0xJd k^)ðŒ·ˆí/MíËÿk/ø&œŸ¼Mû-|LѾ~Ç?¶f±ðCÂ>|Dø-ûvi6Ö_ ~ ÂòÕ<)ñÅÿ|'ã›o€ß´}ï€>3Ù|Tð=­ñþ6»áßx7Çž:ÐÚãÃW¶úúþËÑ]5jJ¥z˜”Õ:Õqµ3)Ê1„¢ñøœºyN;UcR*ùŽY?©cjÒ§ Õ¡G:o.ËžcËÉR>Ú?WxGÏ)ÅË O³ J”©IÓË1üøÌn•,E|Têªß[Ī¿’ß²ßìñÿàí½âߌW ÿd†Ÿ³†µû|ý¼1à¯ÙóÅþ5ðå×€u¿…ž:ø™ñ#û7Ã_%ø áÏXø/¾/k> µÕ4ÿ‰ºmÞ£‚¬|}ÿO‡¦ñý×Ã߇ÿ­4QIÉû*TR´(Ë8^Sœœó Ï›â¥9Ô”ç9O˜âª')7Ê0^ìZõ'VOš¥J9u Ë–RŽW”eù&¨SŒ)ÁýG,ÂªŠœ! USœa>TQE# òýWþF-Oþº[éºÆ½B¼¿Uÿ‘‹Sÿ®–ßún±®lWðãþ5ÿ¤È¸ný?TušwHÿÞ?ú ~5ÁMÿämÒëÛÃ_úMâÊý•ÓºGþñÿÐkñ«þ oÿ#n“ÿ^ÞÿÒoUPþ=Oý¶D­¥éú£õëá?ü’߆¿ö x7ÿQÝ6¿5ॶ:¿Ã~ε,:—í¯|>мe¨~Í¿¾üøõûE|?·ñW‡?j-Uø=ð¯ÅÚ?€~üE🇵‰^øéãèZŽo4·ñƒôj>0Ñõk?xÀÚ¯‡?J¾ÿÉ-økÿbƒõÓk¿ª©J5eGÍBŠ3¬©¸Æ¥\#—³Ì0´êÊ3T?/©‹Ëå]B££O:ŠGIiJ«¥íl›ö”+RVHrT•9}^½éN”°˜•GN›—$êЧ‰Á´ÿ“oЇÆ?†ðO?Ûv/~Óµ7À¿ŒÿðKÿ‚Ÿµ Sö€¹ý¬¾7ÝZüføßñŠËŸ>ëé¬|jøã-Ǻ¾§ð‡Å|9 Iâ½7ÄÞ*ø{ã?ŽcCýüAðׯÞð¦µcù÷ñ»âW쥢øgþ ¯øöÓO|^øáûYÁ)|yðÆïÅÿ¶¾¯â;ü(ñ5§ìñ+Æ~|"øÉñ;ÆŸ |w¥ø#WѼUªx{âÄ¿ <_ ü;ðw…µ?iz†™ð£BÔ<÷›Ek‡r£Œ†2R•ZŠ—ÓåSË)Íu›T£Vs«'øßZøAsñrÇÆþð¶­ñ“¾ð‡Ä‰ÚŸ<7âxþ!Þ|O›À¾1Ó¹*iÇ“”⤡R~Sexª¥MC0þÀÎ8?7£VªŒcJ0ÄÏ„Õ ô*QÄ·ÏUÕ”âý²–!ýC5ÀÒN’̱¹Ž2#RmОeqfIQÍ7Í^­*œUW1¥YN-|{?}Ô‡ñ—á¿ÚïÄŸ¾ü%øa7ü·Á??d½ö‘ÿ‚|Ôkÿ‹ß>>xÿM½ñ§ÂÿÚ cöBøSñö¶øûuþÈ|-«k³F£ãü3Ö~*~Ð:χ¾3xsÃâñö·uà§õCþ †ôÿø ?Ǩ>>þÕ7Ÿ§ÒÿcŸi–Ÿ´Ìº÷‹?eoø_Ÿ-ü'ªè¿ õs§èž>Ò®µÍ;âïˆÛA°Ó¼uâŸx;ã¾·cnö^9ð÷Œ-­õ?ÞJ+ fë™6'+”ÜkãpØ:xìÎkÚâñØÚ|E*ù¾)I¨¬Æ¥\UIajaŽCGGˆÁ¬m]0¸¨àóÜ>oJ…5†Âcq˜œ&R”a„Áákãá‹ÃåGN0PÊèÐ¥N…|=jX‰Ö©xÊÛÇÞÿ‚…k~!G®øPÔô{¿ ø§Bø[¬è>#xF=#O>ðæ¾º¾£§hþû$ãû½¢½*¸kaó‰EóaøŽ¦~°üîQ“”øŽ0 ªIIÓ®ð™ö‰ÆB1úÖ#ÊiË 8L5? TËkåï–¯Ö2L¯*{:s§W.ÄðÆ.¦"”#'«ãq<=_W_ÛÔ¥˜gümljb1±Çÿ-éûGxËÄþ$×u;ö†ø­¢Á[<'ÿ_i±SüøÃÿˆ²}ÿíc èW^ý¦ñ|¿|Wû<_þÂÞ$³ø½}ûYøátšî›â½[ñïÅý?ÄÔô[9¾;Çñ?öqøû@øhx¯öÍñ~û ürð·ü¯W×ÿá¯moMøûüJ·Òì|oðOZžO“iþ6ñ|Kð·ã5ïݾ³àïøF~ ˆfÐÚo‹®¼KýEQ\˜x¬,ps¥)ǃTÜ+©7záÌeJæä£S9á¬>eŽÃÎ¥jxÕšq~Íg™…jÛNQ­Síã'C^¥Y„Þº¥Šy¶…úÄ’¡O$Ï3 «'•:T±S§”b]|l2L» Gøàÿ‚Ÿü{ñì…«E¦'üSãì×âÿŽŸðOOø)OíÂO~Õz}Ʊ࿌>.ñÃoþϾð]¿Æ›ÿx¿Kñ5þ†|Gðáç‡ü?ªE£xsþꟲφþüHºñ—ŠnnøïöÐоÇû]|<ðügÅ?ôÍ[öÿ‚hü~ñˆÆøûV~Ï¿±¯íÿø[û]|bø_û6x«âínŸþ Ù|bñç‡ü /Ç_„ÿ¾|ðö‘â_ƒø–çJ“âeõ޼ ãOëžð ñ/‰4oh¶ºv£§[\øƒA‚ÿô—à_ìë§ü¿ñ_‹µÿ‰Ÿ¾<ü_ñ݇†ô/|pøÁeð£Oø‡â/ ø&ëÄ·žðlúwÁ…ß~i~ð]ÇŒ¼Yq¢Ùø{áÞsq{â=cTׯuZúköú&»ªÖ”qqÄQtÚ—ÐáʱŸ·¬þ¥ œ;‹s…j•)Õxï­pÖÛb±+«F®=N5ë×¥§å{VŒáUIÎ9Ý\ó S–.LS¡œ`¡Nti9ÂX8,ï…ÂÑJuU*9}i΋¥[/æ—ö¹ø‡àí7Æ¿ðG?…úÿík7ì-ñ›âÅŸþ9𶥫KðGBø×à[/‹þ8Gðú?ü*ý¤¼ãíK_ø§Ä:/ÃWIñ_`¿›Æú£|<Ðu­Ç÷Z[ÅóŸÅ¿ÚCöBý™à•Ÿ·ÿìñ¿âg€Ÿ·í­·ÄMOö¦ðÄ¿Š±iÿ¿jÚ ÄÑxz÷Pý¦¾éß<@Þ+ø¡à¿Úšw‡|uàMáå¾­¤|:Ò/-¾ Øhúï€fðíõÍEsQo:î‹J8˜V¡YÔŠ©[ê«„Äa0ôq F®œ~©NYž‹†7ÆQÀcñXœ¯/• =•96ðwŠ¥š×\Ö¼/yñ©¢ýïáwÑ$ðχdðÖ«ý»áÉ4-!ü?®ÂAwâÏí´ûvÒµ_øJoïõ[ÿÿhØ.ÿá ½Õ5+½gÎþѹ¿¼šåî$Ý¢­Ê“ŒeÔTý«çN5'J¶6Pn*œ_-:Š4©FS›§Z8Úênèað“Jœ©Ó¡MÊ3T!:pn IFTð‘|­ÎJsÃÊU¬­V?U…¢ð®uÊ(¢ Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ëõ_ùµ?úémÿ¦ëõ òýWþF-Oþº[éºÆ¹±_Ãø×þ“"á»ôýQÖiÝ#ÿxÿè5øÕÿ7ÿ‘·Iÿ¯o é7‹+öWNéûÇÿA¯Æ¯ø)¿üºOý{xkÿI¼YUCøô}?öÙ¶—§êׯ„ÿòK~ÿØàßýGtÚïë€øOÿ$·á¯ýˆ ÿÔwM®þ·QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW—ê¿ò1jõÒÛÿMÖ5êåú¯üŒZŸýt¶ÿÓusb¿‡ñ¯ý&EÃwéú£¬ÓºGþñÿÐkñ«þ oÿ#n“ÿ^ÞÿÒoWì®Ò?÷þƒ__ðSùtŸúöð×þ“x²ª‡ñèúí²%m/OÕ¯_ ÿä–ü5ÿ±Á¿úŽéµòÏíEûH|Zøñ{à•àï…ž'ø÷á‹v¿¼5uðwáÃý+QøÛªxçÃzV“â} ÄZGÅ/ˆ¿~ü ø{à-'ÃÐx˜x°|XþÄÓõ;ã¡Ùh?lüQ{¡x+ÆS|'ÿ’[ð×þÄÿê;¦×œüIøwñãÁ¿ŒVÿ>-ø_ƒV¾8¶³ø}à»/ƒñËxóH‹FÔ.¼q/ŽþxßÇëq¥ÛÛÛM£xóÁ6És6©mªÀóÁ-Tç½'hš«)AÒ÷iòÉUSe8IT¤çFÙV•*Õ)b)ÆJ1¯EÆÜµ.¡/q8Ân¢Sœg SJTœj%Æ3«Õ¡í¨F®ÖŒk8ËçOˆ·¿ˆ´~Ë^7ø_û~Ò ý¥<_¯ø*ûžñ7ì¿àŸü"ñ?†<ã¿k~ ñŸÅÿÚáï…5¯éú·Ãßè3Ãáë?^ ø«V´ø—tëàM+âKñ¿öÃø£ðLý™î´ŸØWö•ø¯~О*¾ð¦¯ðÿÂþ;ýt_ü!Ö,þx¿â xwÅsøÓöŸðïÃø¶îךCþ#ëþM7Hñ%õÇÄHu‹xkÇ,Óa¥|ðWÁk_Ú§ö™ÿ„¯á·ÅMoãÃÿÚ5­f4øÙáOø’óÆ2ëÑÛiÿ³L³æ±£jšWÄOxn}7Å?õï/FñMÜ–³Á®i¾ÖtnÇÄŸ²%¾½ðcáßÂÛ/Ú#ö“ÐOÙ[XÕ´mgÀRhw<øwãßjµ>ðÃÁÞ&𗇵ûO^ø«Sñïü)­bÜCá_ üTñÄgÃ^×:ß~Úº/‡¿eO~ÔzOìõûSüE½ð>¦þñgìËð·áVŸã¿Ú§Iñ¾›ãË/‡~,ðE·ÃmÅÒx{Äzǃ5‹«gVÖ|%ã­Áß´ëˆñoŒ<} ëzÇÊ¿?boÚ§Tø§û§À¯Ž^:Ñüð7Gø½gñ;ö™ñWí=ý¬õ]o㟈ü{ã­zÇá×ÄØ§ö—ý›¾%èë§xsV¿Ó~xƒKøiðÃ÷Úî‡á߃þø!¡ü1øw¤ý[âÏØÆÇÅ?²Ç‹f8?hÿÚ“Àº¯5Y|KâßÚƒáWÄ/ ü,ý©µ?ê>>²ø…âYøëÀt/xgUñ5í›xkTÓü#ðß@ðÅŸ.§ðw‡¼?¡è±XÛÙÔUfÛ„è}z4ý¢U¡VP§˜Ðuý•Ž5#–,¾¦.œjâ)C^¥< °²©Ë«SJ~Åb2èÔçåçÂO¤ã*+áiT©A9jVœ2Êσ©W …„óXUœjÏ/£GÛ>9ücÒ~|ñÅWIÔ5©4*É<9àË)-,üCãŸø›P°ð×ï†zÛæ†É|]ñǚ߇< á»{»ˆ­¤ñ¿§Á<ñÄÏ*ùî·ñ#Æ?³_ì©ÄŽºÌ¾,xOÁZ^!‡Âº~á•ø£ñ³Åw–†¾|8Ò¶iúvžÞ:øâ á§Ã+Ry/\êž‹ÄzÎ¥ªI©k7]wÄ_‚÷þ!üñ&¯âÃÿ/ÁM{Ä><ŸÀi73øßâQðéð¿ÃŸë#_³´]'áå–·ã]r? j×!ÖzX<-ý{R•x,Ó2sÂbž/•Oš¾>x»ö¼øû#ø?â6ŸñG྽ñkὟ„uŸ×~?ø+â?ø{â@Õu-.ÇÅÞø_oà/Œ?×áp´Õu‰àðw‰üEgñHÙøMÓíüEá¿kS_ë—õñßöŠ_ƒ‡ƒü)áƒ_¿hŠ^:ƒÄ¯‡~ü¶øgŠ_ž:D^-ñ®³âŸ¾ |"ð¯†ô ßøkKgñOÄÍX×µmOÓ<#¤xŠõ/á²çk_ÙsTý«ümðïþWãçìÿá9ÒöiÿtÏÙÆò_ÛÍy£je¿‰o¾>~Ï_otÈü={£}§JÏàÙîRÔ"׿Öí×N‡Oç|Mû"x·ÄžøföÍý©t -¼g¢ÃûNè:/ì…Åïx7Çšµ†µ¯xƾÕ?e Wöl½ðïÛ|?à×Ónt?€ñF˜|£ÏiâHïuOÝx¢g'Vuj¸ý^œñs©,=ÁÕýå9Æ?Uö®¥*xU¥…U¨Ô­ °ÂÏS EãªJRˆAÃÙóUŽ"O n¥U((Μ«ÊSÄCO‰­9Rž”¨ºÕ0”ëò`èÎ7ÿ·/~ëžøûE|Uø©ñ2ïÇšu§ìÕàÝávñŸÁÚŸÂ-^ üg´ø‹«|Nø·ðóà7ƒ­~xªëOðƱâ-GãiðŸŒõ}kÃKð‹_ø‘câÏ ^ë>[ñ›þ ð×àìóàoÚ'â¯ÀïŽ ´|TñÂüñ»Å²oì³ãŸø“Ãiã¸Ô5ÍKö¹ý¨¾ü*¼ðö®<ªÍáGÂ?¼S?t»­'Äž²Ö|-¨&¸ž«¨~ĶÁtþÑŸ´GÃ/‹_õˆz§ü4σ$øuñ“Æ·¼A‹~/§|?㟀þ4ýžuÍ?â7Šì´Oê:=¯À3Gð¥ÿ†|1ÃKiÚ…Œ\ÿ‰`•Ö¬¾jºísû\ø/ã7«/‹Z\´mˆ>øûâߌ´ŽšÇ„¼GñOD×´ßÿ>+üð¶ƒâø Á𦉡|øIð¿HøokáÛ? |+²ð?n5/ _Kç“Ä'ìé¹ÖƒŒéóΧJQ†NZ*«Ë:ºÙ…J¹¶Už+ ‡ÇJ•<M©û ÑSu¹mŠ“r„GISÌ#…Ž3’¤¡ý êË.©(àb°Œ+ÂUéY:ØŸ¿jïx³ö4ðí¡ûøëáKxXÒ<ñ:îßâ×ÂoüBÿ…ðËÄ÷úU„žðµïƒ~7|'‹À*ݪmümv¿|4>Èßcð¶·cum©·eûQ~Ò¾|^ø¥x;ág‰þ=øGâݯį ]|øGðÿJÔ~6êž9ðÞ•¤øŸBñ‘ñKâ/Ç„ÿþø Iðô&,?±4ýNøèvZÄ?^è^ ñ‡žëÿðN)5_Ù›Á߲ދûm~Ù^økáOøI,ïµm1¿d¯ü@ñׇµÙø—ÃþñÇŒ~*þÉ¿/u+oÝÙ›oøJ‡Dñÿˆ »¼ºø£ãˆzÌ©ªÅì6ÿ²‹¤ñ_Àø“öÅý§Að®Ý­t{ üSoâNmZÿTu­9Ê¥z4Þ25aGš3« 5i8Öƒ•hפéCN8e :žËUcpÔ½¯´ÆÃš’œ!VP¯?«BœÓS¦ZêÊ5*F²³«S’¼ý…XN¶QÁV­J)Ð¥‘¨~Ûú,ÿþø›áïìýûCü`øñ›Gñ6¹£~Ï^Ó~iŸ<'§ü?Ô,ôŠ3|BñÄïŒß¾øV?†Þ/ÔtÿkW3|oº²ñG‰¯mí~]xúÉÍúùïÆÿø)çÀÏ€³¿€?hˆñæ‡cã¿j¿ fø{ã?þÎ!6ž5Ÿƒ—Ÿ|/ug¯Ükh¿°ï…þ|=ðÇ„¿lßÚÏÃþêŸ%Òhm3Ný.>,êÞøÃâ{oxëáω<=¬þÉZ¯À SÁ÷þ1Ó´_i× ð>ׯšþ‹iã -:ëX±Õ:}Sö.ñ ~ømáχ¶íqðkÄžÔ>%k~*ø—ðúOÙ‹RñGÇüZ×­¼UãOücð—ÅÙ“âGÁ]K[—İÜê¾›Á <kàxu=KÃÞ ´ðÿ„î@‰Õ»§W“–'ˆ£S÷Ps(¼Tgõ|¯V7À¬uLlêfÇÆSÀK…Œ=¶´yR¡í—4•КmÆ2qÃâ`ª×•5)}nXÕ†­‚†œpSÀÊPÇ}_Ì£å_ðRMO^øGû!|jø-ûþÔ_¼)û]ø£Äš‡4 ^ý–|âÿ éº7…¾!x«AÖ®­¾,~ÑþðŠ­~#hßï|[ðëVð—u?ø“á´’xÍ<{mwà xç鯋ߴ¦¯ðcödÔÿhý{ödý§ü_¬èÚ/…õ]OödøCàŸ|cý¦ã¼ñ/ˆt_MáÝ3 ¾$x“À^'Ö¼0ÚÉÖ|Q'„~&kú—‡´kV°Öõ8l‚ÍÇ]þÄþ·ø ðÓàŸ‚>0|høa®ü'ñÕïÅ_ |zðdŸnþ0'ÅOßxãQø‘ñRÓð‡‡|;¢uÏê¾Ò¢ƒ´#›ÒW“©5S,ž"3¨ðòQ§%B–Ô£?¬Ò§“…ÒR”êÊ/Èëåš °8Xf‘Ù:þÏ—!ð&¡áŽ?gψîõVð÷Åoƒ–¿õÄZ\zgŠ<'©i¿¾|røs¨h>${ TÔ¥—ÀC_ƒUðæq£ëº\CQ·Ô8 cö5Ó%øYð—À^øëñ³áOŽþÝëZ‡héß³ö³ñŸT¿ñœz¤Ÿç×m~)|øð\ÛüTÖ5køÃGÐ~è:ž·m¤Ià+Áú~‡£éö>{ƒPƵÎù³èÓU”¨F(Ô« ÉÎP¥EÂ^Ö„1:uù¥í0éÍ׎TÔï”çu—bc‰æI™ÍZœ¡NŒ)ʬÔ[¥VPÆJ“šöxì%6èRùƒâ¿íµñÃIýž>øÃÂ6Þð¿ü{ñ7â‰Þ6Ñ?eoÚ‡öÙÑ|/âïš·ÄOøÒïÀŸ²ŸìÉ®è|eáŸøßá¶°ºˆo1ðDÞñ7¨x‹ö3Ò§øwð‹ÁŸ þ;üuøâ߃oâÐþ6ü:?¼OñWÄcÇ quñ;þdøïðSã7ÃvŠ>'–øÓP‹á¥†ªÞ/±µ¿ðí÷‡¬^óM»]cö5Ó%øYð—À^øëñ³áOŽþÝëZ‡héß³ö³ñŸT¿ñœz¤Ÿç×m~)|øð\ÛüTÖ5køÃGÐ~è:ž·m¤Ià+Áú~‡£éö.q©ËŽrš©9æXIÁR~Ê5i(SU«Ð½:nŽœá9K Må´ªÆN3ÊñR—´ƒ„R– Ps§åø˜T§‰©íêQ©)¯eB¼¡O—ŠtãîâgõùƤùá˜a©ÉÑ¥SBý¬¤Ó?cíCö‰ñîƒc©xϳøÓáÞ«àÏÉ5•ŸÄ?ø­®þÏöžødž&º7P‹´;o |2°ñ¡-Üoâ¿Yjú”ó­Íëð¿l­7þ ëû5üñŸíu­¿ÄŸˆ^(¾Ñ|â}{Ãþ&ýœþøGWø—}áÝ_Å~#M?Æß´·ÆÙËàGƒ¼5§®“¬Yø/@ñWÅ[_ø‡EÓ¬íôÛ_x†ÓÄzÝ쟤iRþ̺Œµ[߆_³¦­âÏÞx_Ä–Rk>(ø³ñ—WÓ¯lü?ñKÇ~1´Õ´m2îÿIÖ<]ñ/⽡Íà›í;Ä_üKáiRxF÷áî“kÔ|{ø ㌗þÕüûTþÑß³±à¤ñ<^|“àN£aã;&†&³ñÇ„ÿho_< ¬>‹.ƒdž5k_ éž!ÐP×!±ÖÏZÔm§ºÎ§³­j‘–"¶6„œèÒ¦éà ‡«fèÂqÂB—×]l\ñ £Éƒ§—N xºU°‹ZÅG e8R† *‘ÄVœñZ††"¬>³í¾¡>­M*´–/ÇQÆÆt0øLZù§Ä_ðP&×cO†¶Â_Ÿ¯<ñVçK»†ûUð—ÁM_Pø_àKÏŸÛüTñ߃uÏÚŸá¿>ø§N‚=_ÁzÇÁˆŸõ]{Ã~&ð·Žô ľ¹û=×iûUþÞšì•ãÂ~+ýœÿi¿‰z§ð·Æµ‰_¼3ð¯Å¾ ðgÃφ:ç‡tŠšÏ‰´Ígã…¾%ËwðúÛÆ^ ×/4 ü<ñ/ˆÑþèú_ì¥'ˆ´ü½ðÜÞ>ð_ŒüCyûXÙ|3ðmõ‡‚|]áïˆÖ~)ñl~ê6«aàˆh_îSñÅÈ|_©xCÂ1ü]ý•þ K?†ü|;oâ¿\x×öÀý¡¿f…-o¦ê^/ð®—oá½?â¡ãÝnmbmGÃþÕt xËXðæ„à¨_°ˆ~|ý£üKûY~Ïß¾ütƒÅkðëTøÝñ«á?Ã%ñµð÷^›Â|9¢jzÿcðÇŒ/üâËkëú·€Â„°•)ªZMÅÔ¡(Âj—±œ*SU"ê:®œ­Z¼¥MF“Ž&-Ò¥†–"0S¤«N–.¥_©üiûCÁN¿e/€¾~Òºw%Ákÿe…Ÿ¿f)ЯàÚ§öŽý˜5'‰à’óà$ŸuØø¡415ŸŽ<'ûC| øùàmaôYt.<1«Zø_Lñ€ú†¹ ް–zÖ£m?ŽKûx_Fð7Âoü(øóñóà_Äo„¶ÿm-¿h†ßð¢5о9µøÅâ‰>!|gµøƒ üUøñ/àN¯iñKâÙ¾'kVz?ÁmÓž.²·O…°|?ðÔ·Þ¼ÍÙ¬CNªƒÌ(ºP~ÊX˜`¾£ˆNÚj´ÿ´~©h_<4÷úuÏŒ¶Ç·´øuÙGûnk¶ž-ýŸ¼âÏØÃö³ø®~Ð>(ñÏ‚,¿á3ºý“¬´ï‡^3ð6…âŸÉá¯êº_íU«Øx†ÿÅð†¯ãŸ\|Ÿâ敪ø~Þú+GO×ü=âÝÃÓ|Mý|ñOáÏÂok·—í{£k? <^|usñGÃþý†cñïÄ¿é¾&´ñG‚o|}c¬þÅšßÃ+hþÝYÅaá«?‡~ZjºsH<oÊ߯¬üCý›ôß‹àøñ+âÅ^çèq¿Ç {ïø/ãcx“A¸†æßÇ–Z·ÃŸø;À>ñmãG=¶¢|%ðïÃþ¹Ó5WG‹HÔnìdÒ¢‹x¹A(ÿÂÔÞ”jËÙÇ&x|¾>JÓÃJ¥IÃóšõ)×¥F½øDŒ1XG3¥S8é,4*9ºO.’¯Z8O³b³X·*¯G(ÔÃ<–­/eV¤¡™S«5Z¸yQüöñ÷üÛöwøQð³àïÄŠßþ+ü&Ö~<êáÂïŒ?àŸ?ñ­¯ÂÙþüRø£û(øÃà߆o>x Çÿ³ÕŸÁÖÖôï…:•ž…k©|&¼ðÇÇ?„_þê¾¹¸ð—ƒ5[85‡—ÿ‡uO iSøS_Ða»×íõž'âoìkãÿŠ~xXý¼¿kÝYøYâó㫟Š>ðÇì3~%ø—Mñ5§Š<{ãëgö,Öþ[GðîêÎ+ Yü8øsðòÓUÓšAãø|k~Vý\h¥[—ûg.UªGÙÒ­ý‰O0—×¥ƒ£9bé}j¾M~Ñâ±»Ï%Wê°Y\©º3WÙE·B8‡•c­Rµ|:Íç—מb*G „­5ÙR£Iá©Öö™c¥W–.¥xá¶µÛËöwøgà?xÇö¹ñ§…?`=kƺ¯‹4má·í§ñsö}øMã+»ß^ÚÁ«6‹«hß|iðÃÇ6?`Õ4 quO†¿|k¦YéÞ"Òmu‹½/^þÐѬ8¿Šß·æ‹¢h³‡?fƒ~+ý¿>þÑ¿<ñäZo‰þ(þÐ |-âí^â÷á÷ˆôÁe£ké¡i‰á¿§ˆø«ðŒ|9ŸÇ> ñ=ޝøbîçMÓ>/|:ø³ðËX´Öü!âÏxSVÓ¼cðïÄÖGK×îï4Ø4ßYèúÞ˜7MT½HÊib(ßêOÙÑt]é×q§u+Êä±”±4ëÂ5Fr­RM½i¸ºu}×’Áf~Åb_;§©†ÆK*çx_gÇ ‰– ž"VÄB¬iW©ÈãV4éü…ûWÿÁS¾~žøqñ÷Á¾'ð/į‰ý¨?j‡~YxÇJöœÒ|Sð£âÆÿèŸuko|Iðç øõðsãÁ›ÿ x·Æ:n…â½?šÁÿ øoáeLJ4 ü Ò¾ü>Ó×ÁÏÅ?²ŸÅOxWán“iÿý³ü#ão†Ëãx5/‹~±ý!ñWÅ{ê}òY|Rð·ûkŸ³æ¢Þ‡K±Ó<«xOৃ¼E¢éãPóõBû^ñ î«5T11Œï‰Y'N­µAàÖ.»pÁÑ®ý¤°ÓÀ¼,q5±õ©ãéâ–&¦V”¨Ñ‹‡"©‡m7Gêµá8ÔëN³ÃTöU±~Ê”)ÐÄǺt0Oƒ•)RjÊS­S â·_ðRMO^øGû!|jø-ûþÔ_¼)û]ø£Äš‡4 ^ý–|âÿ éº7…¾!x«AÖ®­¾,~ÑþðŠ­~#hßï|[ðëVð—u?ø“á´’xÍ<{mwà xçë/ˆ?ÏÃ?ÙÓRøñã?†~5ðŽ»má*ëOø!â]KáõÇÄ«ïˆþ+¾°ð߀> GÀž6ñßÃ[¿øãÇÚ߇|¡ŸxûÄ~¹ñ½§Çoâ ‹G7#Í®ÿb ÛüøiðOÁ>4|0×~øê÷⯄¾=x2O„7⧉o¼q¨üHøƒ©iž;øCã_zŽ«ñNëâ‡ÄÇñ†ƒ/ÁAàKñƨ¾ð—‚ÿ²ü+ÿö¶Ÿû*Kgsû7iº·ÆˆŸ¼ðÄ>4ø“®EñoSÔ|uñ ãÆ~Îþ×Âÿ¼cãUÖtOiz7‚ï<[ñÄzGŸ|:°øgáßê_Ï¿ü*ðÇÁßxYv­ -O¬R„çJ1”XJrª²Ù¹T•LÜ"”©QsÃÐXêÄK°sª–XºÔ¦”ù%—Õ(ÕöYLe‹ÃTrVoJ¶aQÓÄÔ¥5Z• U5•a¥W%§˜âaJUèá¨â}Ïá“ñCø_àM/ãŠì‘¤Xè:§ã˜ëÄÚ=…½´zw†,u)î4ï Û]}«VMÓNþÜÔõ}dßê·žE•YûJ•*rBŸ´œçìé'tùäåÉN-ÉÆ¿,“j)&ÞäB2Œ!NUeÆ2«5MN¤’IÎj”)ÒR›\ÒTéÓ¦›j„mQEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@y~«ÿ#§ÿ]-¿ôÝc^¡^_ªÿÈÅ©ÿ×Koý7X×6+øqÿÿÒd\7~Ÿª:Í;¤ïý¿¿à¦ÿò6é?õíá¯ý&ñe~ÊéÝ#ÿxÿè5øÕÿ7ÿ‘·Iÿ¯o é7‹*¨§þÛ"VÒôýQúõðŸþIoÃ_û<ÿ¨î›]ýp ÿä–ü5ÿ±Á¿úŽéµßÖâ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ òýWþF-Oþº[éºÆ½B¼¿Uÿ‘‹Sÿ®–ßún±®lWðãþ5ÿ¤È¸ný?TušwHÿÞ?ú ~5ÁMÿämÒëÛÃ_úMâÊý•ÓºGþñÿÐkñ«þ oÿ#n“ÿ^ÞÿÒoUPþ=Oý¶D­¥éú£õëá?ü’߆¿ö x7ÿQÝ6»úà>ÿÉ-økÿbƒõÓk¿­ÄQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEåú¯üŒZŸýt¶ÿÓuz…y~«ÿ#§ÿ]-¿ôÝc\دáÇükÿI‘pÝú~¨ë4î‘ÿ¼ôüjÿ‚›ÿÈÛ¤ÿ×·†¿ô›Å•û+§týãÿ ×ãWüßþFÝ'þ½¼5ÿ¤Þ,ª¡üz>Ÿûl‰[KÓõGë×Âù%¿ ì@ðoþ£ºmwõÀ|'ÿ’[ð×þÄÿê;¦×æŸüÏàÕÞ©û(~Ôÿ´~ñ«ö“øwâÏ_²Æ{áV—ð7ö™ý¢?g½Eø… øgÄ^,´øâ];àwÅ_‡úOÄ}RÖãNÐì´­3â•â-K´²Ô#KKˆµ«¨cªµ4¥Ê4«J´Ü­ìáKZ²j)JU%V­:xhEY)×J“…Tœz°XIãñT0t¥â1Xœ ÝFu±˜Ü69Í]S¥Bç‹­;Jnޤ(Ó­ˆ5?Zè¯çgöð§ŒaÿÁ5ÓoµïjZ6¥¦øOÃ^/Ô¦³Ó¯~mý›háû=xoW¹Òþ ÿÁOÿh?‹>=øQàÚ/ã—ìßãÿhïþÌþ¿³ñG‡ì>*i:§ÄÚÃT°ÐôÚ#Qðw‹|Qá€~2üKÖ Ü|øg0Õ4è“t±¥ BŽû"X*XÙâ*S¤¡_ý«R?”c„Áá²LÏ™ãêNž Tæ¥Z…,Ò¾Um7†ËqT”«ÓÍ2Xe JÔ°O*¥'5no¬b±YæW…Àá!ÖÄ×®¨5K‰Ê°Ù§î…üœþÚ_µ_Å/~о(þÍÿ¶ŸÇtøãO„ÿðFŒß ´øEðÇ€äðoÇÛËÅ ¼qáÍ+NOé~.Ñ4‰~[-_â õÖ¥añ{TÔ-ßøÒ?„Ö“|'öËSÿ‚•|#Ò|cgÏÂïŽ|»øÜÿ³iý³m4¿…·_³MŸÇHügwðº_ê/‹ ñæÊÎ/ŒVrü›â\ÿ×àìÚ=oˆ‰dÍ©« §[B¬©Ô¡ˆ¯šfùJÁU„–&ž/(ÌhåU)Ô¹cWÄáð8j7ö•³ ô0lN' úb©Ç :Ÿ¼jðYF9â©ÝÑ•<ß#¡ŸÓ„oïΦR¾'ÉÓ† ˆÇº‹‡Æ<'è¥ùykÿFðÌ·ÞÓ¯ÿdßÚ›AºñOí—«~Ãz”ZÞµûÛKà?‹Ö:6«¥êÞ7¶ƒö»º¼µðWŒtKPÖ<7‡íüEã/iz —–þ Ž/ü1><ð?ŸðT¯Ù÷áÆ;/ˆ?¼ÿøuyðàÏíáãøsáh^0ø3ñ«áÿÀ¯ˆ ¾xãâ§§ü.ñ|9ãiž2Ñe²ø>šŸ‰ü3⃾Ôþ øïö„Ð~ü>ñO‡|W©åõŠ?W£Œö´þ©Z•jñÄsÅÅÓ¥‘àørÁ>yÔ©“æYnc ){ià1‘ÆÂœèR­(iK Z¶-`a K*ñª0JrXš™že’Ò¥QÅòÒö¹ÎQ˜epYB‡xu'V¥Ôý¿¢¿.m?à¬_[Ãÿ5{à×í7àSᯂ?gˆ^ð?¾ø3ÃÞ:øíá¯ÚÛÆz¯ÃOÙé¾hW?|=­|@ø—¤\xo ||¼ø%â?jòCª|EÒ¼#á!qâKyý–¿lfý¦µšE÷ìÓûE~Ï:§ìç㋆þ:Ó¾7·ìýª_ê5ºðnñóDð­—ìõñûãåÖªÚOƒ|Uà½z]Bî-3I×-|e¢Eàûÿ]Á¯[轓¡Zœ±P«NT¥¡W‹UmKêô°ÕðxlZªê8¨ÕÁbs ‡oëØÌ5,e*­N2ä„•JtªÃšp¯Z–ƒŒe)U«ˆ ±XeN sμ#XÜXÅÒÅà¿Û0Ó«†N©ömù-àßø,ìÙâß„?¿h½Sá¯íð›öqø9âßü2ñ/Ç?Ú Âÿgß^ücðwÅ{„?ôïübø¥àÏŠZw‰üeâ-WJ»Ò|IㇾøWàëkKAøÇñá¼#ãŸxbÏÁ¯ø,ì›ñßáŠ~&ü:´ñ¿‰üYáß>ý4Ï~ ×~üaøãÿÞ4ðÂxÓÀ~øsão¾*~Í>+øT^ø‚çÅö¿áø{ðãFÐ|_ª|fñÃ]?ÀÞ4¹Ð1‚•NETœêaðªt£Nn½Jy¥l&-…<:·ž'W0Ë– oˆ†e–Õ¥BT³ ëë8Jœ¥ò®Jøì<æ§ R§<¶zù„ªVŒt04°˜ÉbñSœpÔ µcS ˆ/Ö +ò7ÁŸðW¯x—ãvû?ø›ö>ý±þxþûöŒÿ†UÖ×ÇðþÉwz/ƒ~2ßüOÚSº.¿©|8ý¬þ ¶¥¤xÛáh¼¾Ð#ø3âׯÿ†_5Ÿé¾"ÓxgQÖn>k/Ðþ|Rñ¿€×G´Ó~|møÇ⛈޷𕵧ĩ.ô?x7Wñ.« ü$Ô|s¡$Ú•¿D©ÎqjEQ– ™c+ºÓ§EBŽSšà2lsJ¤ã9ûÃ0£Gž•){—¡xëMøûbøgà^£ûIê²oˆÿh/‰?ô†_þügâT¿ |1¤øóÁþ:ñöƒñòÃ@ñ·ŽæÐ|=eâÍàÆ½áïëž&Óü1ñªÿáo‹´oøÂÛŸ?à­ß~|Ð~üUøûVøçÇ߯]á_u_†þ Ö_ãßÀx“Æ>;Ô¾~Ï~øŸâoÛgÅ^–ÓÂZÖ•áˆ1~Ëßüo¬ / xŸTÓüaàíK_ÉN.:ºÆhWÄÁÍJöX| 3©Ï ¨ÎW—fYv> ‘|FƒÄaéեС9Ôá:r­E¿aZ4*ºkÚÂ%‰Æ`Úö”¹á(RÄåøê8б”©agƒÄýbt•Ž?ª”WåŸÃOø*n…ñötðíAðËö*ýº4ü<²ð'ÃÏ|'ø?7ƒ->2%–—'‰õŠZ^¹ðÖóÇz 7Sx›á¾ƒáˆ6²É®üñoÄï Ic­^ü{ñþø=â?„ŸuïÙ;ᆻñâÿÃO‰²÷†õi¿ÿcïŠz-×ÿÚ+㎓ðŸOø‡Œ¾~Ø^-øyh×·_Ú>Ñüâ/‰ø©á¯x“áö¯ñ#ῆ>êZÏŒôÇR)×¥†tª¼MyºthBœ§V¤ÖiŠÉ¥B)¹8æ }&–¾Ë/ÇâÒxL&½)¦½¤=ª÷)^1u+³ÓŒ§„ÂãR”ëû8Ū8ì &¤Ó§‹Æàð9qتjŸÐÍøõñwþ yûüøÅá_n5Ï|H»Õ>øWâ§„¦ø‘û*ê¾;øñ âå—…ï|-ðóÇß´ÚGTøçñ#\¶Oxe¥á¿‹ÿþ|Kð¿‹¼ *I׿Õ×Ö,ë¤ðÿ¿Œý|{)Rç_­bs,»–ºNk6¯˜`©eŸ[©‹ÃÆ£œ]$ÝkQIáÓöÍQ´±4±8ˆEûW J• .¾2.ÒÀQÂâ*ã–ªJ?­ÔW—ü%ø­|Jø{aã|!ø£ð/Z¸¹ñ¦©ð»âÔ~»ø…áéû÷ø?ãÿ‹^Õ­µ¸tä×|?yáxž×RÑ5=6o: ùn4ë_Ê_ÿÁsÿfÿ…šŸÅ=ãì÷ûdü*ñÃOÙÏÆ_µUŸ‚uï…ÿ|WñSÆß<â] Ãø|øSñâ'Ư‚+­Üx“JÕ´¶ý­¾~Ζ6M{_ñeÿ†tïøÖoÅYÂIÒœáÏ 8šï–q©K „Äã«:u)¹Ó«%‚ÁâñTéÓ”êW¡…ÄÔ¡±¡UÁÓ§R²½:u%lM,#\’R…zØÊxF¤ZR§®V£‡©Zj4hÔ­KÚÔ‚©/Úª+òWãü3öuøðËÀ~2|?ø—ð›PøÆúƵðCáÆˆ¿±¿ÀˆŸ¾èZ7ƒõC〟ÿjï…¾ðw†ãOøO¾/øßá¯í5Y/ì¥ø'Òõ·û/Á_¶?ìñãÙHý¹l<i¤~ͧÁù¾:OñÄV—šT:û-}WÔõ½8Ã=õµÞ‰gi{¡§ÛEyp×Ö’ÚéâùÞÜÏ¥h¼e5VUèJ…ŸûEô1=¥ ÔêKéú+ñGÁ¿ð]_Ùâo‚?h?|#øUñ£ã^­û4ø_@ø“ñÀ|}û|jñ1ø3¯MâKoø[ú?ˆ>þØ^-øTt  êð•x\ø¡|uð寗¬jŸàÑ5}I½WÄ?ðW?‚Þ¶øy/ÀOÚÃÄzíGñ³Äßf}á·ÃŸ|^ðGÇÐ|9­ëúGÄïüLøOñSÆ¿ t_…ßBº²ð©ñÆ^ ñV¹¥­÷ÄËŸéŸ<5ã/‰Þ˜ÞNœc Žu§†¥BЧSëŠØ¼Dp˜z8|?/·ÄW©‹ö¸EF9ÕŽ/™á§×ʳ*xWej’ç¥ÉJ8‰ÕŸ¶¥ìéSÂá^:½Zµ9ù)QŽ ÙãcZ¤£J®ÄÒœèf˜Õš+ò§Å_ðXÙoá¿Â|GøÉ¦xÓà7>üp—öoñWìíñÓųŸÂŸŠv?ÁpüOÑü$<{ãšgì¬tÿ|)¹¶ø“áIûGÅðßWÐ."Òbñ‚xÝ„–Çïø+wìýñÇáGÃOˆ³Ã¿Œ´Ž>)Kñ{ûö~ø5wð[ø§c§üñ—á/Œþ"¿ñf½ñãÃ_³Ž¥á/x“Ä^Ñáño„>=ø£ÃnüeáQðŸSñôZ¼R$:µG*±§CŠ”¨?¬Aá1XZêXÊs¡í#W°8¼&:¶2“ž ‚Åáqxš´°øš*S§8ºqœ%JUªÖ¡N5“£)W¡Z¾T-W‘ªóÄa1x|=•L]|.Ž5ªaq§úE~7hßðVÏíGãßxûörøÉðö[øwû ü0ý°¼{ñ¿âÿ‡¼ðÓÄt¯Gñ_XñçÆO‡~,øÍañw@Ñ4Ko‡Ÿð­£ð–ðWÄ-þ,é^)›RÑâø_?„|y¯hüÿ‚ÞþÄ_4O®…­ë6z‡ÀMÀ~!Ôü5 xÇö|ø÷«üAÓ>+x¶ãáïÂÛ_†Ú‡ì™ñÏö…ð–£ãüBŽËÁ:/ÂïøŸÂìuÍsòx›Àú®éº­Å&ÜahÊU'OR8zI×ĸåÙžg”â"¨aý­I×–+'ÌeC N3Ä×Ãá1éÑpÃâ(¸I)Z0’ËkMªtZÍòܳ5ÁóU©É_ìÙÎYG¶tþ«‰Ç`ðõý\f5ÿ`(¯À¯ÙÃö¥ý¤üGÿBýµì³ýõ§K÷¸,58¨âÞ>>ÍN2™~iŽÊëS¨âÜe%W79Ss¥®¦5gW [–*5 f/¹¤ð‹/kË(´3 «šÒ;«¨û4Ò®ü?â·Ó<¢üSø=q/‰$Ñoî“Ãڭ׌LÑõO³ßê^ñ¤RiW×ðŸþIoÃ_û<ÿ¨î›]ýiRœjÁÂi¸Ê×JR…ÒjVn-ÅÚÓùgá5(JQzáñ°•ébpóöuèTZ5Œ¥N¬4*EII)ÂIJµá4¥¥׿ׯØÏöøÂ¿°¥qûEüÐ|Uûü_Ó~2xãP‡öbñ®¡áÿŒºî—ðëÅ? ­ô¿ hûVZj?4—ð|e,ÃWñ?ÆÆñ,¾ÕRæ=/CÕ|?â›þ Á/?i¯€÷z?Ä¿~Ú­¿h}ã'íeãvñf¥ûxÒÿ৉þ~Ù><Ó>0üOøIã?‚‡öÊ‹ÅWºŸ†þ1xÃ>-øgñ;Ÿ<¬xCÑOƒ|C¡ø¾ÇYׯõ/ÛZ+hÔ-þÊ©ñ×ÃZÄ |Gð³ÆŸüQðfOè°iž>²»Ò0øÃã»Mö(øÓ?íá-_øáÿÛà·®ø“âŽS_¾ñìö |;¦ êVþðö—¢êö2x®ûê'þ uâ6ËÅ®?h½Uý„¼cûJÅûUê³µ÷Á·ø«¢øö_‹š7í¬|9ðgí >1ÿbh¿õ¿ÚI¸øƒqàÍcàO‰¾"Ùh~ ñ4ÏŒš\ÚUö‘úùEkJ¤¨¸:m/gŒÆfRŒjCë˜üà šâëÊ¡RU3R2…*Ô“£jSR¬Dêb®ëÕ«RnžŸ¶öµ#ˆ_Ù¹jÊ0U£‰„£^8ºrxUEŒœgVu+έj³ŸåÏíÿÃð¯ÇþÖ>9±ø»â‡·ß´—Âi^Ó4Oi·ÚOÁÚ{áÌÓ~غ¼šŒ¾!ø«§ØøOàN“§ÚË6„,´Ïƒ±[6·r)þÔ7Ò¾~Ô ¾xÁ±§ÇïØÚçDñßìËâߎ^*Ö|=ûJXxGEø•ãµñ†ûS|²´ñ'øÅaá_þÚzŸÆÚOm⿊wš—†~Ç¥||ðvàÍcàßtoˆ¿›ÇÚßÛ?ðKâ§…|ñKBñm¬ü/ºñâüdñOìÿûk~Íþ)øûYMkOøš~0ü<ÿ‚ƒ|vý¢j¯ÜxFÇBø}¤xCâ÷Ĉ–iâ/ Kià?xnÓÁ? |=ªj«4Wdq¹qñ©%5Žž.¤çª5ܱùƒÍ±têU§gS,ή/1¡Æ•ZÌv*J¼ðÎŽJtçO MB1ŽXIRM)(<Q†Èp•)iƵ<›…ÊäëOAàé9ÒÃPÌ+â±õÿ">ÿÁ3~%è_²‡Æ¯ÙßÇ¿´ÿ‡uoxßö§ñ‡í‹ðƒãO¿€º¯Ã'ø7ñ«[øáí)á{ÝWáÿŒ><|fÓ¾(økÂáŠy|5¨ëþ±ñOÃÅ“ÁÙmBâãÅÒú‡Å_Ø×öøéà/†úÄïÚ»áì?´·À¯> øûð3â_ÃÙq¼/ðKÂ^ ð†…â¯^h*øãŽÿ>!xÛAø‡àoø×ÂÿþÏûKø[QxïtcáÍïÃmkAšûWý'¢°ŠP¥‡¡(QÁÏ)©„¥ J0ÃWÈéeT2ÌUÅ¥G‡¡‘å'Œ¦£ŠÅP˰´qu«Ò¤ oR¬ëb1ºK‹žo,]NXÅ⡞ÔÌjæ¸lBŒTkàq5s|Ò¬rê±– SŠžBU¦ßó ðöXý¦?hOÚCöÎÖ|Uñ…ÿ´gÁ?ø(ÇÁÏÚ£áÇ¿ÿÁ:ÿj†ß²×Æ O~ǺìÃâ+? ü3ø«ñ³Ã×^5ð´wãOO¨xö¯Öõ OAÒ~$hwCÀ¾'Ð`¿û3àÿüãöŠøu£üEø]ûhü=‹ö€Ð~5~×>6Æž3ý“õï|)ñgÁÿÛ'ǺOƈ¿¾!|Ñ?jojÚŸˆ¼/ñ‹ÃÞñoÃï‹>ø«ðâ÷IÑ4tðnµàÿØjž ¾Õÿk¨¥…ÔáEÐn–"`kb)7NSö^E“b燌_û s·†²|.aC (RÄÑ¡‰¡R/ Æaê¼UibÜá[÷˜eZ0øz¿½TáCœã°q­)Ýbªà1¼C›â°XаSÂWÄÒ­†T«àð•hþWþÑðO‰¿´ç>k¿>7|Öl¾ ëŸ|ueãÛ¿Ù.â×ö¨ðWÄ øöËÇž*×?fOÚ+Ÿ´„¬¾øcÇGCð¿„µ/x“áGÆØ/¼¡bøóXøŠuMJævýeß~Éiû@xQø¯áˆß ¾$üzø½û@|;ðþŸð\ðÄOj~#xÇâÄøËÆãâÇt?Š–pë>&¶±ðdÞø]ð®÷HÓtÙ Õ ñeö§ÖŸöÕPr£íåC’”«ÓÌ¡$ æØ¼§Ž—°N4ã*Øœ‹(—=5N¥*8X\=J8g:RÆIN4áWž¤i¼¯•ʤT²z9®/J´œª^•,ó7Sr”¾³S0ÄVŬEi)¯æ³ö ý—>6þÔ_ >8øâç‹üaðÇöM½ÿ‚“|{ý¡õÙëâÇì/ñÏàGǯi¶ßµF©ûDüþÇø×ñ·ÄþÓ¦ø-ã=[OøãŸiÚìá©øæÿ ÃûŸŠ¾¹žãHð÷½êßðI_Ú#Nñå¿~þØ?ô¿~×ßkÏk¿¿aÿ|Cø¥ã/üUð—Æ¯þÑß4Ûáž±ñ»LøYà?ŒÓøà¶«¥i¿ ï|àŸøGÂwÐx“AÒll,ÿv(¬ãF”0˜<#/aƒË09bRœœ±°8 “íq.<Š­J±áì²¥œy(:>Ï TgRÞ¦"µLNe‰siæy®mšÕ¥ý•ÙÅ\íâ!BrT“Âqc«Rµ1Xzú̪ÎKñKÿ‚X|TÒÿbØ£öU—ö“øCâ¿~Å9ð÷‰´-sâì®xÇözøË ø7¾2𯂴_³%Ïí=g{â}[Á÷&Ѿ!xgÄ–´˜|?ñwÀÞø¡xK¹Òìtë?=øSÿ ý­~|dð—Å7öãøâà#ûvÏá}'Ä?°·ŽÆ¡=÷íãñÓâ÷®|U­h·^‹§jñø'â  [h^ð »ð}¾¯áýRI5­RËź/ï¥ö™âg]º’żcÄs7ËQæ*9v9ò&¡­`ðô©WäŒ}£S«+Ö«V¤æjSFMF„°²¥¢n/ˆÌ±XG&Ó”þ­[8Ì¥ETrTáŠ(Ú”)B€ ÿ‚*üK_~Ë?~/~Ößüwðgövýÿh/Ø«[Ñ|û/øßáOĈ~?ÚøvÃRñ^•ñãöºø¦øÇ>µðÃÉ´{äðŠ´™õ-;Å·w:BÛxŸG°ðoÔÿaŸÚÛö€ýš5´í¯ðׯ>-Ó5¯€þ'øgñÁ?²ÇÃÝ üø¯à‹šW‹~4øãö“ñŽ¡ñ+[ñ.¹ðòÃMÖìþü@ýž|#“®øˆi¾µ½}óÃÿ«UÎs©nyÊ\µÖ*í:x¥˜âóo­RjΖ%æ8Úø·ˆ¥ÉYÕö7›Ž 0äÜéT£ Y+Sö4pî”’V©F¥=uhÔR¥Z4âªÂzßó‡Áß²7íKðçâߎüðÿö¶øqáÏ þÐZÃßþÒþŸö]ÖÙÅ|ý‚þ>ü#ý–?h/ÙóSý fÿ‰zÿÇþ2gÇ?±oˆuσ_Ø_´Ä}Kâ/ů…_>kµ–·sñCÂZäž#ñW†´É->*ø kê:d¬ »Ó/®õÏÕ:+9%;ó%$ðQËTZ\‘Ëa‰Ë1TòØCà§—RžM–Q£„c„£ÂC.¥F|ªagP©:nð“‹úõ ͵×2Ãá³L,3}ñµ)çYLV)Þ¾7ŠxìdëãiPÄSøçö4ý’m¿dÙºßö}±ñ}•ý¨×¾$øŠðçÃ:¿Ã/‡ßâW‰õ¯\øKàOÃÍÇ_µ¯… ü){­\ à{߈þ7‡Âaä³Ò5;m-+BÒ õ¿ø!Çíwð£CøI ~ÛŸ³Ç‡t#ödý¦¿dýO\‡þ ûâ3â_ˆ> ýª`øh>&üfø£ªé·?Žkê_ lµÿ|i¾6þñLj5}S\×þ>¯qs}uý!QJ¬iV^iË‚–]^óªà§Å峡R*J2L?‡©&¹êF³”å*§8<Z˜«}NNƒÂbž7 (ÙΆ+ÛSÄ{jsš”ã%Z•9Å_–<¼±J-Åþrø¿ö9øù3~ËþþÒŸ|ûOþο ¼CðGÄÞ8ñìëâüøÅðÃÆÚoƒäñvƒ«üƒö’ðo<%~¾4ømðïÆÞ ñ‰ûD\ë~ŸCÖ<=ª]ø¯ÃÞ(Ôl£ú[âÀoÿ³GŽ¿gŽ~1Öüimñ_á§Š>üIñ¯†-lþëƒÆzeõ†³ªx2ËGût^M!õ µº¼ñ.£¤ÙiúL^#×|cªE©ëz¿Ð”VØšÕqqÄF½Z²XšØªóp©:3¥W‰Åc1rÁÔ£*sËÖ#ŽÅãªC,59cqqœ¿Y›ªsá¨ÓÂK ,<7ƒ¡‡ÃQµä¥K KC õ•>e«‡Ãa0ØJ5ñ‹^ž…,j,4#I~wéß³·íï©ü-áïÄŸÛ§á?‰uS'<3«x¿Á?±ßˆ~ßx«á†™§¿Å }|iµž·­hÿ~&hVøkLø¯ð¿Äß |-ðÚÛÄ^%Ö¼7ðzçÅ àÝoÁ_“ßµìÁûMþÌzïìðágÄÝ{Çð¯üWøÉû:¿Ãÿø'çí=ñËÁ?±GÀÝCá?Ç_ Úü9øÏªøãÄ$ñ‡Áßx§âŸ‚|ák]GƳΡáoê¾"Áþøsà>/…?ÓÓúÎäÿu™eÙjqJÄO,ÍrÜâ„-BŒ£‹Ê¨B–&”#†Äæ´00«7ÌeˆÒ<±Ââp‘©VÁfx:QR’Žæy.k‘Ô«E¥(SÁæø™}RMakÕ£ž"•_¨`ý‡äÅßüWÇÒ­ïÆË/ÚWDÒÿoCö–ðÿíAwûBYü ¸fñ‡þÙ¾?…ÓþÌOñµ»Ï‚÷?³•έàѯ¿hK¯‰6¾-Õ§øŸeñV vÖÂÂ×ÓÐSEñW߇Þ3ðg‹5_ÚkÆ>,Ñõ½?Å6:®§â x¦×þý¢ˆ¹CÙòJPtcP”$ã,58åô²—G (µ,- ¹m7ƒÄPúTq41èb!WûCñ(©ÛÚ^¢Qäj¬URÅOF5ÕG%^8LdÖ'«*‹/­K<Õå…Ã:_”¿ÿà›¾3ø½ñsâ~$~Ðú.¿á/Ú;ö5°ý?jŸ XüÕ<5âÏéš>©ñ‹Äº?gïø{ã>Ÿeð&çGñ'Åû‘k£øÛÀß´ܾ𾋥^øšëÄ7¯Œom|Cý„ißÚöpÖ~ þÒ߶LJ|Iã¯Ý|&ñÀO_eàþ¯ð÷ãGÀÿøcâOÿ<ã‹ßô/Š,´ñ׃4Kxo·?þë¾ÕŸûl‰[KÓõGë×Âù%¿ ì@ðoþ£ºmwõÀ|'ÿ’[ð×þÄÿê;¦×—|oý±ÿd?Ù—UÐô/ÚGö©ý›ÿgÍsÄú}Ưá½ãdž? 5_éV—?c»Ôô=;Çž(Ð/5m>Úð‹[‹Ûn-¡¹>D’¬¿-k)”ãT“…5)$êMBu ›NrTéÔ¨ãµNVå‹i¨ÊJN1“P4ÚM¨EÊ0R“ZF.rŒnì¹¥îÒHQ^ð?ö¡ý™ÿiËjŸ³gíð/ö„Ó<'wc§ø«QøñoÀ,<5©Ã=Λeâ Ïxƒ_·Ñ®õ {[©ìmµ-¦»†ÚymÒD†F^â‡íáûüñô¿ >4~ÙŸ²—Â/ŠP¦•$ß ¾(~Ñ|ãè£×¢Š}I|â¿i>"5˜'†m)ßN ¨Å4RY™’D'G*´¨8ÉV®à¨QiªµH*”Õ*oߨçMªPMÊ J7‹¹œeS©V2Œ©QSuªÅ§N’¥SÙTu&›Œ:©Ó›“\•$­-«h®OÇ=ð/Ã/x‡â'ÄŸxOá÷Ãÿé7:ÿŠüuãèþðw†4+4ónõ¯øŸ^¼°Ñ4]&Ö?Þ\ê:•õµœ óË2¯5åZígû+ø§áUßÇo þÓ³÷ˆ¾iúG‰¼Añ“BøËðçWøUe ø*þ×Jñ–·wñOñ%Ç„m´ j—ÖZo‰µ)µ„²Ðoï-lõY­.."órŠu”S£IÖª›W¥E)·V¦¾å$©Ôn¤­©ÍßÝ•­'/edß¶Ÿ²£emS•KÙÒ·ñ'ÊÔ¹!yr´íf h¯€?áì_ðK/úIgìÿ‰‘û:ÿ󯝼t½SL×4Í;ZÑu cFÖ,-5M'VÒîíõ 3TÓ5 xîì5:þÒI­ol/mfŠæÒîÚYmîmåŽhdxÝXéË'58FQŒ¥gÊ¥%'¹l¥% ¸¦îÔ$ÕÔ]£š*JQS”e(Æë™Æ.*RQÝÆ.pRiY9Å;9+Þ¢Š*J (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ òýWþF-Oþº[éºÆ½B¼WÇ^!³ðÖ£qs%›_^^Ü\˜ mItÈ:f—áã12ÿfjr4¬úœATD©±\–Ü3† ˜Ö£ƒÁÓö¸ŠÕ§Ož¿%:•$ÜêJ0ŠŒ#)7)%dLëRÃÂu«K’œæ•¥+sN0Ž‘R“¼¤–‰ïØôm;¤ïý¿¿à¦ÿò6é?õíá¯ý&ñe}ïwûH>J§‚¬îuSãI•Ÿ·þÎý±ü«ó“þ â[Oë«i –ë.›àIä·™Ñå·m[Âú§ˆb‚F@¼VºÍ²9\«0,§iêã8k;ɾ«‰Ì°OB³”)ÔUðÕ”¥®k¬=j²ŠNpWšŠnVWiÛ“ ™`±“©O_ÚNNQtêÁ«»«{HA=#'dÛVÖÇì÷Âù%¿ ì@ðoþ£ºm:ÿðt¥õΙû#þÃú•–¨ø†óOÿ‚§þÉwÖžÑåÒ ÕõË›M#â´ðhú\Þ Õ4=GS–4²±—[Öô}";™â}KTÓìÄ×pþòxâ.‘ᯇ?,õImb’ø5JÆž"½uWðΗ<>wö_†5a•íäŠf‡ÏvE•2Hefüçÿ‚ŒþÈà¥GŸ|aý¦ÿh¿„~ øOñÃ|1á_‚á׆´¹þ,xFMR?üBÖ¼MñCöJø¡âè5/[kº¶Ÿ§ø»DðT¶÷?kÖü=}km¨[òSÊsŠõò\N)ÍëPÃgÜ;šÕÄa2êõy0™NsÍëÕ¤åIÓ«Rt0r¥…§Nxš´gO ëW¥×ÃB†qF®+¸¾âl¦*øˆÓŒñyÆC˜äøhVpš©NŒ18êu1SªÓÃS¯*1«ˆ:?1~2þÍ·Òþß·wü‡ÁuOØ«IøcÿÉø·ð§á×Ãø§àŸÄ/ß´Æ |6¾ñ7‡> xçÁÿ³§Œþ0ü0ÞÕ,4}+J´ñÅßx×S¹øKðÞ4Ñ5'Ó%øW@øƒ®~ÙÞ ý§üMû[x‡ÆñÛx«XøÑ¯ë¾%xU¾ø™ªk¢þë_–é6˵-Äj÷7Ú©Œ]ê×÷7_¾Z?Šíþxþñ÷ŽõŸ‰–`þÕ¼uã‹=ãž6½Ónµ ÿZñV—ð‹á/ƒ¼gªÞiš€ºƒÃ^ðž€Ï©e¡ØÂ<…ü•Ò?à³GÃ_|cøcû1~ÕµÏìyû<üz×¼Gâ‰?³_ìñ­x2ÛácëÞ8³]?Ç÷ßuß‹?²GÅâñ¥Š%µö“ð3âïÃmË2øLð}޼ÑJÉ3|VUœe¸,›ŠÁæœ?C!Êó 9~gW†tóž"γ‹›¡V¢Ê³Œv{ V-eøyÖÃârŒ« ª®0žX«æX',ª½LT0Øì¿ˆ#žc“Åa¾·^•>Àðæ–¯ ÇåX|(a!_C RüγÇaê¹CüõÁ,>þÛ¿·ßü¾Çáw¿Œ¾Òþ*~Ç_ðR}#Äÿ°þƒñõÍÿÿìéá­â®™û;ëóê­}ÿ g„´+ý_Å'ð…µÎ—¬ižÔ| £ifçÃð²øÁ_¯¿ðOÏÚžÓöÍý²¾6~É¿ðSßø&å¯ì™ÿ—ö^Óã zT6"øûZüðߎ¼!se­A¯ØÜë’ë:/„<]q‰ám!¾#|^ð|Ú=׎|9?Ä-NêÛPð–“ú3ì›û h?gÙÏáV‰âo€ß ?eoEñGàn›ðGÅ¿¼ ¯xKÇöÞøáK_ßøÂ ^ø«ÆWrÿÂÉñ&»â[êþ"Óþ$jÓIgñRÏÇ>Õ¼KáÍ{£øðwà÷Â?$ý¥ ø?i®/Šäøgà ~Ïÿ³'À…^Ðuo¨ñGˆõx¾Oãjpipx‹Åšžáï iz7³,§7žqS,‡?©‚t'V¤±9V-âªgê5yþ­:2­‡Ì³šøJ1âL*­l \¦­\F‹ÍjW¥S“˱véb2ì5z˜ª²£C ‰ °˜L²·ã8ž—biU“¡‹Êò|66u²Â… 6cG9¨ðóÂá2Ì.¼?go è,ÿƒ¹à§Þñ>¦kþñ/ü¯Âžñ‡µ{(/ô}kAÖ<ûiº®©i÷ %µæ›¨i÷Ù^YÏÁ=´ÒC"29Sý 韵wìYàßi±ïƒ?jÿÙgÃ|5e¦ü5ðwìÿ¨ürøw¬|Wѵm3Ãp ørëá,ß,~&k¶z,VƒèŽ-5ÝOIO´ý¾´ A8þþÀŸ³ÏÂßø(ÇÄø)æ—ûYþÕZ÷í ñsCºðWÄOxŽËàÛü(ñÃ/'Ã6ÚÃ&ðîƒûh>'Ò|9á[oø ]Ð|i¥|F¼_ iïâøŠmSÅ2øƒõ«þ÷è%þ üwÿÌ-rÐȳ¸ä\1—ÔÈó¸TËòIe™½:YfaJ®"­<û?Ͱ’¥‹¥FIÓÃa³üM% U¡‹­•Ó¥%SÓŽÍrúùž;C‚å•<š8 •kájR¥, ðöGŽO *Š\˜ŒfEF³5(×Áë/l¥G ü§øþ ¿ÿOØCöœÿ‚…üBð§ìYâ/†Ÿ±gíá'ì¹ñ{á7¾üoðŽ>*|3²ñG¯ k7øã¯~Ô~1оxÂÅþ!ý¦ËG×¼ñGJÕÔI.–Ú3/ˆ¾­ÿ‚¨ÿÁfÿjïØ¥>;xïá—ƒ?g½áçÂ_†³ŸÅO„žø‡á?üøŸûSxCã&¿£i>7ñ¦¹mð/öŒðWŒ¿a¯‡ÿ õNïÀšgÄ?Ú àw‹¾üDøƒ§ØhøˆÞ'ñO‡üsÁ| ÿ‚$þÏ^ øMñsà7ÇÛCãoÆ€ÿ?m-cöÇñ×À?ü>Óþ| ø©K«x7]ðÏ€¾'í|-ø¿ñgYÒ´OÂVÿá¿Æ„z‹í&°MgÃÿBÓ5$÷ÏÚGþ û~Ó_ÿlïø›ö‚ý«ü ¢þÞžø=áÏÚá_Ã?xsIøq©/ÀK?Cð§Rð´~&ý”ü]ã \øZûÃ6šÊi6¾8›ÂZõÝõž±á»ý­4k> >EÅÙ9S¯’æë4† )ÅböF"s£™ÒàÞ¡á±QŽ8,ZÇqe.!Ä`)'‰Ë0”ù£ˆÂæ pþ«‘,ÏÞ+S-–&­GQ§‰Ëªq­ZøIàåN½Ó&ñÿ4]F=7^>Ô|¦Xei:¯„4¿ ëöÒê÷%ûMÁ%b?Ú—â_í«ñÆ´Oíkàí?öþÐ~è¿´gÃO‡~)ðþŸà jovþ_…úׇ[Å_²¯Œ5xDøŸ¢éÒiv°x4x+áµ÷‰ÓM¼ðÄŸ<Þ$‡Æ~øÀŸðp'íí'ì±û,~ÕŸ>þÈiá¿ÿÁKÇü×ã?ƒ¼¢üf}sÆðϬê²ÝüSøc«kßRÃାÑm-4K xªÏöƒOêsâ™|AðîÑbðqý'ñoüÃö|ñgí û"~ÔW¶gí}¦|cý‰¾ 7Á/‚züþÎO_xW[ð_ˆõÏh:—ì©éÿŠf?ðDØ£þ‚fØÿlÿÛ–†Ÿÿj­KöÏðÜ)/ìüÚܵ kHcñ5Ö­/üúF»Ò´Ûˆ¯õ Kö ÝëZŒzŽ¡§Á£Øé]T²<âž2”¿Õüò¦ Žg®á<£R¥\'üDØæ9m|ô?yBÕÇåiâçígšÖÂ{iT– ˜`¹ªc°õ°°¥,ËOW#ÀáêÕXº¡K6§À'³ð†• øÂøsWñ¦â¾\ñ.dµg•fË„‡RÇÖ«’ãñ8yb±œ;ÆYn ÁÁâpŒ×˜ì6 ¼ã< ŒË'F„;öâs,«<ÒÅa¡‚ÄRÉêa¨ÓÆÐ¡Š*Y‡ â1Xˆ…jІ:†Ä´ªbát1X¬Â†7ë5##øKþ õÿ´ý©?nO‰ÿ³ïGƒ?dÛ/emÀi¨[|-ø»ñköÑÖ#¹ý”>6i?5ÿ jþñÃ߇:ÃÝCá…÷‰ôXõ/êú‡…u½'ZÈý“?à¨ßðXOÚ[à'ŽhŸ~ʲ§Æÿ |ø³ûsü!øƒá†OñÀ¼s®üøqªk.|áßüVñÓhçÆŸìt_ø‹E³ŠzÿˆÏ‹–}#Oð-·…Ϋ⟷?dOØ«ö{ý†üAâÛ_ÙÓö—ý¨¼#ðÅ_‰­ÂÐÃÊU>«F–&¾_FMãêVŒqRÌrª±t=žeW0ÂþÒ?~2|vøù«X\øwZÒm4 xïÃÞ'´ðÏ‹ußüGÓ´È/að²ê7?¯Uù…û;|$ø7ðâÇÅïÚZøÑñSö€ø÷ñ³ÃþðW~0|eðÿƒ´o7Ãÿ† ¯Íà_ØèŸ³ïìÁð#áùÓ4;ïx†ôëú¯‚õ_j§P·Óµ¿êZ&ƒá­/Eû/þ÷è%þ üwÿÌ-wb²|æ¼áVŸæ¸g:Tý®†W™KF¬SƒŽup±®éJ…NLCÄWÃÔœðµs ÚT?µ±ÙPÅá){jsÌðµáÍQ­SAV«OÙÒæXª®š“®êòJ”pô«Röxˆàr·VY^ ܨ¯ ÿ…ýà_ú Cÿ‚¿ÿó AøýàP þÓ‡Žäã¿þak›û=ÿ¡sÿ†¬ÿ3›ÿh`?è;ÿ…T<¿éçš=ÊŠð¯øhÿÐN/üø÷ÿ˜J?á |ÿA8¿ðSãßþa)ÿ`gßô"οðÓ˜ó8¿´rÿúÁá]/úyæu¢¼+þÀô‹ÿ>=ÿæ¦ÿ…õàúEÿ‚¯ó CÈså¾G/\«ÿÌà³ Û‚÷5C­¿éçš=¾Šñø_^ÿ „_ø*ñ×ÿ0ÔÂúðGý"ÿÁWŽ¿ù†¥ýƒžÿÐ9ÿÃV?ÿ™Çõüý`ÿ𪇗ý<óG·Ñ^~>øJGoì¿ÿó Iÿ ûÀ¿ô‡ÿ~;ÿæì÷þ„yÏþ±ÿüÎ_ÀÐvÿ ¨yÓÏ4{•á¿ð¿¼ ÿA(ðWã¿þai§ö€ðœN/_ùøðÿ/š?°sç¶Gœ¿û¥cÿùœ?´0ôƒùâ¨u·ý<óGºQ^ÿ à?ú Åÿ‚Ÿÿó Gü4€ÿè'þ |{ÿÌ%?ì ûþ„Y×þsþgöŽ_ÿAø/ü+¡åÿO<Ñî´W†§ÇïÉš”GÏüJ¼x:ç| = ?þׂ?è!þ ¼uÿÌ5/ì÷þ„yÏþ±ÿüÎ5˜`Øìÿ¹ª_ôóÍßEx‡ü/¯ÐB/üxëÿ˜jCñïÀàdê1;ÿexïÿ˜j?°sßúç?øjÇÿó8}ÿAØ?ü*¡åÿO<ÑîW†ÿÂþð/ý¡ÿÁ_Žÿù…£þ÷è%þ üwÿÌ-Ø9ïýóŸü5cÿùœ>¿€ÿ ìþPòÿ§žh÷*+ÃOÇï€Oöœ³q¬iÖZº¾š·6ñÿmøoÄú Å–©o§jöÚ—‡u›NM:}*ÿRÖfx*2Äc2ÜÇ B¼Õ±XVšrœaÏV”"äå8¥ܵ½¬›WO…­8Ó£‰ÃÕ©+ò•ju$í7îÂRir¦îì´¶ú¿EpŸð˜ÜÿÐ?ða'ÿ+hÿ„Æçþ€éÿƒ ?ù[^WÖ(ÿ;ÿÀ'ÿÈùþ}™×É?å‡õÕ}çwEpŸð˜ÜÿÐ?ða'ÿ+hÿ„Æçþ€éÿƒ ?ù[GÖ(ÿ;ÿÀ'ÿÈùþ}˜rOù_áýu_yÝÑ\'ü&7?ôOüIÿÊÚ?á1¹ÿ :àÂOþVÑõŠ?Îÿð ÿò>Ÿf“þWø]WÞwtW ÿ ÏýÓÿò¶øLnèŸø0“ÿ•´}bó¿üüŸçÙ‡$ÿ•þ×U÷ÝÂÂcsÿ@tÿÁ„Ÿü­£þŸú§þ $ÿåmX£üïÿŸÿ#çùöaÉ?å‡õÕ}çwEpŸð˜ÜÿÐ?ða'ÿ+hÿ„Æçþ€éÿƒ ?ù[GÖ(ÿ;ÿÀ'ÿÈùþ}˜rOù_áýu_yÝÑ\'ü&7?ôOüIÿÊÚ?á1¹ÿ :àÂOþVÑõŠ?Îÿð ÿò>Ÿf“þWø]WÞwtW ÿ ÏýÓÿò¶øLnèŸø0“ÿ•´}bó¿üüŸçÙ‡$ÿ•þ×U÷ÝÂÂcsÿ@tÿÁ„Ÿü­£þŸú§þ $ÿåmX£üïÿŸÿ#çùöaÉ?å‡õÕ}çwEpŸð˜ÜÿÐ?ða'ÿ+hÿ„Æçþ€éÿƒ ?ù[GÖ(ÿ;ÿÀ'ÿÈùþ}˜rOù_áýu_yÝÑ\'ü&7?ôOüIÿÊÚ?á1¹ÿ :àÂOþVÑõŠ?Îÿð ÿò>Ÿf“þWø]WÞwtW ÿ ÏýÓÿò¶³õo‰šN†ëªÖ¶Óà‘âˆxPh~ÑoÔI3i~½Š9M¼ÑJc2nT‘Œ2“Ó†…\mGKGŠª£Ìéáðõ«TåM'.Jtå.Tåݬ›KveVp£zÓ…(6¢¥Rp„[jésI¥{&í}“{#Òëó÷öÛÐuÏøbóÁ>ñî½ðÇ^ñnãÝ#Jñ߆b´›\ðÝÜÚGÕŽþÅ/#88soröZF¹¤÷øwÄדMñ™ô“ü|ð,RGÚ­¥¹’Hãqaãkx¤`ŠÓ\OàˆíàˆI§–8b\¼²"+0ñOŒW~-Ö®-­­<%#èúä|I¦ø\·³¼Š]7R:dÞñoýR/µË§E¡ þ¡¨YÌtý9í¬¬g·¸šóêxz52ÿ,ÇgX,~ mâ0Xš2©à«á¹¨ªÔ ªû:¸š2š‹mEßFÑåæ.9Ž_Š¡­CYûjUéK—–½:­MÆ~ç4)É&Ú×NŽß‰Ÿ£ý·þ üGðÅ¿Ç VÃá„>ÝËaâ­wÁ#N¸´ÿŠÍÜZv­eow§?Nøs?„õ:ë\ŠÓHÓ£Å×:¨Ò´í Æv¶Ÿý£öÁË<.NA‡á_@¯ð;Ãí—'ñ¯¶dðF¿7[ü‘xÈÿ„#ãœg' ÿ "py888<à×ÈŸ¶ÔÅ7“míÒøhêOe´±–ãOÒuíÑ4û$çOÓ4ýKÒô.Î[«ûÈ´í:Ôêz¦¯ª5î«{õÜiĹ>o—à°Ùu\Ej´ªÔUZS¦¡¼4 â¦”yRÃÊqj|ÒƒäiÔœ|>Ês,2½ld# RPtí:smÆa%.IÎ\íÔ‹Mû¼±—¼šŒeéßµŽ~:xWàˆn¿gmÇÄßôß|3{ +—7Zž™¥Ëð·Áòêúç…|6ö–ž1ñn•hÍu¡øRþk[}Jà4ñÛøžöÎÏÀÞ)ùÛö1Ô¾Oû=xf÷áçÄŸüPÓõ;ÝcZñ‡‰ÃU¿¶ðç†tmJþ/Œz/„-ogðþ§hPÍ7Ãïˆ Ge§ZÚ<鬤ZƒZHiº\—’ØÁÊéß¾Xl¶ƒÁŽšú¦¡«]Øéÿ´‡mmnoµVç[×of¶²ø §ù·šÞ­}©ê×Kq桨ßÞ_ÏwöÛ™.Óðÿd¯.§RªS¥•á(Wƒ«—ÂX¥†£N«‚©Ž§8óT„¹]HF|¶çŒq^Ni•æ•ñuçF.ÒÅUœoC(û)V”ÒnižV“pœ£xû­ÆÍý«ãRCwv³J~_üEÛº@-·Ç/6±`7XmÑ*€:WŸk¯üõ_ûùq.ý¡>k6ú|ðý·UÖRë_ºÕnWÇþðvŸs/ˆ|Wâ/^=µ“韤Šu¯jÑØÚµÏo§ÍZŽ¡-ºNÜOü.ß„?ôü>^ÿçK\yðæ,ÃЭ:Ñ©h§e‡ŠVªìâªâiÏ•Á)+Â:[Ķ5ž&r…888Óµý¼Ô ¥wNŒ¡tÕ¤õWésÛµ×þz¯ýüŽíuÿž«ÿ#¯ÿ…Ûð‡þ€ïÿ‡ËÂÿüéhÿ…Ûð‡þ€ïÿ‡ËÂÿüékØ\iÂú~ò·O±ƒþïýEù?»ÐåY>o§îéôû8¯îÿÓ_éiî?ÚQ}ïêÿÚQ}ïêÿxgü.¿„?ô —ÿŸ…ÿùÒQÿ ¯áýeÿÃçáþt•?ëŸ ÿÏêÿøËþ£«z û9ÿŸtútÄÿwþ¡¿«.ÎÞçý¥÷×þþ¯øÑý¥÷×þþ¯ø×†ÂëøCÿ@™ðùø_ÿ%ðºþÿÐ&_ü>~ÿçIGúçÂÿóú¿þ„òÿ¨ßêÞýœÿϺ}:b»ÿPßÕ—gosþÒ‹ûëÿWühþÒ‹ûëÿWükÃ?áuü!ÿ L¿ø|ü/ÿÎ’ø]è/þ? ÿó¤£ýsáùý_ÿÂyÔoõo@þÇÎçÝ>1?Ýÿ¨oê˳·º}º'çÌAÛï¡ýI÷£í‘ÏTÿ¾£ÿð£ñ«áé¥Ì>Ÿü+ý~šOø]_¿è?þ/ ó¢£ýsáùÿ]yra4ÛO÷Ïêþ–‡“ç—Ò•+i×»tXm7Ò×ݾÙüõOûê?ñ¦¶¢‘c§Íœáã1õõ¯ ÿ…Õð‹þ“ÿáòð§ÿ:*rükøD¹Î“+gûß¼+ÇÓÇZëŸ «?o]ê´pÂyÔgMÿ¥gŸ;ºæ¥NÝÞßnmß};鯷ÿk¯üõ_ûùÚëÿ=WþþG^%ÿ ·áýßÿ—…ÿùÒÑÿ ·áýßÿ—…ÿùÒÓ\iÂú~ò·O±ƒþïýEù?»Ðµ“æú~îŸO³Šþïý8õþ–žÜ5Tb‘H=xŸ^Ôÿí(¿¾¿÷õƼ8ümøBæ ú|rð¾õRÓáuü!ÿ L¿ø|ü/ÿÎ’§ýsáwÿ/k-¶†²ÿ¨Å×òôö>q¥©Óéöq+ùêÿIvv÷?í(¿¾¿÷õÆ­ØØÝxNÚKíÝ/uxÆ£òé2É-«üSø¤“+ÞÇ$±ÛŸë~2€mdŒZO«Î0mä–ÿ…×ð‡þ2ÿáóð¿ÿ:J?áuü"ÿ L£þ럅¿¯ÂJ—Æ))Òs«ˆ”)ÍÍÓiÞ”é¨Ë›5d槬^´Õ¬ìÄò|ë’qŒ)ÆRŠJVÅ'Jœ›VÃÅ«¨¸»5£³Ù£Ô<5â9µ›_´Ý^ÚܲéËÛÇcbê÷ág€õmcrÙÇ FâMQÕ§»Ü¦HîæžØ"X£é>ÙüõOûê?ñ¯ ÿ…Õð‹þ“ÿáòð§ÿ:*?áu|"ÿ dÿø|¼)ÿΊ·«Æ¼)9ÞJÔ ¡J œa‚²ötáM¿wy¸9ÊÑ^ôÞïS*y.{ÚQ„ß4›”ž2þôù’×Ý¢¥ÊµÑGÊÇ»}²/ùêŸ÷ÔãQk¯üõ_ûùxwü.¯„_ô Ÿÿ—…?ùÑTŸð»~ÿÐÿðùx_ÿ-f¸Ï…×ü¾¯-·†MWýFz¿_‘¬2|ëíÓ§ÒÚbßTÞøuoóô¹í¿Úëÿ=WþþGGöºÿÏUÿ¿‘׉ÂíøCÿ@wÿÃåáþt´ÂíøCÿ@wÿÃåáþt´×p¾Ÿ¼­Óì`ÿ»ÿQ~Oîô)dù¾Ÿ»§Óìâ¿»ÿN=¥§¸ N6—RO_Þ§Óµ/ö”_ß_ûú¿ã^~6|!'þA§Ç? ÿó¤¤ÿ…×ð‡þ2ÿáóð¿ÿ:JŸõÏ…ÿçõuÿn`ü¿ê7§éè/ì|ãþ}Óéöq?Ýÿ¨oøk.Ì÷?í(¿¾¿÷õÆ—íÑ?>bß}êO½x_ü.¿„?ô —ÿŸ…ÿùÒR_M.aôøçá_ëðŒÑþ¹ð¿üþ®¿íÌ'–Ÿï¿/— žO[Jtï§LRþ^« uþIvgºý²/ùêŸ÷ÔãGÛ"ÿž©ÿ}Gþ5á?ðº¾Ð2ü>^ÿçEGü.¯„_ô Ÿÿ—…?ùÑSÿ\ø_þ‚1øÿ›?«¿+Gö>yÿ>©tëŒòÿ¨7øö×ÝQH±‰SæÎpñŽ˜úúÓ?µ×þz¯ýü޼A~5ü"\çI•³ýïŽ^ãé„c­;þoÂú¿þ/ ÿó¥¡q§ ¯ù{Y뻆ïXÿÔ_“û½ #“ç\Ôé߯»Š}cÕáÓÛîï¥×¶ÿk¯üõ_ûù(ÕQˆE õýâ}{WˆÿÂíøCÿ@wÿÃåáþt´¿OüÂ$OŽ^ÏþªZ?×N·ñ+-¾Æû¿õäþåä?ì|ßþ}Óéöq?Ýÿ¨_O–žãý¥÷×þþ¯øÑý¥÷×þþ¯ø×†ÂëøCÿ@™ðùø_ÿ%ðºþÿÐ&_ü>~ÿçIKýsáùý_ÿÂyÔoõoAcç?óîŸN˜ŸîÿÔ7õeÙÛÜÿ´b3~ÔÄà¯îó_ ÿÂëøEÿ@™Gý×? _„•î¿ ?k_þ’ûQ+4wº†áÿ }‚øgT·²Ó<;­xÓÄp5k‹½&]WQ½×|â[Ë›Èô}Î)t½*ßIWÓ'ÔõO“ã^%Èó,ƒÀNµLEj¸iF©W§RIº5ëÊ/•6œ£>Gu'ËÕÉrÌʆcF¾"*j£n>Ö-9Ñ5üZT“\ÒŠ´\¥gwXÉÇô{û.?ö6ÿ ?²ãÿgóoð¯áàŸ¿çÇþ<)ÿ˪?áàŸ¿çÇþ<)ÿ˪üSÙ?ùó?üÿò?Õß•¾âòïø¯/ø™öö\ìþmþeÇþÏæßá_ÿÃÁ> Ï;üxSÿ—TÃÁ> Ï;üxSÿ—T{'ÿ>gÿ€¿þGú»ò±ywüW—üÇÌû û.?ö6ÿ ?²ãÿgóoð¯áàŸ¿çÇþ<)ÿ˪?áàŸ¿çÇþ<)ÿ˪=“ÿŸ3ÿÀ_ÿ#ý]ùX¼»þ+Ëþãæ}…ý—û?›…Ùqÿ³ù·øWÇ¿ððO‚ßóÎãÿžÿåÕððO‚ßóÎãÿžÿåÕÉÿÏ™ÿà/ÿ‘þ®ü¬^]ÿåÿñó>ÂþËýŸÍ¿Âì¸ÿÙüÛü+ãßøx'ÁoùçqÿƒÏ òêøx'ÁoùçqÿƒÏ òêdÿçÌÿðÿÈÿW~V/.ÿŠòÿøùŸaeÇþÏæßáGö\ìþmþñïü<à·üó¸ÿÁç…?ùuGü<à·üó¸ÿÁç…?ùuG²óæø ÿä«¿+—ÅyÀü|ϰ¿²ãÿgóoð£û.?ö6ÿ ø÷þ ð[þyÜàóŸüº£þ ð[þyÜàóŸüº£Ù?ùó?üÿò?Õß•‹Ë¿â¼¿à~>gØ_Ùqÿ³ù·øQý—û?›…|{ÿø-ÿ<î?ðyáOþ]Qÿø-ÿ<î?ðyáOþ]QìŸüùŸþÿùêïÊÅåßñ^_ð?3ì/ì¸ÿÙüÛü(þËýŸÍ¿Â¾=ÿ‡‚|ÿžwø<ð§ÿ.¨ÿ‡‚|ÿžwø<ð§ÿ.¨öOþ|Ïÿüõwåbòïø¯/ø™öö\ìþmþeÇþÏæßá_ÿÃÁ> Ï;üxSÿ—TÃÁ> Ï;üxSÿ—T{'ÿ>gÿ€¿þGú»ò±ywüW—üÇÌû û.?ö6ÿ ?²ãÿgóoð¯áàŸ¿çÇþ<)ÿ˪?áàŸ¿çÇþ<)ÿ˪=“ÿŸ3ÿÀ_ÿ#ý]ùX¼»þ+Ëþãæ}…ý—û?›…|5ñÿYÑ­õŠ:w‰u—Ð|3c¤Û¶¿¬¯ˆîü"4]þæ‡.©ªiú†•¨x\XXµÅáñ ާ§^è©ÚßÙÍmÄ}ü<à·üó¸ÿÁç…?ùu_+üFý¥~x£Åº¿‰4ý&Úö]Y­ZævøÇ¡xA&vXZnÑÛÀÄ3Ûiö¶v3ϸ-õ lΤš~˜÷’YA÷\ŒÀ噾&¾`*s˪Q¥&èÁ*别‡¦—³£Qi77)G–<¼Ò‡‡ŸÑÄâ0”¡A9J8˜ÎIF¥OqR«¹h¤ïyÅë]%v¤ÒŸ¿°w‹~ ^è><ðæ©xƒÇ?²¿„5«­öxø£ñÖ}Çz]Éc7‡,´c ÃÄ>ðé†[ ʼnðÍÞœöË ZøzÞ$¼ðW¯Úç’ãSñ„’1f_ˆÿ œŸ.Ûâ7Š-¢_¢Å(€µ|%¥üZøQ¦Zi=§‚4=7Ãú-µ†§èšgíáÛ=*ÃHÓa†ÖÏJ°Ól~éðÚiÖÖpEgmge-’[["Ejöá#)îö•øG ×òÇ®‰_RÕõ­zòCwá»d}SÄZµî½«µµ©ñEëZÙSQ¼û¤—·³ZÙyóÞÞMÜËõ_#†p8ì%|dñQå§8B4ÿw^›º—_oJ“•ÒzÙ+>ehßèjüöý¸?Õø{ýý'ÿAñm} ÿ 9ðŸþƒIÿƒ ÿòþ¾?ýª¾#øOâ Žuá­RÖìÛ]éÐKl/tÙîÔCˆ¤’&Âú÷ãí°Gæ³.%mŒ£(_óg$ùlþÒî}‰ÿÙuima-addons-2.3.1/SimpleServer/src/docbook/images/simpleServerUserGuide/sample-project-layout.jpg0000644000175000017500000030365411625126446033167 0ustar drazzibdrazzibÿØÿàJFIFÿÛCÿÛCÿÀwo"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þñx;Zð½ýŸÃ/\jz¯ÃýkÅšKkšŒz‡ô¹/|™Ò°éÑuº(Mÿš÷”ùT}›\Í»+>eñ_c7RÓTìîÚ×’M%k·Î—*Ýï­ÒܯûzþØ“~Í:–aqã}káý”Þ‡\Ó¯tOè¾'ºñ±©ê!Ò„yâ+M[O‡Nð¬úFw«éz]¦¡¨ÚxŽ9›ÄºŠó÷ß²¯íŸÅoßþ übðþ©ð÷Yñ„^´°ÕWÃ>0ŸÂ>$¹ñÇÅ+à÷€¥¶ÖáƒKÓ5Ÿø£Ä^¿°Ñ#¼¾Ó†‰ã3Y°Öîôý3Åéášি4¿ßð§l>*¦•ã†~<ðÆ_éúïÅŸ|Ô|¡||³‡àU·Â›½KÇÞ8øU®ü?øu©ÿÂ1kñÏâ:6³£j¿Ûñé>5·ð×|}y ø/á´_Aû\|=ñÎià_~Ý×_õOèº_ƒ5O‡Þð—ìuã ;â=õÕž„ü/ðFÇà/ŽoüHXÙxÃX¾¼›LÑ´õ×uso-ÏÖdqáðÙ¦A”c©åR̲Éføüæ¥E–brÜ,3Ü6h¸FX ›‰XÅV¦WS4Žm^¦^±Y}(eتšápß+˜ç¹_â±³Í3jØìv7 Œ†S–eØzÕ]Q¼²x'œP–7ØÏž¤1ñ¥ˆÂC ˆ©ƒÅ(UÁΦÌ_ïŸì×ãoøÿá߈õßjÚÚ­‡ÇïÚ¿Á6—_bÓì<¯ |4ý©~1ü9ðN™äi––VÒbø3ºöÙ!}CRûöŽ­wªÝ^ß\{©â_hš‡‡´k_Ñ4WÅÚΉá=3TÕll5ë6z6§â+½#ÃÖWsÅs­jv¾Ñ5væÃMŽæê HÔõ9b[+ ©âù³öJøuñKáwÀÈ|7ñ"ýbÔêûQðW4¿ | ðýçÂ/Ë£iVºÃi“à ð£XñŸ{e©øW›ÃžѵÏ^x'Jñ/|;ám7âŠÛ¡¾xïKøm©ÁF¼aâ# ø»ûö„ñ·ü?áOŠ>#üEÔÿdÛRX~ÈŸµV“¯·ìñâ_üLÕ>iÈß³/Ä¿‰ÿ²oĈp|:Õ¾è_ uý?Jø_£üöaBŒó¬ï †­ƒ<%Jµè¼$ï…­N¶'G WÙÓ£õL:¢èÔ¯xÆU±}<,eMZøO§Ë¨ÖyFµzŽ5£KF¼qN¤qõ((ά£j“­ˆ^Zµ0”±RÂÓÇã¿8[•ÅxŸâ'ƒ¼â‡žñ&±ý›¯|Uñ6£àïØÿgê—ŸÛÞ#Ò|âêwÚ¬,n¬ô¿³øGÁÞ$Õ¾Ù­\iÖÿg}‚ ©5;Ë +¯ç'ö øuûK~ÎÞý¦ü}à_‹ÿ·Íž…à?~Ó¾ðÆ¿¯üfý¡¾#i¾ø©ÿÁ;oþ0Ûø¯L>+ÔüO·w£þÖÉ4Ÿ¾.ëx‡ÆÞñHàoÃÿhþ‚Ïá|8>0ð—íIâOk^5ý„ínsáž“¡ëº¿Á{ÿÛÃÿµMçŽ|%ûdKûþÞš?мWàÝ þ m¡üJð§ÃZçÅ¿³6ƒ¥ÍáoÙŽûâ}ä^ð!Óµ >!Æ<÷NQÃ,D¥JvÉ0¹ÍjTjNs ±˜:xêz­Ñ‹¥jU#„«Z¤"£šµ¥N¼9±1ê£lâœã‡zøºj˜«Âú¶&†Ô—³UT¥ ø…Ž­†§9TŽK†ÅãeRÖ _ú‰¢¿ ÿàžþýªÛá·Ç;?‡µ§Œï¼Uªß|,Ô<7iûjÿÁ8»¼ñuß~6]ü9ÿ‚‡|2ð€>?íQð¯Nñ?¿ƒ±ç‹þ#i_þ4]h?³Îñ6óáÇÏø&_íKð¿ö€ñwLúD> °øó¬øWã‹jj–+ê¾Ö—<°ñ«Nu$éS©7‡ÃW©UÖjXz9VV«W›bkP£&×ÂRÆVÅ`°˜“ ­SX¹R‡×ð˜:¾ÖJÅU«O÷´Ru^a B”Ñ…\]LeWMrá0ØÌvú–¢¿b¯ƒ¿|]ñ/ྒྷãÏÚCöÒø£ð;ÂzGíãhYø]ÿ-ý†´Ý7ÆZG?dCᯀ>#¯í™ñ·â_íQñsM´¿_‹^*ðÍÏÄß^#ðŒ¼?â_ü3¶Ñ5_†ž½ð•„Ÿ<)ûy§ÀŸ>ðWŠ¿h­7Xý–4 þÏ>ñœ6|wâoŽß ~Øß5ß…Þñ‡À¿Œð4Ÿü=ð+öšøÅãß‹:t_¯>økÆ´x[ÁšW†õï§Œ|áï…þ ñü¡b#= .!ûI¬T'Z4cNQÄû5ŽY}<-:å•\Û^Ÿªa!þÅ‹Œ0ÒÃfµcÃÉå {EŒQtï…£‹›—µ‹¤êa°œw<ê/v8hÆ• Uå|]ÕªQx'<5T~ÈÖ$Þ%ð忈´ÿ\kú$,Õ´}WÄZW…æÕlbñ§áýóHÓµÍsOÑuÔ¯4}PñcªêvÖÒYiךޑky<3êVI7ò«ð«Ã¶¯ü*O—ÿkßÛ›Áÿuï‡>°øùའþ ¿ÿsñ•ç‡>$ÿÂôø_µß‡^9ÿ†ÄñßÃ/hƒH‰Õ¬¿à‘z§ìø×_<ñ‹áUŽ¢|)ðU—…~Åý~kºÇ/ø'ŸÆŸ‹_ n?ÇÂÿÚûá߆¿´>;ÁA>7éžñ­ñëáß‹>Ú|~Õ|k |0ø©€üuðâÃÅúî‹7íÕðsÃi¤Ûh>ðÅmNÿƾ øi=Þ´¨FupQ–' èÖ¯ˆÃâªR¨å S†]™×ÂË ‰”!ƒÇÓÍs . ‘¼6"SÍ*bkP© ¿J•*ûbàððÆÊœ£Uá±5pÔã&èÔš¢°uª×¯BkÛá¨að•qUsJžWìðRÄÂTó<©ýQEÎ@QEQEQEQEQEQEQEQEQEQEQEQEQEQEW'à)­î< à¹ìàÒm­'ðŸ‡&µ¶Ð-t» ÞÞMÍàƒE²ÐõÏè–zLQ2ǧZèþ%ñ—of°Å§ëšµ¢CqÖW'à+µøÁw_iûoÚ|'á˶}»ûOí~vg'Ú´¿á(ñ¿öŸ»Íûwü&ž/û^ÿ´ÂQ¯ùŸÚ×rþ8ÿ†_œÑú¯ÊGY\õ¶«4Þ+Ö´FšÑ­ôÿxcUŠÝÛ¢›YÔ¼]i<×-¿s©›IÓB·K!wámÅf¶¿:v¿â[†Õ4ï t5ç·®ÜøÇÄZ·¤é÷pxOÂ÷±gyâ x~Û'ÄÛ[ •Ðì¾#i2ØîÖàÒ®ï/…ô?íí/EÔülÔîm ðÎ¥k|tÛO‡ßn£5)<[woÜ6³xB9¯›Jš¦Ð¼Kpš| â½.ÛÁŸ›?ôûYxwOÒ´íCHðg´øÆ:WŒ ÓünšïÄ-CÀÞ*Ò<]c&‘sð÷âG›ø>Ëw¢[XÛj:¾¥­·‹¥¸_xÓÁ÷Þø]ñSZüoÄß%Àü·õ|Xü'ØÅZ«•XNT©R§N…lZ5';T¡^UªV…YF”)Â.“¥*“Ui¹*_{ü"ý®¿fÛM{á¢øÇQŸÄ:ņÔþ|høñš'¾ü:øˆŸ¼iªÇ'¼oàOøzÿZÕtT»ðÁÕîüS¥Øø’×Gñß„¼1âkxkBûIUUUUBª€ªªUP0@À`~~±}ïÂÚkÂ5ðGŽ5¯ø{á†ñ»Mø¨êׯí3FÓæøç©Ûxa[^øõã­ Å~1¶Öåð ¾ðÕLJí¼bø³ñUõšÂ?kýŸíÕûZ|Nø7ûnüøk¤~Ô–>ðŽ¿ |]öløG«þÌ—ÿ´_ÄOøçâçŠt_ø»Çÿ¿i/‡ƒÇ??f{oødéÚ—Œ¿cŽøÙðoY°ñ6¿âƒ_ü30Ö<õ\ ÅÕ¸§‡ègº„qxü^Qa*àhâèaðòÄSÄÒ§‰Åby¡WÙV¡°¯:sÄStÒƒRQóø¯ Áe–' •â'ˆ£ƒËéckÓÄU„±g_ ,ðÉû 4UEN¦ÉZg<3R‹©RTiÔý½¢¿bý¡¾+xSàì?âÚ§þ [®~Ì^ý§>Ëñ·âíq¬økö/øW¥hŸ$øoðzëÁß³5Œÿ<_ð?Á>ñŸˆ>'|SX~"øsÇŸ|S¬x7VÓ¼ñ Fð¦?…l¿y´I­î4]"âÓYÿ„ŽÖ}/OšÛÄ>n›?öõ¼¶‘<:ÏŸ£[YèójFË}æé6všlž~ûh-LQ'èu°õ(TÅÒ¨áí0X¹à«Æ3Stñ4§Z•zU9R­‡«MGìg‰¦©ã°QÅe¸Œ66·ÇsŬ4¢Ü£ŠÃËF\²‚•xÆ´PucR3„ùè*°¡)<.*x|u*ØZz”QE`PQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW'à/íøA|ý¯ÿ!oøDü9ý©ÿ#Oü„±ìþÛÿ#ÇüV¿ñóæÿÈáÿOý ñ6û]u•Éø ßìžð]¯Ù¾Åöo ørßìaþÌû'“£ÙÇöoìßøEüýämò¾Ãÿ_„>ɳìÿð‹è_öM¤¿Ž?á—çô~«ò‘ÖW'gý£ÿ ׈üßùÿÂ'࿱ÈÓÿ!íÿjÇßüQ_ñíý‘ÿ"ÿüU?ô8ħþzãÿh KQѾülÖ4{ûÝ+VÒ¾üHÔ´½SMºžÇQÓuë7V7öÖ²Esg{gsW·VòÇ=¼ñÇ42$ˆ¬? |MãŸ/í]ûYxqÿe?Ù ÀŸ³wƒÿgkÿþ*øÅwÑøçž6÷íö_‰o`ýŠ| ÚÇÇoAá?€ÇâÇÂ_ø^¶ºìǤéÿ|wð÷âÄÍoâ>«a'M4«ò8óëS—݇:O•+ÍóG•Zw½ŸÂïmÌçV4ô“JëKÉ+ê´WÝùyŸÑ•|áÿ sû"Ñ«þÎøcþó/]ÆY¯§øQñbÛÆ:íçÂïËðóâ'ø§ðëÆÚÕ—ÄŸ‡ž>ñÔz‡üöÿõ±ñdž4‹o ø‹AkxõÓuëídÚ¦¬|¤¯Ž?O‡Ÿà¡ñG€¼i«ü}ÿ‚‚xªëÂ^%ð‹õx«_Ò¼GðÿÄ·~ÕôívçÂ'†Ûâ—…õOø#Z¸±mÄI&q¯øzêòÒUÓ¾Û"Eâæ8ïðЂã÷-Ë1\µç—á1ùmmJÐQ§Í:N½zNŒ*UŒiN|¼¼Ð‹¼ÜycåfÙÏd³Á¾àN8âì6:¤¡ŽÅðvYžfT²÷†hæ'Ëqñ§YÑÅûlDéKɈTÜ*“_ÚÁGàíßíôïV~Òþx{SÕt{-ÀÞµð·†ôBK“­êPéú–¥YÚG©O¬ }n¬ì’ÓY‹X]µžòßSŽòãÕëñ þ “ñ²Gñþ¥àM~ÛAð俼cãkhº>¹á? xkǺ2ɬø«á߃ô]mîZþ/ _ëß>¦¥íáÔ4ïÙÖöêÓQÖl­%¹´_ø+wíC㟆:ïÂÿ‡ßõÚ5~ |9ð‡‹ÿkûÝöoø?ûGü[½ñõïÂ}KIÒþü ø°?goøåü#ð¿ã¾³{ã»KTø þøw}/€%‡Y¾¸´´¼…?<ð‹jq¿àqù­£.Ï0Þ{¹ö(«l« á|^9cjå¯Z¤j`ëðöÉOR%ìcZHª”ê)ÐmøñÆ¿·—ìýñ§öÈøºßÿd_ø›àŸì}û7|Rø±r?fо+xWÂÞ:ý±u«_†ß<"k?jüAsáÛK‹9þ-x“Çÿôïí©!ºàÒX£Ú·¸~ÌŸ¶_íÉû@~Ô~!·_Ù¢Þßö1°øÇûB|¼ñõµ‡Á [¿_| ñ'ügãM[â]§íå⯊¾8¾ñ‡Œ|•ð’ãþ ýð—Qð\Ÿ-¤›â?ˆ´/¿‰þ#*tZ±§ E)añXŸiUû*q§„7>{N×]`°ÞÒöøˆª¾¾‰º·£ õjFÔèÖÁáãÊã:•ëâðO0T¨Ó§)ʬèàáSYSæQ¦¡Eµ˜JX°”WäŸÅÙŸÀ÷ðP_‡3Ïñ#öɇFñwÀ¿Ú㟉< áoÛóöëðÏ€uˆ?>'þÎ6~›Kø_áŸÚ3Hø}£x~ËOñ§Š4ïøWZ†´Ï‡z­¶°öš·…¯¡‚Í-þhÓࣿ¶lúÀI%ý’|O{ûiü8ø5ñà_ü">ø«uá¿ÙÏÃÿiÿÙëàŽ¹à¯ž#/åøù¯CáÚ3O¿ð¯|¢~Î:~§ã_…^9Ñï<ŸªA?†£N®9e”¨ÃŸšT–†+ŬÃ<Ë©ac‰¬èSçÄO†sü]*µ• Úßâe—ì·©ê߬¾)|:ø}®xWÁ?<%á_‡ÿþ~ÛŸ ¿b-GâÇÅñÅ¿\ø‹á7‹õ?Š:oÆ3ðÃDÔ|â/‡šw‡/>ÏñŸâ Lj`ø¥áýŸÚ÷öÔý¹?dÛ¬´«Ï„Ÿ´Š~|>ã_ím?ÿØþo…Ÿ´o…^&ñ†µaðîK_üoÿ‚¤øVçáž§âMÁt0~øsöÖñŠk>ÿ„£PøM¡Ùj>ðŒj…9Wx7FŽ;‰ÂÑÄÍÚŒj`ñx¬)×åæ­‡¥Aáe^¥ZÔ¡B­)]ÔUiRΣtãŒn2•LOB1n¤¨ágÓ•½†"ukâဣ5jÒ¯Ž„¨QSU0Õ+þåÑ_¿²½ñóÄ´ü!ñn» üÑ>|5ðÿƒ4/Œÿ¯µˆ þ6j^ðV¹ðOÄ÷úGˆ4…×­|GšR”2ä£ÉˆÌò¬·4£‡ªªZŒ3<ºž>•ñ—Àˆ–ßð¬>.ü0øë©ü¸ðÇŒ¿m¿‹ß¶Ùñÿõƒ¾ý¢,¬>ü~ý¦!ðÏÆßˆKð«Ä‹â cáöµàÏ jÞ_ø¹ô¯ Éà];Mñnµó_ìâO7įÙOÅz§Äß‹¾3ñí‹ûxßö“ý¦|!ñ ã/Ĉ~ðoÆíÇ?³ðÒîþ|6ø…â¯蟳ö‹«ñ‹âÿ¤øuðƒKð‚­ìü!¤hú÷†ïµéZwE:®*Ž2\¸Œ'ýÿj Zm7âÿ‰íÿjdý¥:øgáe¿‡~*^h?´ßí û<¥¿ƒ-þ<ÁDfŸþÍ~ñ ý5-rÏÆh·*øwRñãhZ¾…w7ëY~,}½ÿø-¡øßÂ_ ~ \x÷ö–ðŠ?á|þÊÿ .SàŸíûV~Ïš-ׂ¾&þÒ?¼%ã}/Yð¯ÀO¼®êº¯‡?ø{ñ‹ÄÞ<ðÃ_k§â·…_[Óm|!æß ?oÏÛ¿Qƒá‡‹¾$YþÉúŸƒ¼AáÏø'ÏÄßøwá÷ÃOŒzO‹®ü#û{x»Xø_Ãï ëZ÷Ưézwоx£@›Çâ&§áýoLø©¢jð|:_† µ þ%ë“J?X ±t9¥ƒ–;(ËÕzŠœ1õ<6+(…Z~ÒsÖ²Ün3”©ûZXzㆯV”*``«Fxe%YGÚCS1:2u/F„ªÐ®¨óBJ²§Ž¢ð *œg:ó§Z1ú“ž*¾WãïígûiÝ~ξ8øoÅŸüUãÚëPðcþÈ¿³÷¿ÙÅßüeá¹uÄß|OðÿâW~ ÁD¿fß…|GáO„¾×&×üu­ø·öJð¦âOëðÙèÞ'×5 |?½æfÚ_ö­ý¦?hØÅÚ—~ü)ÒüñF½á ¼ ûZø§áß‚õ׿k¿ j ©~Ò:gÃ-?Wñ§„lüoñ:ÏÆ>0Óô¡B­lE,< èÔž'†«¼¼Øy`òLÓ;ÄT|ŽpÄQÃÑÊåC<%Jò¥WC’”¬MyF„e$Ýdè,FT£>\U9cðù}7OÚF¢ëεj˜g‹†a‚Ƨ8K UC÷ŠøÇ´¯Æ? þÐZìéi£ü=ŸÅ¾6ø›ð7Vø#¨^èÞ"M?Pýž5]×hŸÛÚxºkÍ[‭>|]²Ñuý2?xONÖ>%~ÏÖ:÷‡µs«¿ˆþÿ‚z~Ò^8Óu}âïíŠÖÞ Õ?j¯ÙËâGíWÅ=Söÿø¥ñoáo<ð³Å>ox7Ç?³WĆ?þ~ÆÏðƒLø­àÿ¶§ð§Ã¾5’ôø3ÅV>,ëâ›Å³ÂÇësŒi5i,ZJ\ÔêJ¶WRUhÒ£ˆ¥Ma3,-lE EH,nYÂáÖ*¼!N¦Ó£QFjœ]Zôêåñž n¬hæ3¯=iAFUoR4aZJU~¯‹Àc1 Ça1U¿z¨¯Ãߎz׉µ¿Žÿ~'ßüBøŸoâOƒÿ·?ì=û/|*øWañwâ…ðCâìûûAxköcO‹:_ÿg¥ñB|øÁyâ»oŸ.SÇþ6ø}âoéËàMNðgˆt+ßYËcö7ü‡Àžøað?âGÃ ð§ÃÏxCö¶ý°´? ø#ÀÞÒ<%á è–_´_Ä4³Ñü;á­ÏOÑ´M.Ñ>Km?M²¶´~X¡AÅ<<z®Ú‚T«N0R…IsÑ£Ã8×N§$ÿrÞ_ŹLå ‰b(ã©æX*øzpÂáñxÓMa£†© ´1²ÊIª”£(¬Ë/ϱ©Q©R¤©Ó©ÃøŠ¬ã >!Vƒ¡^Xœ6?„ûòŠ(¨3 (¢€ (¢€ (¢€ (¢€ (¢€ â>ºIðßáô‰mif’x#ÂŽ––¾Ô¬mQ´[k-GÁöW„¯í Em{ám/MðåÔ*“è–zd–¶ñöõÉø ãí~ð]×Ú~ÛöŸ ørãíŸnþÓû_£ÙÉöŸí/øJ*m?\ÑÛLÒcñ¾™¬=ÞŠ êz™ƒCc¤é‡Â3^ÃÅÞW]ñ·ÄZÇ„> |]ñg‡o?³üAá†>ñ…¨}žÖïì:Æ‹áM[RÓ/>Ë}Í•ÏÙ¯m ›ì÷–׳lòî –&xÛó/ÇüCám_âN‹¡~Ë?·G×ÁzwÄû ~Ñ~4ý«~øÃà“ê^Ðøj/¾[ø§Âþ Ö¬¾'xûÆ0h§V×~!ê~)°ÔVñ®»e¯jÉ®üPø„n.|Nš¶±¥Mâ »{‹8l´û{/¥ ðφíuý[Åv¾Ðí¼Q¯éz>‡®ø’ &ÂZÑ|;>±uáýVÖ#·]GRÒô+Ÿø‚ãGÓï.f´Ó'×5‰¬¡‚MNõ§ü†ÿ‚`üp±×õßü?Šôm/ÆÞÑ>-xC±øÅ|fÞFÓ¼3á k^½†ÏSÔ|eáïüBøsàDö°Ëgâ?†~/·¾°Ó.ìæŠOhý¬~1|qð7Å|øyñ6ßÁþ#øÿð#ÀZ_ìÃw/ƒ<+â;‡_ìþ:Ø|(øÃñ+ BÃP¸ñ”ðïÇ‚~.Š4½WÂ:Bø/R¹¿OìýkU¶Ï<âL§Š8.žg€ál¯†s\^uÄY6Ã9ŒéT⮩ŒÉqøzÃ`ðQÌjã0=‡þÊ«‰£K‰À<¯/’…uG ѸߘÑΤó÷1Î0u2Ü£7Ëóœþ¦;ë52<ö¾Oˆ¥Š–#„¥‚Äf¸œÃ6„Òú§Õ³L}HóS¨çê¿ ÿà_±gÁŒ>!øûà_Ù·à–Ÿñ‡T׬5_ üE~ÚxÓá6¦|(ð¯Á›/ü ñvà+ÅøyoàŸ }’ éÚÌ–°Éâ/ÛÃ$zF¯ý—oÞxcö(ý|oãûOþÉ?³'„­~,iÞ,Ñþ)Ûxcà/½ßâ^‘ãÓb|s¥øþ+–‘øËNñ¡Ó4ÓâË.¥mâ#§Xb+ϲ[ùšž"ÿ‚™|Nð‡âŸÃ¯|Z¹ñÝ·ìÃð'À,¼ ñ2öÛAý¡õ€~:ý©~=x£Æ?³7ì÷ûQþѶÚ=¯Ã}oÀÞ¹±ð·À¯‰6z/Œ|3¦Û7†ü#áÝGâăÓÿà£ß´¦—®üwý§eý—üKkðáŸìŸð#âÇÇ~)ü`ø⟄:…>)~×^ø©â߀¿ ¾*~Í:O‹þ#ø‹Å^øz¾1ðµ·Å¯þÉ—ÿ|¤ü;¸×/¼9ªê1øÃ²Ï 9Ô•Ζ*O"…jrsÃÇ‹ «TŒ"òì~.|ðìUð_öÝøËâcöŒ‡^(´øñKø³ªøÓ <¦üø•¢øÿâW€¬þ ø¡Ñ|añáO„#üoŽ—º~±ã¯‚—¼+áÿ |<ñöû?ø¾ëJÖô?^2ñ^‡­êžÑõß[é÷ZŸˆtŽ»Å_´gü+ð¯þ uã[[Öu¿føºÓá¼ ðö½áÿh²¯Á/‰«¥èúƹàhêGÅÞ-ñ.«g¬øãÁ~?ŠÞ}I-o´WE±³ÑâÖꬡÎ…L6Œ÷¯Jt©ás¬–Ž# à¿{‡Å,Ë6Ëó‡« M¨¬lš¨ðβþ"§FêpÆ×ÂÆš¿5 J©Ò† ëG‡Œ²¬Ã M)UŒjÑ©BÑ«ÉöN§ðàv·¤êº³ðkáN¯¡kºÄ/ ëz.§ðïÂúN±á‹zÔ~$ø­á½WNºÑå³Ô4‰¾"Š-{âw Ú5¨ãÕ.ÁD´„>_ÚFÿUøÅâï|ñ·íAñsAøqâ øH<3ð÷áÆ¡ð×à׊|#àéßükw¡6…á=Uøeá}PC÷ŸÚ‹þ gñGöQ·ðü'³·ÃÏø‰¼1©|Iøõð÷áGÅ/Ú“ã'> |(o^é~ñÑø;ÿüø…ðóL_øKKÖõ8u?Ú'â7ì¿ðºOx_Æ^ ðÇÅoøkÁþ!ø•a4èTúÎ 4¢Ö#V• ­ìj:Ó©­ q•NIPœ*Gˆš¨é:*·ÖjrCF¥r¬¥5åV5%Bœq¸©¥VL5 ôð5ñЧMTöØzµ¡K±ãRlEà¡:˜Œ%jT¿P´Ï„ß ôOˆž#ø½£|4ø¤|Yñ†¢øOÅ¿4ÏørÃâ'Š|-á·–OøkÄ~5µÓbñ.· hO4š.©êwZv–óJö6Ð4ŽM—øgðÞKOˆ:|Ÿ¼öînï>*Ø¿…4´ø›wá}+À÷×_mšÀÃã;›ÏhZ'„.çñjRÜx_GÒ¼?3>“§ÚZCùUã_ø)O|á(~<|@ø#¬x3à_‡>0þÕ^ Ò!øyñWÃþ>ø•ñkLý•þþ׌nu߆º¿Àø-4M#Ä—Ÿü=ðÏHð·Æ=Æ:§‰|DøÇQð'y¢|Látÿø+OÇy>x“ÅZ÷ìã/x‡Eø‹à ?‹> iŸ·ŸÂ?Ùcžñ·†¾!x“Tø«ñƒã‡Ç?ø&g‹_¼ðá~_éß|e£þËž?ø7ðÚoü-Ö<ñ‹ÂÞñŠ|EàL½Š•*´ù#쾫Mס(¨¥†Í±ô’¥ZŒ’vÅæ5éφœ9Ö!ʶ*œe “Žð§^R¥w7SìêP© {J¹E ŽJS~Ùá¨áãKR‹œ*ÚŽ:µ)¬ýœgŸ…žðƒ>üø3ðçÁÿ 5ýgÅ |)à?…Þð‡†¾x§ÄZˆ´Ÿx—À:‡ô=;Kðv¿®é~/ñf›¬ë>µÓµSOñGˆ¬ïng·Öõ(îlü=ýŸ¾|#ñgÄŸü(ø%ð‹áŽ~2ëQø“âÿ>ü6ðo‚üYñWÄPÞjú„Z÷ÄŸøoEÓuëQ_ëúõôz§‰ï5Kä¼Öõ{•œM©^<Ú_>!ÂÚøCð¿â—•áh?ábøÂ>7ò| ãÝ⟂£ÿ„£A±ÖvøCâg‡ ¶Ð> ø`}³þ$>5Ñ­mtÏéeÖlím ½H#ôºÞºÄRÄW…yTXˆ{\-w)¹NÊ­7ZŒ¦¥.h:¸zR”y¥ N)jéÁ®Zu!V…?f©V§F )V¯F~ÊIrÊ1XаæŠ:˜ŠÒ´gV£—Ë^ ý”ü3à¯?~:7üwâäø—ã ?‰6 ¼e¡|Õ>ü/ø¡ÃO üÔ>#ü+×,¾éŸˆ^$Ó|aànûUø øgà÷ƒüáŸ6©æ—à¨î¼6éu§¦–šgÚ´VTç*RÁNœœ'–áã…ÀÔO÷˜|<0òÂS¥ Žóq£†’¡CšRt)R¡ .ÃaÕ=y¤¥‰’”¢ñnø…J«ïÓ«$ã£Ô­MV«¨ÂµyU¯V3«^´êxµû)þ˾$ø­iñßÄ_³oÀ=ã……¦ƒaañ—Zø;ðóUø­ecá[ûSÃvŸ/¼;?‹í­<9©ézn£ Ûì$:=þcy§¥½Å¥¼‘Öðgìû(ü8ø‡â‹ß?f/ÙëÀ |7ð¿Ä?ø·P·ñ­ÿŠ%Ö|E}kâÿ[^kzާs©ÜÛø£ÄPÍtñëz’Üý EL?wËìÿwÊñ.<žï+ÆÉKãËk<\’–%­kÉ'W¤Èi8J›IÂ^ÁJ ^XX:xe(½Õé·N…ÓöPnùbì|×ñ#ö2ý¾2Eáh>/~Ê?³_ÅH| ­x£Äž ‡âGÀ¿…þ8‹Áþ"ñƺ¾)ñ®½áhüOámQjp—5ᜒ”œ¤¹¤éº.RÖN“s“¤Û»tܪԓ…ù[©6Õç+øÖ½û9þÏ~)ø¹áÏÚÄÿ> xãǃ´;¯ xGãf½ð¿Á¿ÅÏ xjú×[±½ð÷‡>$jÇŒ´=òÇľ#³ºÒtÍfÖÂâ×_Öíæ·xu[äŸf×à¯Á»{;/„¿ ìí4ˇzV›kkà? [Ûéú_ R}sá6›cZREiað¿Z¹¹Ö>ÙÀ±Ûø'T¸ŸPðÔzeܲLÞ™E” £IÆ0œ*B1n*5)׫‰§R)YFpÄׯˆ„•¥õªÕ‹U*NLŸ¾Ü§ïÊTÕJ~ót£B4›wnœaEAûª0„R´R_"ëðOÏØ/Ä'â9×ÿbOÙ\?üAgâÏ‹§Xý›> jgâ§Š´íSR×4ÿüG7¾ œøãÄ:Ö³«ëzωÿµ5mSUÔµ.Rîúêi}JÙ»öv¶‹áœÿ> AÁojþ/ø9 ? | _ ¼Y¯½óë¾(øghJžñ¶úž¤ú¾·áeÒµ-Iõ æ¼¹˜ÝÜ=¢ŠˆF4átãSL=hÓ‚Q„kae…«Å(ª˜g¼=D”¨¸ÅÓqiYÔn¬çR«u'R5£Ru=ùÎ8ˆÊˆÎR»”kÆRe&ÕXÊQš’m>vã¼ñV“ã«¿ øvëÆú…®ø_Bñ•Æ‹¦Ïâ­Ã>(¾Ðu?øwIñ ¶Í«éÚˆµ/ øcP×t‹;Ètý^ûÃz Þ¡oqq£éò[ùEì¯û0éz‡ÆM[Lýœ>iÚ§ím=Ÿí©Xü ø{i¨|v´¹‹R‚æ×ã%忇c¹øŸmq³«Ã<6“\ŠXµ]J9’úèKï4UŸ8Ê-ÆP§ZŒ%g 8ŠË^”Z³:ÕÒ¯Zš´jVJ¤Ô¦¹†§5kNJÕ(ÕV“Ò®þª×J”.ýŒ×½Nï‘Äñ_þÎ_|[ñ3ßµƒß çøýà j>øuñúãáÃÝ_ãOÃ]R²×lfÓ|ñÄ>Öuïéɉ¼@FmpÚ ÈÖµx5 *öÏUÔ­®è~έ?g?‡|?ƒâGÄ_‹—ú—Ž>!üEñ'Ä_Š©ðæø§ÅŸ¼g¬øçÄÚ†«kð—áߟ‡¶1c\»‹O±ð×€´ +Kíáh&™%¹›Þh¢2pçåvç§*.ú¨Òž%ã*š•ý”kâÚÄâU.O¬Ö…*•ý¤©Rp™þò4ã=cJtªS[%<>® ݭΰØJõðøXÏš8jU낦«TR(¢Š@QEQEQEQEQEÉø k‹ø.{È5kk¹ü'áÉ®­µû]RÇ]·¸“G³yàÖ¬µÍsÄúÝž­¬Ñê6ºÇ‰|Cª[Þ,Ñjæ­v“_Üu•Éø ßìžð]¯Ù¾Åöo ørßìaþÌû'“£ÙÇöoìßøEüýämò¾Ãÿ_„>ɳìÿð‹è_öM¤¿Ž?á—çô~«ò‘¿©iºv³§j>±aeªé:­•Ö›ªiz•¬Úv¥§_A%­õ†¡cu¶×–W–ÒËoukq\A$ÍÆì§æ;?ÙGàpñEâÜø{ĺ­­•†ƒ¨®—¯øãã~·£ÝÜ\_ë«y³qâOˆ§‚¼g¦jØZZê ¹Ñî¾ÃiÍ☵-'ÅÚM¬?T×'go·Ç^#ºû6Ï;Â~ ·ûgØ|¿?ìÚÇdû7ö—ü"öŸkû'Úüß°ÿÂi¯ÿg}·íð‹øCûOû[ÆúF­ZvTêN NÒPœ¢Ÿ»-ÔZOçuó%Â2ø£rê¹’vw[];|¬Uø—à=+âŸÃˆ uÛÝWMÑ>#x'Å~Ö5{KmrÃJñ~…áýB÷F¹¿²Ôìmõ[[MFiôéïtÝBÒ+Èá’æÊîx$üÕ½ÿ‚S|,°…'Ÿö“ý¯]$»°²U²Ô¾ jS µ+ëm:ÝÞßNýîî#´Žâê)/ïäl4«¹Õ5K‹=2ÎòîÖ ü†ý¼?m­3ökúŸgý¡µûM~Î_<-á/³çˆþ-xz?Ǿ:ý•týsâ7 i7ÿ¯¯usó¹ÏðïU¥_:ʰ™…l%S¡S훥Nu"Ü#ìdœä¤ôo}O¦ÈøË‰8fl>IšÖÀPÄÖjÔ©ÒÃTU*¨()ÿ´Q«Ë.H¨¾WÒWNÊßJ|"ý>üñ¯è^6ø«¯kß ôÏéÚlž(Ôü qŠ'ñfµñ[½Õü`4O‡ú Åæ«e'Æ¿Xi¯¢Üè61i¶^·º±¼“Lš{ßSø×£|“âÁ|UðÖµâˆß õ?xËàÌþð¿Åêþº¾ðõ·‚&øBø1üâ­7Wø°t»ß xÀþñ‡<=£\¿‹ü?m©x?ÇšÔþÜ¿´_ÁO†¾;ðψ~=øGWñÇÃ|<Ðüs£x6?i÷úëêÞ+ð¯íñƾ)Õ´?Iá¶‹Løoðöfø§ãŸxS_¼MJðhKð׃|SñXø#÷/,à•“à³\·Ãì»"Ê3LV&Žu(bèbç€¯Ž£G*À¼V.žµ<[Ä<·‚ÂP­ ö50øZµT¡Fq—q>'8ÅQÌ8¯ŽÌéÊp3©B5þ¯‰«ÄÔ£z~ÅÒ–#Š«R“„•HU«F )Á/CÓþ þÁ>?ðò~ÎÚwþ&ø^ßÅß;™üñáÏ‹®ô»ßÙÅgðëâ7† ·ÃëÏxGÓ ð Æ£á×ï/à›²Ž­®ø{Ä^ Ó><ø¶ÿAð׆|kãoÛ/öËñ¾ñ¾ñWŠé~(ðÿ‚ìLþ'ñ†ôߊñV·¢iwÚo„F£â;7Nºôr\·‹rœŸUÈá™ÕÆÐ©§Ã˜\Ç„Ááð¸\&Q–ªÑÌ1Xš‘Åa0ô~­O ÐÃa²¸á¨B0øiÎ^~+•fÕqË¡¯„•ôñ?ÚS£Œž.XÜM\Ó”hQŠ­O‹¨ñU°®jجÂU+IVÄÖŠ=GSøiàkℾ+jºWÞ>ð†üaá?k׺“ Cñõß…ï<]Ž”/Š/u™|áØ¥ÖeÓdÖm¬l§Ólu ];SÕ­o¾oø%?ìÇyñ«Çõdø“/‚ñvŸãOˆú6¡§Ç?† í!ñG‡þ'ÇñÆö÷~ø“Køñ#âÆ“àKO|7·ñ§Â}bò-CÁM§x»ÇZWÇ_èzTúuÆáoøÖÇÄVÞ8ðß§†T°õð÷¥ËR2ÃUþ¨ÕÄažqSçä µ0õ©ã›µ:—Çàg+TÌð_YÊ´œiãpõÔÔ ª¼m Fræ–[YP© Â*J¤°ÕéÔÂÏ—š0x|u ÉRÂc•_övÿ‚{üø ã;ÿŠ7Z¿Ä_‰?eø“ñßâ.ƒ¨øÓâïÇOü4øyñËâ?Œüi¨?ÂÏÙ÷ÆŸükð7á?‰ô¿ øÂëáýß>øÂ&×ô;¯‰®4ëø¯E¾é<]ûþÌþ9ñÿňÞ#Ó>3ͪ|jµÖ-~+xKJý«¿jï |ñà×¾Yü%Õ/5x{ãŸÆ{À>*ñÂß‹²ø ÃÄÞ ø'ñ+ö]Ôµ­üà ücû0ülø¥ñsãOÁÍR×Wñ¯§ègâGˆt«Ÿ‰¾³ðïůøu~xÛÁ>&ñDá§R¤iV£)Rx|¦»£fàðø/íe–crêR¥xSQÇÂ2ÄP¥?ª×³©N¥z”ªªzT…Ju1—Œ¥:¸èK.hÅÔ©‰ÁSÌð˜Úꤡ)ÇC¥„¦âñ‘¤ý·Õi`] x†ßâLàÖ¼5ã_Ú3ö•ñ÷€¼:ÿï5›ß‹Z‡ÂŸ‡6ø½â|Ö¼u'ˆüCm¬ëÿü5àlézþ·£ZêÚF­¨Y\v?aÙ«ö‘ñlj~-ø[Çz­æ§à˜¾øŸKð§Ç¿ |ñÁ’ë—_‡~)ø áWÄïxâÅŽsâo]øa¾%xwÅW»Ö/îü;>™spò›ß¾3|Tøwû@~ÉŸ¼?à߇úÂ¿Ž¾<ñç‚|yã]cÅÞ#⇵_ üøñ;ÃÚ_„|eááËý?X¸ð(mkÆzÏÄ[{s¡Øü>×$ññG„øßÚâÇí§üIøOû?~Ì:¿Â|UøðïãÆ7ñ¯Ç?†þ1ø³à8<#ð.ïá?‡/üƒ| ñ‡àv½‰üg⯎ {Mãk#ÂÚ‡üM%Ï…ñ%¹ÓÄ:©6 K¦}û9|_µý ÿgïÿì´¯ì+_Œß ~|Q‡Dû\—ãF_xOIñ?öJßÍe¦Ë|šsjfÍ/eÓ´ù.ÖpöV!‚?Îû?ø,Ïìáyñã'Â>|LÕ~,üño…ü7Ão|GýŒ¾3xËÆ:¿Š¾9øcöx´ŽÃFøûY|M›á•ÆŸñÆÞ‡XÐÿhãð?ÅVZ>µ>¢ºíáÛxg¢¾­,ǔդêfU§,%l%8ýb¾2yf)[Ñö,.&«­B•?m(·WF<°«R9Brú¥+Çñ_à¯Æ/øø+Å>ÿ†u×ôInþ#ü'øññ+á…Þ‘¯øöƒðŠ4;ÂÊÒ¼Ggâ ºŽüâ_kÞ Öð>5ÿÁA4Ùçĵ-Çį†þ0µð_ìááÿÙïX/«x«öIøE¦ø¯Iøß®øïÃöß%×þ2ø.ÊÇÅ~9Ñ~2jÚGŒµˆþ |ñw‚Šü Œ:N£uáÏè¾±ðÃQ»ñæöÛ|AðøÉ>7ü ¿dÓŽ¯[ĺ0ñ“é!YΨž7¿Ûm§Gsz¶&Ø*3y¸RC«F¥’£R<µ#R½(Êõ0³«OJQ¨¨Ô¡^%(ÆTkEÊô§Ëœ*Ó©8MJ¥†®¤¶Tñ”éÕÃ9?±*Ô«P©O–£§^„ùTkRsë诛¼+âÿ5}GÅ>¿øc |3Ѿ!kž ‹Ã¾"ðŸ‹õŸx³JðG‹n¼'âÿÃã?øwHðmÍÝö™®§†´I~øÖ‡MÓ¯ïõКü¶~µâ/ŠzÌ2ü9ñT:o‰¼á'øÃ­|2ñΑãMÏF¾¾±º>%ð‡†¿»ðÃQIÒµ¿ˆ‹áh|m¼'skâ›ï†¾&ñþ‰­ø¿Â$Ö´-7Çš¸šÙð†üDÞ±Š NWŠ›„0ê§'´•Z)Ÿ3‚çtÕÔ}£—/3½ýšN«\œÎj•åí5;:u£¬¨ÕPúêŠø3áÏíÁðá×á€SÞ诊µÛÓàfâŸxViuKÛ¿ÃãÅôsᆭ¨êÚ¿Ã]/WÕ|[ iþ±ø‹7Å >öÎkñYj¾*ð'†ü'¬M¥‡Ò|G{i¬ønëZ÷ ϾÓ4+þ·ð?°°ÛOilšÔSØÇmmâ¡jßYÙg:‘§Gۻʛ¥í£È¹¥85VQP‚÷¥:‘£VTányÆœ¥ãÕ¨·WØ¿r§;§(Ô÷9%B5Nk{8RœáN¬çhR«%F¤£WÜ=–ŠøÇöýð†¼ðÖÿâî¨x7ÅÞ,øáøLŸÄÿ´X4­Ä˜í¼Y£é:ïÆQ¯xŸAÕîlµ»½#Ã^ ‹Æß,tÝ:(¼Eá=7SÕtMg·ñgíiø/㎽ðÓáç‹üI/Â-3â´^'»ŸÁW¾2ø}uc§ë~Ô¬m¾$Øø×Aº°šýuq§øÃCðeçˆ|7c{ªøNMbô–Ôw9Ó•H´Û§,Df✒xYÂt쮜*T…5%)U—²Œ]E(¨ƒçöKáu¥BÔý×)b`êÑI=ù©EÖm^1¡Ë^MQœ'/²(¯¼MûFËð¯Uñ/ˆþ*é~!ðï…/þx#Åþðަÿíõý\—ƳxÅZþ½gâ—ð4Qͪx›á½ìšæ±ñ ¼1¡C­ÜO«ëº&ŸÌËyûVG¤ø„hšÂ¿‹-¯jVÚ:OÃk ø /Zjwü^Ôo./¼K'Æ | ©iwš?ÂKPÓg°¾µÓ"µ“Mº¶ñˆ?á![m)5 S­)GØÂu`ꦥMÎ…Z”+F3ÔåJ­)F¢‹|ŠT§+S­FSq¼ùmyF””Z³å«C‰ƒmû±ýÆ&•Is5ËûÊnÕiU„>¼¢¾GÓ¿l/ ëo¡Úh? >0ë:ß‹%ð̾ ðôGôýSÅšŒ|'âÿøoÅvk¿4HÐõ+Àž'¢ñv«á½O½°Ž=SC±‚úÆæãÏdý¶¼¡k¾2ñŠ&Ö4¯ C§xÀ¼CqðßÁ¾!Ñþ'7‰þ8h¾?Ðuø¿Åþð&Ÿw§§Ã9Ö{­gâ@ðÅØÑ!ÂZ–¥¨kúe¾·sŒ©Êq© S”a8É5(ÎNäq·7!Ðõ….ô­bÿL¸¶¾›Šñí½ðãÂ>ðψ|WáOxfãÆFúóš/ˆ¼eû?hCÄžÓôëxÏÃÞ6Õ¾7Ùü'×ü?4^*Ñmlmô_ˆz‡‰u Éo–ËÃÓÛèÚÕΟ2÷Ôš^Î~Îrmr)Þ¢pSø%(*5ªTQ”:4ª×©ËFœçåÈ¢›uGí6¨Æ¨Ü¥iN-ÍE{J¤¯Rqƒû6Šù{Fý«üâ=/_ñG‡ü#ñVð†WÂk?!Ó¼-iá[{oéž×ôûØ“Tñ}‡‰/,´ß øöËÄšýÍŸ‡§‹GÒ´munOö’i~±Sâgí…ð³áeìÚn½¥&¡ÿ ?ˆ<3¦ÅwâO…>°×›ÂZg†oÓý¥ÿ Gÿ´|ýÞoÛ¿á4ñÚ÷ý£þÌþÖ»‡ñÇ·,ÿ8Áéÿô~«ò‘ÖWa=‹|Hñ]¬rZN|>žî$оK{âdzt—3¯†­n$´’â×T[(¥ñ†» 3E~ðxkÂ=Æ©ã>Þ¹;;Þ:ñ¯Úwù>ð]ÇØþÝæyiÖ<{Ú³á(»û'ÚþÉå}»þ½ûGì_gÿ„£ÅÿÙŸÙ>%¼?Äïÿ€OõõýAm/OÕe|…ñ×öZø}ñ2òë^×¼K­è¶ºçŽ~ø“VÐ'¿ðü"‡ü)âŸ[øÇ0Åãÿ†ßÛ↯ü)à[߇Ði ¥ÛŸøCÁ×zGöŠ.n|T~½¯Ë¯ÛCþ ð›öT¸™þ2þÐß>hçヾðÿÄ[½:?x÷Uñg‰?g¿øH>&èϪ~Ñ?Õ¾|¼'â_XÛøž|&ð¿‹úøYð·BøM ßèš.£®ë—:εqâ/x‡Ä×vWZÞ½¬Í§éš4W—ˤéÚ6‰mö=DÑ4[{}FÒíZÓJ‚êê ZçRÔ¯¾Xý«¾ø÷Åš7Ž øiñ â×€/tGö0±ño…ð†¼á/„~#²ñ²øŽçö–øghotOÿkE®ø›Ãú.‡áŸ™<_{àxþÿÁEÿdÏŠö¾'¸øsã‰.¹ð—€5Ÿ‰Z†¤~Íߴľ0Õ<;áo¯ƒüs¦ø+Á| ‹Æ~ |3ñ¤x#âׇú‰¾)ü%ñ½Ý—ƒ~%x7ÂÞ&¾³Ò§ë£9,&Ñ›x(TÇfX.YsÑ«7‡©‰Ì1r»ká0U3 MLGµ…\-í)óQQÄ2¬–#Û)EÖ†-ªåÍXJt0X\¢Ã¯iŠ¡¡C é8ÕÄG©ÕöRôH?eýMÓ?hÇðïÅ‹ÞøûJx¶Oø“ã&‹¬ø<|Kð5þŸáí ¾ÒþË©øRðV™áo†Z‡4Û_xWÄþ ñvƒ<úþ¡ãÛê>/ñ}Þ»ã6??ioÙ¢ÃU¿ýžtï ~Ù_þ,ø¦ãÅ?¾-~ÚŸ´¿ü3§Œu ­Ã^ðÃûoi³ìñá\ºV“ámhm¢øgáÂ+¦Gâ=LøÛÅþ.ñN½_Püøïð×ö…ð}×þ_x¦M+Lñ©áMwHñ÷Ã_‰ü}á_héiq} øÓáoÆ?ø âg‚µoìýCKÖ¬ì|Yá-ãSðî³¢x“LŽóAÖô­Fóç;¯ø)'ì—k¥kº÷ü$¯t=+Åzgü=­hÿ²wík®é?7üñ¯§ø‡ÁI7‰~!þÑ_±'‡þ%kë? ðïÂôÑ“Åz³iwWÞ"Ѽ5ã{?aËxw@´ÒiŸÚ‹áïÄo øãÍöñçÃ~&øQâÏŒ6~ý£Z^Cà½#Áe¿áño|?ð¯á¶ŸáŸØK¡^Ýê×ô?ø(‡ì}â=CIÓ´‹w¨|*Oú­üß þ-Øh?¾}“âEÅ׌¾6x—P𯇾éúEïÂ/ˆþñ¿ÆÍSÀ—†|yákχ~ ²Ó|nøƒâO†_ |i©xûÄ~Ñô­oÄÚ—‡|ñ"óáî‹i¯øSÀ>;ðå­÷Å¿øDáLZç‰üñ;Á~-ð·†á4oø›ÃšŽ¡¬è:V¡§øoÄ×=Q©^¦*†a •ñ„gÏ~»Õ¥‰­˜gš`ñ˜…Fqƒö™~aˆ­O*PÅRÀf¹„iW£GŠUq’¥F„pJ,>­† Â/Í­C.ÄF0Ä*®oŽ£‡…j*O ±ôðª¥SƒÐàœ^Ñ[â'‰§øùûLêŸ~,ü;øËàˆŸ´¤>,øi࿺õçÆ=;á‡ß⟨ü.øKà/x#Çÿ ü#ð/ᄾ]|;ð„|1áý3Ãͪkñ‹u=SÄ—œGŠa‰~;|EøßñGâ þÏÞ(ð׉>Ú~Ì^4ýœüG࿊ßü9¢üÑ¿h_ Cñ7Æ2~ÒŸ³^¿ð«IñŸÄï ~Ò/ð߈>Åð§âE‡€ Ó£Õ|3ñ‡^Ö5hnü=ú‹#¤HòÈëq£<Žä*" ,ÎÌpUA,IIâ¾~øñgâÄ¡xÆÏᆃ§|ñ<7zŽ‹âû¯‰/?χ{y£x¯Qøsmàgðý¾‹â'µ¶—NƒNø¡«ø‚ #YÒu GB²¾þÖÑô‰–"n:2©ìðø½GØÎ‹¡ 5:u!‰† Ï+ÃTÄцTèÓú¾¯™Ó¨œ\Þ"µjß5jØ—ŒÃÂŽ.Œé·RUéb!†Â{féÎPž N5),EJxž'ödý~~ËŒ5ŸøËâu¯évÚw‰µ‰z߆õ«ûù¡ø±ñ¿ã-Ƭeðÿ„|,‹ªj.øûãXïËk¤YxvÎÎÆÒ{ûÍWëšð+_Žz¡®|9Ö¬5mþüKøcâßhž4¿ƒPÑ$†ïÃ#ÃÚÒ>£&·&ý—¤_x7SÖu¢5-*ÖâËþë×½¹¶S^çö£ø=e¤Ùk7—í Ôä¿þʰ¹øñÆßÄZ½Ž•§[꺷ˆ4 ËðåkÙÉèÁð2+ÅZ†»áo‰ÿ|áÝoÅÉãŸ|6ðý÷‚Ï‚u¯MoªkWFã[ð>³ã½ÏÅ:…²Þx›Gð‡¼9£ê·w:­ÛØGw®ë³êRx»àüúÇÂ_ü=±ñ_ˆ5_Ä7ž$ñ/‡uÿj¯K¡xª÷ÄsøÏÂy±ÚE"øOÂ#M.ßFÑÒÞf²ðî™m¥‡ºò÷ÉÈüCý¦¼¡_xsÃÞÔ[Åž"ÖYÞj7^1ÕbŸJ»Õ¬ïæ~&I¦Åÿî»7†|S¨Ã«§ƒN—yáÿkÐÿgxËÄö—sx{Âq§ËâmOI·Ôôén¶j¤jÆ2U¥Z¥HBWJ•c Ó¬Ú›”ë¿fœ+©ºœñ§mÌéAÇÊ>Ê3çn›£FÕåJŸ´…\<“J1¥jÏÚaÜU>J“ªèrÊ¥^n·Â[ÀÞ&¾Õ|9ñ/â-§„oõÏøŽo…7áþ¡àXµÜ]êZåÍý÷€.>$ÙAwâ ûß&›iñ *ÏTº–ÞÊÊßD+¤/’ÞþÊž%ñŠ5xçÄÓxŠWÅü8Ó£ðeΧø†Ñ-õËÍjk¿ø Vñ†¼G'ޝ|M©jøÆÞ}CBÔ­t]IdµŽö Ëÿk‡/…Ùk“ëÞ°ñ•öƒ¡xSÄ:®•7‡õi5@ñdšËØiz•í´d´žê/]Ò>5ü;Ö¼^¾±ÕµY5÷»Õ4»{¹<ãKOjºî…òëþðÿÄ;ÏÁðÿÄ^#Ñ>Ū&¯áÍ Äú–¹¦M¢ëÐ^ØC>¬Çc’„f©Z*kêΕ4×?>põôO›ÚB•\&q¨ù/cN1œ`œ]ɺjI¾E*ÒœþÏ&"0©FRoGJµHb±mrί>#›™º‡àïÙ“À~´ðÕ–•«øºâ/ ø†ÛÄš{jú4²M}kðjÛàtq^›mÑd´o ÚǨ×m5ÿˆ‘x~oi××t ;ÄI©¯‰ô•žWÓ¶‘1ÔàÖ¦Ó§Ð5èôÞ:OÚ—à„×·×^*Õìl-²ÞÏQÔ~üGÓ´ßZkZþ™á}/Uð¡}á{/‰æ¹­èvQëþŸÄº"wCº’ý,µ2âéÊR©89¾z­îó®i*®•9*MJ÷ŠÃÕ¥ìðÒNœ(T¦©Ó)Å2âç¦Ü…4§â ¹§U#(´¡QÕ„ÜkŪ®½75QÕ§ÍÛŸÙ§K“Mñ§…l~(üUÒ~xæ&«ðÆÖãáÝ÷†,®o[hè^'ÑuëØþÈ—6–†‰sáÛŸxráÚX£ÕUðÚ]xz?´ÜkVV‘XÞy8öŸ´W»­OIÑßQñ^ŸyªË¤Ù¼ÚÏÊ: júìPM£xwƾ"Ö¼§èñF«æ›.™áoj^ñü:߇fµÒåÄzjä¥NûL5J ëZZR¾íÞ§µ„ན“s‹„TZäŠShò9$•:”±Oܲ¥ìg 1ÅÉ(Ú„£Z‹©4¢¤æ§w&ä`j³~Ÿ{iã¯ÛüRø§¥|<ø‚³¼ø‚š„þ%½Ñu]gá¾­ñMksUÔãIñƉ¡ø/Jðç‚ÿSÕ®ïm­l-..&Ž6sƒöU}¤a‹ µÔ  ÒÇaá:T*$£ì¥8ßšƒå—µŒã$ݨg[Q§IÞŒ¡B0nP¨°•jRu©êý·²u%NÓ—%:Ž0qUª{O5ßÙHÁ¬|$¿øyñÅþ —Àž ðΡây|â8¼%ð÷áçÅ/ø}ô;O|:ñO…î¼Aª^|Edñ$š¾Œ4ù4¸åŸF‡JÔmá;–ß²O´×]SAñ‡ÄøÎ;Í[ƒâ›©øZ_GâÝ;Qø©k~/– [ÁúŸ…5 [ÆòüVñ¼+Ó5_ ßøE­5;x<=ᯠ/LkNºoÚcàõ½¦›{>³â¨`¿†êêðIð·â²ÜxFÂË\Ô¼9qª|K³> Ÿ t„ÖtmnÑ5‰xOL™t=rê¹,ômNâ×cCøùð³Äz¢é6»ªÝM'Œ¯>è?‚üsgáÉüi§7‰ÒÿöÞ,¾ðÝ·…îu )¼®ÛÝ,Ä‘Áw™i,‹sâEª\ÝJ“”¦ç*•qÑÏÞö޼kÑMBKÞ‹X™Pæ§MÅ:ò¥ÏQÀo–1•ùU:T#N¤d—³TiÒªâëF^ä”pþÚ*uSqê±MRuë"ð†¦| wàÝGâµ]NóJÔôÇø‡)ð–‘ã˜fÔ>Ò ÕíÂÞðÿ„m5] OÓßÂ1ÙglÚŽ¢ív×^¤þÉÞðíäÞ#ðÇÄÿ‰Þø‹â/x\ø™ Ùü ÓµÿÍã;?Úø–Ë\ð´ OÂ{¨5Y<%á­JëR‹áÅ¿‰'Ö4•Õ&×d½¿ÕåÔ;½OöŽø?¤´bãÄz½Ì&ãWŠþ÷Gð/Äi~¶ÐüM¬x;P×Ô´ÏxSþx‚ÊÇÆ/»Ñ<+«C ëz–“¬ÞézN¡{oØxâ—‚~#ÜøŠßÁºŽ£«¯…u[Ý Y¿ x§KÑSYÓ5mWDÕ4½;_Ö4]?C×/ô­SF¾¶Õ-t=CQ—Mbžù`¶Õ4¹¯!')ºÐOžP©iOݵ8ÎÞ4Ü,©ÁÊTéâ>U8J4ksS’ƒr÷"©ÏEN¤[MÕZœiûN}e>^wENî2æ©IFiÈ¡¡|'ÐtÇú6¥©ë~,âuÓ^xÒïÄgDµÍÇ‚<=à-AüDÐt»TÕ4Ÿ[]Þ[ÚéÑ[.¥y~öPÙØ=®ŸiÅ7ìë£Yé>¶ð§Ä/‰^ñ7€,|I§Z|@Я|ªx³ÄV¾4¾µÖ|j<]oãoø·ÁºÜþ*ñ%‰õ³á+k»-jØI Ï£Ù\^Y\ѳý§ü ¾!øáí{Jñ¶sðïÇøËì_ þ)ø’ßMáÄe|)g¢xâOëE}«]Mᯠ¿‰uH|'¡Mãé–? ].£ Ý[ö©ø!£YÙßÝx“Ä76×:TZÍÙѾ|RñÞ±¸Ö5À¾9µÐ<©Ý|=Ô'ñ¬hé:‡Ãº¼ºæ‘«hñض£¦_[@A:Š„é&Õz8†ttr¤°u •%NÒ‡û"µ/«ÅFN„êЭO•N òÊ2•9E¹Q©‰æDæáR¶"DÚšmʦ&ººóÖ)BN~ÍŸCW'à+µøÁw_iûoÚ|'á˶}»ûOí~vg'Ú´¿á(ñ¿öŸ»Íûwü&ž/û^ÿ´ÂQ¯ùŸÚ×}er~·û'|köo±}›Â~·ûس>Éäèöqý›û7þgy|¯°ÿÂá²lû?ü"ú—ý“iãøeùÀ:?UùHë+“³¸Ýã¯Úý§“á?Ü}íÞg‘öcDZý§û7þ‹¿²}¯ìžWÛ¿á Ð?´~ÅöøJ<_ý™ý“àŽ²¹;;}¾:ñ×Ù¶yÞð]¿Û>ÃåùÿfÖ<{'Ù¿´¿á´û_Ù>׿ý‡þMû;í¿hÿ„_ÂÚÚÞ7%¼?Äÿô‰Ú^Ÿª:Êøkö‡ý‘ïþ0ÝjÆ×ÆqEá|XøñRð…ÿ„õ jâÓâ—Á_ü)ñÃßiÚÖ‘ñ_ácA ø+Äþxâ÷ÃWŸÛ3j×^ÖínÅf¹‚OܵñçÇO©àè5ƒw£ø"ÛÁþøÝû=|½ñŽ)ðÆ¿‰ÿüm Aâ«í;Åþñ^½àxOÄ> ñ>·k_aü8ñÕß`ñUž¯¤iú/‰<â“áYèšäÞ&ðéÔåðφ¼ei.â ÍÆ«dÞñ~Š—²jÐç´×cÕôØm¯¬,¬õ­SãoÚêóáLj¾'øÂÿ¼cá/†þðW‡¬õ}Æ~=‡á†£á»‰þ2x¥üàoYXü^ð߈|¦øÃľ+ð1_xƒì·Zô‰i©xCCÓ¦ÝÝZN#ÄXJXÜWåë5Î!F§–>ZÄSxŒ;«ËöU¡FTéþúŒ}”£^¬)á½ÕWž9NŽ[YQ£™bê(ºñ¢ñ.œ½œÔ/Kš.qzÆ£r¼)¹Ôwp³ó¯ þÈ:4ÿ¾üGÒ¿fíkᇋ<%ñ+[ø‡yñÅ>3Ðõ=>øJþ(|TøÅã©mü7 |sø“g­xË^ñ‡Ç>ÕuŸ8øiátkþ ÐüQ}£j_iþÓŸ5Ÿ eðG…üsmðãÆZGŽ>üOð/Œu? ÿÂyáý'Ǿ$x[â„—Åž Ä^¾ñgƒu wÂv:g‹t ƾ×õ/^j6ÚŒü-«½ž·eð„ü%ð#à÷íðS]ø{ñ?Àþ:×5Ïø×ÂIà?Ùóþ,º¹ÓüG/Áø‹L‹á7€<â/h¿üs¨ßxG℞ÓQ±ðlj¥Š÷Ä·žÕ¼%­Ïꮽâ_xVÒ×Pñ>¿¢xrÂ÷XÐü;e{¯j¶:=¥ßˆv³šÒX|N® ±t°˜†Å¬Ê QÁÒ„ýJ4ë¬êâgî¨e8µ©døÙcèFŠúÍJøa©§:3Ui:ju¨<+^Ò­M' Jœà¡M7ùC§ÿÁ2>!ë_ÇÆ¿Šÿ´Ï†¼]ñSøµ ü[ñGü!Ÿo>øBëPÑ|sûøÇþÿ h§ÆÿëÑ ±´:-”š×мa«Z§Ä#©jóøM¢ñ>ŸÅø&÷¼|3§|rÓ´Ûˆ­?i{v¶ñÂÍ_Ä~ñeŸíû_øö«Ô|ñKÁºÅÿê^<øI6Ÿà‹¯ƒ?~ÅãÛü`ð/еØoõ¯ é÷wZçÜÞ2ý¨¾ü=ñEÿ‡/ð-‡Š²ôŸÛ7ö>×´/x§Cý«¿f½gÃ?üáï‹<ñ“ñÓá~£¡x'ág‹m&¿ð§Ä¯jö~)›Oð߀ ü*ñ·†¾!ø#XŸI¿¸ÒµXt¯øGSÖ4B]3T³»Óuí/æ{+û[‹;‘Äƾ!kûtþȺ֩¨é¾ý£þxú? x¿]ðWÅ=KÁß´ÀJÏà¶µáÏxëÆº´?àºø•a«è76zoïÃy¢iÚ^³â4隦µ«h:„¼7âïxzê{okË9V§R†/U))T£‡Épø\¿/«‹¡ uþ¥†Xlq8ªu*{*ò£V¬–2´keKÙS¥?gR§V¦2r:Òu1Õ1¸œn•ZŠu ±jãkO Fq„ªAÊ4¹°ôýŸÍ à˜žð·ÂÚ[á_Ž>*j3µý¬þê¿ ¾/ëZ‚´ß N|qãÿˆ_´×ÅO‹ß<#¤ëÚßÄ-HÒ|MãÚwÄ·> øu¯Zx¯OðN‰áí#D×µÿˆ‰s}w#¿eïØÆÿ²ïƒ¿°¶×c×%šH¬–Âü†&£¯[N¬\f Z¥XÆ„°óÂeØ÷ˆ¡5‡œ%‚ú ÂÅMJëá­Âjÿð‰EàﳯÿÙçà¿ÀUû2x†þ׊¿sqkÿ ö p]&º®£í?ÿhÙÿöÐ5oþÎÿþüzð¾®MáwÄŸþ&ø+â–¢ø’ÞÒÓP¸ðö­¬x[×tí;\‚ÂþÆöm&òæø­/m.^Ýa¹…ßœ›ö¹ý”mü[ñWÀþÓ¿³Ô;øá­CÆŸü7ÆŸ†ñø·à߃´›k;ÝWÅŸ|6þ%]gá熴Ë=BÂïP×|]e¤ivV×ÖsÜÝGÌ.î•Y`iTÂÑK N¶K–á+R|Òu2œ …©‡®þ±*“§N:1¸ŒMNœ½£©'^/^«)TÃ4uQÂâsluyK/¥Ùɪõg„ÃQ®ëb[¦£:•±^Ö¬ýSMøuðÿEñˆ|]£xÁÚG‹<[Áâ¿i~Ñtÿøš/k––PêzÌh#bj7W »hWWð÷áWŇk¡xKNø¹¡ßü&ð¤w¶>ðý÷ÃI¤ø‰‚¶ÖžðÞ¯ñOK êš_…žæÅ-.mþézþ£¦èz]ž«­Ý^I«êš­ #öÍýµÿ xÆzí]û5ë~ø§ªË ü0ñ^‘ñÓá~¥á¯ˆúä*Ó| 6à=vÏÅ3i~/Õañ¾³¤x6];Ã×Zä~*Õtß<#W¾µ³—¸½ý >é¾Ò¼s¨üløGaà{ᦽñ£Cñ…ïÄÚø[Yø;ákOj'ø±¥x‚}f='QøiáËøR÷^ñÝÜÞÒ-O3øÅðOÅ> ø?Áš÷ˆ¦ñßô GÃðxƒÅ–¶7‚ï!Ò¼Q£èvñ¶¡¦ê Õ`¹·–ËoCý²?d/xá÷‹<7ûU~Íþ!ð¯Å­e¼9ð¯ÄÚdž:·‡þ&x…±ãÏøM{øż%à‹û/x³ÀöÞÕ¾ü6ñF‡f“½ï³ê²ÇÛ¼?¬h_ðù_Ú¾ý¡|ö¯øF7ýŸþÏÄ;ÿiyð§›ÿ¯Ø¿²¾ÇçGý¹æý»íZ>ϱ½›ÿÛÏöÒ¾h?õOÛ;öPÓ~x©5y4ü@ñ—„4_é¶:eÅŽ·®|@ømàMÄwþ"¸µ°ð†ƒ£xÛ⌼ ðâ[ƺ¾¡¦hžmÆš•ªêº¦Ÿj5H…ÒIN>Ñ:1\îxj‹$åQbqT*à]ŽW”±X¨Ö­g;Ôj³8ª¶hrŒ§Ìåñbi§(Æèá*Æ­áv’Ã`:p”æä¡NšXŠ’|ò—ËðþÊßþ!xUð_ÄŸxÃÞ³ñ·Çxú/¦—Äšf«ñZø›£øÄ^*ñrüMÕ´Ÿi1ø_ÇÚ¦·oá­'Ã> ¿KÛí"×VÕ•ô}BÏRôOþÉÚ~%êÞ1·Ò¾kz6­â/xŽKÍoöÒçøÙ ¾<þÖºÖt±ñ¦ÛÆ–ÑÝèé}­êVVÑjîïÛÂ/…¯µ+݇V~É?lÙ-üãß„ÿðÔ?³°ø«ð§Ãº‹þ)ü1?~ˆ_ ü+£Ûi·šÇ‰~ x5ŽÕ'Zprœç/ußÙ;B2ðÖ¯ðÌü9ø9á=èûLøsð³þÏ\[i~ ½×µ­Mø‡à?x.Ðx'Æm5¥¿Š| ãOøûÃóZ6ªº|Z³ÙÞiüw?b7Àéz^›?Á+?Ãú¿o4Ÿx_övÓ|!ñƒUÓ<ñÂþ5´Ó|{ñJñûØø¶}bÓÃúv»¨Zø/é¨k-mây,<ÛFÒî¾³øƒñIøu£ZjšŽŸ®k—ú¾¯eáÏ øcÃê>"ñO‰u$¸“OÐôˆ.nl4È&žK»«­S]Õ4oèºu¥î±â kIÑìo/à¡á‰VÚŽ²ø³Ã> øK®j"“Ã?…¾$ßx&ÛZñ¦š*ø‚5ðÕÏ„|aãø‘fÒRöèC¡ë×÷ÖÃHÖþÎÑô˥є©ÍT£&¥GJ¢›nIbiΕZTÓãR¥'VHá—;¥N´eì£J½æê¥(¸TK–µ&ÜR³öh:­FÒ¥JJ•xÊ¿¹ µ(Î2œêÑ´0õÿƒš~¿ñWCø“6­-µ¦Ÿ¤}—XðÄ6H!ñ·¦ZxKð޹y©‹•’á­'Ç7·+g3j7z¦‰|×ÖŸð[ÛÞ|ïàOاMð$:^—¦ÏðJÇOðþ¯à[Í'Åý´ß|`ÕtÏüAð¿m4ßüGÒ¼~ö>-ŸX´ðž®ê¾ ðêjË[xžK6Ñ´»¯ ´ÏŽþµðKø×âOˆü#ðšÒׯž+ð¢(ü3Ö¼M¨x/Gø‰à][Æ:N•¹ªxOLñvâm7Dš˜uCAµÔ%Õ,ô©mõM2xõ ‹XíFÆU˜¥Ý»I4d©N¨´¥EÓÄ*ŠÒÖœç˜Q­Q»ªªš¬êÒ^xà áN aaNuW´U!U7Ïû™ÆiÆKÙ?©JŒS´©8Ô‹£Rœ9/‰æu"ñMò~ü<ø•§xÒ[¯ øcIñߌ< ®ø|P·ð¦uã­'IÖ´»­4Eo¯\YV{QtÒ )õìç@ð0df%gû']¯ÄÓñG[ºýŸ|[âMgXð·‰gÒ‚¥_0šu.¡AU…*˜eOë5!I¯i[êèr¼”©És4Ü\æœÝg‚ í§:Ò‚ú­98©Ë GÚ¦èÑx£Àë^øMá}wá‹¡ñ¤ZÇü)ùþ+kÚ¥÷ŒõhWþ´øuªü1Óµò[R:u¿ˆ$›Y–÷Æo€^7ø‰ãÿ ë:EïÃèíï|—µ¿xóÅu‡‹<q}/€µÿé:_ÄøßÁ¾%†Oøâû@ñ·„¼}‰üs¦ép[jR‹éîë×í?h‚šŒqj:_Å?†Ú¯…šËV¹ºñ¾›ñ+áÝ×…4ë#PðÖ›6•{zž+ûoÛå¸ñ^Žítë­6Ñ®mmµ]CN¾Õ´M[VŽî­/ïí~0ü,¹°Ò´íXÕ/`øƒá)­4Ý#ÄŽ‘øwT¿¹Whlôí~IcMúáã¶Õ^D[ggPjMË’SÙUXÅû±öÏ SÎà­Ë/«ÓNG™a°Õâ¥'I¹Ti·*±Q©%{Î1¯‡¬—2ÝFº¢Ÿ»:“¢ííëB:YþÇ7Vö>5µ¾øµ«ëמ3øqã/]kzþƒ>«­ý£Åþ ø9á)¼EªjW^({½vöÙþ6©:ÞMî¨þ!1^j¿iÓeÔukzÏÀ¿‹Ú_ÇKÏ|3ñ—„´;?éîõÍÅþºñž…u­éü;¥øvÇCÓ>)øRºÔnâøk¨kðøŠI.´‹8Ò]"ÿFy¥³¼¸õûÚá¾¥¯èÐè^-ðF½à-KÀ?|y}ñCIñƃ}á Ûáæ·àíVµ»Õ,ä¹Ñ„Ëu¨ê3kv±éJ’+›y>ÐÒÚz…Ícu,I·:qWnœ%†”ytQq¥'‡´£ov­“n7åÅS«QÕUcRnT¯©^N¬=ªæ›”ê7ЩUÍÍÊS:ñ§':œÓ£8ÓJPq‚_)Oû™ï´={WñŸŠ$ƒÃÇúýßí ð?Pøí`,í¼YâOé àü\ÇžƒLOjZ ·ñĈFïF°ðäR̳èÆ{Ï}ÿ…ñ|&Õ~Ùx¢;Maüeâoø_Åëáèå_ ø«Sø—ª|OðÕüz êÛ5¼3«ÞÚYÏmý«dºå•ÄR6Ÿ¡$z_‰>#|=ðm®©}âÿø7¶Z†‘ªkW~$ñ>‰¡Úégˆ/îô½QÕ.5;ëX´û oS°¾Ó´‹Ë·†ßR¿²»³²’k‹i£J¶>jš‡‡t3â?€õSÅöÚ¯„ôÛxzïPñF—ye¨j6š—‡líõ.5» ­?IÕoí¯4Øîmç²Ó5 ¨¤h,®dˆ|Ó§*nî­)J×RzÕ=¿3¨­R5]H*”Ÿ27ér¨«M⧯•ÉETNj2„©ÂŠƒ”¡$éΔ¨UŠª¥S© ‘uT”¢ßÌÞ1ý¼5¬ëÞ×4[OƒzßöÃÏ |8»°øõð+Nøãšg„.õ+½+YðíÙñŸ€µ? øƒPmoU_\5ë­ý•sý—ew§K=ÿ·è?<ÃÛ¯†þ;Ñ<-ñ/×~0ñŸ‹¦ÒüWá-+RОãÅ~:ñí }X:݃ɡI®‹[ÆËÊö‚ú(¬šo³C£â_<'ñ3Ÿ |GâmEñ<=¬x‹Ãö𦵡iË}‘©iz`Ó ·¾ÕmµK_U—Q¸ŸF´²Ón’ú×Bñ ¾|M¥É²_.¼-¨xæÛãGÂ{iœ:&«ã>"ø>_ išÍÂÄöúF¡âõ†Òlµ9Òx ›¸®¥Y¢d‰„ˆYs©Ñ½ã*2­ˆ¬Ý¢ãí§”kI»{­ccìáhÓš…:1„9"­TŠ|þÖ:0\Ò›Ÿ³Ž –•ÛnSæÁ^S›ru`¥R¬§(ÊKÁ¼û"Çã-C]ò5߇2xZãâ‡þ'xcÀÞ;ø/cãÿ i%Òþiÿ u #_Ñ¥ñž¥ø“Á^°KD°°ð¶½áŸ-®¯mâëÝ>Ñt)1|AûxƒW²Ð,|;㆟JðìzºçÀ‚¾ ø9âí24ñˆ|Eu§øÅ øÛa¨øÁšõαiqâox¤ü@Ð5-vÎïÅ)¤ë—¶7Z7ªø£ö§øc¥]xóBðε øÏÆ øe¥|Y¶ðÞ™âßùÞ0ðž¥a¬ko7„þÁ{«êÚ¼öÑÿ·î¾Ë¡ËlÚvµá©í®g‹ZŠX½FçâïÂëoÙx=¾"x¼i©ékz_‚ÏŒ|3oâÝKG¹¶{Øu[ÞêÖº•Æžö1Oz·‹ÙÚÖ ¦Icj=«ÂÆ5y§ªÎž)MóÔ© `èU¡I»óÔœhPÁ×§/š 8jÉSnœí_Q\«žÎ+Ý…7 ’¡ˆ|¿ 5yc°õgQY§‹¤å$«Ç›Ñk“ð¿Ù< à»_³}‹ìÞðå¿ØþÃý™öO'G³ìßÙ¿ð‹ø#û;ÈÛå}‡þ¿}“gÙÿáÐ<¿ì›N²¸†pXÚü7ø}k¥Çi™mà A§Ea,3ØÇcƒa¤vSÛø—ÆvóZ%ºÆ¶ÒÁãÃ$!/ë¨Ëª]KøãÛ–œ?àõÿ€t~«ò‘Û×'go·Ç^#ºû6Ï;Â~ ·ûgØ|¿?ìÚÇdû7ö—ü"öŸkû'Úüß°ÿÂi¯ÿg}·íð‹øCûOû[ÆýeqX¯ÄÝG ÔæðGÃè.åIakç±¶×¾&I§Gsø–êâ;Hî.µF²–_èPÍ4·é‰|Vð\i~ %¼?Äïÿ€Oõôým/OÕ½~F~ÞðN?þ×z‘ˆßÿgÿ‹Þã'Â_‹^Õ¾'øNÇ\ñ×õß ø‡àzÿÃÝ õ‚?ü…—à?ƒ|=ñÕì¥ð寋þëþ*ð—Š!Òô]!ø_¦x—À·?…üñMÂ^?øûOüOðÞ ¾ÓåѬµ¨x/ž ñæ‘áMnÏô§Àþ8³ñ½¦²É¤k>Ö|5­·‡Dã(òJJ¤åBM|?àŸÙáûþÐ ~*xÿÏŒ¼?ñ§ÄuH|{áøOáô/âߌߵÆMkŽç‹~x §¿ð¶gí'àO†^ÑÅ¡|)›Á¿ð±<%ñGàÅÿ iŸµMoÃþ ñF«ðWâÿ‚¾*§ƒðlîñ?ãïÅoŸ K¯êÖí>µgkcâ=?Ä–þ²±ŽëNÖ5²þW_œñ.u…Âf\Aãxc„ÌaˆË)bó\“;¯'—â0˜ìcK”ª˜/eGM{<>ƒª¥†—ÖpõpUèÆz¬[—U«‡ËñÔ3J3£ÉŠöxLf ’UéT£W :8¦ª·S&§^…NY*‹ÙÔjsqü+½ÿ‚w~Ô¿¾5Üüqø¾Ÿ³^yâoŽžø·â‡ÞñïÄOˆz…¥x{â_üŸÆI iÞ%ñGÁ?ËâýNÏKý|z¶ÚÍï„|m­ë ”iZ-½þ³/†z/Á;ÿhßø~ŸÞ,ø_àoÚZ~Ú÷íáxÏá§âíö ýºþþÒ—^ ´ø·á„¾)ñÂkŸü ð׋¼âÿ‹þ ðæ©ñá|Ce↰k®›câ½;ö^m~Æiþx5¶Ôµ=U×-®að׈î<;–y¤XÞA¨x¾ßJ—ÂzN±4úÝ“é^Õu»?kÖpêúއ¦j:‡õû­7n»éÖ,Wƒ £K •GµrB¼c ^\òL*ÇE}†¢ðõpøêx¬6"¥:”±Ô±0•z3zºµªT”ªÎ¶' ‹®§'â0¸Š˜ê`©{7†¨ªâZsÃ: )a%CÙÑ”?'ÿe¯ø'®·á/†ÿü;ñïWñæ¨ø§ö‘ºý |!áï„_ðP/ÛÛâº#^|$øYày<-ñOãïŠøãñ?öYø}ûDEðûYñ¿ÇmPÓ¾|XñgÇýá…4­zÇáG´ I¥|1úC¬MS_±Ò5i—pkrÜøŸS¹Ò4Ù4¿ x[Óí®­tmO]–_êÚ.•¥xGLk-"ê moÅ—º.y¬Ë¦xvÒþkz6™TñiÉò?ÝË•åþÂNu):y6^_Zq©)ʾ.Ž]„úÎ"Ujºu'+ûW‘(·‡£Z•7Ê«â±êÕŒ&ëb1Øœ×88Féfš¸·,4hΟ5|=9ÃŒÇá±_…ÿ·üãâ6­ð‡ö³ñ€|ðçÅzŸŠ~$üuøá¤øÚ^»wâïèž#ÿ‚g^~Èz‚âÒ´_j—§Œ5/ÃgI¶‹U´oI–w—úÀO 4?¿àš´§í{ã|TøÆ¿³çìçâoˆÏìå©x#àßÄŸ‰?¼;¤ü5Ò?gÛGំþ ^xÇYø'û1ëþ(ñÇ¿kÖÓ¯~Cá¿ižøuà‹™tŠZž¹âuÒ´ßòÿüYðçÃï|ðVµe­Ýj¿0Ò¾\ø»SÑláø©ñd|ø·ð;Ãú6±âÝnâ×Á? üu¯è¾(´ñ¥câû»È4ËE¿ùgÆßðKÚsÅÐ|jð†u_†ß þ Kã{â¯Ã‡ÚwíaûHüFŠ?ö±ømûJÛøßSø‰®|ð·íIû kŸm¾Zé?cýœjÏŒŸ ¬¾!øš_>ø@> xzóSñ¿ô!E*•ªÔÄ,O;…KR”¡B®# ‰¯‡¨§G,l5 V ^2ú8šy¬Ž + 7„§TU£ F½JS•JÃ{HÂÎ^ÖŸ6­LñjÚ_T©^Œ1ÐXœS­ù+û ~Â^,øAñÃÂüeð»À?õ­;´>™â{Uýµ¿joÛûÆúÏŒ~-]~Ëv/->:~Öÿ | ñÎ9üðãž!ðÌ×IÑí4ï dhkZáÑø¿ŠðLÏxëá—ÇïXø³Â1-·‹~Oû"éPøßâ߀$ð·Ã?þÒGí«ü=ñ?ÅO†Rx{âŸÁ«|OŠ×áMо ê:ö¡ðÓáçÂo‚´[oxŸ@ŸÀ–¿³ÔTÎnPvQžW†–.¨ïZx&óí×£õ‡Z*­9Ê®9ÆxXåxŒFTðÏ/«,8©?e*’iTuqx|eK¯dçS É*4å<7°©ì£V–(©©O…Âæ3œ³ - U?É_ÙöñgÂŽøçã/…Þøw­iÞý¡ôÏÚ¯í­ûS~ßÞ7Ö|cñjëö[°Ñ|iiñÓö·øcàoˆöqÏàŸ€—ñ†`ºNi§xcû ëCZ×?íuÿÛ»øçà«o…¿ üyâßiÿį|rñ_Å‹Ÿ´/í)ñóÇþñþ—ácGð‡Ãï„ø«ãoi~ ø)ñaüY¯øöŠðwƒ¯…”[©8RŽ:¦eJ ×u¹©PÇJ–"ŽIá)¬. ¨<aÊÃÎXj•ê®ZžÝb]xÕ„=œ¡‰ÀU˱í8ÓPrÀVÄQ•xòâ-ZµiVuêÔ«/ÆÃûþÖ¿Á«yž#ðsþ ƒûRüøa©øÁvžÑ>#xàÞ‡ð/á§ÇËOø*Oü+Ä—Ÿ~ØüHø_©üAø}¦|ø«ð«â_‚àŸv¿¾|9‡K»ñ×ìÉ⊞3ø­¶Â9^3L×4ÏèrŠ¥Z¤!ÉEª0q¤œaÍJx|£á%S۪έ*.–VÀUçÊó\*QÏ09¤qXϬLe(%9µá%ç+Aa1XœrŒRiFuq˜ÌN)bRúæµU,³€Tpñ¥ø­ûÁ9~-|øÉâ/‹Ÿ øp"ÖôoÚR-ÃÓ~Ðß´/ímã/_üxð§ìu¡G§?ÇßÚoÂV_ün·³÷ŽañˆõÙôk‰t}WÂZv“á‹m(ÜhžÒøÇðÿöø+ÿù׿e­ÂÚOÄm/Týо þÉŸ´OÙûá߯¯‰¾?Õÿi‹Ï‡¾<ð7%ñÝö‹àù<ð÷à°éŸ O„>+øî‡ÞðœòøÂã⯈ü3gyáhŸõ3Ç_| ðêûKÒ|E{®]ëÚͽÕö›áx+Æÿ<[q¥Ø¼Pßkmá/‡^ñW‰-ü?essiewâ .ÛP¾°Ó¦¿Këû;yíkß<3¡|3½ø´?´uoØø]4|&ømàýˆaøQ¥þÉÿá–›ãŸx_Ä^1ðü,ŸüFÑ<;â?ëþ"“Äþ&ñ‰?~.|)¤ÞøLx5Ò÷JÑNo¢,>ÖuŸÝéöÖñ[C…¬øNûCÖômI¤ú%þqkª[ɵÒ++ªº2º2†VRYXeYXd ‚$r8¥¬ŸÕéa¤£(R¡O&áºÐ¢ë¸{XB0¢š–'.JT©RS¯^¢¦ªW­:“GÚ¬DdùœëU¦ã/v°ªn›Z¥ÉƒÂÒ§ï?g‡ÃáðôÜpø|=*^ ãÿ…:ĺÃi>_Ã'Š~ø¶øN‰^#ñg‰í!ñw†Ú-J+xnM÷ƒ¥¡ÝÏa!˜M-Œ–òÜAkpòÛBxcÆz_Šï¼e¦ØAk{à_Éá rßPŠÞ?´CÐüImuj°]]Óu ÄZ]íŒó‹iåŽb^Ú-£q'9¦ÝI+cš›æqä­ƒ§:ÊŒ§,-9S”åM:²©Nœ+U«VW+(ÅYAF2ïu%îJ×ìWº'4е_j~3×5ߎ¾ñ¶•'†|[ákŸ èÚ_ösñRþÖ×í¼i}yã+O øow†|7%õÄzGÞÖZ•½üú•¼ßÇ&“|4û¦½ÒµM: n •ø“M¹Ô,ímµ«"úΧ£Ë}¦­ê^i­v5>þÖÚýd •ÒÕÓXYá©/³O ZJµ8RZþî Q©K™ÔŠäŒcl3TœòUãdý¼1V»–")P©R£wrUS–åÒ¼¤Ó¯W_žž-ýœþ6xÿÄxó^Óþø{XÐfø[ýà?|iøÁá/P³ðN‰ñƒÃ:½´¿|àoxÓÁ’ËcñI5=}ÂÚŸ]2纵…Λ.®Ûßþë6ÿ<'áÝáÖ?ˆt/k‰ªøüJøñ7GÖ´Œ^&ð­õo‰ÚÞ“¤|OÕt«»ÜxçÄÚ°Ò#Öô¶Ò.$Ñ¢¸ºÓ4Û‡úÿÃ>4ÒüU©øßIÓíïá¹ðŠ£ð†°÷±[ÇÎ¥'†|9ⵟMh.®$šÄiÞ'°„ËuÇÛa¼Œ[#†æã®­&ÝHó;8âjá3š¼+ÅÃ^Ò2º«‡ÆR…7Z•Dã*UjBš¥’FpýÛ‡+jXzSÁÓjMJŒiƾ*œâÔéVÃ{ZÊ•zR…xT|É~vÛ~Ëõ¯xs^ñŽ±à‰¬ôé7x~÷Å:ŸŽõ-ÃZ'ÄÙÿÅ:~‡?Ä;¯…~×¾$\Zè¿ µÈ,µïé7>0I®ü?¤ë¾-ñ:EsâL¯ˆ¿³—ü9¦x/Zðׇ<âÝGCøâçðí¬úÕ¥¾¥'Ä?Ûá¿ÅÍçV½°ðN¹>¡è¾Ðîäñ¦¸tmM´ ¡{»K fÆ oôžŠtç*RÁJ Åàq³ÇR“÷êJµw¬º³©Ï*²® ÜçSžN¬YsÉ»§Ê¡(§ ÔéÒpIBÔÓ…>HÓQÆ‚ŠPŒ`¬‘ùÃâÏÙâŽõÏø÷UÔ<á¯xâîÞøKÃ^4ñäâ Ä_³Ö¡áÓÇú‡<ãƒÄZoÀÉfñ'´­Ãþ!𾵯ØÜh^׿°E֡YÁá=COñv…¯x3Y½ñÏŒ.¢ðwíWûG|B:ö¦t-C·Ô|Uã~çáÇ‹uûg°Ò,ôéü¬[꞊ÏO¶–1,÷w ÔTT%‡ú¤R†4^œ#{Ó§í)TITmÕ©ÈèaÔiÕ„^•e¬)V•6å7RRr›«*²nÍJS¤èÉr[’)ÂS‹pŒg8ÎPœåMò/ÍH?dÿŒo£xv $ðަü9Õüuà/…úÇ_‹–¶0éÚ/†þ xg_Óô¿ÚDø}áOŽþѦDzê¾ð¶«wñsNðáÓîü3¥ßéþ×dÓt¿{ø1û>'‚5Oßkþð¶¥øÏáî…àûÏÙ|Bñ¿ÅËäœxÇ⿉üdº‡ÄˆžмUâ MãëMJYuYÛR“Sµ’Ù-¬l.ï~‘ѼO¡ø‚÷ĺv‘}ö»Ïk‹á¿CökËìíiô]Ä+eæ][ÃÞt}{I¼ûE‹ÜÚµýœÎ. ¹‚ú©¿i ФUHb’¯'5Íí£‰ÂÆœª9?âÇŸ;”Üá(U—±å£QÁ¹Iʧ´æq9SŠqm:rÂb=­Å;û:˜zÑ’u#Ë^ssž"ukJUÁ:¿ì³ãëÏøz[wKñü'ñDÖm/ˆ¾¦¿àø^øUáçâ¯ÃÛaãÿ ë«áísPñÖ§¦é:ΜÞ0×¼QáÆ²¾Ðµ‰uŠôßß®>ë¾*Öõè^ƒÄþðï†F™¡|LñÿÄÝwOÔ­¼kñWÅž*¹‰Þ8Ñ<7ã]N=vïÇv:Äz„ïo¨C¬B4Šôí6úï×aø·àë»ßZéÓßêÞ:ñoŒ¼ ¤j°ØÉk§Aâ¯Aâyµí'P:›X^Å.ÿø–ßO–ÖÊò ùt©¥·•¬¤‚î^öïR·²¹Ó-&ŽýåÕîå²µ{M+TÔ-¢š½AßS½°³¹³Ñ- ½”ÑŬÏac=óÚi\É©_ØÚ\»ÊJ§=ê:ÒRœê^Sœ¾« ,å9¿z´ëPKÛT¬êT«*•*JMתêKKÜ‚JœhÅ*tà”#F,ml]8R…­FlK­~ÍAÂ1•Ú¥‘~'~ÍZæ³ €5™_Ú﯌ ¼S{ñ'âOÄßø«D´ø©ÿÄ>(Ðõ¿ÝxÛ]ñ8Ñî<,Ö³x/Pñ'„ìg³Ô^M;ĺL<^wì×ñ"-6j×á÷„,¾%éÚï…µ7ÅW?¶‡í3ãbÙü9á¯é~¹¡x«â÷†¥Ðo|e}öêþñ÷€¼a£kÚî—ã«{khuÐÚä|EãM/Ã:ç´ û{ù¯> x†ÿÃz4¶‘[Émm}§xWÄ>/ž]M溷–GÓ|7}RZÃ{3_KiÀ–òMs®eMNjê„”œjRŒqUq‘*±å©bqŠ“”§NU—²”=†êôÚkÞŒ!ÒœS¥5R*uåV“½9©ÑÃaÕE(¸ÉP\Ñn®'Ûø‡Ã¿„ÿ|)â¨gñ<¾ño‡|IðKáïÿß[<1¨Áâ?™ô_iO ê~ñ:xÅâž8o|ˆ,ØèV×ÑØé¿;|*øñ²ÛSƒýÃ~ ÐtêO‰µ=[ÄÞ#ñ%ÿÄè~øV_… ñEïÂïxPÑ<%¬ÞèºF›«Z|@øcñ;Ã7~&ðÄÖºGôOÌAÓ?I¨¬ñ¡‰Ž."•ðåÇÛ>Ýý§ö¿;G³“í?Ú_ð”xßûGÏÝæý»þOý¯Ú?á(×üÏík¾²¹?Cqoà_Áy>­sw„ü9 Õοuª_k·èöi<úÕøc[¼Õ¥•ZMFëXðׇµK‹Æš]CCÒnÞk zÃ/ÎÑú¯ÊGY\ÆïxŽ×í;üŸ ø.ãìnó<´ë=í?Ù¿ð”]ý“ídò¾Ýÿ^ý£ö/³ÿÂQâÿìÏìŸu•ÉÙÃp¾:ñí>¬Ö’xOÁpÁm5Ö¨úWk={©ôë)´;}ßV¸ŠâÎ=jëOñ.­ª^YÛhk‡­,t;ÿ’ÞâúDm/OÕe~.ÁCbÏ~Ñ÷7Z]ͧÆ+- ¿iÙÛã‡-x@¼›ÃÖ2x×Q×´Í[Ã/­Âðãâ7Žmt«VÔô}_UÑucÁ_ þ#é^µyá)ÍñðΡ›â½ZÑî­ï¼+oâ Åö›Òœ æãJ5¯œ%Í5x´í BWRQµ¤µÓ©Š’IÉÃÞO™4×›M[½Ó<»ö`ø5®xÁZ”1²ñžuwâ}*÷@Ñuï‹>1ñÇŒ-9|,økñ‚]ÆMà‹½*ïõãÂ~1Ð|aÓWE‡Q³×4'Ð4o 꺦±¦êPχ k²_<Æä0Æç<«0Í14hÂø Ÿ G˜NŸÖ0üÒÃáñ5iSœ0ÑŒkÖS«}Z•WOš¯$e•L Â4puñt0”¥Q(×ÅÔ”()û:‘ŒjNšrN¯3„coi8·hݯËO‡Ÿ³‡ãý¨þ üSø}û@鿵¯üqø§ã4øsá[o ßj~ñ£ö‘ý©¾:øœA­x{â?Š.|)ðÛHÑj ¡ø½g7…nìþ2x÷öxý—­ðúO[hÿ©¶Ç‚~!øÛà•‰ø]ໟˆþ/ð'ÆŸÙ×ã?ôÍwÃ>ñ4OƒŸ¾üLñO†¼'«xÛWðß‚añ–«á¯ êÖÞ·ñ—м!áKÿ¾aâø_K¹¹×,|ÃÂ^#ý¥ü ñᵇÆ%ÏïßêZ%ÃK®øÅ–—~ ¿Ñî¢ðŸ‡~ýš> ø‡GÕµ]j[{ërMVûÃkm¢êz6©z–µ 4¿ ÕÅâŒÃЍ`ó|fEŸpålgF¾–}ƒÁ`ñu§–âð™žC…Äã¨Ï±°åŠÄJ5ªU¥‰…Z*‡±æÚ9^'©[ K€Í!Vƒ†'êuq(Æ8Š0Õ0õg5B²«,;\ÎŒ”c S•9ªœí8Þ9ý‹ÿiÚOãŠ>&üDý•õ¿|5ø¡ñãÃ^.ñÈ>ë:í¿ÃH>&ÿÁ-5McMñåŸÃÏŠ¾0ð½ä·Þý›¾4Kâ/ ø{ÄÞ0Òoì¼5sáõ¾×ãñ?‡­¼CJûþ ÅñoြQeð;öZð;'Ž~þÖ~+øFÓKýž¼quã_‚ž!ý¸>kü¡xãg,¾øË[øqû!Kñ"ÛöTðgÆ×½ø ðQÆŸðóÅ>м'{¨xXþ„o>"x:Ãâ'‡þ]ëWüSàÿøûBÐ?³õI>Ýá/kÐÎîÚÇRšÏµ®ÊmS˲Œ*pŽ.¥˜ÑÂVQrž*†'+Äð¾.•z²r†&• qÆÑäŒT)ã~·J²œ}¶¾yûzó«/kRx¬2tëF…*øl]<ß ãG•B u^¿½*Ã઩sÓ§Uþ-~À¿±gÇ…_­,B«VŽƒÄâ•h ¾¯B­ m¥[_1•GoiE|v30”©¸¥8â1Õ­UCë2§êר¨Råþ^ÿl/ø'e·Á„ŸµŸÅ?…ß³¿‡ü áí ĵN¥¥j_µxcQÒÿeïÿÁ9µ-Ä>ð½Šô›¯ x'ÆßµÚÜxÃ\øu¥ÿbÛê¿n%øá®ècS¸ŸÇÍ«­Á>hø«Ç><ý’?eKþ Éàÿø;Sð®‹ð²ëƳßÃÍsFøä¿²íÃà;ÏÚâúÙgâwLJÞÕ|mâ?Ÿ>?|3©ø³ãŽ©sà<[ã&‡à¿ ßê_Ò§‡üKáÏiï«x[_Ñ!|ø²¿°lŸµ7í3¥_þÕ þ ø“áÂ?Žþñˆ|ñSà?Ä¿‚?üK¢xKàGü{öBÑôoÏâàî·ñRoÙÿVÖ¼à¯êZ¸ üWø[ã]{Zð¯ƒ~%xž'ðá¹!ðç†|cáÝ{^ÐMèÓ¯µ£éZÞ¡¥›M@‹ ‘}o‘zE¬»';)Õ­:øÅ‰MB·Õ}„iA*‘Thað¸tãþÚ¤iÒ§…¡:”ã5†«>ib¨ÕŒÜE†©,%%iÂŽ §VêØ¬5jµ0ÉJ“¤£RR«Rœ1 ØøFRX|U)Τ¥øûÁ6ü?áO‰õþÍßô߃ÿ tÚ3Ä~ø{û`i?ðNëk/…Ÿ¼QãOÙ'Ä5/…ÿàžÓAû2xS@7Ÿ ¼kñÂZŽ‰à¸¼QáŠ#ƾ8Õnô_x»IÔu‰>0Á?h?ü øÓð»Ãz¥i¤üÐ|3ð öPÒ8ø)§Ãã/ƒø_û(è¾ý¢|/€*ØÙüø•¯j»–>'Ðõ^ð½÷›¯xfÛE¼ÖôómwYZø‰/äÑ®ó[ÇkwèÒõW²žàE-œðÜyS&ÊÞ¥R¬êC jR£Z%I{9*õ±S­*ð·Å4ñ§Žµ;ÍÄþ-Ò5-_¸ý°üK¯üPøÃû-ézÁÏGü/Ázïíµ©ü.øGãwÀ_|akû>KðKö¡øað÷âoäðå·â/ ~Îÿ´‹4?ƒWþ(Òµm_Âþ´ñ§ˆü3ð¿Å~%oh1Oí¯â}BÔü3£ê·ßeÔ|c«]h~·û5äÿÚ:¥–‡«x’æ×ζ·š ?+EÐõKß>þ[[wû/Ùã™îç·‚e×üO¡ø^-.}vûìë:öá:Cmwp“ëž ¼M?G±v´·œ[}ºúX­c¹ºò-ybŽ[ˆÚXÃ:õ'†ÁTŠ(RÅài:¥‰lÓëTTéÍóÓxʲÇPÁ6èT–'FŽ_ȧ(WŒÑ’ÃýfªQ©Zs§Œ•LJö´©áðʬêÑ­EòÂxã[ÛtêÐÌ0ôñ‹¨Ã…Æ3²¯üÏÅö?|/ |Aý•|JñwÁ¿Þÿ‚jøDŸ_Ó¿gOÛá‡Ä OÄ?³ÿü³Oðçìï­øk]×<_ð/M–ËZÓ>$ø¿Æ:dž›Ç:¦¥§x!tïÿJž*𾭯ãáxûÅŸSJ¾ŠêãþûÝ nÎ%4]M‡á++MGÄßÙöwúç‡ü7i7Ù¯.üÝkÅ:Õ‡´/.ÊÞæTûv±©YYý¢DKK_;í“ÛÚÇ,ñï×+„*Q•9ÅU¥Í‰¡.kÙ{zU]|;”9lýž>5%ªžÎ¥%7*5g ½rUgR2têÔŽmÅÙ·„ža«rË™7ìêtâÚpŒ£:”ãM*U¨þWx3á·Ž|[áßÛk?çñ‡Å‰4wáÃÚ"{Ÿ‡‘7 SÀ^¼øU>’š†»â];â‡`¸ñ¯‡µïZë <)®Å¨Z|@·ñxÔšúÚ×Nßà'ˆCI©iÿ³¾ø.ž+øk{âOÙJ-Sàæ|w}áÏüAÒ¼Cãy4»?Â]r)|Eâ/†×ri¾0ñn™âaðÏþfÁ5«Új§ÔUóIÝÎ\ó›ÂN¥IF ήª®ªIF1SJ©ÎU*ªµã7õˆÖXÇ,T¥¨Û’1P§âiRŒ[R§F¼(B3Oš£Jཇ°£(ª˜aj˜'ùÿ²Ÿ.‡?á%øañ&ÃÂÖ–,‹Á~ø1qû#ÞjŸõ+ϼ]Þ—?Æ{9í<q¨xWÄÞ —Hñ?ÀÿiÞ µŸÃéÚÕµ»ø³Cì¿´ÏíOYø¥¦hÖ~ñGÄM7ÇúNã•ðÞ•mð§^Ðï¼að†Ç]ðåË|Dð_Æ-o¾ ñׄõ=7ÇÞPðÍ¿Šü1â¦x3ıáïí8F(¥/~4¡&Ü)âq8¦›nS©]U”å.f㇭:U©}¹KMVVæäÓ´êÔVR«F4I%iÒSQI$•jt¥B¬Zpö5«B‡:qü‘oÙ/âf·¥ø´ø—áW†àÔíþøÚ?Yh:î–š7†þ$MðÓöjÐüqàÆÕ'Ðüa£Á¯ørûûGI¹¹Ôìâºû5Ý›­T½ÑuKy-¯ííná–ËTÓïl¦I Œù¶îWrvº“•H(IéÏ…›{Êo  n\ÜêQ©>g+Ê›’–T:Nš…©Î”•¹©Bª‚åŒ#ËV¼kIÆ8Âãí)Æ.4cN”⥠°¨§SŸò¦÷ö_ø‹«?„n|cð¯Åšg‡í<1wgáO ~ÎÚ_쯢Oð_ÿ…‘ão]kvZÇ}wÇö 5ïèú÷…µ&Õgߊڔ¶߇ç²QØhž k?¥t?€‡…>ê~,Ðü§ÿÂñѾ2xËâ¶—8»ðô~$ñ•¼|y}£xn÷ų]Ëgkiâ†^.×<;§Zßj–ºg†ÛÅ·rOo¦Îuëí 7UÒõ›f½Ñõ+ ZÍ.ïìïM¼·¾¶[í*úãLÕ,š{Y%ˆ]麕¥ÞŸl\Mg}kqip‘ÜA,k~”§'¸ÉV©ˆXéV5jb)b”“w‡-:ÔhÊpp’§V5-v599¥8Í(U£'/gV*…L4éÔQq“U)Õ¨§iÆq”¤éJ›nÿ—??eo^xƒÂ2ëšÄßéQxOwÔ¾¿ìÑ>µàïŒZŸŒ¼Uã?‰Þ5°¸ý¤´Á«ø>ëÅšçŠ,µ]Åÿ Íyi·TðÆ¹¨øo\µòo­í§?aÖ´«û/jŇˆ~0xoÇÞ'ñw„tïÙ¡üIñsÀ’|0Ó¼3{á{Ý/â®›?ƒõ­Fø£ßu_ |@ðn•à+™’Oø[^ƒÆðéVKaû;ø—Lñ?Á«ÝàÿÄ þh¼giñÝ¿fßhtM;â·‰<[­ &†0ð·ˆ>ø×DÓ¦°‹Â7¿¢ñíO áŸx¯À7¢¤Úê©IÑT#5†«†©M8ÅEG …XJTy ¡KاΡTœå9Ê£raU{eUNö­J¥*š¹J^Ò»ÄÊrœÜç9ûgΜå(ÆÐ´W³§Ëùçoð¢_…_¾&Üé¿ì| â/†ß0ø·Â¿4ßé:n©ñfæÒó@½Ñ4Ù¬þk³ æy£é°Ûê¶÷:¯ñ™§Õ¯<5n–ÆçŲ¿otýò6ºuõÙÃâF½®jzÿÁ¿…S~Íú«£]é>—Yøyáûëƒ<8ÿnaø]âŸh:\úÆ©ñÀÞþÛÒouoÝK¢Ë­kš¥a«Y¥Ýýƒ]é·–÷ÖË}¥_\iš¥“Ok$± ½7R´»Óï틉¬ï­n-.;ˆ%n»¤hòHëq«<’;DD™Ý˜…UU³’@§obá)8F88%;¨¸Q¡‡ö ¤®œ'9Fõ§í£:+)b!Jye ÅÕ]ªµ§5%ÌêT«ˆ§^÷V”' ”•7:n5gEG9º^Ò~ýþjþð÷Ž4ÝþçÀ ÿ7„'ž[Í+ö(´±[í!uS¨]x7Ãß¼ â=Ö¢—Qiþ(ñ<‰µ>ÏÑYÝD4²–~âŸÙ“ã–«wñ‚Ëá~ƒ©xÅ>)ÿ„†føçãÝcáÖñ#ÄZ÷Å këeáÏŠŸµ9¼Qª|<ÕüBý|k¨kÚþ±â/Ù“ö‰Ôô‰_ .g¿ë?|1§j^ ðþµñ¼:¿<;ㄚÌûEkJ¤i¹sATŒ£ÊâÛÚŒ®šÖ÷Šî¼ˆœ\•”œZi¦¬ÞžRM4ý=5>;ý•<)ñx“XñŠ>)ý¿Zñ®‘|š÷Äø'þ;ømáχ?|¨xÏǾµøwá[?kÞ$Ö>x«OÔ4ÿ x/á΄úwˆõ[Â~Ñ´éü©èŸ~Üÿ ?h/ˆŸ§ð—À¯‹÷¿¼s?Â?„÷QxîûX×¼'©êV>—öðæ¥­¶·ðÇÃw:™¿ð_Äï‰ß~8ê^Ó´-#ÀOÃ%ø)ãÛü9ø‡­ËégÁ¯Þøïá»ïøöæëLÓõy´yÅìvÐÜ—[[[û;ÔŠÖîõ †©§_ZÞÙHÒ¤ê$šÊþÚÇU±Ô4ûN»Åÿ¼ñ ÚÎËÇÞð‡Ž,ô뇻Óí<_á­ĶÖrD`’êÎ jÊö+[‡…ššI"cf(H¬xcŠò¼ß …â^Ì2ü×)Íðq©—æ8)C1Àb0Î¥7¸~ZôéÖW éIªÔåN|÷jpp ç%ÆajUʳ>#ÁVJ¾ž¼*¨I8ÕýÜ¥Ƨ:÷%§%sñzËàïí?¡þÑ¿¼mãŽsx¯áU¿í ãÉåð¾*ø™«Ý_i?ý¨?iÿ‰ü"<-âo éþñ:hŸ~"þÌÚ£ø£_Ö¡Õÿg[ØêïáÿÁK_xGâωïÓôÏö̵»¾ý˜þ/YéWl!¾±¦‡oà³áy`@?á7þÀ#oÜÚü_ püq»´ø::xWÅ>2ý¬ÿfo|AøfúÍ—Ä? x®_‡šgÁ‹ï NTV1:¥Rtg nžt±Ù–c,F[†ÄSÄahbªÔÍ+åõ¥Ž¡™á1/Êqx2xMð'üÂR~Ξ,‡öÐý›çñà üwýµ>6üOÐkÿ¾kžý­>!|:ñ?ím¯ü8ø)ã?ø“âçÆËï‡ß ¯¿eüaÔ|São|c¯|T¹øTÿ4߈Þð¿5øÖçHø™âO|2ѯtÛ [?þV‰ü1á¯xoÄ ñŸ‡´?x?ź&©á¯xSÄúM†¿á¿xs\±ŸLÖôhZ­½Þ—¬èšÆ›us§êšV£ksc¨XÜOiwÖòÉgB¤0ø'…XL5fð9– q›«u)cqù>? ‡s­,f#êÙL2ª™fWõš¸ÜV,ÇâhUÄbg*µ1$«ckbªÕ­k‹§Œ„©ÙË ‰§–bòÅŠ£NÃÒu'õŠ8üVŸÕp˜¼v5=–3±þP¾-kßµv£ð×Ã:ÀÏþ×§ZøûSÞ|ø‘á¥ÿ‚©~׺·ÇŸxöÅøýáÍá޼_ðKö“ðÀ/ê ü%ð·ÁZt-ÿ‚€\þÑöß4ŸZø_Gø}©iþ×ôo~ùþÂßüoáïüHøñWÄ_µ‰?¾7|ŽóMøÇãï‰:¶—á߇þý£>2ÇðKø}ðÛÅZ¢øCÀžO‡ú¦ŽÚ>µá_ iº¿|'ÿœšÿˆ ðgƒþxOÞø}áO xÀÞÑ´ÿxKÁž д¿ xOÂÞÒm£³Ò´/xwDµ±ÑôML³Š+]?KÓ,íll­¢Ž h#‰­SľÑ5i:Ö¿¢i¯‹µ;Âzf©ªØØj'ÖlômOÄWzG‡¬®çŠçZÔí|?¢k:í͆›ÍÔ6‘©êrĶVSÅ£­jS¡*‰âóDjÍJ2Ÿ×ñ«N¬èÊ®#“R4)GV5çûØÑâ1KŒáÏSÚò„ÂÊXzZѧJ§B2å§Í…£WWN3¦œg<ÏÙ`ð°~Kão üa×¾|dðÌþ/ð†«âxSÅÚWùü+á [ÀM£I©èš•ž•g­_ë~=øƒ£¨ý¦{XßÄvÚ­¹].‰÷#ÌŽ<¯ü*Ö¼) |)ý¡¼}àÿƒ"°KüñOüqà;;='JÓn<ð›ÅzÖƒ¦xK[ñ¬“[ÚÃáx¾ë>&Ð5 ¯ÛêQß>™•uuö%ËËîÕ…ýÚÔiS••¦žáBNkø–úÅITöʤæõ§RŒêb'_¡NÓÃÔ·½†­^¬5÷d±U0“ÄAÇìßêt£EÓp…$ä¥N¬U(ÒøWö‰øK^ðWˆ¼$‘áMNøs‡¿²Õµi¿ÇÒ†â(õlŸ ɉOK.ñ×ööûßøV?ð×dÿ„Mÿ†tûoü5'Ù¿áuÂa¯ÂGÿ —þ¿ø©áÏü ^Gü/Ïøµ?ð†ÂCÿÇÍý¿_¥÷zvŸ~öR_ØYÞɦÞ&£§=ݬ/a¨GŲ_Ù4Èíkx–×WVéuŽu‚æâ â9¤Vç§ñ÷-¼agðòçÆ¾·ñþ¡¦¾³§øèñxÂûGí&MVÏÃ2^.µs¦Æ,îËßCdö©ö[Ò"]­U…´Üçsb±¡x´Þ%V¯:1­/z§²©SŠÂÓä“ÃUR¯*kØÒˆÂNŸ*^Ó–†Vœâål7°ÃÂ~Í>XB­ 6ˆ|×ÄaåS Ü\ÕGù­ãm#âî¥â“¨ø{Køí¨~КŽ¿hKËMGSµø™/ÁOi þ.i?î<o®Mgû?bîÆëÁ–Ž›ž ÝÝåõK=WSÕaºî¾ø+ÆÞ#øCñ£K:ø‹âíVMÂÞ'ðW‡¾ | ý¥~Ýxgâ7„¦¼ñ^s¦ëŸ´×Ä_‰^"ñ$šˆ´_ C}eáEáO£C{aiiy®Í}{ú9E$§5)Óš§RX:juc%F¦R•:Ð¥>hÙÔp­87Ï*ôÕOl”¥ý×VœçxSÄλ„¤Ó« ÕU=•Z°ä¨ýœT°ôeÓÃT©EÓš›gä–âŠ^2ÖÛÅÞ¸ý ¼W§øËÅñañS§Çßè:„uÏ®¬<oà/Ûê?¼Y¢Øx 5V°ø£ð[_ÑSTðgö´_ü l÷w^"Õ:/ ø/ãVƒ£x_^“Ä_´uα§x_öOñ%í¿ˆÖ ++H;a¶´¶H ‚%ÉÛQ¢.N«N‰"5ÝüU‹ãmÿ‡uÅñWàÆ·áÿø.Ûâ…¢XOk§éÖu/kŸ ­×Áøqmµ]³Oáû™=§öfÒþ9¾§®Mâ_Š>3µø‰{à[è|Qá‰_i7ð6™ñ5},M¯[ø«Çµ/„Zý®—sýµie þÏz—à x›JÖUÓì­ômJ³Ò¿BôÝ7NÑ´ë#G°²Ò´.ÎÛOÓ4½6Ö ;N°³…-í,ll­cŠÚÒÎÖÞ8à¶¶·Š8`…(‘QUEÚèu"¥YS©Õ¯­»N’ÇBP*VýÝ:1RŒc T…<64«S«ƒ…yÇ,œW3NVÁ©]))Ëù£:­¥:µe;ÊSrŒ%)Õö´ªF£‚üÇñÜ?´]—Ä¿ÅáÝcâ_~$ËáÿCáÛßøoã?ÂO„¾ ¾µø3ýu¢hž!ñÿf¿Šú¿ã;ËIíì¼GâÏ üNð1Þ¯âíÓìO†¾ø‹â[Á:%ÏÅÚVðf±ãý>oià/Ú÷à†¡áÍ>/…Ÿæ¼KÏ|mø›ãßßé:ïˆcð•ì^ ñ¶™á­[Òt‰´qc«øŒ^j£>&ñß‚<.‡Œ|eá_ Ïâ}VÃPø›Ä:Fƒ/ˆuË’«o£hqê—–¯«j³³¢Ã§X ‹ÉK¨HX°ÏUXQ«í"¥N¤éÇ­ÉȹjPœq\•iÅ8EW…ZUëÒ”=­iÔúÅJ“…w iV2’†“¤½Og%Ì¥58{_Ú;T•jœ¨áêÂq…:Q•)Bujõ>ñ†ñö ÿ‰Þð%ÿŽY¼¤üPø›ð×Ä÷zåÍ·ˆ¼AãÏ Üéÿ¾ϪxŠý´ÿÃáj¿õü7ªßöú'‡ԒÓO}5G|5ðÄ_êÞ Ñ.~(~Ðz·ƒ5éóxÓH~׿5iñ|,ø§5â^xûãoÄßøÖÿI×|C„¬obðo´Ï hÞ“¤M£‹_ÄbóPýC¢ª›öw¿¾ý†ƒ”ç8ákJ¥7Y»Æ¯=7J•fàªb=…:¸Š•ªÔÄJº©ï¦£û¿ÞbjG“Ýp–.œ=£§(òΟ³®«×ÃFœ¡K ±xŠ4©*RŠÇ´¯ü{âßI®ê—~&ð&‘ñ#á‰tÏ ü&ðÏÅ/üSÑô↮ƒâCð¶ïEñ&¿ñ7Røqâ 'A>ñ •µ—¼ñw[ñ67‚¼Q¨7޵¿O¬~«ÑQòB­5g«Û’nnxœ6 7VjJU”i`éÆÒõcظªß¾¤ð÷Í­6’‹§:2VQåŒhT­RéÁÅÆ7:}ާá}~ãÇZ…›Qñ Vž7Ö¼­ëw×>1xkâ¼ịw–ºNµâ¯ŠøðÎßãw‡mü`>/Ûè—:}Å÷Åk? õ]#âFñR÷Aÿ…‘á|+ñCKªZøªÇF¸¶‡Åvª5LiÚzêjËafº¬ÖpéÒêbÖ¨K§ÛÏ=ͽ„—¡>Òöp\Ý\ÜCjÒ˜"žâyQI¤fÓûjU®Ó‚”j5ȹã:E9*|ŽŒ+¼V Ž"Zt©¬/-8áéÂ4#ç¡UÊ0Œ=9óÊŸ4+ãšufæëÎ?ṮXy¯kí+9ΤªÆ­iV‡æ%‡„þ:x‹U×5-sVý£4y,;êsø{ľ±mgV¸ÕmÓPÔOëÝP‹JÒàÔ¯5¨4ÛuFÒÆÃPÕ¢³·R¾±Òä¾›L²¼¿HÅÕÕ¦.§©Kcm<¯ ¤š…óÛ¤mw9‹Ir¨òÅâªâ¤àùjGÚaèQŒ)T|Ü’¡*3­‡©(ÔtjW­(G™©!]^_”pð‚ª£:n4kûZ«N* t±1jªqök¡Ô|—Gä¥ß†þ<Ùߨéú·‹>(|)Ð’ïâ6«áMKÁß¿i‰vÉãGãïÅmS\ÔõMàWÄ/[ùzç5~ñ·Ãßè3ùš¨…ü]k«}SûHXü]‹M°¼›Çº¤ž oX\ÚøSá7ÂO°x¿U²³ðî½r|1㯈>$ë¿ü=¢kZ¤V†øáìxwV‹JƒÄ~ñf‹uy¡ê_hÑS+ºq„ya(V­Z/’3¦ZÑ­aQNœ§O’0¦æ§J1…?ÜÙTU\RU%&ç(Γ¥$ç(ͧKÙ5í©òTJw•J’MVuª×« ÔçVñüªÐìþ<ÝüAðÕ׊ü[ñ§á¼–¶ß _Á¾›áçí!ñŠÎû§Á~OøwÅŸüã­ à’ëÚŠŒôx§ãoÂ!ãÝ{È|Uö»(¼,š±èÞø¹ðóàßÁŸxzçâ猾$^øJÛKøáoø—Æþ)¾¾ñOÄ_èúm†­¬xw_Ô§²ðÚx3â&“áWÕä·ÒtË? øfóǺ½ÜVóßø†òûï**¯N­.Y(V©CžÕ'í^—µŽ"“Ä6ñ>Ó0§Uýz²ª•LBxªt©Uœî•ÔéÍòJTè¸FôãÉíT#5}е,¢å‡¥:SŠ„ò¯Jñ™z…¾3h_aÑuŠ¿4í;Â÷¿ ô¿‡×ü.ý¤¾'i^7ðe‡„¼7eâñ/|ñ*úv·âÃã;Oë¿~j^1ðüú”^%±Ö×F·ð|Ú7Ò¿üñWIø1ð¯û7Æ÷ºumÂ~!ø¡sñÇJøñKĚ߆´ˆµÍ#O³½ø™ày| Õ»DÖ–ö÷EâÝÝ\øf]^óS¾»ú~Šp›:•¥*³ÃÊSåŠæú¿´”œ•›—ÖêJñ´Ü¾­_OÚG Ož¤d¥å ^MB“¤¹¥)MÞ§9¶½úPS…¼¿X„jKš¼ä£%ù{࿈>²´ðž‹©~Ðð½¿ÄóxÿP_ þØ¿÷x‹Rø…s«ü%ÔÏÀVúzÝ|<{tGðÐ:ZCs'ªé¿#ðe‡ÄÍÁ-³øÁñÚo†ZÝœ~½šëKÿ„*×áèµñ‰ížk ÝÝ|2ø™sámJãM´¶Ô%ø¢y6¶òj±<¿©úvŸªÚµ–©ag©Y¼¶Óµ¥ý¬–­=•Ô7¶s5½ÂIKiyoowm!Bð]A ÄE%‰nVÕ=–"­yã(SÅSÅÕK†“œ0óÁT§X¼Æ^Ó OF¾o…•ju]xá3j”¹åS B¹4§Sõia¦©TÁ^xIʬ¡‰iâ)â+Ò¨L–&ŽU‰©N¥5N¦#)ÃÎ1¤«b!2¹?\}¯À¾ ºûOÛ~Óá?\}³íßÚkó´{9>Óý¥ÿ Gÿ´|ýÞoÛ¿á4ñÚ÷ý£þÌþÖ»ë+“ðöü ¾ þ×ÿ·ü"~þÔÿ‘§þB?Øömÿ‘ãþ+_øùóäpÿЧþ†ø›}®³Ã/ÎÑú¯ÊGû@iºŽ³ðãf£Ø^꺶«ðâF›¥ézm¬÷ÚŽ¥¨ßx7Yµ±°°±µŽ[›ËÛË™b·µµ·ŠIî'’8aäuSøSâoŒµ§Š¿jïÚÉ®?j^?ý˜þ'þÎøsð£á7ƒþø´x—Ä%¸×¿lë{ox/ølØøãfmãïñ|bøËÀëöšÐäø{ào|<øa©ü2»Ôú2®zÙÜø¯ZŒÛ]ª/‡¼0ëv÷¾#’Æw“Rñr½µ¶ua„­níDi-í^xŽþË!½³¸Ñ_ÅDžþ >~ο¾ø£À^>м?q>x—Â>8Ðu‘ûS½þ‘kã_êúwˆôMj? xŸÁ~&Ò.m,¼C¥ÚjVú&¾ºýƒ$1Ùê_ÚpùÆï³[Ñ4_hº¿†üI¤i~ ðïˆ4»ý^Ðu» MWEÖô]VÒ[ SHÕô»ø®,u-/R±¸žÊþÂö ­/-&–Þâ)!‘Ѿ?Ñgø'W‰¼I«ø;ß¿b¿x¿ÃÿoþÞð®‹ð»àf«âMû*þ-+Tþ×Ðìt;OMþÍÔî ÓoþÙkØïçŠÎã˸‘#oâ ÇÄ<$ð˜N ãÏõK ŒUébpO1ÌðrÍ1U"¢ÔaÆaÖ'ýš>Ît¥Âúr¶]^ð¿ŒiÒÅqæIÅY†;%«:Ø g ch`¡†ÃÔ–¤es‹~ӊê˜:í¯«Êµoe(N¤Ü¿>?à›¼EmñnÃþ;½Ô/5/ßV¾Ö/4­ }{â¿„/¼U}ã|9„\hÚOƒâ6ƒûTYx}E•Œ?ðŽøGÁ¶ÒYh·66žÑÿAñì¹â+ÿÙÏáW‹µO^$ý¯t¿Úöqøðá¾·?5ÿÚCHðœü'Äïˆ üvo>'i^ƒÀ~ñ£ü@ñŸ„ôëmßÂ>ñ3x—TFѵCoú=áŸüyáGÁ¿¾øKPðM†¡¥x2ûÃ?<# ÞxGKÕï5ÍCUÓ|1u¥hö“èÿ‰üK}¨YéOio{yârææ9fÕ¯ÞãÕkä¼2ðÿ0à^Åpö;4Âc°‘ã<ÇŠr¨`ðõhÃ.Ãf™•%Äåtý¬Ú:|O_6¯‡:k“+ÄÐÃMO¸Ùý§ñUžæ0ÆeX,~0áÚêf˜¨âñXº¸L5l§˜f5cyãjÕÉ£‚§ŽŒªÒž# Õ=¬(Ê4ßñ‰áø3à_ìkâI|yðöUý…ÓãOüÃ↕à-CàÝì:ßÃßø(Š|Gð³Â¾6Ö¼Oñ÷ZO„_³ž¿´?À_xZñt_ü[Äø“Á?þ0ø£á—Å{ÃþøÉu¥þÖÿÁ*´Ù ÃvŸöpø¿ÿ…ø­­M§ø"oÏÿ©ý›¾|Ô4-&¼Jtx¾3Y|<ý¨ÿiýKÅÒÞ]¶¬þ–þ_ G§ÏmâX¬,u›‹éÚÃö:Šý‹Œúä±’%Ab°¸¼"¤æ©ÑÄæ™ŽkuQ”鯶cWÚCð—½JG˾«—`þ"qu!†„ç9F†!b¥I¸Î³ÂeX:’‹¿µmÃ+…JoWãV¢­Y×­MÔ©üÊþÆÿð€xrOŒ>ý¼QûþÑ_´•§ì¯ãˆ/ûqþÌpøk@øáãOˆ¾ñ·€µ üÿ‚—|4Ö›âµÍÇÆŽ”Wò_ünøñ%>%øƒV¶ý¡_ß¾êÚýþ½köý¿þ>Aà/…¿´M·íW{û9üý¡¼Eñ×âÁÏ‚–CöMøyû`xÓáׂ¬~|7øáÏ€þý±>j ¾>IãÍâŸ_þøƒâ§ÁÚVïAø­àí+á?­á!ð{Ä¿ÒOˆ4=7Äú·á­a.¥Ò|fø/¨Ýi³ü-´o üwÖn>&éÞáÚCöæñæ›áRÛöðø[¬Úè߰φ$ñ'쾿³çí-ðgâÍŸíCû_|xý¼SãËßìïðÑ<_ã½á~ƒà­j¿†>ø3ðßEý <'ª^Oð×Zøe>§ð·Rþ“觇œ)PÀaëÓúÄ2üG ª_¼9O,áì> ,¶¥KάÖg†ÃT†.¬ªJŒ]xû,£†Ãцœ§ªMQ•\&2•j®«RxÌn*®.xÔÜcs§:®£ªÑ¥Nœ~²å,Lñ‰ÿþ6_ÚÁ=~|Lý¥>/hSÅð§öóøSàï|qøˆþøi¦ÞxSàWüŸHøgeñâ-ÖeàÔ¯<-à­;Xñ®¥¢hÞðZkj—úG‡ü5£Ém¤Øü±ûZþÕ¿|{û^|ø—áoÛ«àGÀÿÙâmoàmÆûjxÅ?²¦¡£iwZÇÁoø*'„5{}ã·ÄÍÇ üAr|Iáx%Ñ>3|[øÇñÇ⿊>þÌ_²ýÏÅ­Â >~Ïzw?j¯ ¿ÄïÛÀþøÝ©_x—À'L·¸ø½ðgá/Áï>Ñ~Ëð§Àw^1›L×-ÞÓáN¹«xSùçöUý¯¿l|/û<ÛþÝÞ ñ‡Ÿ¦ W^×µ©meÖ5½Rúí§á¯„ÏÄ3ñI!×­üe&‡iáË«‹?xÊËAÔ´=õY4è5ŸYëðx'Z¸Ód×5Y4íGVðõÉ{#ÙÞBëO#B½l6[‡‡Õ§,"©B½\LX×ÃÇŒÀáªU¥Ʀ.¿Õg¥Žuñ1ž;ncWíñS§.ºU)BxÉ(U§ ë éB•iÊ¢©v 1ÆJUª7 *®.8ùàã‡ÃªX $ðm:3¡…Wù7}ñÓXøMðï@Ò~øÃBøw¥xj‰_ü5á}SÅ üàÿŠ> ×>6|E½ð†Ÿð»Áš‡Á?ˆþ4øb|3£´÷vþñWÂ}Kð¾µá»ý?Ä墨žöFµñkâ†uïxsWÔüG©[ü#´ø‘ñgŇ‡Ê˜ü=J±¨òú){_mV Qýôå5í”§ì”Ô'J¶5F*^æ"¶)T–_Jœÿl¾&ÇñCD×ü/ñ³ö‚ø­xGÂÞ2økâ­ Ä¿áŠV÷¿ ¾#ø“Àÿ¿f/‡wÖ¶—^Äš$7Úf¥…ã#M•õ/ßÛéþ³å´ãð+ľ?7þ+ÿ†ø1 GðÇÁpøOŸ¼áï‹þ»ÑàøŸñ 5Ož#ñ/Ä‚‚ßÀ:ìPÛkúΟáFÓ®“}$z×êýp¾8øqáOˆÑhvÞ-‡[¼´ðö½¥ø–ÂÇLñ‹ü3§Üjú-õ®©¥I®Øxc]ѬüQec©YZ_Á¤x– [H[Ëhn ‰•×uZeØ:¸?m ºNº§AÒçèÓ‡º¥NIûEÍá¨Óö¸™ËB•jØŠ˜Šµys¯Zci~iTŸ´q”½¤©P¥RNqQö’¯:ÅU—³¥ÕÄT¥F•:é ¢Š+Ò9‚Š( Š( Š( Š( Š( Š( Š( Š( ¹?[ý“À¾ µû7ؾÍá?[ýì?ÙŸdòt{8þÍý›ÿ¿‚?³¼¾WØá ð‡Ù6}Ÿþ}ËþÉ´ë+ˆøfé'ÇÒ%µ¥šIà :ZX^øsR±µFÐlm¬µØi^¿´€µï…´½7×PªO¢XYé’ZÛÇ/ãøgùîßדGê¿)½yíâë¶Þ1ñî¢i:…Üþð½»Í¬^^x~Þo±Iñ6êÂÙuË/‡:´·Ûu¹ô«KËâsûKÖµCá}ìÛAñ7Ыˆ°t?v»KßI}:I¯|LT¶¹Ó­l#ñm­¥©å²½ÖõKÏ_Íy…¬4ÝOMñ…ƪ¥¼Ú¼·Jÿboªk§_ÎÀ¾×§ê½&ý¤¼Q㯠þÏ¿üKio¥èðüø¹®YxEñ–³ˆ4ì_üC¿Ó5½1!ð¶œmµ‹_ìÏßİëV¦Â÷Xñ·Õ$ÿ„GI»ñ—Ã~&ñ´^+Cð×Ã_iº§‡¾ÝǦhz„ß>%|ð½G¿ðxÑ~\|5Ñö í/-'šÚæ!‘ѾL°ý‚f*ÆËKÒô_Šún›¦Ú[ØiÚu‡í7ûNÙØØXÙ–ö–VV–ÿc·µ´µ·Ž8-í Ž8`†4Š$TUQøÏŠ ÆÔtO‡~1Ö ùŸö´ø»ûE~Ï_´‡í·ûB|Õ> ü ýŽ?e_‰Ÿ| ñ;À^9ñŠ~0è¾ñ×íq7ÃO†~$ð§Å/‡zwŸø‚ÂÚ÷Kðߌõï |i´¹ñ6­£X·Ã‡†ÚWÔ¿_>ü.ð?Â?7…¼¤\iz\ÚÖ¯>¥®xƒÅZþ³«^$Kªx‹Å¾-Õ5Ïx“QŽÆÏOÒ-/uýkR¹°ÐtÃö2Ûhš6•agÂø×öUý—þ%|TðÇ_ˆß³À_ünø~ºJx ã~ü=ñWÅO&ƒ©]ë:xGâ»áÛÿxit]^þûUÒWFÕ솩^]ßYˆn®&•þû€²\߆ò<«.â Ö9Î3[Úâ«Ñ¥N– N^úÂ`èÆ†Xü.ªRŒ3Šu*F»†SÀCÀâ<Ï.ÍqØüN]—}V…jjTiV«YÕÅÏ ŒÃW•l]gˆÄK_‡£,<ëá=´°þåzQž3›ÿ/ÿhoø(7ÄM'öJÓ¼ye§ü<%ñ÷Åø('Â{í"ÓVø‡á‹ÛþË~ý­®4 ü?¬xâg…|}áÿEð;Á–~7×çT×΀<#¨Ýh·/Å>2|wñìƒûn|økãO€ þ|(øiûdü_ø¿¨üWðŒþ%øûâ~™ñ›öÐýµ<§x?áöƃš'Âq¤Áð›X´_‰>*¶øÓµâéZd_ì×Â×MâÏèïö:ý‘uøÓâÿì±û8ÞüLøŽ—üCø‹wð?á•ÏŽü{߇µÝ'<]7†Ä(KŸ jú·†.\Ô/–ojšŽ‹ m6öæÚWøÏö>ý’~#ÞxWPø‡û.~Ξ<¿ð-Ïï<}ã?‚_ &M#õÛRÓtígNÔ4}bÂËUÒu[+­7TÒõ+X/´íKN¾‚K[ë BÆê9m¯,¯-¥–ÞêÖâ) ¸‚I!š7ÙOÏ0þÈÿ£»†î x—T1OÄ–zÿÅO‹^#Ñõ-ÕÚ×YеÿêZ.»¦]0jF³a¥êv5–£gui<Ð?e ”`¿{íU¥Íjj-T^í£6çu8»+I{ÒÑuÊ¢¨íÉÉÙó_O8Ù=}mÓå­ñãâ7Š<ðWãO‹ôOøƒBÕ¼ð»âw‰4o\Ÿ_iúV£á øûSÒµÙl%×õ9®ìÒçÂÚ.¡¤ú%ì’Áâÿ C¥î·ñ§…¾ Öu¯ø[ÄÖÏð{Âÿá;ð¿–¾(ñŸÁø~Yø¹.u] §|VñçÆa¦ÝüUÕüOa~&xºÏOñ%×ÿ]þ¦xÛÁ¾ø‹àÏ|>ñŽžÚ¿„|uáÁ¾)Ò–÷PÓ[Sðç‰ô«½\Ó×QÒ.ì5]=¯tËë«a{¦_Yj†_>ÊîÞæ8¦O‡l?`íÁš-–›¦þÒ_´Ý¾™ݵ¤QZi_³ö¹}5ö»«¤sêzœñ~Íz–¯¨]ê¾§.­âêÒÜLÓ\jž'ñ>¨#¦¨¿‚ø«Âœ{žæ967ƒñUO†­ßZÌëeõ0˜¨â!Zž+ 쩸B­Hò§^›U¢ðð»%&ÿGàÜ߆ðÓâ.§â8õÛi¶œ·ícñ‹ã¾(xËà÷Ãω¶þñÇÿÒÿf¹|á_Ü|:ø·gñÖÃáGƈñXj…ÇŒ ðÿ‡~<|ñpÐ iz•¾•©kÞ,ñ&¿5¼¾(ñÿŒŸC¸ñ‰bÓšñt-:þ_ è^ðöŸ¢xrÖúîßCÐ<9áÝCµ¸¾ÖµùtûxŸÅzþ»¡ã_‚ÿ ~"xãá?ÄøV sÆ¿µÏx“áf·6¡¬Z·…u¯øf÷ÁúýâXXj6š^°/´ BâÕm¼AeªÙÙ]-¦¯aok¬iú}ý·ßpVUÄ™e¸.,Í¥˜fõ¿´§†©9b!‚ÅáªÐxZ9¦#ÛW«ŽÀÔ¬±ø|ÂtìñT)a%N¦ 2•_žâ Ç,ÄfXÜFG€¡†£ìh}QN„#‡©Ábhc(מ J¤(ౕ0´ðY†Ÿ–ׯr¼=|O-ȯÁL¾'xÉñFÏá׌¾-\øîÛöaøà‚^ø™{m þÐúÇÀ?~Ô¿¼Qã ŸÙ›ö{ý¨ÿhÛm×á¾·ào \Øø[àWÄ›=Æ>Óm›Ã~ðî£ñâÁéÿðQïÚSK×~;þÓ²þËþ%µøGðÏöOøñcã÷ÂOŒ¿þ0| ñO Ÿ¿k¯üTñoÀ_„ß?f'ÅÿüEâ¯|=_øZÛâ×dËÿˆ¾Ò~Ük—ÞÕuü?á¿ÔMSöý–u_†ÚŸÂøWšÎ‹á]GãG‰¿h‹}GÁÿ~0xâ'†~6xÃXÕõŸ|Eø}ñƒÁ~>Ð>-ü3×ïψ5í áçü1iaàkVø{§ZÚxQ»ðäÜ}ïüoöQÕµßx‹ÄgÇŸßè>ðσoí|mûeþÙ~7Ð>#øWÁÞ*ñGŒü1 |vð§‹~>ë>ý¢´½_ñ§‰¤´´øõ£üGû/SoÈ$ðí¥Ž•k÷”ñ«Ru±xztç_ÄNŽ%†Ãa¥€L×B´'W³z•èà#)ÐÅ<²†­Lu Dëa—ÏÕTaFpЭV4°‹9×Ä:XœmLi©b%ˆöxºX,N'&Ãa~·]`ñÔ©fRÅJ¾8•j˜ú¾_ðVÿö‚ý¦uoþÒ±~×?~|8ð?í ñ_áï‡fŸ|0ý5†º·ÃŸÙÛ㈾ø¢:ߌ¾|Eøë©üFø•'‚üW«Íªü4ø×ðkLðf‰­øJƒááñ…|WªøûÆ×þ ©ñkOÓþ_x—ö@ÐôëŸÚk ¾&~ÈžÒ?i(5¯øóá§Ä_þ _^|v7_´? ü ñß…­ÿhÏ„~8¹ðƒ|SñûÃÚ¶âÍÃÇãVðŨ×þåÖaOÙ§ZøÃyñÈøkâƒã]cÆ^øâ­Àÿ´í ðëáĈ^*h>;ø£û>x⟆þüUñ¬>ð½µ×Š>#|4ñF·ªÙøW¶z½õõ¯†t(tüÁ:?cÿ†Úî£á/†:å¹›Xð6­¡iZÏÆÞ-ðÇÃx>üI°ø»àß |ð‡‹¾#ëžøð×Kø‰¤èž#Ÿá?Á}À µ—ð÷†ôÝwÂZ–áÍN°Ë èªø⽬p4Þ8º8wJx¥Je•<]zJ¦+ˆšÃÕ¡4ükøcðAÓ¾)|Gøýû|ø'áG§üXÐüua ~ÏŸÿk ø—Eð¿Ä#¡|B¹Òô_ kþ3ýFñ·ìƒû?ü@½¹Õ|Cá rß]¹ø×¤~Ñ âo üLø©ðÿŶ4_‡úoˆ«†ucÉ(âñÑÇWËéTäXxòJ¤ýž.8<­ÕåþÁ{LDœžX„ãNþÓαèÍP”S<#)ÃT¬áR¾!P•%*0’Çf¿&k_¶Wí£âˆ¿³×€|;ð?ào‚þ éÿ¶§Ž?gOÚGÀÓþÒ¾%×þëZ™û'ë_´¨ü9ø«?ì~Þ3×mÃzæ‡â¹ãÔ>ü%Öbñ÷ƒ¢øu5íï‚üI¨øêÏö"¾jñ§ì…ðÇ××¶¿ávÛ^ŸãfûE'Š<%ñ7â§ÃïiÿtO‡úo›èž.ð¼5â_Ûê 4¸|â_ hz®àÿxRó[ÐüWáýkOñˆ Ôþ•¥Í‡ÃEÁF¼pø(⤵…LT2œ¶–>¥&ìãF¶oO2¯B” å ©ËÚB5#Àç(µ^RIN‹§UF3PŒ¡)fÙ¶"Œ9aYªYf#,Ã{yIT©,<©Ô„åCë¸âŠ(¨((¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+“ð¿Ù< à»_³}‹ìÞðå¿ØþÃý™öO'G³ìßÙ¿ð‹ø#û;ÈÛå}‡þ¿}“gÙÿáÐ<¿ì›N²¸†sØÝ|7ø}u¥Éi.™sà O§Ka0XÉc6ƒa%¤–P[økÁ–ðÚ=»FÖÑAàÿ C%/ hH«¥ÚËøâºòÏó‡ù¡ô~«ò‘ÛÑEB ü†ý¼?m­3ökúŸgý¡µûM~Î_<-á/³çˆþ-xz?Ǿ:ý•týsâ7 i7ÿ¯¯usúó_!|uý–¾|L¼º×µïëz-®¹ãŸ…¾$Õ´ ïüÿ†¡ãÿ x§ÀÖþñÌ1xÿá·ÄG¶øƒá«ÿ x÷áôCivçÇ>ðuÞ‘ýƒâ‹›Ÿi:IÏÚµ¸;IÓUR|ÑnðwM8©-žö¶¤ËžË‘'.e£“×_y'g×o»ssö{øÏ¼;®\Ü_üCñ—kâËÂ:ïŒþxŸÁþ?½ð÷‰üðÆVƒâo„ ðƒÀ>*Óu‹K½ð׈üàxsÃÚ5Ëø¿ÃöÚ—ƒüy­Aá¿~)i¾"ñ_Å»ïxÓžð×Ã}wÁ¾𖉣jß<r«â†_<{ö­Oß ü_ðûâŠ> x¯^ø‘cá[ëM¨Ý[Ã>ðoƒôk~-¹ñwÙ >è_ ´ýEÔuÝrçYÖ®a^yö2y}'—Î41t¨ÖÄT¥ŒúÖj4] =zÔeW MWTÚTçRRG p^ý²'øÂZtº¦›a¯xÄz\º–…ã úmÍæ£bú§=¥ö³¤jXÝè·U<)û ø¾çZ¶ÿ…×ñ[Â?¼ 77~ð¯Âmoáí§Š/bxÍžãMK[øÁñ4k¾æYõ¯Úiº<~)ž /Äz®£à©|Qàï}9ñká7‡>2øwBðωïu» |HøWñFÊmæÆÖî_|!ø‰á¯‰ž³º“PÓuH_G¾×¼-§Úk–ñ[Á{s¤My†¡¦^Iý¿'†?(`ÜxòtpqyÞUV•‹yÆkG.¥ŒËÖi*˜×Ì0u0²ÀÐÄ<6 ^Ú½lElK¯Vœ%Nœú8¿ÂÕ+Ó—FX¹ÇŠZŠ‚ËòúÕ¥K,,~­G–b#_ëa Õéû tðô¨*\õyêCðÏã'ü+âN½u¥ø“ö\Ò¼Áoü>ø“ñÅ¿~7~Ñ~1µøÑ©þÐß²×ËžÓ¾|ñ üEOƒ^ý£Áº÷ï ¥§Ä¿^ñ_‚$¹Óo<«øTõOöƒÿ‚ŽÝ|&ð÷Åß~Ñß²ÍÖ®|xø5ð1ôOŒ¿ðFïÛÿöYñe¥ïÅŸŠžøk7‰að_í ÿð/޵#ÃÑøænÒòß‹ øž}2ïB±ñ%Ìw×zwÛŸ?`„_¥ðÝÿ‡üOã¯Ùã]ðkëš—…5Ï€_Áí ôOø—ö€øSûMk¾?_üAøKñ'Á¿ŒuŸ‹?ômw\¾ñ…u?Ä/â?Ýø‡KÕu½jcOìôïÙ_TÔ>Úü>øÅûLüý¡äÓ~0ü/øÉ¤x×âv™û6ø_ÅÚV¥ð“Æþø…áÛCðöwø)àË\ø—Á¶³ëSð~¡âë«][X´´ñmŒgIþÉýk°ªŽba8Ö†z±9‹ö•e Ù=n!ÀÖÄa0Òu1=œ2‰fpÂaæèbðxyá¨Ë9Ì1T)µñX•%:Ë RU(º5éá¥Z¾±í)åµhàëâU*xj¯SO<\è*˜JØ¥‹©O,ÁÒ¯:•>rø±û\üpø ñ“öqø[ã+„<7gÿ ÛOý´~)xkáXøsRý¤|}{ðSöiÔ~xCTø¹ñü¦x‹âæ}kâÛx»â}ÅŸ‡¡·’ßQ±7ÃTµÞý­l)ô«Y¾~È´—ìqûFø'ãÇìóðÓã/ÃéûAx“áÇ…þ;|Nð·ÂÛ{ï|&øaûDüñ×5‹+¿i>(Òo¼U« ?Y²Òî4Ó"—]¶ñ­ñÃþ oû~Ѿ#øÕñã' xïãÆ M>ËDøïâO|7ñƯÙúø;Kð¯ƒÿá›> øƒÀÚ¶­ð¢_êºtÿü35™ÔåƒâVµ­xQmJ ¸´Ëorý¦¿f©io‡~ø|ÿ~3|o |Døsñ6ü"µø#wâígÄ? 5ûxJ e>3üøÅá¥Áã#BñEôO„´›»ûý×Nš÷þ˽cCÔãÔe•Ïj’añÙ—"Œ²jùžWŠ–*:tZËð”³Jª4ðËëT±40¸|Eobñujqµ\CÂÎ4©K*ú®bñ –; ‚ÄR«‰«”êÔœó,Mz3ÂWx‰¼3Ãsâ0´d¢êþ}è_ðQŸ6žñ½·|'ð¿Nø€?jkOü »ÓtŸ[øKâìô?ný’<[©6—wãKÝV‹? Þ;i|e%¾¸|5ö¯ü4ñE®…Ÿ¯ßøOLè?àšß¶7í ûT7…uÿ‹þ:Ò5M7Åß4‰'Á~ÿ‚OÿÁAd úö¶<#wö}ö³ý¤¾0xÿà?Æ=/J‡Z¿Ól4χú5¾©ãûW‹ÇžÔ!ð¾…«[Ý}7âÿø'çÀï|<øqðï^Õ~#´ ¿i-Sö¤ð‡Š4ïiÚGŠáñö¹ñ“ÄuÏê·o‡í´MsáÖ±âOÞéWþÕ´+»yt{/ê+tž6ðχüa§}?ð‡á–ƒð[áGÃOƒÞ»Õïü3ð¯À^øwáëï\YÝk·š'ƒ4éwZÍÎa¥i÷¤öZtßÏc¦iÖ’Ý4¯ock $ XS£†Çým*¸¯®Â–QO–YoöKÃ{NZ¾Ú*°Äª/í¡ˆÅâñtñ–•¬ZÃaó­Í:8aæªâfêº~Ò•ifxŠ°Â¹SµJ‘ŽÁÒ•*´pÔhÕ§¯C,'Öªú-QX–QEQEQEQEQEQEQEQEQEQEQEQEQEQEÉø ãí~ð]×Ú~ÛöŸ ørãíŸnþÓû_£ÙÉöŸí/øJ×à_Ý}§í¿iðŸ‡.>Ùöïí?µùÚ=œŸiþÒÿ„£ÆÿÚ>~ï7íßðšx¿í{þÑÿ F¿æk]Ëøãþ~pGê¿)eQT ¯ÏÚöÈøKðsÅZ¾ñ—öºý“dmOñ·†ü#íâÝ?ÂzÇÄÍ[¾øYñC_Ö|)«j> ÍC|'áÿøVÆÇÄvëDþ%Ôî4ŸÃáÛ_ÐzùÆß~ j~/ñO‰~|^²ðE5=?Ä> Ñõ¯Ýx½Ïˆ¬<-áÿ›3PÓüy൳ҧðÿ„ô é—v•Új©ª^ÿl=õž—¥íESr’©8Á8é)ÁÔŠ|ѺqQ•ïe¬Z×R&ä•á'u¢’‹·«jÖ4þü}ð¯Å^j¿ð±>øÂÀkZ-¯ƒþ!øT²³ðGÅŸ x¯Áÿ ú à×Â믅º¿k«x¡üaâ?ø¦x—\M$h:tú™Ð¼?á[H´õ=rëM³ƒÃþÑRâ;Ý{XžëVþÓÔ#¹´³¼µÒtï‰þ/~Ê¿´±ñßÇßüuð›Æ¿¼kâOüEÓü#ãŸxÃáµç†ü}áÏx#áðmV=áoÅk?éúD_t_ø2ò{¯ [è^'×µ+«ß êúç„üâí/óeÅÔò<¸†;ŽYÆb©eµiáqU2ï©c•YÆ¥Z”¥^ú”å.9m½‡µG×ðU<š®c^9ö# „£ýŸ9P©Œ¦«QúÚÅàß²å”*RS–ëJ3­zjͦê:iìxKþ àØÏ©éz®…àŸ ø®ãâ,°[H‘ø‡CÐî-4íJ ¯m®Íýž?h/jðé.~x/áó£M¯Éð§â§Ž|WãO[ÆÑ¯ü"Vwš·Âo…ÃÁZ~´²8Ö¼g¤júŸ‰ì´«{½#ÂÖzˆ5­;ÇÞ úÏâ‡ÁÏ üJøãï€Io„üão…¾$øQm†í²`ð¦®øZï¶Göz5ÆŽt¥ðõ•Ä2h°izSiæÊÕtû›†bãðÇâ%|·ˆã¬¾TåCN®]†Ä}Jž*…aåWZžX\2Áâ”Ö"¶2ŽcVX¼CúÞ4°øˆuñV…)ãp4²:ð„gÃZZø¼5R¥Gõ¨óEVöôáR<Ø|:t(AFŸ´©8?‘uÛââÛ\øËá»O„ 6·ðûöˆøIð_áîŸñÇM¸ø·áøÖïÀ^1ø©eðµä¾ƒáþ»ðûö„0øOËñÇŠl> Í|uÏAâwo~|xWþ •â‚w¿ ƒþ Qwa‡¾ë7þ ð×üòox×áS|cø£ð×á½çí1¥§ì)§Cð+Áþ“â ·üY5׌†uí Å£jMª¶±¦þ‚xOö¼ð÷Œf¯j?£×.þ ü5ñž‹ñ4'ÃM7FºøëñÄúgŽ-ôߌº…þŸâ|ø:-WøÕûBø‡þ(m¼Ka©ê òkÖ—>†ëUò +öý¹í¿gï‡_³¶«ûe~É×Þø)kû>OðZÓÿ`_Œ_ˆ-Oãï Ãu­Káj‰ðÛH‹Aø…áxVÛûq<:5[ÿ’¾ÿÁL¾(]øÃà÷‡þ=~Í>øeáï‰þ8ý¤|¯xãáíâ/Œz7Ã+/€ÿ|û5hž*ñ]¿Šg÷o¡|AøÕãt ««AöxrO ø»[º¿³×&†7V>νu¢|¿ãßø,ïü#u¿†ŸÙÿðO„?Ø6Þ&¸þÐý·¿à¦?ðɯ‹áý¢h?€›¾xwþâ÷ü&6Ñÿ‡ÿ„Ÿ_¹þ×Òá¹ñ®‘á¿+Sû/öåÿîÄyÐÃ.b>lQɘ%ó¡;Ð6a›d~tG9Ž_-<ÄÃì\à| ûþÃWÿ±åßïu?Ú÷ÆÛÿøzÃAº×üSá3Þ'º“OøçûIüfþßñ¡¢êóéÖ½©/í4-^}3ÃÞ°¹Ô<)qâ+]:§‡¼=úJª¡N9:òŽ#5Œq•'W9/«Ñxvå:O÷œÎu9ýýbŠ”¥SR¤i¬=”a‡Œý´[öT9ªªÒŒ*[ÚªöŒáÔïd£QE`PQEQEQEQEQEQEQEQEQEQEQEQEQEQEW'à+²xÁv¿fûÙ¼'á˱ý‡û3ìžNgÙ¿³áðGöw‘·Êûü!~û&ϳÿÂ/ yÙ6er~·û'|köo±}›Â~·ûس>Éäèöqý›û7þgy|¯°ÿÂá²lû?ü"ú—ý“i/ãøeùÀ}ªü¤u”QEP‚Š( ¼óâ¯ü!…l4=Ç^ñ?Ž|NþðÍŽ±­Ïá¯ÿhÛx[Äþ6¿›^×ì´?j:]”~ðv¸,äÓü3®Ïw®>“¦Ímea{y¬é~‡_>~Ò?§øÓà{ G£x Å–Öz¦·&³à/Š:zj_þ!øcÅß¼wð¯Åž ñ•¼º'Š-¥Ð5O |CÕ¦¿±½ð¯ˆôív+3á½GNŠÇY¸Ôôû¦¢ç&’wW“j7iòó8ê£Ík´Õ•õB•Òm&Úè­w䯥ýH¼+ã/xGÄðwŽ|àmÏâ‹*^¦³¢ËðwáNŸk¡fè¾#·oÛÝk>"¼ÖŽŒuËMjûY×|UkÖü_ø‹}à /ÂÖš%׊> ø¾xb}X±Ðt‹öðç‰|aªkÚä]ØÞêVº/…|â-FÃÃö7ºdÞ*×àÑü-?ˆ|a­^xÏÃß~ÌŸ°>øÎ wÁÿ³gì{û>x5µMfè³ßÂ'À÷/t |Iø]¦hž7Ñ,þ ü'µÖ|9¦ÙüGñ–§¢k𣸒ÊâÊêh´ :çEñœúìñû_|*ø«xSÀ>%ýŸ< áoÇ ø±Œ5Ý9t?êÞ"Ð5|dð…üúlÚŽ¡áMĦ⯌w.|=â?x&ÏÄ'ŒR×Åšw‰u»vÔ>sëfXÍñ=J®/3¡—J¦–_ â1U*F¼§ƒ¥8Tu1/Ìè%Û8òÓ©$¡/[‡iaqy¶ ŽeR– V¼¡R¦2p¥‡¦Ý){)bj)Æ¡õŽOkÍ8GÙÝNpMÊ=“ñË⇮õ ?Æ µ/ˆöÆ;;Å? m¾ø|Ùò-OFÖ<ñãî±4 `°i׺g‰4ÿ_qµmKK½ð¯†G†lõýðûÆÚ?įx#â7‡Vé|?ãÿxkÆÚß-ªÞ®â­Ë]Óñl®¯¬ÖèY_À.ÒöòÔJ[Ý\E²gü|?<-à?~Oáø‹›æ•p\AÃ9Ö%¡†¨åŽâ U°Š5%)K /Ö²ÚX¼Ö¤ä½XÕÄ5B…«Õĺ±§Göœ]“ð¾«à3Œ·™N­5NŽPéW¥Z)FÞ!PÌñpPå~Úœéáé)Ô‹£µ\ðß0ÉÿEøKáÛ¿IñRÓÁ?<'ª|iø±ð³Ç?~"ütøcáÏ|9Ðþ뵆…£øç_¸Õ¯ôýJµñf¥û-ÜÚÇŽ/øëã>»à¿O¨Xi:÷ƒ< ©øòëÁþÕuC¿Öt=ÇW¼Ð4 ‹é4[è.•iFkžJã¥ïÒ•J—Ux…&ãj¸u8gNTªÊ­\D#‡ü×Ü1J“•ûG¤¡ìÕ|bçS7²•(GIQÄ5WC¯Jჭ×à_Ý}§í¿iðŸ‡.>Ùöïí?µùÚ=œŸiþÒÿ„£ÆÿÚ>~ï7íßðšx¿í{þÑÿ F¿æk]ËøâúòÏó‡ù!ô~«ò‘ÖQEB (¢€ (¢€9?Ü}§G¼“í?kÛâÏÛù¿nþÑÙöOxŽ×ìßhÿ„£Åþ_ؼŸ±ý‡ûZÓû3ÈþÍÿ„_Ádÿ„/@ë+“ð]ÇÚt{É>Óö½¾,ñí¿›öïíŸdñ׈í~ÍöøJ<_åý‹Éûص­?³<ìßøEüöOøBô²¦ÃÉ[¿WùœåÆßxr×í;<ï øÒãìnòüÿ³kí?Ù¿ð”Z}¯ìŸkò¾Ýÿ^¿ýöß³ÿÂQáí?ìŸõ•Äk1C{ãO éÓÞ]Âáïê«ie®ßi3\M¢x›áÍí¼Ïk§xÇJ¸¿´‚àÅm~$ð‡ˆ¬e±¿¹ÐõMÚf¿wáï[·ð^möo.óÅöO°ù_hñ÷ÿgÂ/ö´ý«Äs}·Ìÿ„CIûwÛ<ÿí?µø£ûKíð›øÓû}.kÎÉ5Ì·“_f=¢ÿ1éevöí~¯Í-üIøµ«xWž9ŽûÆž7Ó´í/Űh:>‘á}KöqÐm,ìí¾|7ñ=Ô·_N}¨\Ýj^/½”½†­¨ÅkÅ Ä:z5˜»êþ|dÕ<_âx#XÖ4OZÚ^x»QðWÄ xƒÁzݾ¿áßêú½Þ•â›o\¥–‘â½"ÛÆ^™DN—¥¦j)$úm…Ý“Ük?%|oø¥¡x_â¯ÆçÆZn‡«EñJ»m1üy§øKQkÏ¥ãÚÏñÓàµÅŤ÷_Ãkqçë ­o#‰ô×I¾ÛÙþË~.Ñ5ÏŒӴ߈ºoÏ‹ž ÔàÒ<[ªx®÷à ©ø›öy¶µÑµ™õ‹¥¶ºŠ{=EWû/Åxvâh®ßI²yûSÔ}ZÜ&á–`óšxÌÊŽ*ŒñªÔ#Šl? «Î©âðؘâ#JZŒðsÁKRœáJ¥Z©B§™O7o_*8z”ª8R…ISå­‡©A(¹P©NTùY©F´k¬D\dÜc Š3èf©¯Øé‡‡´Ë¸5¹n|O©Üélš_†¼G­éö×Vº6§®Ë/ˆumJ¿Ò¼#¦5–‘u¶·âËÝF¼ÖeÓ<;i?ˆ5½L¿Û¯Æ_ø)¿†>ü]øÉû6|%ðæ›kã?Ú±ë\Ñ Ôs<1ª|rпn?Ú£ÆrþÉ_'øi¬~ÏŸ¼1ðûâŠøÏö[O |IñÁ}Oão‰¯ü5áýþÑoñCC¸ñ‹|YÑt?j~>øqàý umIJx·Sð®…ªëþqiðÓâ÷ÂÙôïþÍßh7¼EñSö¶ƒöGý ~| ø¯à¯ˆþ4²ÓuK ?ÂüWû@þÊ77>øSáÿ øGö}ð޽ோºOŒäð?¼"Óx_Ó5oÜØñÔœãF­h.hC-ÀևÓÌ1¸Òt~ªÜ*ý^¾™Õ©Èç_$«O,Žc Ô3Zˆè¡lá){‘ÇÕ¥%Þ 9bÄά+9ÆŒªá1Õð¸u+ªY´^*– Q«„ÄJég€ðÄk1x‡Á^:ðî‘â¿ kpÛÞÙ.§¡k¶0ê:mÛØjvÖZ¦<–·ý§MÕ,¬µM:àKe¨ÙÚ^Á=¼|—ƒ~<üø‹ñ'âÂ|Kð‡Œþ%|O ÂÞð—†5{}oQømyãt×&ðÆ‹ã)4ö¸²Ð¼M©YøwRԛ·÷Pø’ÃG}'YÔ´«=+Äæ§ðçÂÛ'öHý¾üýšÿkßÛWöø'ûEü*øSðïþë´ìíðžóÂZ‚øSJ¹Òô»_Åuð¾ÃEÒÓC¹ÓŽt‡~ ðÞ¥§5¶§á¯ éå…”$ž,ý¥<1ûX~Ø<ûüTøá½Wö_øO¤üñ•÷Å¿Ùk þ8üCø3sñ»Å¶Þ Ó5x>9ø§â‡ì~!OñoÃÚ†þÐ7ß~(ü?Ð~ xŸYøwûHþÙ?±÷í}©þÑzw~é?> x{ösпfˆ).àåýž|#ñ³ö9øßñâd×tù>2i>ü_ø—Â|PÒ~ÚøÓ\ð.ñ–;¿…ø¯HÓnþ$i:Ç„­5}"÷–ëêªS¾'2ž"¬'‚¥ Æp¦°YMfÝ؇G˜âóL®¦aÔÃæ4ò‰æØ K Š£ItJbirb=–x²½lEz5cO [UJÞÛÕ:1Ÿ% ¬¶p§ŽÀºrX¹I×¥ìÿ_+I×ìu«¿YYÁ­Ã7†u…ÐõÕ¼5â=Òæõô+[øP×4­:ÃÅš8³Ö-!oxVçYðújðê¾}Muí [Ótÿä¿áÇìuuðŸâ_~ üpÿ‚k|Tý®~j¾ý³|aðOö\ñÎÿ´‚÷áÿ‚¼M'ì0ñW‹¾øâ/ìïûx ôÏŠ|D¶†ÇàŽ“­x‡ÃÞ ×µ?èö:ýï‰5ÿk«ß±?ÂÿÚ öø-yáÚ?Dðß<1}ãÏ 7íûBxÃã?…tïxáÃø'çŸ x¿ãωµ?ÝI®ø×ÃsüZø9sðÓW·ñYð׋[K×gø«âx ðÞ›%çU*ç‚­ž'J$§™àãZ¬(B¶/û]帼¾µj²^Æ®] 5êbý*éMV¦å ™~2’æ‡=J°£uO®ãhÔ¤¡*˜‡„Ãaªâ¨â°ôi©F¥LmAápuªá±xºØŒ= ®†f±¯OõËÃúý‰t÷Ôôè5»khõ=oHhüAá¯øOP7Z³¡_ÊšOŠt­U—Lž÷N¸ŸDÖã²}ĺ4–"ðåþ«áýSLÔîöëùñGì[ñ7öˆøðÚoÙ¯ök]øWà‹_Ú_ÅŸ°wÄßÙßáŸüBÑüâ~ן¼qàÍOVø§ûX麿Æ_…ßuéŸ|Sû8ø‡öðß„µ ë-gUñ5÷Ä‹=1ü­xkúý…¿fM3öðoÄ^øeáïügø¯ñ»ãÿ‹~ øº/ì=gÆ~3ð¦µûF|eñÇÂX5ïé·º½å÷‡´Ÿøíu/ xBm[û;ÀËâ]cO³Ñ4J÷[³2èF4§Rr•)Øáe…¯MÒÅÃêxŠTpõ*Ñ“NÅBUêËY*.•8S–)UJΧ-GNž!7…tñiÊ®P­OWÖ#’*O ©áéÓ”!(âjWš›Â{(*ÿsQEÎjQEQEQEQEQEQEQEQEQEÉø ‹ø. Éõk›¸<'áÈn®uû­Rû]¸¸G³IçÖ¯uÍÃÝæ­,ªÒj7Zdž¼=ª\^4Òê“vóX[õ•Éø ßìžð]¯Ù¾Åöo ørßìaþÌû'“£ÙÇöoìßøEüýämò¾Ãÿ_„>ɳìÿð‹è_öM¤¿Ž?á—çô~«ò‘ÖQEB (¢€ (¢€9?Ãqx—Sê×·‹<{2É­]j——‹oqã¯Ïg2뇮ÓI¶´’ mÖ .ÇB‹N²ÐõÏè–ú‰un²¹?Ûý›G¼ìßdÝâÏÜy_aþÎßö¿xŽëí?gÿ„_ÂgÛ|ï¶}»û&ïûOÏþÒÿ„£Æÿkÿ„Ó_ë*aðGü1üå»õ™ÉÞCpÞ:ðäë>¬¶‘øOÆÏm Ö¨š·ë{Yõ(t;ãV·ŠÞò=ëPñ.“ªYÙÜëñhúˆm/µËÿ u•Äk:tמ4ðÌÐMw`öÞñ)mVËN±žd…oÚ,ü ¿mû'ü"ÿhûOÙ|m³ûOûVûwØþÉåÿÂoâìßìï²x/þ›Nv‹~òÕrÿ,{É1ÛEªZy÷}“<7Åß|[£ø£Æz}¾§c§éñ%¯‡´û}?à_Å‹Z¬ßñCxÅ—wz¥ßÃßC¾ãÅímcÖ‘gçÛÙ³A5äÝ´=WÂ߈üAâøë@ºÑ9øÏ‹Eñ‡Çï ê÷Ÿ´W†¿f_ø'.£ðêÛXÓà™íþ#ë–ßãøô?áUø®ßÅ^ ñï‹døÃ¤xËÁ^1câûçËé<}JŒ©ÒöxV*§µŸ#§S ŽÍé<4¤ž*¦_“¬} ,•)U£dõ§Z†¼*×ï«dèÁÊ<ÕëR§EûÒƒZX5 µ8ÎT¨,f5ájVå¨ã,?ÙÑ­*3?ꊊþiÿiþÓ^±ñ‡ì÷¢k_¶¦‰ðÞÚ3â>¹ðŸö ÿZý¤üq§Ã7À¿ÙóWоª~Å?´/À?Œ!ð7޾)|HøÇ«è~>ü|»ý>ß|:Õ~§‡ ¬~²ðÚ~5“þ ¬þÅÿ ¼w«øîæËKÕgŸÙºoÚ3á?€g‰ú7íÓö¡qðú_Ú›Zøyñ7Ã?è?cø}?Ä%Ð>xöq?´¿§—ðÓÆpxö/ ÇQ´°Oí(ÂÑáùKÚUä£Egùe|te‹©ÊëaY_ W šF¶VÃá«å¹¼)TË3…—6' ARÄMb–g?ÝS„ëÂ~g†ÀÒŒhûhµ\Éúæ ëû9Ï ŽËÝeŽÂÊŒ¿ah¯æ§ã?ü%^UÇü3_ü=»û?þ¾‡ÿóÿ„‡þý™ÿ •ÿ sâü'¿ðÙ_ðº¿âéÿ¼ûWü(ß#þÿ«ÿ gþøUŸ¹ÿ…ƒ]‡Ç…¿µÖ•û0Ãã7âwíw¢ø‡âGí¹ñ’Ïö“Õ×Ný·¾=ø›Á³7‡~)þÔ–ÿ-~þÏ?²ïÇÿÙçöðçÃô×õ_ƒ?ˆ?d¯øcâ‰üÿ–¥ñóâGÀïkš,88á(b¾_,2UÜhS„–7 ŠYJ\³—Ö5©Âiåʆ&uÔñT¨­ãJ.´¨º‘“'U{λª¡–b3YÆ„aÖœ£AåT!~·G–r–¶9DRËI<òG 0ÆòÍ4®±ÅQ©y$’G!#Ž4Ø…U˜€ ¬ÏøƒAñf…£x£ÂÚÞ‘â_ øK°×<=â/êVzÎ…¯hš­¬WÚ^±£jút×:~©¥êVSÁya¨XÜOiyk4WóI ˆçógözÕ5éÿe¯‡ß³ÏÅþÓÿ.¼uðö€ñïí7sðö©ý¯¼5áx×MÐ<;àkþ*_þ×ÿþ.Åáiv? |Gãψº×ÅïˆÚÃ|WÔþ!K¬£jšŸä…>øñ·ö†k¯ÜüUhWÚŸ†µ‡î¬cJ¾2”\ªS¡‹Ê°ÔkJ)Ã2Æq\ëKZÕœ¨c24ñX'‹Ãåð̳XÐÄàrìUj×—Õaˆ´9¥ƒÍ1P£ °¨ñ2ËÖU*t°µ"Ô$±pÌ¡V³¥ˆžQQÅciQÕÝñ¯ìðçÅ_?dï‚Gâ7‰>7ø§âÏ>|5ñ¯ÅýGãÿþ"xßÇÑüMÔ¾øJÇÅv7gÄ Né~Eg{¦yW¾ðžáØëÃYÖ®¼<¾+×Õ~R:Ê(¢¨AEPEPðù=ýRæÒèüLs-•—‡,!W“âGŠä{gƒÂ×ú–™%Ý›³Z_ÞÝ\Gâ=Jú GÆW‹nµ½.Ï·®OÁwiÑï$ûOÚöø³Ç¶þoÛ¿´v}“Ç^#µû7Ú?á(ñ—ö/'ìaþÖ´þÌò?³áðGÙ?á Ð:ʘ|ÿ |ú.¯QËwêÿ3ˆ¿D?<)!¹´W_|AE´{/I}:I¯|3g¹¶Ôn¯ãñm­¥©"½²Ñ4»Ï_Íya?ŠoôÝOMð}¾«Û׬Ë||iá›=;R´²¸—ÃÞ%»’ÞôÍw Õ‰¾ÿjÑ ñ¾„÷gL¹»Óì5¶ðŸ‰!ðíö©msq¬è¶÷2øWâ»{?/Ù¾Õâ? ͳì?lû?‚õ‹o?Ëÿ„_ûKìÞgnþÉö¿²xÓì>oÛ³¿·ü/öí?øD5oøMå6¥;FNòOF­ðEu’¶ÝºïqÛEªZy÷}“>Kø«?Áñߌo¼{ðƒöS¹¿±Öì4|jñ„ü9â/^Zx#ÁšãÈ’k? |I5í¶¥x›EÑÑß\º–m­ã0Ú[µ¤UÛ|›à[ø—Åúoƒ¾ü3øOñ[³kñ>™á øsL¾¾Ð-µ¨¡:މâ 3ÞÔž;ñ•ð’ÁSu_³T1TçÉ:U¡ë:ð”jªê´¹£‡•)rÏšqNœ¿Aè¯Ï¿Úƒö·ðçìÇûBü!Ó~.|bðwÁŸ‚ß~üû©ñóÃðÏ‹>>øwÅŸSᇃ4x’ÚÔþ%j~×~#Ïá/…º&³&¹ã«;]vûOð¶¾þyôŸÄ~×ß¶_Š>üFøàŸÚÛá‰Ò¼l#è¾ý£~2|Kýe øÛÂZ?À¿ÙóâU§Á?kþ/ýƒ?k/ ü@ø»qâÿÚÙüø]ðwömð—Ž*øœþ ðÝåçÄ«¾2~Ö_¶u×ìðããþ‡­þdz‡…>#þÏ_³/Žý’þYü&“ö€ý˜ÿlëÿ þkß~kÿ ô?ÄŸ5Ü|^Ò>,üA·½ÔüG jž3ñfŸ¬èÚ~…µL=JRÌ#.Keï,Œçí)Æž"YµLu<$pÒœ¢¤Û˱r“«ìc%*N¬ëQ„Ókš1W•ècq9#*Ž…, i{YTPRæö•+R…«ºêÕ#V»¡N5¥Gú$ø‡á/ÿtüø±áŸ…?ô'ÿă?ô_|BÒ'Ðõ jòÿÁš§Œ~ø’ÛW³—I½ñƒoï|1{­hígs­xVòãJ•ï´9ž×Ô-ííìíà´´‚[[Xb·¶¶·‰ ···(`‚•c†cUŽ(£UHÑUB€ò7¨~ØßµÇ†í|qñ+LøßàOŸj~k·Äÿ|8ýžü!¨~ËZÆø)¬³ßí+­|P½ý•¿jOÙãáRþК?‚þ CÄ­sö\Öþ øáþ%EoðÿCøq'Äÿ‡ÿ„ÿXôÚöÛöÐþ/øoâüëâÕÍŸÁoŽþ!ñ·í—ícâ¿ü ð¤þ ÃðËâE’üý‰t¯üx°Ó´­'F¾øù¬xIý›ü3¢ø—Kñ¤ž ø|šµžm8ŠU¥˜IËÜÀâèáñp´é¿­ÔËÞ9{HÖ%‡,"§Ëðµ°ó©KZæÜcº¥)âðX7R“x©Oê³UV"”c,D0xŠÔç†öñÄÑ«‰ÃsS­–,m,VžNuTé'ûE%ZçüCö£ºøoðçLð‡íÛàÏ xTø‰ñ§Ãþ.ý¸?hOÚWöø]ðSÄ>xà ߇>| ýµþÿÁ<ÿißÙâ¿ÂÏj4øÅâ_ é~=ý“ÿfßÚwÅCÀú–‹¯AðßWøWãOø¯ô“à÷Ä?Ûâ¿ÃÚã$_´ß‡<]ãƒ_ !ð€~øAâOÙÃâ%Ö“û=þÊ?´7Ä;O |Lñ7Â}Kâ—ü=ñƒTÕþ$øáÏŒíuߦ“àвk ¡Mâ­'Á~!ð“TW&.¬«áéáð8O¯âñ5+F4pøEWAÖ¨õœ`ªbðúòkJ¬1*øf«<¹eþÃY{lÂUiáðñ\õ%R–&¾TÔ¡ÍB£rÃVš•Õi¥Fs†-<2ý±¢¿›ŸÚÏöáý©£Ð¾|GøwûPü%ýšg_Ú‡Å~ |0øåñÇâ¿Â/Ù;Ážð€,>x?àí?ãŸÆoØcöâøe¨Gû@èËñgö›Òü1ãφ~ø™ãX¶³øwñ?@ð¿ÂíwÂ^#ûö;øûaüX²ý¡¾'ëÿ~|jñO€O¼ð×ீüAá?þÈ^(ñgˆÿeÿÙ‹âγãkÚGø ñã®·áMKÇ>0ñ¤ÿügc£\é1øÅò6µðÇÅ:•¿†o|4R¡R¤1r”eFX %LV>hTŽ+:5¨ákàkác â:†?KRŒ)N.¼•jU*`e\Šª4¾§j”ê}}Íae ZhCZ‚­ Õ:ÃÔ§‡«Š…xÔ•/aYʯöcõ~Yb‚)'žHá†ÞY¦•Ö8¢Š5/$’Hä$qÆ€³»ª ³5™áÿh>,дox[[Ò'k -ì¾ xããÏŽu¨ÿj~Ôš·ÃCðþ(ø¿Âþ ø{á¿øWÄ1†‡·Ž&RjœaW J…G(ºMË â±R.Q¡N+,¡%i5B½*|_“á÷íMð·ö÷ýеƒ^,ð§€ü+ð墸 ñ/ãî·ÿ›ñ_Ãÿˆ_µ£ão‰jþþÏß°÷Ã_xƒáŽƒ î¿ñ(ëúEü¾9ú3àí;û`ü\ð?…¿joö‘Öô Ûö–ýƒ¾Oû9øwáoÁˆ¾øƒÂ?´çÂØÖóâ}·‹|Aâ/†ú§Ç9uM+Äß¼kâo‡z„¾'ü?^.—¦x»NñÆ‹ft¦ß „«‹ÅK EÓn|†…ZÎiR¥."Ç`rÌ ¦’u¹aŽÌ)añ*gR›§V­:uh*ujðׯ ©Õ’su°ÙÎ&*n©Qd¾Õ×¥¬ãNlE:*ácZ¥88$±50Õ%?èBŠü„ý®ÿiïÚ^~Í´¿ÃøïÇ ¾|Qý´|ã‡Þ ø_ðŸVÖõÏü ýŸ¿j j~»øÙðÇþŸ üUð޾ xŸÁ×¼-ãïü<ñN‡¬ø¦×ÅVÞ7ð^»a}ç¯ì«û_~Øÿ>(ø_öy·ý»¼ãxËâçÃ⟴_Àˆÿ²‡í‡­ÛøÆ_³§í‹âxÃß<%û~Êß³¬^%ðß?gï j‘BŸ³ïÅ ŸêsxƒHñ/Œ¼k§jöþð®T(μëҊ䫆ÃáñUéÔ÷e 8œ|ð4ä–¼ÖŒ6J7ÿdiGŸþ¨¶Å±¸ýc÷qsÆÑmüTñ}óÅЫGøôêRÄPy|£:QpÇ7 ªžœñKú…¢šŠQYÚVUUi y € ¸#Œ3‘¹„q¢NÄU‡VOw­üÕìüõIýé?!&ÚM§Òn.׋kgÊå­Ÿ,š¾Í­BŠ( aEPEPEPEPEP\Ÿ€¿´áð_ö¿ü…¿áðçö§ü?òþdzûoüñZÿÇÏ›ÿ#‡üU?ô0ÄÛíuÖW'à+²xÁv¿fûÙ¼'á˱ý‡û3ìžNgÙ¿³áðGöw‘·Êûü!~û&ϳÿÂ/ yÙ6’þ8ÿ†_œÑú¯ÊGYEU(¢Š(¢Šäüý£ýyý©ÿ?ð–x÷Êÿ‘§þAßðxû#þGø›È'ì_ñéÿ·ýÿñEÂ?]er~ ·û6yپɻŞ=¸ò¾Ãý¿í~:ñ×Ú~Ïÿ¿„<϶ùßlûwöMßöŸŸý¥ÿ Gþ×ÿ ¦¿ÖTÃàøcù!Ëwêÿ3“¼þÑÿ„ëÞWü‚áñ§ÛäiÿöÇ€¿²ÿãÓþ(¯øöþ×ÿ‘ƒþ*ŸúÿâSÿ Åu•Äk1_xfóNÓm/n"ð÷‰m$¸½ZCkc}âo‡?Ú5˜<®½½ØÓ-®õ ¼Yá¸|E}¥Û[\hÚÕ½´¾*øynÞóÇMöoµxsÂpïûÛ>ÏãMbçÈó?áþÒû7™à+Oµý“í~4û›ö/íì ý£û3þý[þ„¤“ïñ-£'öcÕ&‡k¥¶ÝÒêû³æøá—‰>!ü@Ô#øcñ»]××]Ñ­üc¬øã.·àMQ×¢ð'„ÊHô;_ŽÞ¶k«o Iá‹ ›Ø¼9l· h¨óÝË “·Eð'Âßæ×µÏxÓÆÖž:ð¢ëÿ›â ø*m;@ñ}ψ^%Ô|msâÞ\˜ù¸aàäÖ˜}”Ö ™gmyÉIÇܧ>ÎjµR´ã†£ +O•>ú‘•7N2²ZðÃÑŒ¥{jµ0Ø,E8S”ÜaÍ7™`(©NTèÂ¥wí«RTÛ—ô¯E~|Qý»mÿ i~=øEà-7áWÄ?Ú³áÅŸ‰êv_¿f;øÅ_ü ð“à·Å OÇ—úÆÿø(Ïì‹àï„sxQý ~ø ÄzŽ«ûIüEñ®Ò_x+á ¾“wâ;áÿÐ^6ý¸?jþÌŸ ~%þΟ±¯¾þÐÕ,ÿ°|G«x;ÄþÔ5²Ø_ZÙêŸhðŒ|I¤ýZ·Ôl"þÑû|±êvv¶¿ƒ>ý¾?jÿˆ_tü+ñ—ìõ«üFñÓè>ñÄÏþÏ_¶WÃø~ÿÂ6?ðQoXi¿cO‹?ü'ão†¾3±ÔfŸ xgÄÞ¸ñN¬j“êZõõÿÄoø_Jøe&“Ùü8ý¼¿oŠž$øðÒÀ~Èþ ñ§í-áïÙó⟆|UyðÃã'Žøg­~Ø>Õ|$Þ,Ô&Óü{ñ^óÀph>?ýW“ö©ýµüû0è/ñÏìãÍGö‰»øoñoVñ ”ÿd†ÿ<ã_Éâ;_‡’|UÔ|AûføÎûÀZ'ÆxtÏøŠÛGøgâÏÚ>Ïá•¿‰ŸÃž0ø“u>‡yâ+ˆ«MÓ§Z¤x©V£B K:Ø%Œ°üîT㇞ÚO,:¥S†§QFU,¶tg U<GJ•Y»Ož½\;Ž"¦ £ÅNœçJœ#ŽÂæ#VJ´ªSÁOŸWÄa'_ôÆŠþv5ø(ßü&óQð‡ìûðãá炾(þÖúçÆψ:N›û$§Â½WᕇÂ?þκƧð¿YøûNÁPÿgÿ xçYm_ãâß?í û<þÜ_~k>Ðô-[áç‡<}£ø·Tñ?~®ðíQûyø›Á´¿Å{áÏÀÿ‡–_³MïÃË?~ÎRxgÄÿþ0^ßCðöjøóñËïñ[¿4߆cľðÇŽ¾1|=ð^𯌴ø¹<âÙuá¢èzdž5x¯ö’ñÁ_é> øyñ"ÿQø)û1Ü|øe¯]ê^ øÁûzþÁ>ñM÷~/øßÇ~'Ñüà?ŒZŒ~øQ¤ü?¾øÖ_k^8ð¯Ô¿³7í5ûCxïRøÿñ ö¤¶øû3ü øš‡|qà=^iµøÅן³×ÀÞ7Ö>"ü}äø3¥øSá~§ñÇþÕƒáM{Gñ>Ÿg ø²ÛÇþ³Ðõ ”(ÔÄEÉEÒQÁÏ8WNhaéÖ¥‚«Í†šXŸkC6ª²\]EÕÀæK“ >¥MRqKêþÊPÅ}f¤¨ÑxWí£*ʽZJ”jE{9º´èÕÆajSœèc°1Xœ \L*Rçý#¢¿ÿhÚöøQû@~Ð ~ê>ñ¯Åhÿ²œ?²ƒ<7ð/ǯµˆü_mûJx‹Ç¾ñGƒ|wû|þÍŸe×tß |ñ߯AñGö]Ó®¼>šOƒ¼Icñ?ľð—®jþÁ_¶oíYû_xçN´ñ^ðOᯃ¾ü0ðþ³ñ§Eÿ„3XÖ¾"ø·âDÿÿk/^ ѼáÚÇŸ >hvÞ"øáÏ#ÃãÚFÚÎÖÿÄ,t¾·*T({w‰ÃJ¶Ug.ÒwNНNQjJ­:•èa°®)6ÿÛªWSÁ·hÎ…,UZÒ ð8øa_袊ȳǵ¿€¿ |Kñ—ÁßüA¥ø‡Yøð÷ÃÚ—‡| ú—Ĉ—~ðškê–º§‰t„3x©¾ißï´oYðÌÿ­¼ ŸŸÁÚ®£à¿øK‡„ïn4i=†Š)ÝòÂ|”ùÔ!v ¥Z•ê(GhûJÕjÖ’æ«R¥I^s“cÖr¨õœÕ59½g%Jœ(ÒR“ÖJ•téSMµ p„#hÅ$QE€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ˆøfé'ÇÒ%µ¥šIà :ZX^øsR±µFÐlm¬µØi^¿´€µï…´½7×PªO¢XYé’ZÛÇÛ×'à+µøÁw_iûoÚ|'á˶}»ûOí~vg'Ú´¿á(ñ¿öŸ»Íûwü&ž/û^ÿ´ÂQ¯ùŸÚ×rþ8ÿ†z|áóÿ‡ôGê¿)eQT ¢Š(¢Š(ˆø|é&ƒ~Émijþ&!ŠÊ÷×ð³Çñ#Åq½ËÏák 7LŽîñÕ®ïì®­äñ›}=Îã ýWŶºÞ©yÛ×'à»´è÷’}§í{|YãÛ7íßÚ;>Éã¯Úý›íð”x¿Ëû“ö?°ÿkZfyÙ¿ð‹ø#ìŸð…èeL>u÷c¯ÉvÐrÝú¿Ìâ/ÝÄ Fm­ÛÁ]nÞ÷Ñß@‘ëß Õí­´ë« <[uitdIootMRÏÖYØAâ› KSÔ¼q¥võÉêÇT·ñ.…}i¦jÚžžšN±§ÞǧÜ[ÅoÆ«âÁmyyÿŒ´m>_ìí=5Y˜ø[Ä:¢ézv±‰¬hÚ…ÒxkÇ¥¿ˆõ‰¾Íæx Å–žØ|ß´^x¾Åö¿øEþÑöŸ²øÒçögöþ­öï±ý¯Ìÿ„#ÅÙ¿Ú?kð_ü%é;9ß›Y&½Ù5nX­]Óë{ߥ‡k¥¶ÝÒêû³ãŸŠŸ~xÃâ'oõ¯ü`þÓ¿×´»ÿøß<9ñ#ÂÚ>¿ÿ‚4t]?Q×?g¿ˆïis¨xOEðî£eˆçA3¤Íole'¤ü øWà]3V³ñÿ„¾(xóÇQxcÃþ'øW§è^&Ò|á«C6±á;sE—Âþø_ðïZÑ5{¼ [ÛiºÜH–ZQY-4å·Ô-®›Â¾2x…,¼iñRݵûÝìß‘wYø×Sðoœ_à—ÀÉÿy&›ñëàa½ò„À¯w¯ o1¶ \Hu=?هĖš÷Å«ýfÎ}_øÃ@ø­â¶ð½æšš>³¨øs_ø+>‘y¨é~øÍñ£@]cMø—ɺþÙÑu(­5¹ oYÙÉo}ªúUŸG.Áâ~³ÄdÒ©ˆÃã0’¥[ ŒÂa}¯°Ëêá*/­RÆ·Œ…_ìûS›­J­ISXz¾u7”¼]zN•ZxÔéÎ…h¸Ô¥Z­”ñ¯yR7/c(,G4£É8AKÚGêß‹Ÿ³ïÀOÚ×Ã?>ü!øÙeàAâÿÙü\økàω¾ñe¬m ¯Š<1oã-Y‡@ñ´.ñA­iIi©C²GrªÄ,¿g/ÙëM±Ô4½;àGÁ› 7VðΡà­SN²ø_à‹[KÁº¶‰á ê¾Ô- Ðã·¼ðΥῇþðþ¡ ÜG&•y¢x'Â:Mͤ–Ñ­ì¼GöÏý±-bÀ9øƒã‡Á/ ^|“öÓø ðGâ¹§þÔ'ñŸŠ>øÃã¿Á/ÙO¾ð¿ÁŸ‡:—À}3Gø•ð“Eø»ñżWâ ïüÖ¢“ľ*ñ~‰ð¿_ž¢ÖxpT­ˆ… ª?»“©YKÙB®2xì—(ެïEHgXÔu¤£K _.UÜ)æÙ[ÅzuiÔ„(ÔkÚÍÒUéP¥(×Å,$?´ëFµ,-'S;ârÜlpØzTž#Z–&¦•_«b%ÓŸˆß²ì³ñ†k+Ÿ‹³WÀŠWoŒâø§OñàßïÍañEðä><²—ÄÞÔÞׯqx{Ã~ТñD ¹ hºZ_ .Æ:Ï| ø%ñáTŸ|yðwág¾K£è~—àß‹¾xKÄŸ ¤Ð<1q§]xkC“áæ³¤^øEô]iM·¦6Žl´›/NšÂ y,­š/É„ŸðX|OðoÄ¿ˆZ·ì©â…·øEÅŸ€¾8ø± ~ÛÞð?Ä9µ¿ø[ÞøQñ Æ>.ÿ‚yh^±øÏñ:ïÇ~µømà/ØêÿöóŸâ²ž%Ò<}âϱøF÷ÇZ¿ à©?´ÇSkà…¿±o†ÇÇ 6ÇãÕ÷|+ñãWÇÙçÀ_‚~ÏÚœim©|hý…ü!ûG]ŸøKö†ðÞ¡áÿøJdß< ѵ=:xåðmö‰ñQš´ýŒ+Ó©IªqÁÏ4ÄÒTå(¬.UNxYâkÓ„eg—PÁºrHû\.É <èJo’­ôm%N´sì¼5hÕ‚K(¬r¡‡ÄÆ~ͩʲ«Ôª:ÄÕäW‰Ÿ#ýFð—ìáûx㧆u߈?€|Gá ëþÓ¼a¯Í¥xªãáíá+ŸøKÃW·×~ÒuÏ†Þ ðo‰üQ§Xèúåö¡ê:Í—ÇŸ¿à°wÿþ+|[ð|_tߊ ¼áoŽRøâŸÃ/~ÑWºOþ&üøSâ_‰þ&øWâ_øÇö*ð7ìáï$žñßuí?á—íoñ¿Æ ñÖ‡ý‰âŸéÏcãƒàN¬F^/ˆ„§Œ¡W,]Õz’«’¥ˆÄT÷]Hâ^X–ðõ)ʯ¶ÄN­<ª×X.|=HÏ …Äáù¡…ÆR¡…£W’xzq£˜(a¨áë:‘¥õHÕ¦âªÒ¯ì¾«B ®.4((MþžëŸ²Ÿì»â‡÷ ¼Kû6üñ»ÿøáý÷Ã=sà÷ÃÍ[áýç€þ]\_|1ðM߃/ü;qáËü9½»º¼ð†æÓ_Fð…ÕÍÅLJì´é¦‘Û¦ðçÀþøHÿ|%ðkáO…¾ÉáíwÂ2|ðçÿhŸ $ð§Š øs-î³yáÕÒï¼G§Ûxdézˆ.u=Gñ‹ô­2ÏÅzÏ}XÖRœ±0®ý«ÄÔrÅóMVŽ&¢Œ ç^WœqåœãÏ77Ë9+ÚM7F¢k ZƒqööqR§* ÷iJ…ÔeI5F—+§Ê¥tœ[Œ`×Ê¿°gì5¨ü&Ò>ê±ì¡ð+Ãþ(¹ñ¾ƒðZ÷övøAuð›Dñ¥ä7–×~/Ò>Ïàù<¦ø¢êßQÔ ¹×ì´huiá¾¼Š[¶K™ÕýßÁ ~|7Ñn<7ðïáïüáÛ´Ó£»Ð<á=ÂÚ-ÔzG†ô_é)q¥hz}ŒÉ¥øCÞ𦜲@Ëeá½EЭ„Z^—ckqEKmÆ´[n8ˆÂˆ·x×…8S§N5“Ò¬aN•*pŒù”aNœ"”aŸ,oJVW¡í=‹²½kRUªû'½?iZs«S’Üõ')Êò“oÀ~ þÉÿ²×ů†žø-ñWöjøñ3àçÃÿìoø@¾|Aø9ðëÆ <ÿæ‘?‡¼=ÿøJÓÀž)Ðbðž“à(ôOøBßHÃúæ‘t Ái¦êz}ÕšxOEÒ|8°N³³‡ÔèªU&¥^jsSÄÏÚbd¤Ô±‹S¯+Þ¬Ó„5G)^w÷U«š\ôj]ûL2k;¾|:su£/Š’u›TÜS›r~ó¹ñçìð ÆÚÇÆ­Wö†Ð¬ÿk{?ºßƒ®õ/~Ó^ø3ñáç‚|%ðÒ÷Åš—Â߆þø{¦ü-ðσ£ðÏÃCÇž3¼ðï‰|a£xÇâÍôÞ!¸ÿ„³âW‰c°ÑSKú+À_>ü*Žx~ü.øuðÞ+› ]*æ/x'Ã^ŽãK±Ö ´Ôï´_ øz_èwVu¹4“Kww{$“mè›Ù=“}›²¹ê¾ šâ}ñî Õ­å_xöZµÕ,ïÞßÇ^#‚ÎxbÖ5Ïݾ“si:Ô7öú]ö….{¡è~Ñ.4ÿ i=e~9~Ä·Ž…û@,:¯„äý¤lôëOÚöœøOãüeý›¼_ðëLŸFøcãŸÚšÃJø…ðÿRŸöRýž5|PñÅçÀ+|Iøká³ãÏ|ñ'|EðâÎ…Å{M?Q¯ºþ?|KŸMµø}á]#R×ü7oãï‰ßð„xŸYMÄ^Õcðý‡ƒ¾/x¯P±ð·ˆ/mt¡kwâÿ„Òx~÷[ðíÙñ™à¿x;Uðæ©­ø ÇVÞF{šaøw(Åf¸ËÔ£ƒÂªîšŒª^jŒ"_g)Uj2©QÆ8Þ¤ÚŒ[;rìLÏKA¥:ÓšæiÉF0§*Ó|°æ”䩯N0…å9Z\ÒGÔTWå„?õ‡ºÖ½¦øâoŠõí cw§ëÿ³ßíOûLhZwˆ4{‹û=n|M³øªß½ûNbðÿŠü<¾3Ö<; k[+xWÅcÇRøƒìÙ¿ö†Ðþ:øONŠâßYÐ~*xÀߵߋ^ Ö¼ãÏIáxÛJÔZ[|o¤Ù®­¥¦¿áßé–wÚ¯â[4gαv’[Ý]|— x•ÜS‹ŽY‡ÄQÃæ²§VqÁσª±4ªÃ:u•|L¡F/(Ë F¬pñ©Rt¢©Tä÷3~Írœ4±Ó£^®¤§Yàñ”%AVåTå‰j 8ʬ£Gžž"µ?m:Pö—­KŸˆøƒû3xçÅž7ñ¿‰ô‹z_†´ŸëúˆŽ‹'…>#GN½´ð/‚üq kþøóðÙ5;Kˆ|k¨Û%ææéó_^A ò+´²uŸ ¾øÛÁ~9Ѽ_â߉ñm·‡|âOhúVàOxzôÇâMcÀz¤Ú®³âüVø¨ëWVÑøÖØ5ÂE{y6£w}©\ÎÉòWÅø+wÀ?ƒ¿ üSñwâ'ï‹> ðñ¿Ä³¯Ãï|Eñ'ìÇðsÃß>-x#Å|1ãÝÀ.øÝûGü5ðW†4ŸAðkÅ~"—ƼKð{Á^.Ó¯<9 ü6ñþ ë à¨*ü,ÿ‚½þÎß¼YðwÁß|ñ[ã§ñKáíÅ_Mð÷_ý›5Ë?ƒ_føËâ€ߌü^ßðÑ÷üàŸŠžñO‡üyãÙ&Ïö“ðO„ì´‹ojž#‹ÂÞ+ð6³âÕVk˜×Á¼7·‹ÀÒT°òr¡…§F•9åõsUž&t ©aÖ[†©Œ«XЧ‡Š­[Ô„§òrÊXZ•1U0ÕaV>Ò´åzò“”që,”cN2“©9f’–[N„!)ÔÇÑÄ`©S–# ˆ¥KïOŠß³çÁߎ7¾ºø»à›?ˆ6¾Ò> hšG‡|K©k—Þû'Å ]øÆ·:¯Ãóª/üA­ê^Õx/âˆ~üFøÑ⯄ž*ø¥áÿ xCÃXüUñ?‚5ˆßÛš%‡Œ'ñDÞ0„k§Ë<ÿEøEâ½OÂvz¿Á¯Ú'áÆ™ñ]~ë_³ßˆ¾!x{án›aûDü6ø—ñÀ?¬>-|9Ñ´/‹Þ"ñ§†¼áß|Wø]®x«BøÛá_„ì|#ñÃÚ¶›ðçVº¶›¥úV§ûyxÚãögð×ÂŽ~<ø…¦ø§Äšˆu èÿ ­|ám Á:?ìñâ/|BñŠ|cñGÂv¶>ð¾ƒûJø'S¸·H§ñ¾¼4?éÞ ðo‰u›Mñ 8U¦éÊš•]c"§`£¦µ Ù’ÄT“„pñÉñ9„g™¬L©,¯S±¿W¯‡Æ*]8—*©ƒÅ7^ž „°õÖ)FžbhÒ£Nó§Vžb¨ª”á‡SŽ7–”©ª®tœ¢Òà›ß²~ƒáÿx;DÐþ5iñlPEðïNý®¿kË?†ßN‘ã /Ǿ»øðæßã¤~ýšµOx«EÒõk³ÞðÇUðqé^¼Ðôs&žýÿÂØŸöoø®_x§áçƒ|K‹5kXkž/ñŸÅÏŒŸ<_â4øƒ§|/Ò¼g{âüTñÿŒüCâmoÄ?>Å{âRÔuàþ0jPÜëôÚ§Ê¿à­ÿ~ü*‡ãŸÄÿ‚Ÿþ|ñ§‰ô þÏ?¾%øçö2øQàïÚ~oé¾*ñ6•«ü6Öþ*~ÖÞ ³øg¡]ø ÁÚÇ쯿k ?fù5mÃú ¶«ñÄ:‚/æøMÿuýŸ>?xË࿾ü?ø³ñ£Zø³à-7â~¼~뿳f½mðÀw5ïÙ÷VñŠÀý¢-ï>,øGÁŸü)âøëÆ¿²EŸí)௠Úi6¾%Õñ×ÅíoPý“¾ØüCÓt†¿-µŒÐüñJµø›âŸøEþ/x›Jø–¶sj3ÉãüFH4x´mMoþ ¥ûx—Ä!ñˆüãÍ}üI}ñTŸÃZ¿íûH_|6ðþ©ñsÞ1ð¯ÅOáçÂ9þ-7¿…Wþ?Ñþ xËþ»¯†> ð„ºÎ«¯]x‚í¤×â´Ôíþð¢ªUëTªñ*Ô©ˆ”ñxš“”ñ-â£F˜ýfm×öU½…9T¢ª{Tö•œ=­jÓœM*œŠkš0†œaµ;a)ÆŽNš´%W‡…,-Ò‹­K C „„ã†ÃaéSj"Ɖ ©*"äœ*ª2I'’I=É4ê(¬·ÜI(¥¥Å%¤’I+$’Ñ$´IhQE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ˆøg=×Ç×Z\–’é—>ð¤út¶CŒ–3h6ZIe¿†¼o £Û´mmð¤1ÂQ"ðÖ„Šº]¯o\Ÿ€®>×à_Ý}§í¿iðŸ‡.>Ùöïí?µùÚ=œŸiþÒÿ„£ÆÿÚ>~ï7íßðšx¿í{þÑÿ F¿æk]ËøãÛ–œ?àôÿ‚ú?UùHë(¢Š¡Q@y×Ä¿†š?ÄýOÒµ-S^ðýÇâx“ÃV6Úæ«/UÐn.ìWWÓu­çí¾×µÝæ cEÕ-’ÓV¸º´†×W¶Ó5;E¢ª2”$¥Ô¢îšèÿ­ÓÑìôI¦šºz4Ï>þÊ_~j–ž)мE­kk øÏ⦻¤hjÿ„KOñÏ‹|Yãhüuãi¡ðÇmuñÄÚ—Š<žáu_i¾u­·Šþ!],“=ߌ|RöÖ–zgƒ|S(‰õK(tÛ ëð x"ßÃzƒü/…ñ“ĺ ÷Á¯ÑézÖ“©]i þ"M¨Zéú•åň·Ñ¼_£IöÈmæ’K]š×‡':³¥õŠNNŠ©BP«EÊZÆ¥”çûÈ54™Ù—bqV7ÀTú®# YU£Z4éÔTç{s:uc:U"âÚ”*FPœ[ŒÓM£äëØëãÖ“§ÙiZWíð_KÓ4Û;m?MÓ´ïÙƒÆvu…œ)mgecgoûSGmiiiop[[AA1¤QF±¢¨ûgá—Ã/ |(ðÂxgÃ)yp×’ë!ñ±,~%ñ‰nà¶·Ô|QâFÞÚÎ Ýbö ;;8¢³³Óô] EÓô ø_Hм'¡hZ™ùAñ¯ãF¥~Ògì}áÙ£Ãø‹ã¯üÖ>üX𮯣èwðŽóOñ·‹~1|i†}3À–Óø_Tø¬ü,¹ð•Ï‚—ĦÿƇŽþ5·ˆ¼>¾5ŠÞÏõOà÷ˆu¿x ÊûÄ—öº¶·§ëÞ8𦡬Yéë¤Å¬Ëàx“Ái¬¾™ÅÔZ´:Zõ­¬¿b†úæá,¡¶´ÛÅòÜ7á®CÀ™¥J¹gÑÉç˜e”+ÑÎ)糈ץ*Õ\a‹­ŽÀÎ P«SÙáéáñ<ΕJ¯‚(z™—æ|M…öxÌåãV\ÀRÀ8TŒ ãZ£ÂáhPÄÆNSPæ©RtìªÆ xN>x£ö!ðF³ðËÂÞð¯Å/Œÿ üIðûã—Ä_Úá§ÆO‡ú¿Ãöø›àˆ¿ð1ð¯Äo…þ6ÑO…5{k‰ígñ–£xºÃÏü}ÿñÒþ1ko¾;~ÔŸ´Ç- à÷‰~x÷þˆÞýæð·Ž¾'ü,ñw‰|[àOŠš´žý“ü/â†?tVñxr}wökñ/À•×ü'¡éš/‰m5„¾ñLþ#ö›ŸÛgö`´}J;ŠVÑ>áÚÆ¢Ÿ x原¡~Ë~4¾ø{ñÎK­žo'Rðo‹´oL´Ð ñ”>ñ&­àM3ÄÚ7‡5ÍBÃÀ?hÏø)GÁ_†ÿhƒðóÄZ†¥ñGáÃŒþ&ðΫã_‚ÿ4ÏÙëÅ^<ø5ám{_ñg€toÚïÁþøñ Æ ›Ãž!ƒÇÿ ~üa¾ø…á‡ðoÄ cKÑõxÅ4¼7% r{HN¼³8{HûZ2«–¹á+b”f¥JT°u0¥Š´] xŒ¾/o„¨ù–&U%NQ«N«•|¢sjtj¦6·Ö+`¥Z*5iV\lê*JQ­Mcñ š„1ÕÕl ?þ KðžÏIþȽøûûPkëà¿ ø[Àÿ³¥¯øŸá îµûøGÁ?|ñ‡ÃÀÝV/‚–×~2¶Óümð·á,×—_µ;þÒ—ˆ´?…þðÇŠoµÏÝx¯Nñ/´ü ý…¼ðSâvµñšûâׯ¿Œÿ¼Uiñ ø«âî¡ðÂgñUÏÄÝà…âMBÿCøkð¯á¯†4·KÙËÀɤé^Ðü?á½3ûKÄñC¡›KÍ"ÛDõO€Ÿµ?Á¯ÚF_iß õü8ºÑ- hÚ>¥ào¾‘­Aáßj—.«ŸâÿÛ÷öMðŸã­GÅßïôTøa⿊Þø‹c7Ã?‹Së¾Ô> ø&×âGÄ­kÅ^³ð%ψt?h^Õ|5â{Š:†—ÃOéž9øo/„¼Y®¿Ä¿Çâ=yëBn›”Üÿ³ñÎTçz—ËóYa©æ¸¹S©Ì¥ â®/ólÂQu3\M| \~#ˆ–g<³íá ×çÅЩzp~î7‡©<5>JK–l‰ú®*?SÃÑÆ¬=:Tž)?#·ÿ‚qÛiþðÿ„4oÛö¿Ñ4O…^)Ñ|Sû0&Ÿsû/=ïì ú&‘âßA |*ÔõÙzÿPø‡áK¯†¾6×¾^øö¨¹ý¢ì›Â§ÝÛ oig‹­u¼oÿ÷±øµ¯üÕ¾7~Õ´—ÆÍ'à·Š~üC‡Á¿ü;ûÉá¯|TøOãxÇÀ59¼-û'ø_Å? >"hRø†/K¯þÍ^&ø5ï èZ^âKMao¼S?ˆüïâ¿üsöq´øWñ’ÿௌuM[ã7þüdÖ|+áŠ?ÿh‡Úø‹ð›ÀWŸî>xÖëÇ>øum øÆÿÁ±ZüJÑ~êÞ%ð×Ä|¹‡âÇ´Ý_áÕÕ·‹›õ*ÚFšÞ ˜ÒÃŒ!C:+ ’@œd“ޤõ©¦ªÒ†7¬as\%zŽU]lE(ÆXlÂ5ªó¼L¥ìèÔX‰J¢­S…­9T©…ÃÎ’XÔH9Çž¥n_RœiÊ…jRÅ`Ôir<%5,dù0ô•(ÒX¼tiBšÆbÕi¨¢ŠÌaEPEPEPEPEPEPEPEPEPEPEPEPEP\÷„`¾µð§†-uHîâÔí¼=¢Á¨Å,ÓßG}›mÜw³Üx—Æw]¥ÂÈ·2ÏãÍ$ÁÞ_ë®Íª]R¶©öM}öÿ$-éø_üΆŠ(¦EPEP^eñ³@Ö¼Wðkâß…¼5gý£â/|1ñî iÿhµ³ûvµ¬xWUÓ´«?µßOkckö›ë˜ ûEåͽ¬üÛ‰â…^E(ªŒ¹%YK–J\²»‹³NÒI¦Óµšvê…%͵tÕÖêê×[ëÛCóÅŸ²f»ãŽð~ÑÚŸÂÚ–Ûâ~™ã_„ž,ðÖ¥§üBý–¡µðŽ‹ð—Ã_¼*Ÿ |7ÿ®®ìþ|EÓ¾,|IŸâ~‡syªx‹PñuåæŸ¯hm§hI¤þ’üÑ…{¢ê7Úu‹>+x×Å:$W·~ÕuÍîäÑ5:{ˆôýZþy¥{vœËŠ¥écólFaJ•*Ô°ñTyU9RU8ÂpT“j‹ÙÙ§Ê£~d¥tܹ¸°™}êT¥*­ÕruåJRR”ÚŒ!ï·¥ßG˲Š_øßþ Å¢øÛÆß¼csñBâÝ>"|jøñFÐfðs_i^ øu§h~-Ñþ3|*HÅÖðkò|p—âçÇký[Å÷–Öhñ@ü#â$ð‹ë2kÿðF/IâÿÚ?Vðt¿°îmñá?imOHø·âø'o‡üIûnü<ñOí-¥xÕµÛ…ý®|9ûA|?“žð׈¼y®Yéz.¡ð—Nñf§ðœÛü1Ö>!]]¤¾8”¢¼ºW¢¨*NTþ­ž[‡q””¨`gËò×B”¯Í&Wƒ…9Ū”ª¬V&”áŠÇãëb})ÕJ•jÍ©ÔÄWÂâq” ý¾#_0ÄЭ]8ÚµOišcUyTRxª5iá±^Û†ÃR£ö7ÃÿÙ?ö„Ð|EãÿŒ>0ý§¼qûGüK¿ýš<+âoü*ýœfðÃHÿgÿÙ×â7ˆ \Eãƒ?õ KÄø_ð·áÌRêñ|9Õ|AàÏ ø¾ïA×þ/ë>Õn¯¼iâíVû]¼·¹×µ¯xzþÛÂú6¤ù/öwìQÿFEðÓþýx¿ÿšŠðýSÁ~-ñ7ì¥ðÞËÂz‰xoö„ø¿â†¿³§†¼Mã߉?ì?áe|Oð֢ɬü>ø‰ãÇkmâ¯ÅàË ÝO]¶ðMïˆ¢Ò µûM¬—ê÷Ñéó_Iôm¿Š¾]ÂCö_ˆîáÓü9«ø¯ìþ/ðäßðŒé^1µþÔüCåêmý‹§øªÄ‹Ï^ê_f¶×-H¸Ó%º„‡«§WV ¥:ø¹Ã–”›XüGº«R…z|é×Nœ§EûE¨Ë‘ݤ¯nyÊt§*u#N+Òq’JóÂâ>©_•ÚÓ,LTƒ•75e'Ì™¯ýûÑ‘|4ÿ¿^/ÿæ¢ìïØ£þŒ‹á§ýúñÿ5>œ|3¬x‡Ä~Ò5ÿ êž+ðrhòx»Ã:v¯¦_x‡ÂÑø†ÖkÝüG¢Û]Ë©hi®Y[Ïw£¶§mjº¬\Yâ‰Ý<ôÛKÅlšÇ|qð/ÞýŸtÚÄß²ž¡ñ'Aøµ}âŸxwÅzWÄ9>è>7ñ§Ã}KáGƒô=áæ»â©4½>ÿSÑ>'ø¯\ðìšÍŒÓø~ÿN‹PÔ,’¯€uèá•|c­^ ¥8¬n)ÆPxÌ¿/Ru}·²‡>72Áa §8¹ÕÄÁA4¦âå)„ñQTiT)ÊÉÉMá1XõM'Rma2ü]vá”(Ë™§('ú ýûÑ‘|4ÿ¿^/ÿæ¢ìïØ£þŒ‹á§ýúñÿ5…mã?…Wš'„üKiñ+á­×‡xõÙ¼? kÚ†­$¶•2joh¶O§§È³”½¶2\eƒ”¹#[).kÆ8úò’ötéÕ©t«·îR”jÏOvœã9Z2LNrŠæ”Tb½ž²’ö•%JÛŠ_¼«Bµ(=J5aÊœÔ;ÿìïØ£þŒ‹á§ýúñÿ5g~Åôd_ ?ï׋ÿù¨¯=ðïÆoÙëÆ¾=½ð—Ç_‚(³øWi=ÿÄû¿üPð.·kðâÆÔêæ÷Ç·f¿uƒí-Γª î|Bút07P:ýŽãËÈ?´7ì¸ÜþÒ³ÈX¼f¿$cñáÀXþ!¸§€ÜŸáѼ;á]sâ‰<1¥x“ÄÞ•µÛM#Gðì~ x;@{ÛÏ^Ë­xƒ]—M‚ÂÆ[ûtRÄåÕ©ª´ñ8©SqU¾¿ˆŠtž%ƪ뚲o<6“Î…û™Ï1ÃÑGZS§—µ…WFTíV2äpämûHã3¨¦£iWŽ+%Í!:n´a¯^PXxûSèÏìïØ£þŒ‹á§ýúñÿ5g~Åôd_ ?ï׋ÿù¨¯’~%~Ù?>|Iýžü;âü²øKûAx+⟌4/úÏÆh?-Gáá1a§iZÕãI៟Ëâia±ºµñm€¶“K•`·Õg[_±´;=#Å>Ò¼Yá]GEñ?†uý"Ï^ð÷ˆ|?e¬hZö‹©ZG¦jÚ6±§Ou§êz^¥g47v…Œ÷—vÓEqo,±:1§[5±¶7ØáåZ5çõÜSöSÃÕ­F´*EUçŒãS ‰QƒŠ•ENS¦¥¤ç§N>åêBJ{5RœáFp©kN5iÞQn)Ë–MIJ1ÏþÎýŠ?èȾ߯ÿóQGöwìQÿFEðÓþýx¿ÿšŠüîøûnx·â=—ì½âω¼5ðçá·í­ø·Áß |,ÿ„viž ñChσµ¯ˆ¶ñjvzn½Šš¥µòý•¢|mýœüMˆ.<7ñïà_ˆ-ü%á)|}â©ôOоÕaðÏ gIükâ lÎ¥j5c<¼*Q­…¤±ŠUéκ©B¥,4~·*uc ýNtñvxj°«&ÜãSÙ8§>JŠSS†"¿ÕhNŠp© ØšrÃÒ”%%R´](·=£ÿg~Åôd_ ?ï׋ÿù¨£û;ö(ÿ£"øiÿ~¼_ÿÍE|×ñ‡öšøaà€¿ð¼¾xËà7Åý;Xñ&“á hï„_< ãïÜëöún¹ èŸ|O­Ïàc¯xG‹_פÑ#ººÔ¯ÛÃ×zM½¼w’‡‹Û5¿ˆ?ü1ñÃß ¼MñWáG‡¾*ø¶ÚÚï¿ õ¯xSKñÿ‰­o$¼†Öçþ¿Õm¼G®[\ͧj1[\iºeÄWX^,LÍm8ÆX98ÅUƹJ¼0Ð×±*U+Ά t¢ë'VSÃ×§V>ÍIJ3Ѷ¦£>Ѩó¾NENue-9aJ•HÑI»ZhÊ—<ùbêB¤æ„Ô:ìïØ£þŒ‹á§ýúñÿ5g~Åôd_ ?ï׋ÿù¨®Zø¯ð+Þ7Ô>x‡ã7ÁÍâN•¢^x—Tøy«üGðn›ã;úv‹?‰5 zûÂ7šÔ> µÑ¬|=ms¯]êsééeo£A6§4éeμWìµûD|ý±~/ÄŸ‚%Òµí2+ÛÛg@“Sðìþ1ð¤Ðjú¾—§xwB×5ËŸ ¿ˆàѧ×|;k¬Éi}¨h—íiI-¼ 0U$ãN¶2¤£MUš†;.Z^ÙáÕIr×j0–"•j*R²•ZU©«Ê•UU>^uóN4ãÌ’æ¨èÇ ®•äè%Y%«¤ã?†qg¶ÿg~Åôd_ ?ï׋ÿù¨£û;ö(ÿ£"øiÿ~¼_ÿÍEu?ðˆ\ÿϬ÷Á£þ Ÿùõþø5kêº~óÓþcq?Ýÿ§Þ¿{ó±í÷:véËååý_N[û;ö(ÿ£"øiÿ~¼_ÿÍEÙß±GýÃOûõâÿþj+©ÿ„Bçþ}cÿ¾ ðˆ\ÿϬ÷Á¡}WOÞcºÌn'û¿ôû×ï~v=£þçNÝ9|¼¿«éËg~Åôd_ ?ï׋ÿù¨£û;ö(ÿ£"øiÿ~¼_ÿÍEu?ðˆ\ÿϬ÷Á£þ Ÿùõþø4/ªéûÌwOùÄÿwþŸzýïÎÇ´ÜéÛ§/——õ}9oìïØ£þŒ‹á§ýúñÿ5g~Åôd_ ?ï׋ÿù¨®§þ Ÿùõþø4Â!sÿ>±ÿß…õ]?yŽéÿ1¸ŸîÿÓï_½ùØöû;tåòòþ¯§-ýûÑ‘|4ÿ¿^/ÿæ¢ìïØ£þŒ‹á§ýúñÿ5ÔÿÂ!sÿ>±ÿßøD.çÖ?ûàо«§ï1Ý?æ7ýßú}ë÷¿;Ñÿs§nœ¾^_Õô忳¿bú2/†Ÿ÷ëÅÿüÔQýûÑ‘|4ÿ¿^/ÿ梺ŸøD.çÖ?ûàÑÿ…ÏüúÇÿ|Õtýæ;§üÆâ»ÿO½~÷çcÚ?îtíÓ—ËËú¾œ·öwìQÿFEðÓþýx¿ÿšŠ?³¿bú2/†Ÿ÷ëÅÿüÔWSÿ…ÏüúÇÿ|?á¹ÿŸXÿïƒBú®Ÿ¼Çtÿ˜ÜO÷é÷¯Þüì{GýκrùyWÓ–þÎýŠ?èȾ߯ÿóQGöwìQÿFEðÓþýx¿ÿšŠê¿á¸ÿŸTÿ¿ýz?á¸ÿŸTÿ¿ýzIá4ýî7§üÇb?»ÿOý~÷çf§-4N‹û¾^_Õô峿bú2/†Ÿ÷ëÅÿüÔQýûÑ‘|4ÿ¿^/ÿ梺¯øD.?çÕ?ïßÿ^øD.?çÕ?ïßÿ^„ðš~÷Óþc±Ýÿ§þ¿{ó±Ï.ÑéÑtåòòþ¯§+ýûÑ‘|4ÿ¿^/ÿæ¢ìïØ£þŒ‹á§ýúñÿ5ÕÂ!qÿ>©ÿ~ÿúôÂ!qÿ>©ÿ~ÿúô'„Ó÷¸ÞŸóˆþïý?õûߎyvN‹§/——õ}9_ìïØ£þŒ‹á§ýúñÿ5g~Åôd_ ?ï׋ÿù¨®«þ ùõOû÷ÿ×£þ ùõOû÷ÿס<&Ÿ½Æôÿ˜ìG÷éÿ¯ÞüìsË´zt]9|¼¿«éÊÿg~Åôd_ ?ï׋ÿù¨£û;ö(ÿ£"øiÿ~¼_ÿÍEu_ðˆ\Ϫß¿þ½ðˆ\Ϫß¿þ½ á4ýî7§üÇb?»ÿOý~÷çcž]£Ó¢éËååý_NWû;ö(ÿ£"øiÿ~¼_ÿÍEÙß±GýÃOûõâÿþj+ªÿ„Bãþ}Sþýÿõèÿ„Bãþ}SþýÿõèO §ïq½?æ;ýßúë÷¿;òíN_//êú`Øxö4ÔÓÿaŸ‡ww‘Ao >/ifšWX¡†%ÿ„¤'¸™ã·¶…3-Ḭ́Û@’O4q¿¦Ã;|=?à˜£ÿ_Š_ü¸®ƒà¦“6ƒñsÀzƒCe/õåF1!ÿá ñ4‹ e {£|Ž@²#+¢°ý%ÿ„²÷þz·çø×“ŽÆºc ´ éÆMÕÆã\›nÍ.LDU½Þ·w—ÈÒæ›m+4¬¡}”öò¶Þ~Gå´¿³ßÁ"’yÿà™1C (òÍ4¾ø¡QG–y$‘õ•DDPY݈UPI kȯ`ý‰lµ=/Dÿ†ð&£®ë·­§hZ£|Bñ6¿®Þ$tðhz‡uÝSUÖJZF÷númÔih¿jg!ý¦ÿ„²÷þz·çø×æoƒogðÿí{¯ÃåB×>ý¤Är¤!Âü]øGnÿgÊ· HP%„Kp|‰dž,C¬ªû[ÂŒ§OÙã±±æœRj2r¯=‹nÊúö»NhrYÇÞ”cySÚò„ok«é­®½O4ÿ…oû;ÿÒ-|oÿˆïûMÿòª²µÏ þË>ÒoõÿÿÁ4µÏ øJ·{½[_ñ'ÀïÚ+Aд›8ù–÷UÖuk;=3L²~yï/®­í`@dšT@XRñíÿwñg޾,ÍðJý¼QðƒÂß>:ü-ðV¹âí Å–_¾1xãá&¡ˆ4ÿ~ÛÔÛW²Ö¼©X_ê#™­\Z¾³ Ø®…¦É'­þË´gíÅ­üOøÑðsöÏÐ> x{Zð×Ã/‚?ü'Â;v±áÏ‹)ý¡<«6»2ünøç¡êQÚêßd¶²··Õ4›¨YµXõM6æ ´ù«~z±Œ&åNq|žwRuš|¯eLêFV½ù©Þó%°ùe²© :ºÚr¥öÕî×Òþ}®~ÂwºN—ì?àíX×­'Ô4}Ážø«ã½wPÓmšÕ.5[}ÁzŽ¿«6‘·öK«1§Gqcn×"{ËhåÔû7ì–:ÿÁ2/¼¥êw¶šZêÞ1ø;ûD|<ÒþÓ©ÜǧÙ[¯‰üae¢èv—·×ö:wÚµ vºÔ®-lm˜Þ\Àôþûj|/ýˆt½;ÅKñƒÄÿ²ÿ‹mÓÂ:7Â?ðŸøËà§Ä½ÇL]Hðˆ~"xÿEº°ø7ªøJÖ-ßÁ÷ާeá­[Bðáð~¡Ûê^*Ÿ]üÃý±|K¥øgÃüáÏ'ý á²ð‰­¼UñUðï‚|)á ßøzöÓÅzOÁÍÁÚmµÅ¯Á» ˜!_x‹âW·¾¡¡ñWâ6“‡â‹ëðP½}/öÑ<ȼ¸åøÅá-¸RãÁ_w|¹á¶„ÉÇ#'m}ñ+‹–q„Ωal³…¢ªeؼ^# ^˜Ö¿"ÆWÅJ5(ÔÃ7M ܵc>E)Uùü1Áxy”ðo€¯œ(ñŽ6ÅUËóʨc°2Ëje²£9FžRšÅa³J.x!þÑß~øÖˆ¾ ·øaâm}4hÞñêXx?Šž+ñíäV¿l>Å¡Zëš×ˆ“fšj¿!.¬ÇÓÿð¹?kOú2/áÍøÿÏ®¾Ö–f°tœV ÓÌéâ±U)f0Î2êÀc(aé¬l»†ÄÂqýßÖ)Ör¥Q:©(¥#ò éR¢à©Ôssœ½¬díÉ8S„©¸JHÉ)AÉII4Ý–×?˜_ØÓâ¼Oû]þÊÿ²OÀ][Äÿ¾|(Ôþ4xׯ_´¾.ø‘¢Ú|wñ—~]júÅLj¾ jF™á|âäðw†u [Wñ}Þ£hš6‰c¬Ýê—®£s÷Çoø'Äß·gŒ¼A­øgYо øÇöðßÃo üfÐ/¼>úÏ€>?ø'ãÞ¿ñCÂ:÷‡´×¿›_Ò|Qà[…ð¿¼9¯Þh±h•¤Z|Z•ÕÔwÖ1þÄÿÂäý­?èȼIÿ‡7àÿ>ºOø\µ§ý‰ðç|Ëã]yØüE,E|º® °K…ÇS¨çŸá+×Äãso–âs‰¢ðU0ÕáC8l*Ã{9aqx\=hÕqŒ©Š½ZuhÕ¡ NëÒÀS­í ±.oœà3¸9B­a:uñ}>&…j5iUÁÔÄRqR©ÒþRüÿ¾ÿ‚‚| ðŸì§âcGøÉâÏü_ÛGáWÅ{ÙžoÙ&ÿâ ÈøÓñ£PøáŒ> ðÿíM£ê?µ|IÒ­¬´ÿé67:Ä? Yêú-¬:Tk§xËñû¾³ÿDøˆo¿c¿xR÷Å–ßuŸÿlM/^ñ|W^2¹ð÷€¼WÅ߀ÚU®»áÝá̺ä^ø•­ø›GMRÏÁ~´o‡Ö6Ú©áÝ*øôÅþáqþÖŸôd^%ÿÃðÿŸ]ð¸ÿkOú2/ÿáÎø ÿÏ®¸-7 PpÁÚŽ/ëT¹3 ÒçŽoØzp£^œa…©,ÿ5œ0é{<3Ä(ácBå1›S«‰«z‹ëqÄ*ðj­HÊU«àqªsUö•}¶¦Y€t«ºŽ½G†ŒñUqgR¤ÿ2àœ¿±Ç?ƒ >#ꟴԶšïíñ3âÿмKñĶ‚m6:?‡ôö²ñ‡ƒü øgF¸×îµÿÂCc¦øsUþ“¿áqþÖŸôd^%ÿÃðÿŸ]ð¸ÿkOú2/ÿáÎø ÿÏ®µU±OƒÆNxiË‚ÀàiÒþÐËáJtrüwæ_h¡Z2“†#‡0éJ1¯Iâ)â#QV“Ž~ΟÕ18©ÆŒm|w´Q¨êÒ«ˆÂg*‘¥)©F4ý†yŒT×/= à <<é:¿ó™ðWö6ñý·ü7âì÷{¡Ç/ìßû0k^/ý±þ´ß5µ¯Ä¿ÚïÂöº\þ¼·–!f‰àoX~Ðzχíã¹–;(>%i³µ•¤–ÚlëKàÏü“ö½ð7Àoø%†–Ÿ—Ã_?f¯‹%ø¯%Þ¯à»ÁðóIñÿ€>1躭w}£ëz ñ_†õ¿xŸÂ?Û1øø©d‚Q}©Úm:îkoß_¯ÅÏ…wþ0Ô¾Á7m<wãÿêþ6ñ£xCÆ?³§‡àñ/Œ¼C$ø‹Åš­ž™ñ–ÚÎãÄž$¸µµºñ&¸`Ÿˆ/-­ï5››Û˜"•=/þíiÿFEâ_ü9ß?ùõÖ4ã^–_…ÀÆ­4éaò¨U¯ ÏKírªõêa91ñ s–Z†KdÔ18œY«8á목í*—ÄãëµÇ,|jPs²Ì(biâç:sSJX¼^7šÏ çW †Åãñ|:x5 gò7ü«þ !ã|I­x×özøýª|Vñüëö®ý>0x³âŸíáé^5ý¢ü~4OøcRø_¥IñŸÄþðÁ/ë63éÞÓ¼1£|.Ѽ1}ËâßøWJ³ðæ­ªý/ñþ £ûNë¾ý«4ß |}ÿ?à’¿gφö±ê~ÒbÔ~;xßâ„·€¼ñ”>ŸKm[ÁËe®kçFðµÚýŒéÝÒiÇúMÿ…ÇûZÑ‘x—ÿwÀOþ}tÂãý­?èȼKÿ‡;à'ÿ>ºŠ”ªÔÃTÃsa©Â¦‡½,~[IR†7ÆÔ*¼=:s…* ›ãìÞ¦”)ª8w…ËiS§+ÒÄ5>Z´*®w*èb"æªÔ•IЯ•¡íªOš¥fÿÔü²*Nn½_o«V¬ëÖ¥V‡ó5ñ'þ ûc|EñíªXü'[‹oˆ??à›þ3ð&âÿxjÃBøë¬þË„>$ø»ðW\¼MGR—Âú޾ö-áÍ6ïÇ6z‡u}n÷Lº»ÕG…?¶u«/ÛÙóÁ~/ø…gâßx³ödñOìãyªé°Ã¤|A¾ø{ñÅéº%†œÚߌ!øc­xÏÁÖ’Á-¼šW‡†™ñÆ÷°Ó.uI¼5y/ü#:ÖŸð¸ÿkOú2/ÿáÎø ÿÏ®ø\µ§ý‰ðç|ÿç×]ÒÅb埊ZÇ‹~/éÞ4Òü]«|2—ãµ§ˆþx›Å_æñm®™á­7Åš‚èç‚ô;µð¯‰#Ö‡†uþ“¿áqþÖŸôd^%ÿÃðÿŸ]ð¸ÿkOú2/ÿáÎø ÿÏ®¸¨Âµ4iS–3£,·Ùâe‚XˆQË3Ú™î ±¯SÂÊÙÙuZ0qO,Èr<='F¦_ •W?iãR8å*j‹äçÌrh丬CŒ£/i‰tž/N¥j¡ŽÌóJœ’¡©‡_ÍÏ‚a_Ú3ökø©û&|zð·ìÛûPüuðô:—í©ã?ŒÞ ›Äß²¤ßüâÿÚ?Xøu­i·zñGìéðŽÚßW¸ðþ³­x—Cøk©áø®ë_Ó´xÃF¸ÑéwK¨é¿ |9ñ[â?‰|w¡ü4³¼[[;iÂvzôZ~ªtø°‡ˆ°|9u¨øtéZçé/ü.?ÚÓþŒ‹Ä¿øs¾óë£þíiÿFEâ_ü9ß?ùõÖ’ö¯ W …§Nx ùMg˜à#õ<³‹§Œ– URQ¥V–ž­jukÐÃáãB+c=¾SŠ©g)Tmã–eZRŒå,N=QÅÐxªÒ’ru*C‰uT% ujÔö²§Ï n…ÿðN_ø$ïÄ|ýšµÏÚŸ^ø¯qñö}_‰àŸÙÿÅWß î~|!ñŠuŸXËâÏ ^|.ð¶›yãmf㚥՞‰®øóÇÿàðí¯‰üHžŸF¼¿–K_1ðü'öÓ?à”þ ƒ¶Oíðkâ·‚¾)x¿àÌú¯‚¬Ÿâ¦Ÿðëö‡uÿ‡#ÆVz¼Þ»¼ñæmÞ©^ø¦ÛÃþ(‹H‡Ä>!Ò¬Ž£¨ÙÿCßð¸ÿkOú2/ÿáÎø ÿÏ®ø\µ§ý‰ðç|ÿç×Zξ2U'ZÂQ¨ñyn>œ©ãð ÒÆexéf4+Þ­z’Ä:¸š‹ëQÆË±4háðõœ¨Ò”%£q“ª¦HW…j5iÊ#MáëÐÄaçB‡"¡ÓÄ×ö/ì •ªÖ¢áV¤¦ÿ—¯Ú¯örø·áïÙþ ©ûE|EøS›7í%ãïÙÂãáÇÁ/]xBëÇ:v¥á][áÃÖµåø}â?øüT×­þ-'Â>%ñMÔ¶Qøz K\¾×®nô}®ñ—ü7ö–ñ—í ñÓÃÞ(²ý¥5€µÆ_€tˆ?uÏÙ;OøwáÛ_h¾¸}+⎡ñáߊ¿jxß᮳ðòɾÅðšÏøºÏSðþ›«øáìsøóÄÖ?¿4o‰ußx«âü;Iñߊ¾jšŽµðËÅ^%ñWìã©xŸáö©¬[Ag¬Ýø7ÄS|d:φÛZ´µ´¶Ö£Ò/m!Õà³³‹RŽé--–/Z‹âÿíaQÃì;âa†4Š(¢ø•ð8¢Š5 qÆŸ‚$h€*"€ª *€gV…\.&Ø_mƒ† F‡öŽXiåùu,•áÖ#›¥SW“aqu'JT¡ $ ¥>\ëÅU¥: Stë}v½ZŽ›…jx¬kÅQš£8Á¹R¥ƒÄNšg)â'ˆªñ0©:P­Wñ›öQý–~>~Ïþ3øðâì«©xûOñ'íYñ£ãÆ•ûYÁâ?†³ü:Õü+ñKX×|U ø–îÁõKâîñÓÃöþ ‡á–©áÛÿ‡Zƒ“HÑu Í3â»èGE³×;¯ø%oì³ñ£àGìݧþÌŸ~ xÓÀž+ø'¯øÛK²ñÖ§sð÷Xø{ñcC×¾!øÃ_Ò|KðçTðo޼Y®C§'PÓ.ot߈:|Ck.§´:=Ô–Z©°ýbÿ…ÉûZÑ‘x“ÿoÀ?þ}tÂäý­?èȼIÿ‡7àÿ>º0Õ1Xz0£a§à2ü¾òÌ2ø¹RʰØl_QªuiÅUÃáèÔ¦Ü#ÕXŠª¤Z¥„XB²öÓ­?z¾6¦>qЍâ«W­Äb#Rš£Z¾c^³§ÏûºŠœ¢US’ÿ…'7üúûâ?ð£þœßóê?ïˆÿÂºßø\Ÿµ§ý‰?ðæüÿç×Gü.OÚÓþŒ‹ÄŸøs~ÿóë§í±ŸÏ…éÿ3 ÷ê#úò·»Ê=Ÿþ?/îyVVä¿áIÍÿ>£þøü(ÿ…'7üúûâ?ð®·þ'íiÿFEâOü9¿ÿùõÑÿ “ö´ÿ£"ñ'þ߀üúèöØÏçÂôÿ™†û¿õýy[Ý=”{?ü~_Üòþ¬­É“›þ}GýñøQÿ Noùõ÷Äá]oü.OÚÓþŒ‹ÄŸøs~ÿóë£þ'íiÿFEâOü9¿ÿùõÑí±ŸÏ…éÿ3 ÷ê#úò·º{(öø ü¿¹åýY[’ÿ…'7üúûâ?ð£þœßóê?ïˆÿÂºßø\Ÿµ§ý‰?ðæüÿç×Gü.OÚÓþŒ‹ÄŸøs~ÿóë£Ûc?Ÿ ÓþfîÿÔGõåotöQìÿðùsËú²·%ÿ Noùõ÷ÄáGü)9¿çÔßÿ…u¿ð¹?kOú2/áÍøÿÏ®ø\Ÿµ§ý‰?ðæüÿç×G¶Æ>§üÌ0?Ýÿ¨ëÊÞéì£Ùÿà3òþç—õenKþœßóê?ïˆÿÂøRsϨÿ¾#ÿ ëár~ÖŸôd^$ÿÛðÿŸ]ð¹?kOú2/áÍøÿÏ®mŒþ|/Où˜`»ÿQו½ÓÙG³ÿÀgåýÏ/êÊÜ—ü)9¿çÔßÿ…ð¤æÿŸQÿ|GþÖÿÂäý­?èȼIÿ‡7àÿ>º?ár~ÖŸôd^$ÿÛðÿŸ]Ûüø^Ÿó0Àÿwþ¢?¯+{§²gÿ€ÏËûž_Õ•¹?øR’ÿÏ¢ÿß¿ðü¸£þ¤¿óè¿÷ïÿ­]gü.OÚÓþŒ‹ÄŸøs~ÿóë£þ'íiÿFEâOü9¿ÿùõÓöØ¿ùù…éÿ1ø/ú‰ôü{h{(v—O±?/îùÃinOþ¤¿óè¿÷ïÿ­Gü)IçÑïßÿZºÏø\Ÿµ§ý‰?ðæüÿç×Gü.OÚÓþŒ‹ÄŸøs~ÿóë£Ûbÿçæ§üÇà|¿ê'Óñí¡ì¡Ú]>Äü¿»åÿ ¥¹?øR’ÿÏ¢ÿß¿þµð¥%ÿŸEÿ¿ýjë?ár~ÖŸôd^$ÿÛðÿŸ]ð¹?kOú2/áÍøÿÏ®m‹ÿŸ˜^Ÿóòÿ¨ŸOǶ‡²‡itûòþï—ü6–äÿáJKÿ>‹ÿ~ÿúÔ”—þ}þýÿõ«¬ÿ…ÉûZÑ‘x“ÿoÀ?þ}tÂäý­?èȼIÿ‡7àÿ>º=¶/þ~azÌ~Ëþ¢}?ÚÊ¥ÓìOËû¾_ðÚ[“ÿ…)/üú/ýûÿëQÿ R_ùô_û÷ÿÖ®³þ'íiÿFEâOü9¿ÿùõÑÿ “ö´ÿ£"ñ'þ߀üúèöØ¿ùù…éÿ1ø/ú‰ôü{h{(v—O±?/îùÃinOþ¤¿óè¿÷ïÿ­Gü)IçÑïßÿZºÏø\Ÿµ§ý‰?ðæüÿç×Gü.OÚÓþŒ‹ÄŸøs~ÿóë£Ûbÿçæ§üÇà|¿ê'Óñí¡ì¡Ú]>Äü¿»åÿ ¥¼oÆ> oj×^„^Yo øøð'Ÿi8 ã=«+Æ2üjmu¥øw©ü"¹ð•Γá»Ëñ&·á…Öã½½ðæ“w¯Zß$ÿü/=ÐüYñ»á~½ñ›Ãv?5èÚ§íEû]üEðÇŒ|#ûGþÀÐx{ľ øÁûQü_øµà½cOµñ·íƒàÏØý»Â~6Ѧ»ÓüCámUÓïšæÆêÅ$·,÷<3ã_ˆ75ω^1øg©ü/Òµ€>iÖº÷ÄßÙÏâ§­xáÏÆŸÚß∯m¡ýžþ7|iµÑ´KmãÇ­lî|Y{áÛý[V]z +M¼´Ñ§¾~«þùñKþˆ×í‘ÿ‡ÿö3ÿäšüçâS—?l+ûGùn¬n?h/Øò(/-Û‰­'–ÇQ³½ŽˆËC,–wv·HŽÍosÁ%_J\ž>ÅOÆ•¬”00”­OÙ®iiÉm&ß»f﵈oÓµ›ZÞM­àÿ—ºw¡ùûPï뿳ìºuµ¤ú޹û~ÍúÞi{6›g{yu?ÅsiÕíµŽ§qgk<è‘\_Á¦êZDÏ4vWn¼ŸVhŸµ?ÀÙOI¶øEðÃ^ý¥¼/ã«+QûcüUø³àVÒâý«týSúΉð‹FðOŠ-µk‡<¤x³ÄZo‚üªÚkÐYj÷ú¥ÿˆáøªx‹âß>>}‡ûK~Ä"ý§cødÞ!ýŒ¾8ü9ÔþxIøeá}sá?Ç/Ù£AÕfø ¬¿ØžÖÄ|[c}¦i3Ïqw§´v6×¶×7E.Ä7WËò×ü9ïRÿ¢5ûrÿâJ~ÆŸüU~)›ðÆo_;Í3lº¾_J¦e^hâ%ŒÀ$ÅG…2ìvÃô°Õgf¼D¥N†kˆXEOŠÄ`°Óªò©TÄQŽ_‰ÅWÄÃ,e 6‡çwíP~øj÷ÆZgì÷ãÍÆ¿üKðøx—Âv;µñ¿Ä…—ú柯.¹ðOÆ:æ¸o?áaÉðÿìÚwöĸµ½kRñƒ­ØøwÅZßü]ásâÏįÔoø,_³€æhD_nøÝáø†n|ŸüEr3ßgùêyÍ þ 9eáohºïˆÿgOÚÓÆúf“¨ÚêW ñïíû#]xOÄ"ÎUž+ zÇEÖ´ Z÷My’7¸´´Õ¬þÒA;Ém$ÐK«ÿcø÷«üjý›õx£á•÷Ã/üý§¾øw^ÒoõMU“í^;ø#ñWÆvÑ¥ç†|CâMê?ì! ß,ÖÚ„‚&¿{Y ]Au_IÀ¼=É1˜¼Mjx8SÌ1xiÔ§‚«BThû%4¥RÄWå…J˜ŽU¾XI4£rÛó_|Ján:ÁðMÃXî Í(ð†_œP«šq$`³ _ö•L²8zUªÆ ˜šØZ9Z\UZ•xU êU¯‰úÅCôþ ÿ#gŽÿìÊ¿à˜ßú¥~#Wì~>Á0?älñßý™WüÿT¯Äjüø“wñWãíõÿ Zëµçíoð¢Ïö-ýŸ?g¿‹³Þý¬?h/‡ß >xÉ?gMwâ³®OðsÂßl~øÏÂú߈<¦ÞxÓ¾?ðŠô kO—\FÓà¼Ö/odêÏqtð¸Ì­hÔt2þÇq.T¢ªVú–K‚Ë§Š¥†£)Sl]Hâ£õzU+aéNPq©^šjGáy~®6’T%MUž7)ËèB£œañMgÁÖ•,>”§ŽÃÂ\ÙbžmÂAûLË•âp”*Ê•:óŽp¸-`!(:BUkñïae9KØRÄÔÆÂ¥hljœ?«ê+ùxøÏÿ¯øØß²çÃOÚà·ÅÙkÃ?|]ÿäÐm;¯Ù.ãö6ýµ¿m‰#Ä–ú¹®xÎoˆÿf¿‰¾ðïì§ðââOxgÁþ6xKQÒõNo놭ƒáIî$ò_Œ_ð^ÛOPÓü[ãO€¿?eßx7ŸðF„ŸðTÛ­âïƒ>+üSñ4ž1ñŸŠ¥ÑµÿƒÖúǃ~2üÒ®<3-«Åâù4k-SF¸³“R½Ð¼E¤º>“Xš2Â<ÃÛ¸(åX¼~Vœ•j[ƒâ¬~3 Ô}¥,U8^ â9Î)â1têஞ/…¡ZiN5éà*Ò’”s*X ˜DÚ„çS2¯Ãl&têrÔ£V¥~/È£ÕŒ0ÓŽ*u©b*P£R¤®+øKÿ‚†ÿÁ[þ+|ký•ÿkï ~Ò?³ì¹ñfÏà‡Ãø%ßíÅð;ÂþGíá/ hþÓþ2ð~¥‚~&j~ý¢¼ã‰^#øM, Ð|wá½gá?…üg¨é—z¯ˆ¾Øé÷øj×÷£öý·ÿn_ø(¶³ñ¯ã_Âk¯ÙCáìÃðƒöÇ×ÿg 3á/Ä„ŸøçâoÁÏx‡Ámâ ;Âz§‹,|Mà]_LÑugK»¸‰î,l-µ6y,ÚOÀOÙ«ö‡ÿ‚ŒøÀß³·üçâ¿ícñçUý§ÿiø(çì/ûEê_ì~8üBÒ>#hß±Wíû._~Ô¾h¾&·× ñ‰áMðëÆž¸ðæ›r¾Ô¯Ò÷LÒ4km#P¶‚Ó—-ÿ…*²¥NT躖M”cg^R§ 6cŸñF%Ëp±©(Fž"¤òLT¸³éÏÙáòÚ3ÂÊrÅÆ¼hucÿØ)N­YSnYNeža ¥.|V[”e†/0Ä5söÇ:Áaør1«­|fg€¯CÚSªáïÞŠþV¼;ÿÆý±þ+xÏâ/ÄO€ß³ˆ¾,|øwûuêÿ²Ùý›¼ û~Ý¿¾1xƒà׃5­+À¾:øíuûrx1®ÿdoxÛIñޣ㉾kßo¯ô/XCá½kǃ^¿·×Âß³GíÁûIÁ<¼ÿ ý¢ü §üñŸìõ}ÿüeø1ñ³á§‹<ãÉþ3jú7Åcáæ…ªx³ágÄ­âfƒà ê~‚=!l<5â߆>4µñ·º•íLjü<š]®›¬V_˘Ká'NŽgÀârúísƵ|ß6ðÿ+ÉèÔPo“˜ÄCÊŸ×).xŒkÖÊ,ü/àƒyâmSX·Ó†ìgñ Z^ßÎý'öàÿ‚‘Á=~|Nø¢øgâ—ÿgÏÚþ ð“ökýˆ|'ÿ(oÚïã½·ìáñ>ÓÇV^5¾þÒøÁâÍöðw‡®¼GáÚüºøûc®ëºF„uë^ ×V‰î£ %‰u—½LÉe4\c*ª¦:x®ÂaèÔäW£,eN:ÂO«N½,£:¨áá#í6Åaêa©á*E¢Äe،ڬÕ)ÒÀáp|kÅW‡?¹V8Z<ŠX™JtaN®i•RSLO,²ê+ù¶ñüGþ š¿>6~È-áïØ+á—íû)~Ãßÿm>0ŸÁ_´WÇ‚ßgÔ|y­Çð3áÂÅÙׯÞ°³øsaaoñoãŠàñCÜüC“WƒÁÿí4-*íÏÏÿÁXlmÿiÏÙKþ …ã¯Ù«á‰-|]ÿwý¢i?hZ=¿Ç?üxøckà[Í+NñOÁ ŸÉñ¯Qøãÿøß✚¾«oñKPý”´xcÀ—š}ŤzªéÓÞêܵ1ØjPUêÕ§ 4!›ÕÅTSöµ)Qʰ{ˆuhŠ©Jº¯Œðç‰ðŠøŠ*2êøÅ*®¾Q†ÍåÑ“©<5)B¦1×ÀáhPæ8ÔÄcs> ÁÆJ•\%A}K2 Æ•IS•¬e,-j˜j”ñõ2ÿí2ŠþV¼ÿÆý±þü>ºøáñÿöbñÇO‚þž(ý©5| ýƒ?nߨÏÁ¾2øc¶¾-Ó¾øŸâÇíXß<ñ£Á?âÕm4o üwøjþ°‚]2ó_>Ö´½_L‚Ý?oïŸðU™¿àˆß?kÿþÐÿ²ÿÃy|û%ü7øÍ¦¿ì©ð«ö‡øEñ‹á‰V¹áN|ЉEW!ÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÀ^øÕð}î®Çµk(õËyîÓQ–ãÃ~5ÓnΧ’C¨Gpµ|SÚðK AçEåle%0êœþµñÀ·W%ô=sà o$„å­ZgÚe\É$š¯‹ôv T³0X Ç÷[Ñþˆñï#§‚§ŒÂ®Ì'Ru òü`êfTy}—/·Ã¬¹Ó§7*Ž2ŒkÎ1”IÚ|ŸoƺΕoí 4Tc%ˆ¯”Õ†£{ªU%ˆRšJÍK’-Þ7ŒnÑÚ+àÔþßXù×4 }B5-íuû;p2d-mäг“÷Lšª˜× Tí_Qü7ñ2êß|1}gss{ Ý„†ÓR»ŽxçºÓ㽺ƒO¹Ûssy4‚âÆ(%Žåîd[ˆ."Û¨©öœâ>0ÍjeQÀàpµ?²çšÑ–=ÃfÒthâp˜ZðÄR£…ÃË :sÆÐzJ²jV—$œü|Û$ŽY…Ž%b+Vÿiޤ*àg…Q”éÕ© Br­QTRTfžµ®¹•íê77[²øÈysžç²Žùb2ÆOÄêþ%wElÁœì'ä#³H0Îæ¢ƒ÷³¦¦¡zÃtq±21Ä’d–õ¹%»3g+Ð|ßw•—§àßÒ¿dÂ`i¯~¢çjÍ'¶º§kì­¥îÞ÷KGòu«»¸ÇN¯ÊÿƒéåÔ¥<ó\JÒM#H䜳÷èEÀ; þl?à§ÿò/~Öÿöz¿²‡þ±7‹kúJn§ê6¿ðSÿù¿kû=_ÙCÿX›Åµô˜D”¢’I'BÉh—ûM‡-j;ÿ"ÿÛOÔïø&üž;ÿ³*ÿ‚cê•ø^½ñWþ û|jøµñ“ãgÄO„¾9ÔüsûDÃñúßEý¥¿j_ü<øÛ§ü6Óôý/ÁZÅŸƒžøÓáσÿ¼3¢iúeµ²x[ÅžÕ¼9||Úž—{&©©½çÿÁ0?älñßý™WüÿT¯Äjýƒ¯Í¡˜T¨ã?ªÑ£Ïʹýl&ÛRæµý•ogOÚÓ¿-Ogtùco^Œæ¨J’œ•:¼¾Öš“P©ìªª´½¤/Ë?gV1©O™>J‘Œãi$×âŸüþ Và ~%ÿ‚qxHð÷Á þÎ_²í¥üWø­e¨É¯è6‡á§‚¼=§éÞø5ðWÂ^ðn©ài|-ã)ìí4ŸXø“T𥞠hxe/§ŽKH~ïø—ûþÊ>+üAøáñáHñÅŠ²÷Š¿cø™|qñF]söjñ®©>µâo†Ë¡è>0Òü9¥ KR¹šäx¿EÒ4ï؇ò4ïZ[¢B¾…âÏÚ¯ö^ðÅß ~ÏÞ:ý¤~x/ã׎bÒfðWÁ/|aøyáÏ‹¾0‡^»¾Óô9¼-ðÛXñŸŒ¼A³¦jVZLšN‹všÞŸ}mffšÒtÞëÏŒSÃW‹^ÚŽ/2Îqµ«T^ÕÖÆæ™N‡óŠRªÓNòŒ-,·†O–¦‹§‰GÅ:ÚB¬¨bhJ„ÞƒËr¼(aç,<©`°¾3>ʪ{:r‹‹£šb'ŒÂWJ<µpx:”Zž Œáùg{ÿZÿ‚o]Yhúm—À¯øRÃIýôŸÙ:ê×áçí+ûTü2‡Æ_³®‡¥o¥|+ø¨Ÿ>6ø`|bðý¥¶«uj'ø¯ÿ ž¯-¤zu¬ú”¶ú>“—XßðHïø'«èš×‡ö}Îâ/ÙÃß°v±gÿ _ãpûgì£áMDêÚ¯´‰"êßì7ðœÚÏÄ‹¯õW¾0¹ƒ÷uúAXžñ/‡=gÃZÍÿ‡|G¤=î=Ͳjzˆ4½OBÖìAu¥k:uþ™¶—GR¼á^œ¯*x™âªâa/zŠ˜èf´ñµ+ÅÞ5gŒ§žçpÅN¢”±Î3XÕsŽa‹U¡(ÇØ´”}‡Õ!‡i%ìVû:xQòïêØ™D°‘…¾¯ý‘—JЇÔ0Η淎?àŒðMOˆúÄ øÏömþÙÑ~)|/ø ðcÇv_ð¸~>ißÛ¿ fô+Ÿ¾ûN•ñNÆïLÿ„ èý±£Ï§ëþ%ûßêºú\ݭǤØÁ0ÿb½â爾5xWá§|âß|RðŸÆïø{á¯í ûHü3ø1ãÏ‹Þ »Ð5üGñïìéà‹žýŸ|sâøõ è:ö«­ø³áޱyâOééâ?I«k“\ê}÷E\kU„áRjBt±xœ}9ÆrŒé㱘šÌf6M8bñX¼.‰ÄŪÕñ8zêÎUhÓ”gÙÓöj³‡±Xj8%K–>Í`ðô)ápøENÜ« C J–½•*éÒ„#NŠùoö¿ý‹?f_ÛÛàü¿?k?†0üZøO/‰´?7…eñ_Ž|ËâO ›££jqkÿ¼Oá@ö‚öî7·ƒYŽÎî‰`½·¹…ŒuÏOûþÈw?µgïÛr_ƒ–öŸøMð¬|ø}ñ:?xúðïÃ$³ñŸ†£ðl+áþ¢a±ñN½io­êþÔþ×zà þÐþÿ……¢ü#øÃà¿,¿á*ñ·„ÿáøµðáµ&ð_‹>ÓàxjïVþÆm_P?ØZäú—†µ´cUѯ„Py_E#¬ˆ’!Ü’"º6ʸ §28 ÜN¡^ ãxèfPŠ÷U<ÊšÁ*xø%e u5–åʤ•x, F¢ú­g>ÒU7´sL \¿›ÉO-Ĭ_¶ÀÞíK]fÿk†Ö…UŽÅóÂK[Ÿâ/Ú_þ Ïûþ×>/âÆÿ†ž"¾ñãü/ñGÁ cÆŸ ~3ütøâ¯üñ¥å¦¡âo„?µÿ€?¾ê¿~ê—Öixþø…uâo [\ÜjSÙi6Òjú«^|?gÿËñÇ?ࣞøíñáÇì©à_Øcöxý‹>$þÆ?¿fß_ë?eø‰áˆž µŠùþ&|?ñ7Á†ÿ ¾ø x Þ¿Ã-Yø·§ùöf 5û½;R¸[o×ÏŠ?¾|ðF±ñ7ãWÄχßþøtØ|Aø£ã?|?ðF„uMB×IÓ±âÏjZFƒ¦GU½²Ó,EíüïP»µ²·ó.n"ë|%øÍðãç‚l>%| ø¯ð×ãOÃVëQ±Òüð—Ç^øàJ÷H¼—OÕ¬ì |ðï‡.|'yyá[]#Døwac¤øbîëÃÚ<6=ÄÖOÎx;þ 'ûø#á߉¾éÿ > ø‡á/Š~ x£özŸáoÄÏÚ{ö«øÅðãÃ?*×ô/íóÙ§}¯íÚ­åŽÍä%çÄOX|Dðÿ‹½cÊñÿŠ|â¿hZö~©'Û¼%àcŠ5oíH¬_EµþÌÕ¼yáKO°^j6úïö¯Ÿ§ÙÝÛXêSY¸'RÞÍ9óUÄP"r毅ÁÇ0ÅQV½êá°†;M{ôprŽ&¢)±û·r÷R…:½- µž”Ýö…LBt)Éé:ÉÒ‹s\§kEqZ/į‡>$Ô¬´oøÿÁZö¯¨Åã ôý+EñV…ªjWð|<ñ-·ƒ<5•ü÷WQxÆ–~ñ„E"xgÄ·VÚ´lµIâµ}«oøróį„í5ýëÅZ™£kzç†mµ[üA£hÞ#¸Ö-|=«êº4S¶£§išíׇµûmþòÚ]RãCÖ!±–y4ËÕ€³²•Ÿ,”œ]¤¡9Ò›Of£Rœéɯ†pœ¥‘ÖK¬S]bß*J_ÊÛœRNÍóFß¾ÝQHŠ( Š( Š*9eФžy#†cyfšWXâŠ(Ô¼’I#‘ÇÎìBª‚Ì@Ò”£ÊR’Œbœ¥)4£¥w)7d’I¶Û²Z±¤ÛI&Ûi$•ÛoD’Z¶ÞÈ’ŠÄÑ|KáÏxwJñ‡uý_ðž»£Ùø‹DñF‹ªØê¾Ö›¨h÷ú|Ñ_Yêv—3Y]YËÔ¼®r|/ñá÷Ž8üã¯ø¾I|/áÅ…üO¢xåð_ŽS“Á^/t›ë¶ ø½4]eü/¯¨:WˆIÔÛI»»F+pœeR.2R£(Ƭ\Z•)MÔPDÕá):5”T’rtª%~IZSM)&œd¯&­%x+§³W©M]iz[Ê7ìh¢Š‘…Q@Q@y‡ÆOˆÉð§áψ¼jšskz¥”v:o†¼?« ¾"ñwˆ5Mš R¹?µ5ýKOµžXÖI-­âéb@Tú}|³ûIÊ.¼Aû9x~TÍ÷Æ©|Ey–eø[ñ#ÆvÍC¿:Γ¦^Ç(‘LXDÁ$, we´!ˆÆáéÔ5%)U« ¸óÑ¡ W«%¬\éÓ”SZ¦Ó[˜ê²£„­:o–§,iÓ•¯ËR´ãFœÚê£9ÆM=¬ÚZœ‡ÿgص;Mc^ñ÷‰Åÿ|S¨Új~=ñÙÚÿaè[Â? øOJxhþпãÎÑyÔ5)`–óWšæêlÅÒêß³—†’,Ãq¥Àͽ4K2À‚¼N21»#ƒœU«¾פ,Ï9o6Ye—æ$e>c²c¦\–Ê–;¶’Tôîµ_iZn•ªkî£k¦hz&›}¬kZ¥ìÉž™¤é–²ßjZ…ÜÌvCkiio5Äò¾8£fb“\¹žCIã1˜ìn‘MÕ”è¨A(Ò¼U¨ÂŒ)ÂÔ#IFán^ZJ Áԫ͂ǯªÒ¥M;òò¯hå?zMI¹U”œß)97Í&í+/’|Qû3ø'P²½þÙñÅŽ›hŸm›PÒ| Ë¥µ¢4ßÚki›û7ìj¥¸VýÜAšFBÌõ“àŸÛ»önðÆšþ ø¡ûRüÔ|W êºL>&²ñV‚ö:Þj|Í;QÖn47—ÃúF·»;X…f³³šþÎKËk{1vtË?ÁÚö¸ñWíµñF}2Y|E¢þÎÚ>¶mü)ðçBsi{®éÖ—¦ x®ÚVû6«âg|[i—Ñ^éÞ…¡Ó´èn/¢Ôµ}OÕüWû<øãÁ? 4ï‹^>°Ò¼9á³³¸“áÜ^Ò4Íw-¬ÞhpYÜG¬èbòÂ;¸áÓ5¡K«›Ë»MFæ{6µ’(bo©È¸ èʆ;‰Ëa9Æ¥:l_ ËÔž#ˆÄQ£C—ël6JR‡,kWt©Í~=˜xµC비x{(«œaò¯i vií éÑ”cZ­4”§<5óFŽ*sS©/k,= ÒmÕþ‘<1âÿü@РñO€|]áxbéÙ-|Eàïi>&Ðî5VxáÕt[»Û ]ãwX®ªÉl\­Õý¤# 2–ù†ÄùÛ9Ó§–‰táïü)âÍ"êm+Å>ÔdFIô]jÎòÒ Ï"µ[´Öm#û£lǦ¦,\hýzŽã&aO S7_ÙJ³ÁâðµgYQÄ{8U•)ЯZŽ"4k8ºR‡#ö8'ļŽáŽ£—sasl­Sža–W“”ãF³ä§‹ÂÔp¤ñgRôªKÙBt*¸F¤yjQOz›[Xùp;g$psÔ(æ3í_ÎGüÎv¹ð·íg3(Rÿ¶¯ì§• mýŠ|^ƒ¯=ï_ЫõOêkùãÿ‚•È¡ûXÙêþÊŸúÅž1¯V4¡O—•YûL:»m»}b—wn‹d~†“•I]ý‡ø8¥ø«ßðLùxëHø ¨|yýþ-þÎ?´>µñ·â·ímñcâu‡üû)|Qø§ð£ãF›ñ'âü$þ1k´?Ãφº‡ÀïÏð“áÌ?|©iß¼à‰? OÀÛ{/MÖ´[?†>"ñ—Ã?¾~Ö~ý›ÿ`» ¿Ÿ¶ß…|5㯃ڧjï\xþ mû[üb´ý¨õ‡_¬ü¦x§À?°—íMû9þÕß |9o¤é_a>ðŒÍû5iþ6•ïÅï†?ð´|Màï7×Þÿ‚ÁøW]ø©ñGÃþ?ñ?ü·áÏ߃^-ý¤tÿˆÚBÁEuoþÚð/ìÝ­üAÒ|Iã­Oö,Ñ?dH5’êÃÀoã;ÿÛübº“Cð.¢|@š¶³%ši×ßBüJÿ‚¥þÎþøy­x÷ÂZ/Æ¿Oá/ŒŸþø¿ÁþÌÿµo†þ#iÚ_Ç¿Úx?ß¼;ðÚûàçÄŸˆ¿Óâñ.«àøÁšç~,k¾›À~ ñ׉µ ḩË*X)ÆTý®:— `°“ö’¡Kêybx(Œ¨Bµ*˜b1ù–¼kʶ,ÂçYNO‰Ãa0˜\¶HwT¯V†a˜9ÅBQÅñ.#AB3,g¶Çg¥Zq­K°T}º§Bœ+ca—â몸ºõ1”ñoóKÄz§í™wûU~Íš¾âßÚƒP×þxƒö0ð_‰uÙÃþ }¢|?ý¨¾ø’ÓὯÇOÚÆú;üvðüÇöf¸ž/øóIñÀoŠ_~2~Ò¸ð-ç‹uxoS_j|Æ?¾:ü=Ь>øÅ?·×ÀŸ†Zí#ûu_ü|×?áSÿÁaj¹'øâ?Žrø¯öY×~Ãû!~Öþ9^ü/ñgÁ]_Æþ"¸ñ_À_xóölºñÖ©qoûKøR?Ž×~Ô4Þ­[þ CûøzóÆpø“â|1¤xÞ;ñ/ˆüw‴O†þìø[¢j^!øŸáüc×>X|)ñ—Ä߆úfƒâ¯øOþx;ÆZ÷Å_j>ø…¢ø“Áºnµð÷ÆÚ~ƒ‰âø*ìgàÏ›Å^4ø¯¡Amá½+Æþ"¾Ô?e?ÚÎ-3á÷ýwÅ>6ðv‰ñOâÖ¨>¶ðwᱫü:ñÞ™ñgâ׃þßx_Gÿ„â×Åø+PÒ¼A}ÑSÛTtéºQöµ3 Ç {R­^¦pð˜zTb° RŽ3*Çg|. žOŠêUÌr¼_‚ÀSÉc…%,<ý³‹‹¥…Ààd’—±¥¯šà¤Õ×<ëLö—¾ÿ‚CÚèŸþ%~Ó?¾2é¾'½ð^§ñ7ó·íMñãôÿ |;ûSÞøgBÔo¾ x'ã Çí·{¦xãà–Ÿ¥iÚ÷‰<ñçVý¥¼=à}zëâe§Å}wÇZU׋¯¾Å¾ÿ‚þËÂò{/â.žž 𷎾$øâ_ÄoxKã_üáíKá'„>6ø“â%‡ƒþ j_n¾|Dñ/.¾øÆh6ž>Ðí¼#¡ÛG­jZÙÔõ߇¾ñôÍÿ"ý•×¶Þ)ûWí ÷Zþ¹áèþEûþÚÒüxü3¡øOÄ~"ñßìáìøÿì~èzO| >«ñN÷᥿ÃKxCN¹ñdz—‰´KKåZ¤ë<Æj4RÌ3<w(ºeBT¡Ëì!‹ÂÆÁâ0¸”ªÑP¥‡Áåøœ%j˜Z˜:ô”Vœè×ÉTaSÚåØlN:jNu燕LF9ÑX…Šq«†§5jÒÄ,sÁýV–&Q‚Äc%‹ü”Ó´‰ZŸ²‡í%®~Íß·¦±ã/ þÌß·Ÿ…~ü8·ý¥ÿà£_ßVø…'Åøßà_‚¾5xóV🀾9øs¿ü¥øªóÃçí™ð/IÖ<7ý“àÏxþãXøàŸ…fûý•þ~Õ¾<øŸáŸ„~)ø¯ûwk_²ÿ‰>-|?ñ?ˆ)Ÿ_ñôñkö„ð¿ÃßÙÓÄ´G…#²ø¢éž(øm¦è:ݽ­§ÅM_Æ+§Ùü.ðׇü@¶º´ ñÄzï†ô U[B8å×-n…Ú¯‘'Íú7ü¿ö~³øKðcÇß`ø‰á|Zð7¼YqðwáoÁ¿´çŽ<-©|ñ.àŽú5Æ‘ðጼQw§üø­[xCÄþ"Ô<#áûx¥hµ Ë 2¸ŠÑ:ôðÏ„ÄS£N”}½ áñNtëUúÎmšq&2‚ÅNT³JËõÚ™“£†Ãû Î …gý¡›ƒÅG<"Q©]b«R©‚U*œ^ –ÐŽ ª•«`°˜,&•¦q§9ω…|^/ K—þ6üzø}ñÇ[øAñgáÇ='þ kñßOøñëÀ?±‡‡~ßþÚÚî‘ãøköŽý§ü>£öœñÁ;Ëkψ÷·tÙ”øOSý¹|Q¯xâ¿‚'½Ô|'|kâo‰“êù´•—í“ñãí/…<1ûRZé¾:ðßí{ð{âìékð‹þ ]㿆Ðx#Oø ñcOø9ãŸü]ø½ñ¯Tý„k¾|FøÎ÷Ÿð°<]cðóO›áïìáðö—ý¡üu¨xŸÄ?³çÂoŽ>0¸²ø5ð³àçŽ~%éÞð¬tÈõMg@_‰ÞðÆ‘¬x?üSµñ‹„´½ðÒ¯FxŠò§Ëý–±‘Å΢êq&!AKž¬§ ˜žiÐÃæœjÖ©K”:1Á_6ërÖJ*+,&+F‹çTpÙ^XFŒaiÓÀÉáa‡7 J¾3”ªVÃ×Çaê~f|a·ý²&Ö~8Úü.¹ÿ‚‰ißµD²þÞÿï&OÚm¿fëÙ¹þüRöC¹ý“c†Úóö=?m¼@eé| Ÿìî¿iƒpŸ×ãe´ú§ü,¨›»ý¯~þÕß µ¿ü>øñCöÏ´ýœuß~Ì>7ø»ã­ROÛËöÌñ–”ž&ðïía¥|K“á­·ÁÚ7áGí“„ÿ|?û2^øëáŸì{ñŸÂ°|;´ºÓµ§økoð‹_ø¥¢x‡öPýµþiÞ=ñÂÛ»OŽWŽô_ x—Å:m—ŠeÚŸÁžñÚxOÂ'Ç:LJþüIñGÁm/á×ÅŸa.µVøð»Äþ2ñä–ÚOˆ…¿†n'ðLj`Ó~jø9ÿbýŸ~"ü)ð×ůXøãáµ§‰þüñ—ðÖoƒµgˆ>ðÏügà>©âß|yý¥õ_‡ß´?ìÙãmwÄÖÿ²/íyáOŽÿ ü ûdx3ÄÒ}«öcø£/ƯÛ'R¼øoðëKM»Ôü}}ñâ—Žto ·ÄOë:ýî½sªÜñ¿5ÿAí‰ÿø=á‹?>xCIý—~/Ûè~<ðO‹¿eÿþÒ:ÿìÅ­üKÔi½_ÅŸ >)GðÃÇ(>)~Ïþ!ð÷ìáàë¿Ú+ž Ÿ[ñoÃx·MÓîüáO…þ9Ô¾ÍÕà¨_±&‘m¡ÞOñOÅ—öšÏ‚¼ñþçÿÿh¯Ûü=ðõïøSJñÆÉ¼1ðŸWà‡tŸøÆÞñæ«ñ¹¾Ú|/ñ…µ½ âT¾Õl'´_¹5ÿxoÆDÚŠt-Å:äº}Üú>¿¥ØkzEÔúeý®¯¥\ͧê0]YO.ŸªYXêš|Ï =¥ý¥­í³Gqo ©¥z˜‰,ÆQs§‰©žc3,>"t°ò©‚Î# ‚Xb!W S ‰©ƒÄpö[^XJøE‡öò­~Jt¨ÒËR•8C(Ñ«N¾_…¡Œ ¥(G•ÕÄÕÌè<G‰ÀSÅÃRŒq8zòL²«Ãa]*fçøâ?Ùëö¸Õ< ûExçÆm†øÃàÿÙ á§Çø]ñçöŠÓ<§þ×~7ñÏíQñWƾðo‡ü®èšGÆM'áíÖ«ðãáuŸÁoé^.øo/í áö¬ü-0ÜiJÿ8ü}Õ?o {ãßíâÏ„ÇöÅð»â-'ö¹øiℾ øiÿ3ñ‡¼%¢èß~+Ûü ø±ðûã—Å_zŸì+©ø‹â޼ðãÇ> ÑcÏÙwÞ)ðˆük§|9ñÄ}VúoÇñú¥¢…Rœ1Nµ=*4=ŽeF4#*Óœ#˜Â•‰¯V­J´éáiCþ³Ew„¥…£G†XL;€Üç*³u1.¾_ˆ«^Jñ­<¾'z2rêc)Ï1œ”ùêbñ·‰xšxì|1_ÍçÆŸ‚ŸµÇ«?Ž:‡ÁÁA>ðwŠ$Oßüm xÞË᥷ß²”°MûKüX?í¸?jHü[ñ~'ÿ„¢Ûz؈üƯÁãð¸GðOY5³ð“þq6”ã̾/ÿ„ñ¼Y#ø¬øÄ×ê]1šÔ”iÓ„0Y5<¦*œ#MÉà €£¯aðsâ©àoØóâ%ïí‘ðçÁ õ/jµo¾9øAñ¯â߃~ÙØXéñøŸâµÆ§à?ÚŸÀšÏ†ô5ýdÙürð´·²^ø©ôƒòŸÆÿ…?¶7„¼Cûü2ìFEÉ~þuðØ`hU¥ ÏŸìá?ˆš7í5ðîÓÀ~Ü:Œ4oÚ—öêÔ¿k­7ã†kÿ~É7³·‹|ûDø‹áUǯü^Ð|?û%xÆZÇÄgàoˆ<)âÙÊ×Zø›¨xZ÷ÆWþ2ñEÿ‡§ñ,³sÿuÿˆÞ5ýªÿhÿ|ñ¿íñ©~Ô~ý·¾Øü'°ð¬ß¶m¿ì[àïÙò/†?²Ï‹¾?x[Ǻ¦—¥ÃûÜA«|3¾ø×«'‡~$êZ¿Æo®U…Lt=Gì)`²ên2†«üùx—áÏćŸ³¿ì^~5YþÝ–ðާñoã·‡üiªü'ÿ‚sxïöñµøfŸ¶í-qðûÄž*ø[û[ø[âF«ð«àwìûI|ý¡| áŸülðÁ†ñ®ûxçÀ2Ý>’þ.ñ†6¼øcðËá÷Û¿‰~4Õ¾#üGºðƒ<9á ŸˆõåußøÚéº|¾+ñ¦´¶ÖË«x§]kýsQ[xåôÂ(ÂôÕÄFªÇÅÑ¥x¼^J J¥:p™\u²R¥(ajÑÅG‰«N¬y²Îá,ºž (X¶Fn4ðiIº¸l./ê8Óu\±ôáù• ³Œã‡Ì0ò£*¸):],nišãÝnj« Sñ ᯉ´ÝsöjÑÿjïŠ?ðQ/Œ¿ìþøugŸˆ_þÁV?gK-Kâxøëñ?éµ·Ã/øŸÇ?´V•iá?/À_ x{Zÿ‚ƒøçÅž ñ׃´_øÿUñ·ªø›âF­y뿳?Ã_‰?¿cÛËÀ?´Úsßµ“ñöÒ¿ðu—ÆO|nñ]¥÷Žx‹à‰¿j={Äß5íÅ>Ö|â4Õ>ëw¿ ®üiªI/ÆCŽOŒ­âý¡¢¹q<ØšXÚr•¥ŽlªW傮噿Ç)U•8Ò§UÒ´¨ÕJ•5ˆºQX¨¸â öp•}*‹ ‹Ë1q¡8ÎXTòì;,5 ©%‡ÁâeŒ–*T§ì±sN~Ï*tœÏ„¿>,|Tø½à_|2ñü÷ðƷñWáÌ~0¾øõãÏÛËáísã¸eßÚ¢Žzf¥ñãþ¥¡~Ò¾ø{â8ÿeÄÒu ø—à bøÔºì?õë-R}qfú·þ ¾¿uÝ/à¿Ão‡OñÇÀú.ºÞ=Öî>5üð§üƒâ®±£xÛB°Ð4o|/×~Á8~<~Íž7·µø„ž'ÖõûŠ¿~0Z| ð<ÿæ´ñ†õ_ÄÚv¯áÏØj*³)<ÁZ.XVåNmÒ”ù©Ô§†§B”ðµ#*u0Ë:TñyEÎX|&†bhæYc°Øó 7„­ ßï–Xjkj¼ÊS­:•±7J8ŒF9TQÍq­|õ)Ï V8Iá?˜OìŸÚ⦡ðbÿöð—üÄ?µ<?à™þ<øq¡éšígá¯Ù+ÿ t{Ù—ÄüKñSÂÿ _Iý’_ÇþøÓÿ ãSø“¡~Ðñkß¼%qa¥ëѴ߆¾ð&©¦ýÿ÷ð—Š.¿j„Ÿ<]á¿ÛÊóâíŸìƒñ£Â¿µÇŽ?jØjÄøk§þÒš·ÄßÙÃXñ…~ ØüdžÙßCðÕþ«¥øâûÃS~Æúð+ÄÞÑtïøE5]sKðÕ¢i_½´Wlqªš¸ˆaèÓU1¹¶:4©'N'šðãášÔè%¥*xœ;Žg›¨®l×;¡…ÆJXl=‚—ÕÿÙ)áIÎð™ÚV~ÞµJy5ãèU­R¯4ªâVðô*Në Z4`ñ5%Œ†?~xÆOÚÿöHøÃñ×@ý±.ïìï¿à£Ÿ ôhÞ ý¬&ð^‡«ê?¶N‘âo€ú7Æ_ ü9׿áÓ¾ø—àæ™®Ýø;Ä|2> jú†< ¦Þkmy¢ü$±›ý´~xßõÇíñ+Á:íѹñ/ö}ýl`ñWìçâÚ‹WðΧð‡À¿> XþØþðn•à={Pø3á_ŽÀ-f×Søo¥]èšÇ‹íCÄÚö½û$®¥ñ«TÖïï•À¯83ê¤ãRQ«Iåøì.&Õê>eN4°ø:4°‘œ*G‹u1ôÔ›§‡¥ùGû2ø‹ã„d¯ÚïÅ>ð'íñCÁñÅýkö*øqûHø‡öð—í=㟆ZoÂÿ ÝÿÂ+ã/þÐöZ—í_ ]kŸ"ø»§|3Õ¾&i×ßl~Üx6ãÖw>OBþ=ÿ²¶ý ôI¿jø×Æ´Ä/†3øCá'‹~ø—ã/Áoø(wÁ»ë_kß´?‰Þð}ü·ö€ý¢ÿi­Kû ø[À_øJü'àŸ:ÿM×<#ðïEê~ ñgííñWÄRÌi)Î ‘`27‰su1ÓŽŒ(¼v7+CŽÅÎëÿ ~0EðCÄß´m³|:ý•¼Uû?|oñüZ~·s૯þðoˆ4žÏáWÃßÚªO„ß ¼9áÚ+ö¿øµáÿ‹?þ)þüÿ‚ƒþÉ^'øð÷â­·ÁŸku8nÿŠ_¿j‹‹†'Ÿ ðÃöˆñ¯ÅF #Ƭ~|>Ôôˆ-¼5¦èŸÑ]Ó*ñ~Þ0¤¨R¯WùpòtªÃ ŽÎ+æ52Êx„¥S ‚Ã`qòœºx©fYnŒž 0£G°§PJW”dl=gŠYÂEõØäø|²Ž7ÙÊ<“®±Z†"¬a±5i¤ðôñÅ¿ÌOÝ~Ù÷ìQûRøÚ8üu¦~Õ~.ðßÄx~xWT³ƒH¾ðÇÄŸ‡<9ð‚Á¾è éÚŽ>/ü<ñ7ÅÜø’ÇOð7ˆ£ñÞ™âNŸëW•÷Àÿ ~|Xø©ñ{À¾øeâ?ø)ï†?aoâ¯Ã˜üa}ñëÇŸ·—ÂÿÚçÇpþË¿µDÿôÍKâÇýKBý¥|!ð&÷Äqþˉ¤ëñ/†>Åñ©uØ~ ëÖZ¤úâÍýÑJ‡¸Š³…9ʾ *Â>HBŠ“Ê¤œjW…(FjxÆ•lvR¥CЧJ¬£ì ðÓ‹5…Žœ¥IS«™Ê”¡9ÊTif0§N•:S©)×UrºTc‡Ë1s­S‡Â×ÇBUjb1oOñkþ Ç¢þѾ¿û:é~ø“ñ¿áoìþúOÅÄøâŸÿo_ÚÅüU‹þÑø;ˆü1ÿÖý¥fÏÚÒËC“ÃiñwìºÛx‹Æ?βa´ø¯áYþÑŸ¼M¯~ÓöÞi~øóà‡Â«Ëôø•ð£à?‹usá ÏÛßÁž†_ø+Äú‡ÃÆ—c¦þÝͤ~úÑ\‘ƒXZØW)rÖÄË*±²ÄNU%‹ns¯5R~ßbŽ ¥‡£Iå¹ñxltòŒ;—KÄiMF•8ªYl²ú-.IaÿÛð˜øTÃ:^ÍB2–ØâiÕz•¨âq”èâ0´±¦¿šÙçBý¦üGñÿàï‡~*]þÞ_õüøuῈv>.Ô?à ³O‚gÍ&OØJÓ¼a&¥ãmgöý«õ/üdñÞ£ªk:ž¹ð öÚøñ‚kòž$ø«¦x^ßGð!û!ü øÏ¬·ì•ð&Íÿà¥? þéýœ<ñëFñ_ÄOۗᦡ£xïÃ?³ßíѧ|nðž›ñ;âˆm4|,øEñq?h¯ÿÁLôáoÁZ/ìMã…~&ý¾§°âƒ¿iÚcAÓüCûPüHý›bOëw–ÿ ô¯ÙjOøïöàñ~·ð¿Æ¾¸¿ñ–•­kšÖ©ñw\ºþª-wý–ÛÍßæ}ž3ÌÎýþZïß»æß»;·sœçšñ_ˆŸ³ìÙñǾø©ñgö{øñCâ›Ë-CáwĈŸ ¼ãoü6¿Óux5ý:ûÀ>0ñ.©ø‡Á×–õ­®·esáÝGNš×W¶ƒR㼆9—ÜkUË NEˈXÜÆ½NI9Q©OˆöÔkÊSýäñµT¦±’’äJž•)J%i© ã%ZŸ,pËB• \œ²£ËF…*˜xZNÁQxxÔÂÒŠRUñ8üEGÏŠq‰EVE…Q@|©ûE¤ƒÇ?³\Â7h“â7Ä(ž@­å¤“~Ïßü´gÁUwXådBC:Å!PB1U×ËŸµ$7‡Ãž ñŸg.£{ðãÇúĦ[G·z¾›ie¬øoÅ^ž³É»j×^ ñ7ˆ†Ž“ºC.¬,b–H_>/K(’ŽaC™¨©Æ½i;F/‡«B2“z(ÆU”ž‘ÛÑ6pæQ”°uTS“Œ¨ÔQŠnRTkÓ«(Å+·'5¥y;%«Gƒü<ñlmoqoçò“9 òcàr«Áb~PÏÌT²¸jñïÛëÆZŽû~ÑwúKÎ×W~ðφn>͸Ìt_ø÷žñ2„ ö©áýsS7Ê£i²óýTð ǃ%½½:_Ä] X…ïîvYÙj¶:n£˜VHá½Ñµélõí2ñ>a5¥ö‡k47ƒFØÜ=§âGÇŸþüKø?©ø¢;;o‰ž Öü$º¤¾"ðÌɤêz“&‰®Û[²ZÜùÚ²,u{XÞ7Ocrà gо«;ÅåØz”êÊ51 Ëñ•èGVõ(`ñØlV*ƒ‹‚ru¨R©K•Eß™'º¿Çá¨cqZô£R4e[ ŠÃÓªªÃÜ«_R*±qm% “„›vµ¯«Ðþq~üRðì“ãk:Ž“‹nîtÛ½_I¾µE¯èúV­)²žæàßÓ§Ô­%°¸¶Ñ®tã¤3ÙO­Ãyä ¨ÿA?iÿzÇí)ðgKoƒ7ðxŠÇQ×"mrÛíqèz—‘¦¤¯¼ÃW»°µlõ%´ºº¶›÷ìÐØ^Z­K¼Ÿ†[ľ ðÇŠ>xûAƒJøÃðGÄ1èþ'·ÜMåµ²ÉïöuÈÚº§†õh/íž$±BmìŸÔ×óÇÿ*ÿ‘Cö°ÿ³Õý•?õ‹2j´åÇö"þÆÏÆßX~Ñž+ø‘㔵ÿ…²noøA5‹¿x—↾ÿ…¥Ãâ=Hm4iÚþ¢5«eøóûxƒâLj>)øÛÁÿ,<ãoi±ôÞ½Ö~¿Ž¼9áþÇß¼cñ¯Ãz§Šô<{àÛÿøKÆú¯Š-¼=âo èþ#øy®Yè¶²è¾:³Ôõ+[Ýïj+Nj §(ýZ¥ Ô*FN8ˆVÃU§_[ë)¬D«P­F•ZU§VU!8FQ’hÚRs©V¬”$ëJ¼ªÁ„Þ&½üMý¬~#ésøëàΙñ7ÁzÜ?´Ï†¿i/Zx7ÆŸ üCãHt¯øSÂ~ÐI‰tÍ[T’ÛâVá[íæ µöò·ÿU›Äš€¯<_ãïÙâÏ>x—âkøWáÇíû x›öŒý‡>|8ø•¡|-ÑÛáßÀÙSâÿíâ~Ï– Ÿà÷…F|5ý¦ôï…ž ¶×þ!xoÃô xFѼ+ûÑELç:•ªâ'9ʽxÆjóÍJj3œ×3M{ÍÕ«ÉZU)Õ«J£•*“„Šu%F•*ùaFÖ**öPúÌjÆ­©¸¸=+Tt“MaçÉR‡²*R‡Äß?bï|høð öyñˆáøuðÃá?ˆ¾kþ/ð§ìÕeã_Ù¯Iñ-¯ÂâOxGá=ÿÂï‰Ú_Ž¿gxsâE—‚üqáÛøëYÖt=#Á:o‚­u÷‚êã]O†´?ø'_í;û<þÐzLß±—Ç_ø3àíîûTë‘xƒöœøuñ[ö»×>jüIû/ø§Ä> ñ/íðÏâÿÄOxóâ—€¾,ülOŠ5ñŠìti¼Cªø;Ä&¡,º¯wû}E59,V#+N¦2Y¤ñ°šNŽ2yÆ_K-ÆËIZ2æÃá°¼Š‘_Wö2SÁâ±øl\FÑ¡C”eK 0Ñ©ÖT¾'‡”eR.¬^7NUªFu¥O/Þ*”°Õ(~|ÿ‚]|`ð¶ñöjºø©á þš7ÇÙ߯>ðV£ð¢ïÅ?´wÅ;Ù·àßìÇÿG‰§ý 4ÚÃÀþ Ð5OŒ_t±ã?Þ~Ìø£TѼ=â{xƒÃ>0ðïˆtZø[ÿÔø½û:Ûø?Äß³Ïí=ð÷Bø¿áM2Íâ_‹Ÿ³_ˆ>'ü8×¾Ýüý™¾ø‹@¿øqá?ÚOቭ|KuâoÙsÁŸ<=âÍ3â½®‡k¬ëÞÕ¼1⨞ÓÄ~½ÑZýk”ùjÎ5+a0X+økðêé–|¢ø Áú‚üàø&ãM×!ÑôÝcO­àø&?LJ֟|M þ×>Œß¼7ðÁ|i¨þ˺•Ï!ðoÀ_ ~Ðÿ ´ý7ãgÃhhë][âV«ã…Ÿ´>µ§ø“Yøsñà8¶ñÿ†´ox{OÑü;q¨|;›öJŠÆ:p£Ns§JÓ§)BÇ/ÄVÅ`éÉE¥8Ы‰ÄÆ<üÎX|V+ 7,&&½ŽOž¦"­KU©‹•ib'Y*Óªñä­yUSiT´'8ÆÑuhЭom‡¡:•~ÿ‚e/ƒ>~Ó? §øÔ5oþÔßu‡ž>ñŒ_M°°ø¡ã?‰´·ÅïŠô? ?õ·ð׉|ûLxŠãÂÿ ¤ñ— ðî¥èw~?ñeÝÄúÜ¡žð¿¼9¬üL»ñÄ¿øO4xÖÇZøgáïøCt_ ÿ¨ðU·€|áÛ¯kiwÞxëí¾7мañ þ}mõkøNáŽ&Ò<3¥Ï7¤QZÏV¥Jµ&á)V§:S^Ê’„c:Ô+·F’‚§‡©á©ÂZ§V–Uð´§ .'F¬îå)9T©:µ+T­VR«^­jÐ¥ Õ«W¨åZµlG±§5дæÓ<9ñkáÊéZwŒ¬tÜÈñh:ÌWšV¡¡xÇÂËs,’Äú6¥“]_É¡\èwZõÜ¿™·ÿðGß‹É;[h?µ–Š43"&ÖÿfÏ.³i*§Ì±Ó~4¦Ÿ¨\ÛÂp¯ ÎÌ‹³É°ˆå§ŽŸ‡ôjŹè~«ü«ÜÊsž#ÉiΆIÄ9ŽY‡©7'†§ 3Ênr•9ž74ç9Ê8eF©9Ôœe99?›Î8S…³ÜBÄç ŠŠŒ^)ʾ¼ã¹cV®­ÖQWPUe5ùcd¬ÿeOø&÷ÁÙÛÅú?Ä¿Û|Bý£¾0èrÃ{á¿ü@д¯|?ð.¯¸]oÀ ,ÞòËMסfcâk^9ñ.‰.é<3­è‚[¤›õ@ÞÏ||ùฆI f“Ž£¨Fr”£N2m¾Œ>/˰´ð9f_†Ë°”_¹C J|Ò^õI%¬êJÞýI¹NVW–†cõOêkùãÿ‚•È¡ûXÙêþÊŸúÅž1¯èqú§õ5üñÿÁJ¿äPý¬?ìõeOýbÏ×sû?õ÷ÿ©ŽÌ/ñ%þÿ¥DûCöAÐü9­x²ûþ ø;ÅfýŠ¿àœŸdÿ„³Áþñ_Ø|-ûGöü$zV§ö´ùPý«ì~GÚ¾Ïmö7ìÐyzÿ ðãþ‰GÁßü3ÿ ¿ù”¯‡?cù5?û2¯ø'þ©_Wè=|fb—Ö¥¢þ§ýBÑ=º_ÃÏÿJg7ÿ7Ãú%ðÏü2ÿæRøA¾Ñ(ø;ÿ†á—ÿ2•ÒQ\V]—Üoþo‡ôJ>ÿáŸøeÿÌ¥ðƒ|8ÿ¢Qðwÿ ÿÃ/þe+¤¢‹.Ëî@sðƒ|8ÿ¢Qðwÿ ÿÃ/þe(ÿ„áÇýƒ¿øgþó)]%Yv_r›ÿ„áÇýƒ¿øgþó)Gü ß?è”|ÿÃ?ðËÿ™Jé(¢Ë²ûßü ß?è”|ÿÃ?ðËÿ™J?áøqÿD£àïþÿ†_üÊWIE]—Ü€æÿáøqÿD£àïþÿ†_üÊQÿ7Ãú%ðÏü2ÿæRºJ(²ì¾ä7ÿ7Ãú%ðÏü2ÿæRøA¾Ñ(ø;ÿ†á—ÿ2•ÒQE—e÷ 9¿øA¾Ñ(ø;ÿ†á—ÿ2” ðãþ‰GÁßü3ÿ ¿ù”®’Š,»/¹Íÿ ðãþ‰GÁßü3ÿ ¿ù”£þo‡ôJ>ÿáŸøeÿÌ¥t”QeÙ}Èoþo‡ôJ>ÿáŸøeÿÌ¥ðƒ|8ÿ¢Qðwÿ ÿÃ/þe+¤¢‹.Ëî@sðƒ|8ÿ¢Qðwÿ ÿÃ/þe(ÿ„áÇýƒ¿øgþó)]%Yv_r›ÿ„áÇýƒ¿øgþó)Gü ß?è”|ÿÃ?ðËÿ™Jé(¢Ë²ûßü ß?è”|ÿÃ?ðËÿ™J?áøqÿD£àïþÿ†_üÊWIE]—Ü€æÿáøqÿD£àïþÿ†_üÊQÿ7Ãú%ðÏü2ÿæRºJ(²ì¾ä7ÿ7Ãú%ðÏü2ÿæRøA¾Ñ(ø;ÿ†á—ÿ2•ÒQE—e÷ 9¿øA¾Ñ(ø;ÿ†á—ÿ2” ðãþ‰GÁßü3ÿ ¿ù”®’Š,»/¹Íÿ ðãþ‰GÁßü3ÿ ¿ù”£þo‡ôJ>ÿáŸøeÿÌ¥t”QeÙ}Èoþo‡ôJ>ÿáŸøeÿÌ¥ðƒ|8ÿ¢Qðwÿ ÿÃ/þe+¤¢‹.Ëî@sðƒ|8ÿ¢Qðwÿ ÿÃ/þe(ÿ„áÇýƒ¿øgþó)]%Yv_r›ÿ„áÇýƒ¿øgþó)Gü ß?è”|ÿÃ?ðËÿ™Jé(¢Ë²ûßü ß?è”|ÿÃ?ðËÿ™J?áøqÿD£àïþÿ†_üÊWIE]—Ü€æÿáøqÿD£àïþÿ†_üÊQÿ7Ãú%ðÏü2ÿæRºJ(²ì¾ä7ÿ7Ãú%ðÏü2ÿæRøA¾Ñ(ø;ÿ†á—ÿ2•ÒQE—e÷ 9¿øA¾Ñ(ø;ÿ†á—ÿ2” ðãþ‰GÁßü3ÿ ¿ù”®’Š,»/¹Íÿ ðãþ‰GÁßü3ÿ ¿ù”£þo‡ôJ>ÿáŸøeÿÌ¥t”QeÙ}Èoþo‡ôJ>ÿáŸøeÿÌ¥ðƒ|8ÿ¢Qðwÿ ÿÃ/þe+¤¢‹.Ëî@sðƒ|8ÿ¢Qðwÿ ÿÃ/þe(ÿ„áÇýƒ¿øgþó)]%Yv_r›ÿ„áÇýƒ¿øgþó)Gü ß?è”|ÿÃ?ðËÿ™Jé(¢Ë²ûßü ß?è”|ÿÃ?ðËÿ™Jü%ÿ‚‡ØéºoÃÏÚžËHÒtmO‡öÕý–þÏ¥è>™ i¾gìiãieû&“£ZXé¶ž|òKq?Ù­bóîfšæmóÍ,ûý__ðQ¿ù?j¿û=_ÙcÿXÇÆ•ëä©,\¬’÷)tÿ¨Ì)‰~Lû»ö0ÿ‘³Sÿ³*ÿ‚pê•ñ…~ƒ×çÇìaÿ#f§ÿfUÿàÿÕ+ã ý®lÃýê_õë ÿ¨´J¥ü8üÿô¦xŽiŸÙ¿á‡ÄOü ø•ûA|øyñgÇãFoü/ñÏÅøKâ'—ÄZÕφü>ÞðN¿¯iþ%ñ ×|Eey hÇFÓ/F§­Z\év^}ôÀžÝ_™´ìãñ§ö‚ý¢>8xJñç†þþÏ_dÿ_ ¾.^êßüAãx×L›âGíQÿ _‡þ|S“⯄üðãÆº/†|Mh÷ºˆ>üc¸Ð¤ñO†<@š&žë§ÿhø'ˆ>|PðÇÂÅÿñ—íñzÓö²øcã¯Ú[Xø·¢~Î~ø‹ûIÛü°øYà?„šŠü_ðwÃÿøHõƒ®ë_³‡4ÿŠ~1ørt9|Q®x‹áN¨7,]*xhЊ©R¬°ns«8Ò£Nç—B’›‡·PT§Œ«9Ôu%ÍC ZU¨àê•N”ïV¥eÍÆ’’å„=¥Z³¥€¯Žœh&éJµZ« W J‡²‚xÊØ±˜bqð?³ø‡@ƒ^±ð´úæ‰õM+S×´ßK©ÙG¯j:‹w¥Xk:ÍŽŽó®¡w¥i7Úî‰e©ê6öòYØ]ëU½ÔÑM¨Z$ÚõüáøåkÍ?À­üã¯Ú?HøãOÙ·ã5Ôþñ¿û@x÷âL³m߀öžñv¿ð ~-|;ñõÇí#¥þǾ9׬0~ÌãoŒs_j??goø+ì÷ñÏÂ~=mátŸ <%âÍ3Yø“ñ‡þ 7ã?„©Ÿ¼Amã}[â>¿ðºoëúƒõw²Ó|!à#NÇ•{'Q¿eiãá‰NŒ¤ð9Þ3*“­N ¼°‘¬°êŽ¥g,>+5£ŒË=½ D(BµY._yTn³¢áC÷­%”as%Vœçìaˆ§'ˆs”i~úŽXéfR¥*Spïf™â[º×,tmsGÕï|1ª®ƒâ[=3S²¿ºðö¸ú^›®&®[ÚÏ,ÚNªú.µ£ë §_¥½ãiz¶›¨M¥ý¬Òë׿‡ì½ð÷LðÇßÛ¾{Mö•Ó/x¾ûá'ì¹7ÁŸ‰m|%¬èÿÚÞ&±‹Åúqr”hiNž[¯ZUëB…–+(ÎsØõªòÓÂÓÁb²JŒ¢ÑŠ—?³ºV•<V”¡R?íyvÊ¥*sTÞ'Ù©ÂR…OfªÅ¥5Ñëß¾xVÒ×Pñ>¥­xrÂ÷XÐü;e{¯|qøŸ£Ú]øƒÄú½Ÿ‡ü5¡ÚÜêmá¸Ö v_mî5½Gâg‹oü;ø)û[øÃ?=øa¯i×~ÞDŸ¼+ெÞ>Öuê¾d+NY_ö£ª£Ic²ÌïZq_ð§*U©)AN¶/©l1X÷TëNƒ£[/©O4­ÓˆÃ*¼^{:³ÃG(Fœ[xáêºT“Œ£«b1’­ƒ« !ÆÂÕ©0ð?€tÛ¯øYŸu/´ø·âG‹toø/Iò4_ÜÃý³â­HÒþß<1išwÚþݪÞXéÐ\ÞCÚÿÃ8ü)ÿŸ/ÿáÜø»ÿÍÕ6­>2|fð§ìmã_ZŸü ➇{àOØÿŶ^£ûTé¿¶½÷€|GñÎÏö˜ý|YðëâÁ}#ö£Ðì<7q¦hžÐh¿|Gñ—쑦Z|‡Àí¥øƒâ-õÄןuú“þ ±áÛuüSñãâ7í=ñvÏö€Öþ jÖßþ~Ò°oü•~ xWö†‹ÄþY|s¦üMøáûhø«öBø£ø_R>2Ó-|ÿóñìíðÃâ_‡^5ÿùñwÿ›ª?áœ~ÿÏ—ðî|]ÿæê¿6~.øCöÞ´Ô¿i…?õïfûá…i?ÚCötø­êú‡ŽüñËáv» ü øâOˆúúø_â…—ÂÏ‹>(øóâ+O†ž)ñ^ øw§x?öYoÅ¢xy¼4ÇãŸÙ{áÇïë ü¬~ÓŸ·—‹~ø¯ãÆsñsÃ|ÿ‚¹þÄ~$ð&ˆŸ³/í/.¹o©üvý¹?i¿¿uÏøÏÇq|(Óo"ø%ñŸÂ?¼ã x^ïÂGJñOÄ)5uaœñ ÉU©Jù~_ŽP«Ì«Òž7,%l>2Œ%9aÞ]RŽ%bñuðõ]*3Ëêc°Ù†]‰Å*ôéá麕¼q9N0ƒ”éàpÔñØ\E9*2Y΄Äåxzõpø©¥˜ÑÅÑÁÖËg ߺ:÷Áo€Þ´µÔ¯gáÿ hv·:‡Äxn5ëÚŽŸ¢hzdN÷º¶¯}g¦ØAqyu/·ÿ ãð§þ|¼kÿ‡sâïÿ7Uð/üKàÏÆÿ|%ñUÇÄk>xcãçì¥ñÂÿ ÿdχ?µÃoÚ›Á¾ð7LJš‡Å-sVø™ðGöœñþ9_hž_ø£Ið÷Â?ƒ¾ñ½î—a¬xOJñŽt/Ï_œ^Ñl‘ñ‡ö‡×u¯Ú‹öÚø]âÔÑ?k«/x+Fý€¿à§_ìî~ I࿈oû1êþ øãÚ{Å_ðOm[ℼÿ ‹ÇÚ6—á¿€ÿ ¿k_xïÂW¿~'k ñÇÆ¿®üQ… Ò«G9ÖT«Py•Xáç^Õ£…ÁåYf3 |Ñ5i:Ö¥­i¯‹µ;Âzf©ñÇâ}†¡â}fÏFÔüEw¤xzÊïâ W:Ö§káýY×nl4Øîn Ñ´OS–%²°ºž/ý“´_…?µì±û4þÒÿð„ø×ÀÿðѳÿÁ¿ŽŸð…Â÷ø»âoøCÿámü:ðçÿáÿ„þ?ÿÂAÿÿü$Ù?ÛØ:'ö¯Ù>ßý‘¦ý£ìpþH|;øiâOøSöNñ—Å?ÿÁA¯þüý¿u¥<Òþ)ÿÁYuˆ(ðž½û*kþÓ~3\|ø×>ûx|øUâOŽ?ØÚ'‰~|EÔ~=|?ø]oâ}›ãG>x»Æž#¸ýbÿ‚NÿÊ,¿àšö`±¿þ³¯Ãšé¬¥OàÄ:±æ‚ŒàçáWÇRs…NJøzÓ¥…G„ÄÒ£Š£BxyâiP¯Z¦ÅeΕ(JXom8Æ¥*îE˜æ˜ Òu(:”*{7—'*”jÔ§*²«5+aáCˆú3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:+iSþ~Oÿ—ùšòCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn¨ÿ†qøSÿ>^5ÿùñwÿ›ª÷:(ö•?çäÿð)˜rCùcÿ€¯ò<3þÇáOüùx×ÿçÅßþn«æÙ´[/ øãâ†t©uFÑ´/iÚL¶¹­øŠæÎÚ÷á·€5«›tÔüC¨jš£Àú¦©¨^,S^I2]H°¬qíEý¯„ {ÅxkN‘ì4uËûèôk'{]9m cîh¢Ž‘Ù„T!‚Ú1[F*îÑVK¢nRr“nRåR“w“P„iÁ6õ|”á q¿ÃF ÑŠH¢Š(QET:6«ãx[×ü«xV×þÚ>£iâo êúþßøFo¼Q{gqe>•ãO yü%7Q\Ã<7yû5»Å,y‘j(z¦šM=ÓW[ßóHM'kßGufÓ¾«tÓÙ³¨ÿ…³ñ»þƒ ÿðÛø»ÿžõG/ÅO3Å$êß æ†hÞ)¡—á§ŠäŠX¤R’G$oñt¤‘È„«£¬¤« ÍÑQ*TåFTá(É8Ê2„\e¬ã$ÓM4Úi«5£4Óši¦šœÓMjšjWM=™£áÿ|Pðž…£x_Âßð¥<5áŸiv‡¼;áÿ„¾!Ñ´-DÒ­b±Òô}HÓ¾,[iú^—¦ÙA†Ÿco¥¬1[ÛÃ1¢ ø[?¿è7ð¯ÿ ¿‹¿ùïW/E\’œ¥9¥9ÊNR”½éJRw”¥'väÛm¶ÛmÝêJ„RI]$’IJI$´I$ì’Z$¶:ø[?¿è7ð¯ÿ ¿‹¿ùïQÿ gãwýþÿá·ñwÿ=êåè©ä‡òÇÿ_ä>UÞ_øÿù#¨ÿ…³ñ»þƒ ÿðÛø»ÿžõð¶~7Ðoá_þóÞ®^Š9!ü±ÿÀWù*ï/üü‘ÔÂÙøÝÿA¿…ømü]ÿÏzø[?¿è7ð¯ÿ ¿‹¿ùïW/EþXÿà+üƒ•w—þ?þHê?álünÿ ß¿ü6þ.ÿç½\ÿ„ü[ñÀ^ðÏ| ið/Á~ ð_‡ôo ø;ÁÞø;®xs¾ð¯‡4ëmÃÞðχ´жzFƒáý H³³ÒômK³µÓ´½:ÖÚÆÆÚ h"‰kÑG$?–?ø ÿ å]åÿÏÿ’:ø[?¿è7ð¯ÿ ¿‹¿ùïQÿ gãwýþÿá·ñwÿ=êå裒Ëür®òÿÀçÿÉGü-ŸßôøWÿ†ßÅßü÷¨ÿ…³ñ»þƒ ÿðÛø»ÿžõrôQÉåþ¿È9Wyàsÿ䎣þÏÆïú ü+ÿÃoâïþ{ÔÂÙøÝÿA¿…ømü]ÿÏz¹z(ä‡òÇÿ_䫼¿ð9ÿòGQÿ gãwýþÿá·ñwÿ=ê?álünÿ ß¿ü6þ.ÿç½\½rCùcÿ€¯òUÞ_øÿù#¨ÿ…³ñ»þƒ ÿðÛø»ÿžõð¶~7Ðoá_þóÞ®^Š9!ü±ÿÀWù*ï/üü‘ÔÂÙøÝÿA¿…ømü]ÿÏzø[?¿è7ð¯ÿ ¿‹¿ùïW/EþXÿà+üƒ•w—þ?þHê?álünÿ ß¿ü6þ.ÿç½Gü-ŸßôøWÿ†ßÅßü÷«—¢ŽH,ðþAÊ»ËÿŸÿ$uð¶~7Ðoá_þóÞ£þÏÆïú ü+ÿÃoâïþ{ÕËÑG$?–?ø ÿ å]åÿÏÿ’:ø[?¿è7ð¯ÿ ¿‹¿ùïQÿ gãwýþÿá·ñwÿ=êå裒Ëür®òÿÀçÿÉGü-ŸßôøWÿ†ßÅßü÷¨ÿ…³ñ»þƒ ÿðÛø»ÿžõrôQÉåþ¿È9Wyàsÿ䎣þÏÆïú ü+ÿÃoâïþ{ÔÂÙøÝÿA¿…ømü]ÿÏz¹z(ä‡òÇÿ_䫼¿ð9ÿòGQÿ gãwýþÿá·ñwÿ=ê?álünÿ ß¿ü6þ.ÿç½\½rCùcÿ€¯òUÞ_øÿù#¨ÿ…³ñ»þƒ ÿðÛø»ÿžõð¶~7Ðoá_þóÞ®^Š9!ü±ÿÀWù*ï/üü‘ÔÂÙøÝÿA¿…ømü]ÿÏzø[?¿è7ð¯ÿ ¿‹¿ùïW/EþXÿà+üƒ•w—þ?þHê?álünÿ ß¿ü6þ.ÿç½Gü-ŸßôøWÿ†ßÅßü÷«—¢ŽH,ðþAÊ»ËÿŸÿ$uð¶~7Ðoá_þóÞ£þÏÆïú ü+ÿÃoâïþ{ÕËÑG$?–?ø ÿ å]åÿÏÿ’:ø[?¿è7ð¯ÿ ¿‹¿ùïWnºÝÖ±âŸxŽÿJ¿Ö|W­Úë¢h÷z™mö/ xwÂööö¶7ú爮ÿãÓð\Í4ºœžeÅÄ¡"†5D­ )¤•ì’º³²KK§ù¤ )4õÓkÊO¥¶m­˜WàWüoþDOÚ¯þÏWöXÿÖ1ñ¥~ú×àWüoþDOÚ¯þÏWöXÿÖ1ñ¥{/ûÔ¿ÁKÿS0¦uþþ%ù3îïØÃþFÍOþÌ«þ ÁÿªWÆ÷®±ªÛhšuÆ¥uÌÑAä¢ÛÙ[Éuyuss*è>)ðî­yðÇS›Wøw£h>Õ´ 7Æ~0üKÔ&²ž}c˾ ~ÔŸµõ‡zgþGâŸx[@ø¥|R»¼7«ß8ø‰ð·áÿ/x×D‹Ãš¿Çx#áš|b:*K¤´šiñ_Œ< ã5;+‹]NÓžÏÄV³i ¥­«ÙAk}§é—¶T4ßÙö}° n.~|9ñ»ðƒÃžð¯Ãx¿ÁÞñoŽü)£ø)#‹Iñ·ˆtíCÄÖ—Lñý¾Öî N;ˆµ)gÔE»šI[ëpüeÀ4rìTeÂøµ±9}  ‰Ê&9~.Œ±õ1üDp™žMõîl¿„áü»1–hó5WŽâLF˜Ô¥Kåbrlö¦!û,Ë J¾>·´§˜Ô£9aëWÊåƒÃR©_ ˜,,àð¸ŠøˆÇZ„¡NŽ Îµ,~&X_’øqk©­·Š<0ÖG«Ãy¥ý;ñ7Æ,üYð³á/€5ÿ†þñÇ|7ãjþ?ñס<×ó/ˆN¢²ÞM-Ó†žGsµã/ƒßþ"ø_JðGÄ…Ÿ|wའ[´OxËÁñ?…ôi´Ë)tÝ6m+@ÖôËí+O—OÓ§žÂÆKKH^ÒÊimmÌpHñŸÅ\3_—ÂdiåØ<×?ÆÑ¦¸k‡”ð”3l—-Áe4ªPxÃ=ÿWqøn©fØ…G<Œ^'õ|F7ІW˜ÇëUeˆrÄWÀaðnÚY‡%yá³ ^.½eNL²Y¥ \ðò–œªdÊ0X â!JЧð¿kÿŽ~Ð|GãõOƒZÿ†çñí/ð¿Âž²ðÏŒ-¼eáÿþÏ~ ø•âük㈗¶Þñ>£ðŸT:§€´ßhZ¿„´ŸxQ×∧Ӯ%×t>/üLý¦­-|Sðú÷âÂø¿DñçìgâÆþðÄ 3H·ð÷Æo7Þ ½ðˆü?7Ƙu?ǧÞxVÞ=g^²ño…¬|{á_VðÔÞ ð´·i©Åöúüøšþ½â¤ø5ð¥|Q⯠ŸxŸÄ‹ðóÂ+¯øÁmg§éÍá {X8Ôu ¶Ÿ¤éV'@Ô..4£g¦iö¦ÓȲ¶Húo|<ð‹-|CcâŸx?Ķ^.Ñl<7â»?xgEÖm|OáÝ*{û­/@ñ ¾£esµ¢é·:®©sa¥jIscg>¥5¼ÉypÒzqã® ÂârzØÃCêU°xŒejÙ^QR¬å…Ï2¼Â…Tj¬E ÐÂå8|Ã'«[Ë<é×¥ŽÌé*óœirK#ÍëÃ0…lÚ´!‰ŽaKN–38Ó§ŽÁVÂ)NoÙÔæ¡íUJ4鸪i,E‘¯%:›zíiû\[Úüdñ®“ðÃzÏÃ…öÿ|9qâkÁš>‡¦x«àž™ã OêzÅ·í[â‰zž™âÏxFÎÖçá©ýžü/«øoLñŒŸüCcátñ'Œwþ/üLý¦­-|Sðú÷âÂø¿DñçìgâÆþðÄ 3H·ð÷Æo7Þ ½ðˆü?7Ƙu?ǧÞxVÞ=g^²ño…¬|{á_VðÔÞ ð´·i©Åödÿ³oìësâ)|_sðà­Ç‹fÑÃSx¢…ž—ÄRøq¼=ÿ“hërhM©É¢7…?â™m)®M‰ð÷üILMÿF®çÄ<âË_Øø§ÀÞñ-—‹´[ ø®ÏÄÑu›_øwJžþëKÐ|X—ÀZ.—qkñ&OèÞøqâ´“ÅúOÃÏè_hô¯Š¾j–º¬×z”Þ"øCâMáßÅ߇z„öº}î•â] Lÿ„ËÄX}«Æôð×þš§ÿ1•Ëx/àŸÁŸ†Úæµâ‡þøľ$…m¼Eâø ¾×5ët™n kVÐô›ýRVuŠúâtY•e _ŸqVe“æ™FKú† 5 ´£‚ÂeÔ牥í9êQÂa*â}œ9R¢êâq¸ìf.¥*˜ÜF"2Ä,6ßÊpؼ%,Lq•=´ªãkâ(óbñXÇJ…^IF¶ÄF””!5QQ£N”!CéR”±5á[ˆæ¾Õãúxkÿ ÍSÿ˜Ê>Õãúxkÿ ÍSÿ˜Êéh¯š=[¯åþMÿÉW~Væ¾Õãúxkÿ ÍSÿ˜Ê>Õãúxkÿ ÍSÿ˜Êéh .¿–?ù7ÿ%ý]ù[šûWŒ?èá¯ü+5Oþc(ûWŒ?èá¯ü+5Oþc+¥¢€ºþXÿäßü—õwånkí^0ÿ †¿ð¬Õ?ùŒ£í^0ÿ †¿ð¬Õ?ùŒ®–Šëùcÿ“ò_Õß•¹¯µxÃþ€^ÿ³Tÿæ2µxÃþ€^ÿ³Tÿæ2ºZ( ¯åþMÿÉW~Væ¾Õãúxkÿ ÍSÿ˜Ê>Õãúxkÿ ÍSÿ˜Êéh .¿–?ù7ÿ%ý]ù[šûWŒ?èá¯ü+5Oþc(ûWŒ?èá¯ü+5Oþc+¥¢€ºþXÿäßü—õwånkí^0ÿ †¿ð¬Õ?ùŒ£í^0ÿ †¿ð¬Õ?ùŒ®–Šëùcÿ“ò_Õß•¹¯µxÃþ€^ÿ³Tÿæ2µxÃþ€^ÿ³Tÿæ2ºZ( ¯åþMÿÉW~Væ¾Õãúxkÿ ÍSÿ˜Ê>Õãúxkÿ ÍSÿ˜Êéh .¿–?ù7ÿ%ý]ù[šûWŒ?èá¯ü+5Oþc(ûWŒ?èá¯ü+5Oþc+¥¢€ºþXÿäßü—õwånkí^0ÿ †¿ð¬Õ?ùŒ£í^0ÿ †¿ð¬Õ?ùŒ®–Šëùcÿ“ò_Õß•¹¯µxÃþ€^ÿ³Tÿæ2µxÃþ€^ÿ³Tÿæ2ºZ( ¯åþMÿÉW~Væ¾Õãúxkÿ ÍSÿ˜Ê>Õãúxkÿ ÍSÿ˜Êéh .¿–?ù7ÿ%ý]ù[šûWŒ?èá¯ü+5Oþc(ûWŒ?èá¯ü+5Oþc+¥¢€ºþXÿäßü—õwånkí^0ÿ †¿ð¬Õ?ùŒ£í^0ÿ †¿ð¬Õ?ùŒ®–Šëùcÿ“ò_Õß•¹¯µxÃþ€^ÿ³Tÿæ2µxÃþ€^ÿ³Tÿæ2ºZ( ¯åþMÿÉW~Væ¾Õãúxkÿ ÍSÿ˜Ê>Õãúxkÿ ÍSÿ˜Êéh .¿–?ù7ÿ%ý]ù[šûWŒ?èá¯ü+5Oþc(ûWŒ?èá¯ü+5Oþc+¥¢€ºþXÿäßü—õwånkí^0ÿ †¿ð¬Õ?ùŒ£í^0ÿ †¿ð¬Õ?ùŒ®–Šëùcÿ“ò_Õß•¹¯µxÃþ€^ÿ³Tÿæ2µxÃþ€^ÿ³Tÿæ2ºZ( ¯åþMÿÉW~Væ¾Õãúxkÿ ÍSÿ˜Ê£¨xƒ^Ñ!]CYðýˆÑâ•F§y¢ëWº½Þ™hÈûµ)té¼;¥½Í«ˆÍñµž[«kV’í-gŽÞP;:æ¼gÿ"‹?ìZ×ô×u@ãg$œV­-åÖÊÿÿ‡‘Ò×àWüoþDOÚ¯þÏWöXÿÖ1ñ¥~ú×àWüoþDOÚ¯þÏWöXÿÖ1ñ¥zù/ûÔ¿ÁKÿS0§5‰~Lû»ö0ÿ‘³Sÿ³*ÿ‚pê•ñ…}ÅâÏùÚÿØËàÏýL4*øwö0ÿ‘³Sÿ³*ÿ‚pê•ñ…}ÅâÏùÚÿØËàÏýL4*åÌ?Þ¥ÿ^°ßú‹DÓµ?ñíìðßÚÕµøA§iº~·âo|uý”ü©j^ñW‰<â3áÏ~Ôß¼â­7Nñ_„5MÄú'öç†uÍ[D¼¼Ñ5m>ÿì…ÔQ]Eæ“_>|R_Øûág€/üOcãÚs⯎n>!x—àÏ‚>x+öÙýµ&ñÿ¾4ø_XÃÚ¯Ãø4X~7\kQÒõ{½-õjmî´mkú‡‡í·â]Îöòl¾ß ·çÏüÿ ›À´‰¿i½þ ÁûRZüXñN˜¶wZŒ~!ý‰ßGÒµ[³¨§‰üaáÝÿl4³Ñ|gã›+è4ßx‚Ð-Χigröëc}â߈7ž0ò³˜ñ\«/Ãð†g—eµkf9…,Ë‹ÌㄯÃÕÃeÞË1Ã`Þ&Œ1õèºuéáðØ• 5ZóRž"4¨W£[àx¶Ž{[ 9&,RÅa°˜\Ngše8üÑå4%W0•lÃ-¡†Âbp¸Ü~*1†[Œž…zØŒ%|Exá°õ(b{?‚OüDý­þiú¿ |>ý¡|5¢øBˆ?þ |SÖt=[ý”?f/êM·Šþ&x—ž,“L—Åž0ñ.·…η=¥•Ö³z¶1[Á"ĽbüUÝñgâGÂïì¾øCðÓâ¯öçö§ü…ÿábx—ãG‡¿°³?³¿Ð?±ÿáPý³ûSûB÷ûCþ³ÿgYdùúžWÂI¼[¯ø÷öŸø›â†ž.øQkñsã—‡ücá/ øïTøu©ø©|7 þÍ?³Ç©õTü.ñçÄ Ùý·Å_ üN,lãñMÍùÓa³¼¼µ²kÈàeñà?ÇMâ~¯ñ?àÇO‡ ïüqð¿Ã ¾#i?¾ë_¬.ôx‡âˆ|)®|?—Ã?þÝx;Å–ó|Tñ¶µuâ™>%øsV†? µ¯…´‰4ma¼Oëæ’æŽ> j®aW'ÂRÂbãVzTseƒÀûLN"¬*T…xóÃN¬”q\õê)Jœ½êû,¦ a©9'B›âá‹[kK?@|ý¢¾|xO¯€n k:oÃ…Z—€þ?üKð­¿ìóìý¡éŸ´OŽâÏü)ÚK@ðm¤š—ŒþéeOêߵ˫};Áž%ÐôEÖ,µß¤?cØÖÏöZÑ|}¤\x_ö1Ò$ñ½¯‡4ûÍKöGý‹l¿c»½zÏA´Öm„ŸMøÓñrÛǺ’¶±sq¢ÝYCàû/K}® =.Xõp¶\Ø©Q”³á)¸(áe[/£98Âxº˜ºÞÏ 97^¤)PÁƵ©R£n­KÓ­]BIö´£GË*“©SØ,zœióÐ^Ã*òŠ„©ÓªÕybaNV“¥ÉsU—iÿ%ø)®ü_³Ñ|5­k÷Ÿ,> üIñöµñ*ÿàOí¥éž6ñ&ƒñ?àïÇÚwìóâíSÀÚo…ÿhý?ǧÄ-KFðý¯À+‹Þ7ñ%ÿ4ï^ÜÜx“E±ñ+ûEÁCìt¿ |´ýbñ²xÃãÆÝgáÖ»ãߨ“öÆøŸ}ðTø7ÀßÄ\|Lý™|áÏ…_-¼G¬iv>²ð—…#ü/ÙÓUð߃ô»½Ãþ!fÐõ_ |v³Õ ñeŽ‘Åž£s©éÖÞñ-¨ù‹Á_ðH}WÁzËøÓJø¿ð+Aø™£è=žƒñ+Á²ðß~#ø¿Â?¾ üqð§ÄŸÚçÆ§íâ¯~Ó^7¾ñ?Â7´ø“­ü1¾ñ…·|K¨xjëáæ»;j“{zÿÁ<à±kžø‹áÿ øßÃ7ÊU·éž%ðî‘©F»$’ÍHËu•ÉxOñ®•àïi¿|EáøâËK·¶ñ/‰|àýSÀÖu8Yo´Ok~7ø‘ªørÊT ³M¾ñ׉æ‰Ã±ÔäWT­¢ª‚©QSw¦§5MÝ»ÁIò»Êäï;Ê6÷p‹÷W>Õxzºq®èÒu¢ÔWº‰ªs©M5;«B¤à¾ÌåI”QEA°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW5ã?ùüYÿbÖ»ÿ¦»ªékšñŸü‰þ,ÿ±k]ÿÓ]ÕCãø£ù£¥¯À¯ø(ßüˆŸµ_ýž¯ì±ÿ¬cãJýõ¯À¯ø(ßüˆŸµ_ýž¯ì±ÿ¬cãJõò_÷©‚—þ¦aNzÿÿü™÷wìaÿ#f§ÿfUÿàÿÕ+ã û‹ÅŸò µÿ±—ÁŸú˜hUðïìaÿ#f§ÿfUÿàÿÕ+ã û‹ÅŸò µÿ±—ÁŸú˜hU˘½Kþ½a¿õ‰¦jâÿÛÙÒÑXºö²t;nÓLÔu«›Ígú¤é-¦&¡¨êþ*ñ—áÒÞ]gQÒ4¨|íWW³Ig¿Ôìí „É4³*¦Wü&zm´íc®FžÔí%ŸûgNñ¿àËVÐì¢ðî»â˜µ{NÛÄ÷š±¥^i>Ô͵߄õ¶ÚjzuÄv÷¾ñ\G_Es×>/ðœÚmµç‰ü;iq¬ê7šFos­i°MªêÚv ºN¡¥é±Kr’_j6:£®›yej²ÜÚê ¶sÄ—FrußˆÞ ðì÷Vz‰4$ÔtëÏÛjúa×t;{ýÛĺÚk:äú•˜Ñô+9üE¦^êz® öö¶šd¿lÝ&èc˜·¢¹è¼_á9õ 'IƒÄþ›T×´èõ}M‹ZÓdÔ5&hn.aÕ4›4¹7Ž-½¥ÕÄw¶qÍlðÛ\J²˜á‘–ÆŸâ?jÒÅ•¯hÚœÓÛ›ÈbÓõKÙf´š=ùºŠ;iäy-ňt Ó:´×4{’ÞN§dó€l×=«x»ÂšÊYë¾'ðö‹w, s®­­iºuÌ–Ï$‘%ÂAys ¯Ë Ѭª¦6’)1hØ _IÔöfêšv¡æéÚ~¯Øom®üÍ'WûOöN¨Ÿg–Múv§ö+ÏìûÕ͵ïÙ.~Í,¾D»9»ù(¾*ÿ±+À?ú}ø•M[[ô_ª^}É“jÉZíÚí^Ú7µ×náÿ +á×ýÞ ÿ«Bÿäú?áe|:ÿ¡ûÁ_øUh_üŸO2Yõ9l´ïx—V±µÔ×G¿×ìmô¥Ò,µp–×Q4WºÅž·}Ÿ,Š·÷šF¨Ù[²Ü!¸il¯£¶»uâk8¯4(­ZÛP²Öu‹ý MFÖö)a°Ôì¬ïîE¬¢™W¸Óntùci¡{kÐH­+ˆÆj­)(É6ÔÜ7÷ý¤©Âœ œo8T•Zj"9óÇ–M1¸ÔNI¸û¼ÜÞë´\¥5'Ïe((MÎ-©C–\ÉY™ÿð²¾Ðýà¯ü*´/þO£þWïú¼ÿ…V…ÿÉõzOx2íA/‹¼1Ñ$Xu¡&¿¥'öDÏpmR-SuØût ²¥ß”Íp ZÏñOÄ xcA:ÔÚÎ…3]i³ê: œºå…£xc…%Š="VyMè¸ó`X岆ì>"¨þbj .~Ò<ªÚ©Å§~k%dîäã%®äâÒM¦5 ®\ªÜ×jÎ mkÞóVKš-·d“MÙ4;þWïú¼ÿ…V…ÿÉôÂÊøuÿC÷‚¿ðªÐ¿ù>µ¿á%Ñf½¼Ñ¬um÷Ävvu'‡bÕ쿵Pc–1sf²Iwkžu¸7ÛlEž)0ÁÐ6u—޼5>Ÿáë«ÝcHÒ¯|K§ÚÞéºF¡«XZê72ÜG{;X.æµ–î{{‡6râR.£¬m•­E]¹«%~eïs:‰(iûÉ^”Ô£iE¨©$çd£QÛU­þÃÒÊó÷ýÄÕH¸¹òó&ùoË+Eÿ +á×ýÞ ÿ«Bÿäú?áe|:ÿ¡ûÁ_øUh_üŸS§|!InüQáÍ:_°A©\Z^ø‹A[‹+Iã¶•eº6ú•ۉEå¨70ÜOg!¸ ¹–9á’K3øÇÂ°Þ 0x“Ãï¬I=¶‘ýµ§ Jé…°»T‚ËíêBöì“/— “ ¬  ’U¨E7)ÆÑWvœdþÒ²QMÉ· $¢›“‹I6𠥦®ÚÁ¥öwni+sE»ÚÊI»&ŒÿøY_¿è~ðWþZÿ'Ñÿ +á×ýÞ ÿ«Bÿäú›Eñ¶ª[øu.5MM×Õ¶ÚÒF·¼¼Ž ³/Ú"´UA+ì@Ž«±«øƒAðú[˯kzF‰Ü¿gµ“WÔ¬´Ô¹Ÿ¼›w¼šš]¿7—gÇ;qTçM&Ü•£7M¾xÙTRPpnÖçæj<·¿3J×hIMÚÍ]ÅM.I_•®e+s^Î)»ídÞÆü,¯‡_ô?x+ÿ ­ ÿ“èÿ…•ðëþ‡ïáU¡ò}k?Šü/õî™'‰4õ-2Ù¯u=õ9o´û4Hå{»ÛF¹–ÉÐÈÓÏq*K— êL¶Þ%ðåå½ÝÕ¦¿¢]ZØ[=åõͶ«c=½¢KwÝ]Íí½²Ma Ï3$K-•ÜeƒÛLU);ZQwNJÓ‹¼bÚ”–š¨´Ó{&š{–§–é|ÞVå_îêËwumщÿ +á×ýÞ ÿ«Bÿäú?áe|:ÿ¡ûÁ_øUh_üŸZÏâ¿ G}{¦Iâ]5-6Ù¯u=õ9o¬,Ñ#•îïm ÈžÖÙ"šyãŽ%Icrá]I··¤O¥Ï­[jVzU¼WsK¨Ú^[\Y*XVð›¸å6Ãì¯ÑÜ•D2E"JP£€Z1Œ¦çÂU$ùâÒ„Sž‹á‹MIìž]F£i&¯)(¥Èõ”’i/všiuNû÷ü,¯‡_ô?x+ÿ ­ ÿ“èÿ…•ðëþ‡ïáU¡ò}_Ä_êºv‡©Eâ}Ú?,cK¶¼Ö´ˆo..ÜAæé© ßH%Ô­e¹‚ÚîÎÞI䂿D…²Î›Ÿ¬øÿ¶½5ο¤Osá«9/µ*ÓUÒåÕí"¢@“XÉ{ K4ÓÁ+t`Y'¸‚ á¥@T«QŠr•H$”›~Ò6´"§'¶ÑƒSvÚ-Kf˜(Ô“IY¶â—¹-\äãñý©'ݦ–©Œÿ…•ðëþ‡ïáU¡ò}ð²¾Ðýà¯ü*´/þO§ÚxßC¸¹ÔÌ—ú\5Ž¥ëöÞ!:µ›é7Ú^¡6¡k-ÒÞeláŠÆïOx']ÌŸ¾Ù£óYÿðžø<#ÝIâ_C¥ˆ-n!Ödñ€4»±tú„a-ç]M¥ÝÓ.÷¼ÐCo'•*ÚÍpö·«j:ÔR»šIs]¹$—,çÛiZ*tªC™Ú.P”SmXj;Y§u­ïÍN6÷õn!+-yelîCÿ +á×ýÞ ÿ«Bÿäú?áe|:ÿ¡ûÁ_øUh_üŸZøÓÁÐAqu7‹<3 µÑ±»¸—^Òã‚Öõa7ÎâWºÁt VœÛÊË(„ l«>?xxÝjqªhÖº¤è´~&›Z±M"î-~çUµRíÙ,’5“MUŠu¼•nžåcEFA掵»9Å=>Üt挧-=Õ(ÆN.VR¶‚…GµŸý¸îýèÁÙsÝÚSŠv½¯­ÂÊøuÿC÷‚¿ðªÐ¿ù>øY_¿è~ðWþZÿ'×S¡auc§m}gq¦Ín/"Ô ¹†km y¢ê;¸Ý­ÞÜÇûÁ:Èb)óîÛÍ`Ÿø iˬxTi/vlT>!Òœ÷ëœl–ûíŸfk±ïM°”Ì#ýáM¼ÕJtâÚ””ZIµ)Å4œ”i­›QOg&¢µiSvi¦ìÔ½—3µ§­£ï;lµØ©ÿ +á×ýÞ ÿ«Bÿäú?áe|:ÿ¡ûÁ_øUh_üŸ[-â %áÓßÄZ_†M‹jÖ xæ[H-”Û0k‰õ `3,·¶‘ǹîaš—Š<3£G,ºÇˆ´-&(/OšMKWÓìc†þKT½ŽÆWº¸‰c¼’ÊX®ÒÙÈ™­dK…C«‘Ô¦—3’Q½®ç_™F×µ¯Í(ÆßÍ$·hj=MÚúBOK^ÿÖÖû[]ŒøY_¿è~ðWþZÿ'Ñÿ +á×ýÞ ÿ«Bÿäúè`×4K«ù4«mcK¸Õ"…®%Ó`Ô-&¿ŽìÓÉgÍpªÝÚ–‘£͹-‰£Ý‹/޼-o¯ê¾¼Ötë KFÒíu‹Ô¾ÔtëT[„º–IUe¼[€,-íEÖ òÁ6¶×vs´¬“‚ªUiEEÊqŠ“’‹sŠMÂ2”ìíov0›—e}F£½šv彠ݹåÇíý©N wrVÝÂÊøuÿC÷‚¿ðªÐ¿ù>øY_¿è~ðWþZÿ'Õéúæ&e–ÞÎñ®ÅµÌñ²²É2<ˆÊÁ”E.âý^Õ5íMÔ-fÔü9|lu+5»²’åXAk3\¥¼3\ 5’äÙ4ÓÅÖ×VÅ7C–JNjš’sqrQS‹“Œc ·dºB¤'þ )ü:‡-D¹›\·JüŽ×nI+óÿ4eñ'ô(ÂÊøuÿC÷‚¿ðªÐ¿ù>øY_¿è~ðWþZÿ'×kE^ŸÞ¿ÈVŸóGÿü™ÅÂÊøuÿC÷‚¿ðªÐ¿ù>øY_¿è~ðWþZÿ'×kEvzÿ ´ÿš?ø ÿäÎ+þWïú¼ÿ…V…ÿÉôÂÊøuÿC÷‚¿ðªÐ¿ù>»Z(Ó³û×ù§üÑÿÀ_ÿ&q_ð²¾Ðýà¯ü*´/þO£þWïú¼ÿ…V…ÿÉõÚÑFŸÞ¿È-?æþÿù3Šÿ…•ðëþ‡ïáU¡ò}ð²¾Ðýà¯ü*´/þO®ÖŠ4ìþõþAiÿ4ðÿÉœWü,¯‡_ô?x+ÿ ­ ÿ“미¸†Ö..$X¡‰w;¶p@ 3³ˆˆävTEg`!ñ+þI׿ìJñWþ˜¯ë¨¼UitUe ­âß«+U•¼]¢V «AA ñSQòÓ”Òøc7f÷åú$8ÝË•´þtšÝµÕ¾À·’²«.‹âÖV•—Á~.ee#!•†ˆC)A ƒqKö¹ÿèâïü"|_ÿÊ:ïüYñ^ÏÂzÆ­¦Káë6¾Ñ4¯ø“]ÑÏ„†“¡iZ½Î«mo=Ô:Ï‹4}rúHÆ<ÖÚ‹«\˜£-⸺š+vé'ø‰ðþÖ ^êëÇ>¶¶ðûÛǯÜ\ø—E‚K»ÉôûXõ‰%½DÒä¸Ô-nl`KãËym=ªž#_'ûFV»öQ\Î>ò”]âÜ]”¦›WM)%Ë&Ÿ+vv«YÚÎéE»j½õtš»R‹µî¹£uª¿Ž}®úø»ÿŸÿò޵Ïÿ@?áâÿþQ׺Eâß MPø›ÃÒÛ\â\[\E­i²Aqoâk†³ðÜðJ·&9añÚµ®‰,lɪÜ+A`ׂµVïÇ~°Ô4Ý&ûÆ^²Õu‹Ë?HÓ.üC¤[j­ý¥ëi·V:mœ×‰s}ym¨«i÷Ö±Ë47ªÖ²"Î b¾½Vê6¥Ìæé¨ÚWu¯¹ïή¯‰]iª 9\ùRMÊþêM]6ídšRiÞÍ+«Ùž+ö¹ÿèâïü"|_ÿÊ:>×?ýü]ÿ„O‹ÿùG^壸¿Â~!¿Õt½Å×5= cm®iÚ>·¦êwú5À–h ­¥•Ì÷tÂ{{ˆLWqÂâX&nøW¢¡cªI)ERq’¼d”š’{4ÔìÓî´ iÞñv’¾©èÚj×NÎözê¾4B8ä†+›-oO72y0Iªø{^Ò-嘩e….µ=6ÒØÌáO—›æHFØÕ›ŠÉñŸü‰þ,ÿ±k]ÿÓ]Õ{oÄõSáIPJkÞ d$UŒt,¤ò¤£2’0J³/BAñ/ÿÈŸâÏûµßý5ÝWf´«FNJ)Ť¹n•šóoó*?÷’ûšÿ3¥¯À¯ø(ßüˆŸµ_ýž¯ì±ÿ¬cãJýõ¯À¯ø(ßüˆŸµ_ýž¯ì±ÿ¬cãJú —ýê_à¥ÿ©˜Sš¿À¿Ä¿&}ÝûÈÙ©ÿÙ•Á8?õJøÂ¾âñgü‚íìeðgþ¦|;ûÈÙ©ÿÙ•Á8?õJøÂ¾âñgü‚íìeðgþ¦ræïRÿ¯XoýE¢i‡ÚŸø¿ööMâ+ RþßFmt©5-#Æ¿?ø–Qjº…´­k[Öu?üfŸRÖïÛÚ™¥èQYXÙÛêWº}Þ¡ªz…ÂÒ=ÿO»þågŒ¼ i¯x¿ÄÏ¡Úøn ë¾Ó¾Ùi÷ž2ø±ðãÂÞðN‹ªxµãÓaðWÁÓ¥Eã+W²ñtm/„õë¿ éÖ±hWVɪ¥Ï‹/®ôë¯aâ¸4ûÍ'KŸÂÖÞÑþ%7Å "É5¯è÷¾.ÖbøãÆ‹=#Vð½—„µOxkNhþÞ.ñV¡ac¡Ùkh¦H4;~šŠ\‹ÏïòKò_®às)¡xšóW½ƒZÖ<->‡¯|JøuñWƺšëž.Ôõ=JçÁ6ß eÒôkßYÛø³NŠãá‚ZØëþ*Ö¼ ¶ÇÅwSÅááßÛ>sâM2ÏÂ> ø7à[S¯h²éžÐ<¬ëß |%âÛË "×V𖕦ü^ñûx'ÃÿÛW—ZÏ›âïKuf÷>!ø§áÿxƒZ²Ô´OjOaí”QÊ¿Ëm<Ö›éúmdf¨[jÇVÕtm;Nð÷…nôßéПÂÚ·‡|K„O´«m/R‹XÒt{»?øSI¹Ñì|-e-•¼×o¬kš›DöóZÜMÎØÉEñWý‰^ÿÓïĪík—Õ<¢k‹j×G[·Ô$²µÓ¥¸ÑüSâùövSß\ÚCsƒ¬i°\ýš}Jùá’xä•>Õ*‡BŠVW]·å騙&ùZ¶Žú»tktŸ~Æ“¤øÃ÷7:^—oá«ß]k÷º¼zö¥©Ykuž³ªIªê¶?ØöÚ%Ýž«<3Ý_.Ÿ|úî—º9­–îÙÞÒY/këz¯ÿf¬‰§ék:~±yâm"×ÂÖóۥ̖Ûë6J©",‡\ÕìÐÛj’ª¼Sê7×N¾lRaµÿáпçÿÆ¿ør¾"ÿóUGü :üÿø×ÿWÄ_þj«†¦éºNSiRt Ý¯N)Ò•>W9Q•J%'U´å:’¤­TŸ?3„5©í&”ä”å/hª_ÜvU=¤ù¢½Å{F1âøÛ? xÒ 'ÂVqé¾øòÒëFóõ^üA zf¥£¼º­©ð¬áLZêRY­ŸÄ¡ušÙ•RoµÇŒß <]g¥ë6ZqðÅÝÇŠ¼;w¥j³_j¢x~âï\ñ¸öú‘¡Þ¾©¤«øŠK(¢¹:#ÅöoŒR›†²¶ô¿ø@t/ùÿñ¯þ¯ˆ¿üÕQÿ…ÿ?þ5ÿÕñÿšª“|Îue.iÉÉò&ÝZ+Vüª+÷”# råŒl ¥O’rœ¤*µRK–(ZÒ•“§QÕ¦Õâß»RS’»wçj\ÑPQäü9ðþÿFñ/Û¯,íµ+}sÄÞ«¿»Ðµ}Wµ±ºÖ.4ý?U·¿ÐµýòÖã캊Úiqé¿ð€è_óÿã_ü9_ùª£þ þükÿ‡+â/ÿ5U›ÀÐp§NóP§ SQJ¼&©ÆWqQ|Î%JUSÕ§9IU›oÚÕ¼Ÿ,o9FM¹É¾hÊsOX»¥9ºŠ.ðE Œe5Áøá~§¥Á¢%ëès˧jñjF׊/†°x4š]>6iWR‰¦Pâ5yÚŒÀ>+};Sð•΢ÙipxƒÁ÷w>"{ÝIu‰ü-áïH‹¦Iáè­ï,n/´ƒ§Ç«É­@öÑËz³äš×ìÓz×ü :üÿø×ÿWÄ_þj¨ÿ„BÿŸÿÿáÊø‹ÿÍU9`¨JSmÍF¥:têEZÒT}²m¶Úpö1m«9?‰¸Þ2Z‰ErÂðrqnr|¼înI{¶wsv½Òí{5çÂÝ_G¾ÓõµŽ·d¯áë™G¼o¡G§j^Ò4m1Þ ØXÜx{Äkú,ú}Ʀ4¹å–7q¬VÑLÛ¾*ø}©Ms ß…B[mbÖm__ñ¯Š/.4µÕžÇíZi:ÕŸŒt gFºŠÝÖóÃwú}h­¦Óî¬.–;»n«þ þükÿ‡+â/ÿ5T¡Ïÿðå|Eÿ檯ê´l’ºµIÎ2Œa ®xÆŠœR•¥F.wöÒQ‹•W(FQJ¥X»¥†1³œš÷/ÊÚqw³“|®ôõ”y9%(¿/ºøM¬M½§Éo¦ê1ßIâÛ­+[»ñß ŠÒçÄðê…¼Ï5–¡áhY«u§Ü]ZÞækg}@Z­Ün}Ä~“W¾Ñe³{;[$‚=#ÄVò,€_xz »=Vh#ŒÁ#Í _³Ó­R;›?Xj â}#KµÖ¬¿³µ 4±Ô¢ÑÑà¾Ô£I`6¯?™Ÿ¥ü7ñ@Ö¬5vûE¾–)÷x(Ó™MŸ ½—‡tKëˆßÅZx“R]3J’üÁ}w=¤WVç¿ÿ„BÿŸÿÿáÊø‹ÿÍUð€è_óÿã_ü9_ùª¥< ާ;›U*:œŠÑ„\£g§ñJqu%-ù¤Üyyª9¨Ô«Â)FЊÜäå'Å6ùo¤‡*²j1æRå§Éå¿ðƒx›Ãz¯€®´½+DÖ'Ólü1¤É^j~›osáÿ øÒÎöúïP·ðö¨ö6’K«[G¦Ü=丹e·•-HÙš~ø‚9[QŽëM’ìê¶ÚñÒìüEâO ÛË«ßÜêÚe¯ˆ4Xµ}6ÒÉ[Eró8E>[>UdÕ“^sqðëÄbçÑôFÖçmn;­V‰0ñEÔ «A¢ZKq<ž)ð®§gâ‹;ËM--¯¼9®é)iÙÙÜiº¥ì†æ×Òü=£êúF³â‡¹lúVµ¨Ûjö—p\\Ç~—#GÒt«›;-¬¬VêÚc\Áw­3ºÎ°=”^QšH¿áпçÿÆ¿ør¾"ÿóUGü :üÿø×ÿWÄ_þj©Ò¡N‹NjÑpå´T}›³pP£ûHÆ­à£.hFÞÅ{ ”êI%(ÁÙ¶Ÿ4®›wnüº¶½Û;¤œ¤’©9Î]­Å¡Ïÿðå|Eÿæªø@t/ùÿñ¯þ¯ˆ¿üÕVÚwrÿ2o?åþÿùµ¢¸¯ø@t/ùÿñ¯þ¯ˆ¿üÕQÿ…ÿ?þ5ÿÕñÿšª4îþåþayÿ,ð'ÿÈ­Å¡Ïÿðå|Eÿæªø@t/ùÿñ¯þ¯ˆ¿üÕQ§w÷/ó Ïùcÿ?þ@íh®+þ þükÿ‡+â/ÿ5T¡Ïÿðå|Eÿæª;¿¹˜^Ëü ÿòkEq_ð€è_óÿã_ü9_ùª£þ þükÿ‡+â/ÿ5TiÝýËüÂóþXÿàOÿ‰_òN¼}ÿbWŠ¿ôÅ]MßúýþÆïÿê_¡×sðßÃW¶×w“øºîÒî m®­n~"|BžÚæÚxÚ)íî —ÅÐM´rÅ"´rFÌŽ¬¤ƒÙÝÚÇy‚S"2£–) ¸µž;›[˜d^Rkk˜bžÁHÔ²²åLÔ\Ôçï(Í+è¯(Ùu}wÝIÊI-"´mìäÞéwÐoÄŸ„Z׋üe­kv^øu¨k¾ðþ•ãÞ]§Œ>j]ÿˆ®."ð·Äïxý4ýVæûNÑ5Ôñ6¡ãã[½bÓDÔ¯tÍfÏJñD7qê+ ê륧ý…c’ÚdÔ`…u?*ªkØPnÓüí€07;øUŽ:³33X’I¥þÕñýïþ |ÿÌ¥x«.©8Ú2U=ªš”SRúÅ,JVåäkÛQ„Ÿ4\§Ê•G>Xré'Ìß5šqäißX¼;ÃI6½íhÎQ^õ Ü¥MAÎn|ü_u©mtx.õM&Ü\i~.¸ñDvrɈ5MWÅZï„,ü=4ÚtnÚ/„uOkÒÚ_]EexLÑîmôØ Íݽ´Çá'Ž Õ4 Ý5¼3¦ÞÝ[hOãŸZø‹X–Kù£ñn³ãé?ð„jþÖ|5âÕµ‹› xo|ã æyd´ÔííD–;_Ú¾/ÿ¡ã]ÿÁoƒ?ù”£ûWÅÿôHªjR—"›Úr¬êÁÊþÓ–¬+{¯Ÿžt)Ò¡)û8¸É¹JNSr¼çYM­egIÓ“VänŒ©sÐN.jN­JqI©ÿ~xÇÀ6S‹-3×>$Ð<¨x_ÁÞ)Ö>+|Vñ>™{/™`l“Pø}­Ø¾‘àÍ'Q}/N»Õm|-®j/§½ªØi†KB²Gíš§ü'¿ñRbÿÂ!ÿ"å§ü"ÚŸÛ?ò7ÄÛíÿð’}“þeÏùý“û3þ&òó¿åμ¯ûWÅÿô.ü"Ñ<àÝÄþ,ðUš|ñ/Æ?ÚcÇZ‰|ñZøw¬ùŸÒµ\F.žxL-:P\õ'‰­F1‚so–ìúkì¾0ÿ ï†¿ð“Õ?ù³£ì¾0ÿ ï†¿ð“Õ?ù³¯Òÿjÿ€ºÅõ–ŸcãKãqsá_½ßþ é¶^ðŒ¾4µÔõ¿ˆú–¥á[M;áu¶‹©ü=ñŽƒ¯GñëÂ×:‰´f𾳈o´Ý2ó'Lý±>êö:½å¦©ñ; xY—ÃúÀ/ú7|Cbñ%׆&ð€µ†6>6ø‘©aàßjÉqðÿ@ñ46º/†µÝnöKm'K¼½‡­ð_¯lŸ ñ2xaõ„òÑ{­b í¿ÙuõŒRxjü¾Û|Õ‰’Ï2v©IfÙ[xN¥ ,n ªÐ§†§©:OÚZ¤!ƒ©O9C™G RäÕ)©¿zû/Œ?è;á¯ü$õOþlèû/Œ?è;á¯ü$õOþlëÁ-jÏj¿~|?Ð4¯k¶|ã¯é~'±øwñIáðþ§àŸxcÂW~ñ–œ¾“þkû]OYÖ,üZÞ?Ô<#qðûWÐít?iö:ˆ´¨ë°¾ý£¾iÞ1ñ€î¼G«ÂEáOx[ž%þñýî…¡x›Æ÷Þ Óü# jž.²ð½Ç„lõ\|Dð£é6k‰swgw©êQÆtï xšëGŠœ!ÅTªQ¥>ν¶#WN„2ìU\BÁÐÍjäu«Ö¡N”ëaáK8£<º¢ÄB”£‹té8©V£ís¬®Q­5˜à90õ0ô«Tuðñ¥˜¬ <Ï VMSŸ·ÀT†*œ¡)Ft•F›tê¨z_Ù|aÿAß á'ªógGÙ|aÿAß á'ªóg^?ã/ÚŸà—“g¨ê:Mÿ…þø»Ã_ß%ø}â-+ã·‹õ鋌<;ð«ÄþÒ®RÆ *ï­«kÖšŒõÝZ ɨxhøsĺ¾•¾¸ËBž' ÂùíL5l$1Ô12ËqT°øœLN N½jtéb¨ºøº Ï:ª4ç*óå¡J­HN#=Ê0µ'F¾e€§^”¥ ”z¯NtåN5(Eʬ%Êä¥ÕJ”é¿ÞU„eõ'Ù|aÿAß á'ªógGÙ|aÿAß á'ªóg_=øcöÖý› ±:<²©Ôìô]÷H»Ôív›.£7ˆµG¶±ºs¾°Eusj²Z%ÔÜJMïøLüÿCg†¿ð{¥ÿòUY³ñ?†õ ˜ìôÿèw×soò­lõk ›™|¸ÚY<¸!¸y_dHò>Õ;cFv© }kËkuäZm­ùté¯ú›•øÿÿ‘ö«ÿ³Õý–?õŒ|i_¾µøÿÿ‘ö«ÿ³Õý–?õŒ|i^¾Kþõ/ðRÿÔÌ)Í_à_â_“>îýŒ?älÔÿìÊ¿àœú¥|a_nøÎ¹ÐZÎS(·Ô5 é·‰Ó[¼Ö—‰t‹ ûS5¼‘L±]Ù\Om0ŽE/ ²!8c_~Æò6jöe_ðNýR¾0¯¸¼Yÿ »_û|ÿ©†…\¹‡ûÔ¿ëÖÿQhšaö§þ/ý½0Ãm VöðÅooopÁ1¤Pà H#Š¢Œ*Ghª‘ÆŠ¨ˆ¡T¯Ž¼sû'Ýx¯áEÃ[øFþ;/Œß>-^iŸ¾^üBøUã_xÇâ‹G‚þ#ü,²ø‰à±ã]Ã×^8¶¿ÒVóÅÖ–_ð—xKþ+ŸHci“Õ'ÕõN²“GÓ¬µ][Uñ?‚¼'¥ÙjZ¤ú.œú¼c¡x:ÊkýR×I×nlì¬îuد.¤·Ñõ ÌòG ³ÈëŽÛþ_íÿB¯Áü<8ÿç ^–KçY©bòŒm¡Ãc©Tª²éµŽË¨âiaëFèT¿°¥šb#£']JqœéS•??K‹U0¸ÊU«)ákQ©pÆ?ölt'B´]L*\®¬!8ÝMT‚\Ñpº“üòøyûi>|dø{sâc®h¿>ëßåѾø/Døcý‡g©øëã·ŽÌÓO‰.ü9¢¥²ügðÞ‘u5ž¦§†lçÔ/e²Ô®-´ÿÒ¿eŽ´Ï‹(ð޼ÿ ´ÿŒšåÏÄσ>ý¨¾=xgÄžÕ´ÿŒw°è·ºWÆ¿ø–ÓÅLz´~Ðlt |_ú÷ÿ ¯öˆÿ¡Wà¿þó…£þ_íÿB¯Áü<8ÿç _g‡ñ_èWÎñòÌ2|FsžâðØÚÙÞ# “K1Áb(ÔËç]办 O2†W—á³Z?Q©G†ÂÒ¥Z’çƒS†² ÒËðС˜áð9}fê#˜Ç ÃãpË ì3:SÄb!„MÖÀµ^œð˜‰Ô«JiÔ¨¥ñÏ‚?g oÀZ—Á-cÂú×ÁÏËðÃEø‘á/xOáŸÀi¼ð¿Äžø•â x³VÁ°ø¥?ÃoCªøGH¸m~ïÄ^<Òïîo|Iy}áy.5['ÑõüYû<^kúGÆ }+Ç1hÚçÄoŒ_>5øoTºð·ö¾›á?|2Ó¾Gáí3ZÑ—Ä:]Ç‹´ ½cáEæ»޵àíJïIÖo4;TÒ/­ ×›êÿøU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8ZùÙq‡Ï ÊY®ã©ÉÉb,ƒšmñúÕûèûg],ùýuF¼*F0¾ %€¾ô©åÙ=,;ÂSÂb£‡q„]'O5”Z†WS%‹¼¯.g–Vžr¿5H¸Ô¨åZœ*Câï†_³O‹|)ñKÄ?üsñKGñŸŠüUoñ5‹_ü8¸ð> þ9ðïÀO Ñ¬o|}ãmBÎÃEƒàlSEk¨êÚÍõññ+¤ú¬gHê|ZþÆzý¯ÃÝ#Iø·¦A xkáÿìÑàÙê_ ®5 KÄÓ~Ì^;øWYðƧkñ J‡Á¿ð‘Í}¬i¾"Óµm3Çh ›JŸK»±—N¼]côþ_íÿB¯Áü<8ÿç Gü*¿Ú#þ…_‚ÿøxÜŸ²ÇÄOÇMå/‰äkoøOWR:OÙVi…¼¯·‹¯™>Ç_³/ìu£þÍž!šïFÓgk*ÏÃ7žÐüMáÙ›IøqñòÿI}ONº²_‰_´oˆ:ŽŸãù¤³Óm‡‰%µømáøIµÛk\-Å´–—_vÿ«ý¢?èUø/ÿ‡ƒÇüáhÿ…WûDЫð_ÿŽ?ùÂÓ¯ââpÎY[?¡<T¥[7èä0Ž2­- 9¹BŒjQpÂÐ¥E}^ttS“¼êU”³Y.@ªà+g×ö¹dhG7K5rÃÇ9T¥ßâJu¦ªsª­CÚóªTù2è­OøU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8ZøŸc/ùù…ÿÂÌ'ÿ/óüû3ÜúÕ/åÄÿá/ÿ”yþ}™—Ej«ý¢?èUø/ÿ‡ƒÇüáhÿ…WûDЫð_ÿŽ?ùÂÑìeÿ?0¿øY„ÿåþŸfZ¥ü¸Ÿü#Åÿò?ϳ2è­OøU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8Z=Œ¿çæÿ 0Ÿü¿ÏóìÃëT¿—ÿ„x¿þQçùöf]©ÿ ¯öˆÿ¡Wà¿þó…£þ_íÿB¯Áü<8ÿç G±—üüÂÿáfÿ—ùþ}˜}j—òâðÿÊ<ÿ>ÌË¢µ?áUþÑô*üÿÃÁãþp´«ý¢?èUø/ÿ‡ƒÇüáhö2ÿŸ˜_ü,Âòÿ?ϳ­Rþ\OþâÿùGŸçÙ™tV§ü*¿Ú#þ…_‚ÿøxÌ>µKùq?øG‹ÿåŸfeÑZŸðªÿhú~ ÿáàñÇÿ8Z?áUþÑô*üÿÃÁãþp´{ÏÌ/þa?ùŸçÙ‡Ö©.'ÿñü£Ïóì̺+Sþ_íÿB¯Áü<8ÿç Gü*¿Ú#þ…_‚ÿøxÌË¢µ?áUþÑô*üÿÃÁãþp´«ý¢?èUø/ÿ‡ƒÇüáhö2ÿŸ˜_ü,Âòÿ?ϳ­Rþ\OþâÿùGŸçÙ™tV§ü*¿Ú#þ…_‚ÿøxÌ>µKùq?øG‹ÿåŸfeÑZŸðªÿhú~ ÿáàñÇÿ8Z?áUþÑô*üÿÃÁãþp´{ÏÌ/þa?ùŸçÙ‡Ö©.'ÿñü£Ïóì̺+Sþ_íÿB¯Áü<8ÿç Gü*¿Ú#þ…_‚ÿøxžÿær©a¦Ò~Ó“WWÇ`£u{_\BêšõMtaõº_ˉÿ xà×Á¯xâÅ¿ˆZŒüe¥i~3ñïÃÏèÞøy{á+Æ>+ñ_Œt¯ xÿYÓ,tÝgâ´kK]Àþ$Ô5-CÄ–Ñ¥´A4¦– *´¨Æ4¥:Ô§Z›Ž' é:4•YU©,B­ì)”hV•IT©Ó““JÍ̱ØhQ«^r©tjS£Rø|O´UjºQ¥N4'^¤êJ½Â4éÍÊUÝÒöÊ+Ç¿áÿ‚ŽÑýˆ¿ñ3~:ÿôÑÿ?üsþˆ‡ìEÿ‰›ñ×ÿ ´þϯÿ?rßü=dßüðþ¬ü¯ö¦þ}æ?øgÎ<¿êÏð}a¢¼høþ C“‚°ð8öÇøðH#ö œu8ô)?áÿ‚‘Ñý‡ñ1þ<ôRþÏÄÏÌ»ÿY/ÿ<ûS ÿ>óü3güÁçùög³W#ã»;k¯ k²Íéô½2ûYÓn䆿ÃUÒìç»°¿³¸…£žÚæÚxÁYb‘£i!“|KùŠ|MûX| kÿ´'Á¿€ú/Ã_xûÀŸ îüYðWöñ÷Å]kÃ^)ø¡â­'À>›]ð·Ž?fÿ‚p'‡uïø‡Ã~›UÓY¨ÔPtå(T‚“•9Æ=-~ÁFÿäDýªÿìõeýcWï­~ÁFÿäDýªÿìõeýcW~Kþõ/ðRÿÔÌ(ëü üKògÝß±‡üšŸý™WüƒÿT¯Œ+î/È.×þÆ_êa¡Wÿ±‡üšŸý™WüƒÿT¯Œ+î/È.×þÆ_êa¡W.aþõ/úõ†ÿÔZ&˜}©ÿ‹ÿod^+ëàoû-õx|=«ÿ´¯íã?‚¿´·Á?‡Z…á-CàÒê_ìÿj_k6šÌþ$ð_´—nþ ~Ìoá;ËsNÑôå×¾/麿Œ§×4ˆ<;£ZÛéMwý­ õð7ý–€?ú¼>Ö¯Çø%¿ìeûFøãWÄŒŸ ü5㿌-4û-㿉<ðßÄ¿gè#ñ,?hOêÞÒü ©I®iv3ø‡À0xÃ7ÁßðJKø3Æ ý«¾?|\øÙàgǵ¿Š<ð=¥ø)aðwáuÇí)⟌Úl^<ð®£áÙßá÷Åíâ5ŸÂ?Œ^,Юì¾+üDø›ðÿEñ|]>á«èôïêz7©ÁÿÖÒ>Õ©øÇUý®¿kMw㤓|+ŸÂ_´Uã~ËZgÄo†ð†ßâÎáÈ< àß þËžýž¢ÓuOülø…à_h¾'ø!â}_ðö­ íÆŸ‹¬àñ8âJœ!%)V¨åK/÷—±Jq–i f›²¥,|2øâ)Ó£RÀ,5\Hâªæ±p©ÕY§V/ qQ¯˜' K«:t㉆]γ®òÚÊX ˜ªÔ”3âpù’£Ea1Øìï7ø[ÿñµ‡Å/Œ>øÝû;~Òþð<_µ/ÃV^0Õ´Ù¹ü!û3Þ|Yø-û;ßø+á—Å]CÁõ?xßUÕþ)|HÔ-¯ü[ðWKý ü'ák¿ZEâÏhÓÒM'¹ýŒ¿à­²_íÙñ_Äÿþk¢ïÄZO‚¯þ%ø^éþ%þ;7ÿ„÷áÖ—¯hÞÔ|[ƒ~ üyø«ñWá Y^ø£Â/qà¯Úsá÷Ào‰Š|`Ñuí&þŠ¿¯¾ CâË¿ xgá/ÅŸ„> øe}kð—à§Â¯ËàŸiŸ~(ø·M¹‹ÂðxïWñ׊ï5¯xÛÄöQZéòÉMa3 TZZyuìÉU÷ïŽçª«©ÖjuªT”aƒQx¹O ÇTK듦åÒÝV5œ\œëTöÔâåN ƒxogJ)Q§Cë’Í¥ŠT£ DêeS£8`áˆö|…?à© |wáõ¾ðgÀOÚw^ñ§‰âø=«|øDÞøWáïˆß´Gƒ~:xWƾ8ð>ücð÷ü#á¹|!ðÃâ–¿â+OÚÆßü[á+?‡ÚÄ~#ðÆ›y­ø×Å“xËþ ‡ð“ágí ð öhøÏðËÇþ&~Ж^>Ѽqñ—ö¸ñ/†¼Cñ'SÕ<=á¿ xƒá‚ÿlþÐ!¹*Ó…õ?|'øCñ3áFŸ¨ÝB_ˆgÃZ7Š5í ¹ÿ‚nü.µÑüþ-üwøc㯆?ÿgŸ‡_ >.x7TøUyãïÚ~ÎÅ/xgÄM—ŽþøÓáÆµ­øÓÁ~ xGâ=~ø«ÁÚÖ«C.‹á?k}–«\ðM­¼lþ2Ö¿jŸÚÄVÚçÄï‚_¾%ø>îßöYÐ|9ñ‹ãÀoøVøKâ¯Ä=CÀÿ²ÿ„üsý­ªiß |¤ø‹Á¾ ñ—ƒ~Ige<úÿê“&£l– fª0uÞP³ºu*rKS!QÂR«Qò*~Ë*Ìñ“¬©U_Ú´2l,º^33Ä`8¦± ]BTž>YEg‡Ÿ,”)guW<jn|•rü=_«ÑÃÓ„éÖžY­lN*¦*–WK¿û5þØÿ~)þÎþ9|Mý™¾+ø:ûàhýJð–Žÿ5Moâç‡> |Iøá­:†z_‡?hÛ¿ŠÆ•àÛ_ kp|Bñë=gâ$Z¥Ï† > ¼Ò5góÚ—þ Iáï‡Ó¬¾è¾!ñ—Œ~ jŸ<9ðëâ¯Á?´Ãx¯þ>ø7âwÅhu?…Ÿ³.•âïŽÿµÿ†Ÿ>k?é-þ#éøñÅ>ñçÄï|SÑüã›j:/ÂíSâgŠõÏxãÃþÕ4?xwÆw~ÖüoâmÄÑÙüHñWÄ=SC›SmÚÆá; +Ãö#iÿÿøO¡|(ƒá¯üoñcÀöƒñ†ûãŸÃ¿ŒÞÕ|}ñ[ágŽÛE¿ð†ÿá >1øâ¯†ÓøkÀ߯—à†<)ãO†þ/Ð%ø=gm xžÇĚ̗Þ"½ã½×4é¹ÒT²Zª”†.r¥ˆ¢ó¼'Ùâ(Q”ñ¸)ÔP¯Æ`V†­K Zts,6?&틦¥‰åq5n#¥†”ã'ÊñTñá¬t[ztp¹f/‡†3 ˆÁæu±x Ê\ÔeˆËÜqW´ŸÚÇLÑ`ÿþך‡‰ô/ŽCágÁo‹?|_à_†^8ýží¼Mâ?ƒ_Šî*|]øûM럼eñ À¿þükðÿŒþü9ñß ]xãuçÅ? ZøOVðg¾,|lÔåñ„<_ð[Åáüciã«+?hºÖŒçÀ>¹Òî[Òð¿ì7ðÏAð¥·uÏ|fø‰à­Wá·í ðûâÏ„w»¯B—²NÒ£ ÓÇãcV–,5Nui,28—‡Ãû\– G/«N¾•UMa0´°ê¢«KŽs©VJ5jag<­åSÄÂ_[u'‡ÀÑÏ0øü=|"³<Ï/Ūٵ •¨è¢Šå$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šù£âζ<9ñ{À:ÉÎ,þ |né'”Ò>%þÌ6¿ë7&ßõÿÞû¼çñûÄ?ð]…Þð¯Å½'Åþ)øgö øwñ:o…ý‘µB—Ÿ¾'xĺ†¢¿u jÿ„C¿ð¿Ž4(tÝcÄ"ðëø«Oð¬÷‹§xmþ#Eâ_„Z—ÅÓÏÚËVÒôø3R×u+LÔ~üT𽞭¬]Á¥é2øŽÿâ'ìíâK ê·ÒA§Ãªßè>ñN­cc5Ìw¶>ÕæµŽU°¸òÿ95?~Ïz×Å |jÕO ÿŠþ ðÞµá øòçÄþ“ÄZ/‡¼A4sjZ}¥áÕÿëú >îT’ûF±ñ‹´íæÂÃÆ~,¶Ö}Œ.8Œ59óF2Sœ_2m8s^ñÕ{Ñwqû-§wXʧ,ÚqæÙ«wÓM¶z_ªºkÏèÿо8ºø‡ñCö,ñ5ö‰ªxföñþ?5ï†õ˽ûZðýÝÇÃê&¯uá½kÄž›SÒ¦½{ ù4kz,—vóI¥êÚ•‹Á{:x~þ=3þ ðVúVTŽØ›öÇÜÌ2›ñ÷þ ÿÏ#«H穯)“ľ×~*þÌšv…â_¼Ñ!|MøAá¿ ø‹âµh?´¾ |LÑ<3¬_]'€/5o ø×Eðç‘øökø!â¿ü=ðv³uãÉm¾þÐ÷ÿ´·…u‹oEa­'µo‹šßÆMcÚ´–Z4n·ðóVñ½w¤êÕ4»”ŸF´Ñ/¾Ú¾1ðþ‹âË> üý®´½]ø ñkX·Òÿe_|;ñÃ=Ã>ý±4O‹>$ýž´!¥Ü·€/þ ¶«ÿªøñÅ~!ð&¡g è~Õþ4þÑž3“BÒ"$Õ¢ñ¿ˆ4[+=G –{ Nœ5ü+Ðôߊw¼SñOá›üMø3ႉ«ü;ñ=§†|AðïIð—„ßÁ:oŒþk¶þ—RÐ>#KáûO ZÜø—Q¸×!Gð‚å°Ó,N›z5/AñŸ…-|eÿ sþ/Ç¿ ÿÂÚøK¢|'ÿŠ3âúü+?ìOøO?âåü#ÿ‰=×ü!ŸµøNÿâwã/ø™}¿þßÿĶ/øG¿Ó:¿±ðÊ•µ×…:ÄÕŒ:Xб¯ˆTñ(Ê¥Iá©ÖÃ,4¥†©[,5j•)}k KV ÝIÊRW§Rº”)>j“ÃP«<½Ê•IF£g„XœÂ«b¨åtêÎ ù‚¡Gë?ÛÏĶºÏìû£ÚÃ4r4µoüÚrª0v¯üö\Œ“Éã2øÓ¯ÿ%ä¾àúž þ¨á5//òüË›ÿ…5ðƒþ‰OÃoü!¼/ÿʺ?áM| ÿ¢SðÛÿo ÿò®ºOøDô¿ùúñ/þ~0ÿåíð‰éóõâ_ü,üaÿËÚ>¹‹ÿ ¬Oþ«ÿÉy/¸>§‚ÿ jøMKËü¿òæÿáM| ÿ¢SðÛÿo ÿò®øS_?è”ü6ÿÂÂÿü«®“þ=/þ~¼Kÿ…ŸŒ?ù{Gü"z_üýx—ÿ ?òö®bÿè+ÿƒêÿò^Kî©à¿è‡þRòÿ/Á|¹¿øS_?è”ü6ÿÂÂÿü«£þ×Âú%? ¿ð†ð¿ÿ*ë¤ÿ„OKÿŸ¯ÿágãþ^Ñÿž—ÿ?^%ÿÂÏÆü½£ë˜¿ú Äÿàú¿ü—’ûƒêx/ú¡ÿ„Ô¼¿Ëð_.oþ×Âú%? ¿ð†ð¿ÿ*èÿ…5ðƒþ‰OÃoü!¼/ÿʺé?áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/húæ/þ‚±?ø>¯ÿ%ä¾àúž þ¨á5//òüË›ÿ…5ðƒþ‰OÃoü!¼/ÿʺ?áM| ÿ¢SðÛÿo ÿò®ºOøDô¿ùúñ/þ~0ÿåíð‰éóõâ_ü,üaÿËÚ>¹‹ÿ ¬Oþ«ÿÉy/¸>§‚ÿ jøMKËü¿òæÿáM| ÿ¢SðÛÿo ÿò®øS_?è”ü6ÿÂÂÿü«®“þ=/þ~¼Kÿ…ŸŒ?ù{Gü"z_üýx—ÿ ?òö®bÿè+ÿƒêÿò^Kî©à¿è‡þRòÿ/Á|¹¿øS_?è”ü6ÿÂÂÿü«£þ×Âú%? ¿ð†ð¿ÿ*ë¤ÿ„OKÿŸ¯ÿágãþ^Ñÿž—ÿ?^%ÿÂÏÆü½£ë˜¿ú Äÿàú¿ü—’ûƒêx/ú¡ÿ„Ô¼¿Ëð_.oþ×Âú%? ¿ð†ð¿ÿ*èÿ…5ðƒþ‰OÃoü!¼/ÿʺé?áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/húæ/þ‚±?ø>¯ÿ%ä¾àúž þ¨á5//òüË›ÿ…5ðƒþ‰OÃoü!¼/ÿʺ?áM| ÿ¢SðÛÿo ÿò®ºOøDô¿ùúñ/þ~0ÿåíð‰éóõâ_ü,üaÿËÚ>¹‹ÿ ¬Oþ«ÿÉy/¸>§‚ÿ jøMKËü¿òæÿáM| ÿ¢SðÛÿo ÿò®øS_?è”ü6ÿÂÂÿü«®“þ=/þ~¼Kÿ…ŸŒ?ù{Gü"z_üýx—ÿ ?òö®bÿè+ÿƒêÿò^Kî©à¿è‡þRòÿ/Á|¹¿øS_?è”ü6ÿÂÂÿü«£þ×Âú%? ¿ð†ð¿ÿ*ë¤ÿ„OKÿŸ¯ÿágãþ^Ñÿž—ÿ?^%ÿÂÏÆü½£ë˜¿ú Äÿàú¿ü—’ûƒêx/ú¡ÿ„Ô¼¿Ëð_.oþ×Âú%? ¿ð†ð¿ÿ*èÿ…5ðƒþ‰OÃoü!¼/ÿʺé?áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/húæ/þ‚±?ø>¯ÿ%ä¾àúž þ¨á5//òüË›ÿ…5ðƒþ‰OÃoü!¼/ÿʺ?áM| ÿ¢SðÛÿo ÿò®ºOøDô¿ùúñ/þ~0ÿåíð‰éóõâ_ü,üaÿËÚ>¹‹ÿ ¬Oþ«ÿÉy/¸>§‚ÿ jøMKËü¿òæÿáM| ÿ¢SðÛÿo ÿò®øS_?è”ü6ÿÂÂÿü«®“þ=/þ~¼Kÿ…ŸŒ?ù{Gü"z_üýx—ÿ ?òö®bÿè+ÿƒêÿò^Kî©à¿è‡þRòÿ/Á|¹¿øS_?è”ü6ÿÂÂÿü«£þ×Âú%? ¿ð†ð¿ÿ*ë¤ÿ„OKÿŸ¯ÿágãþ^Ñÿž—ÿ?^%ÿÂÏÆü½£ë˜¿ú Äÿàú¿ü—’ûƒêx/ú¡ÿ„Ô¼¿Ëð_.oþ×Âú%? ¿ð†ð¿ÿ*èÿ…5ðƒþ‰OÃoü!¼/ÿʺé?áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/húæ/þ‚±?ø>¯ÿ%ä¾àúž þ¨á5//òüË›ÿ…5ðƒþ‰OÃoü!¼/ÿʺ?áM| ÿ¢SðÛÿo ÿò®ºOøDô¿ùúñ/þ~0ÿåíð‰éóõâ_ü,üaÿËÚ>¹‹ÿ ¬Oþ«ÿÉy/¸>§‚ÿ jøMKËü¿òæÿáM| ÿ¢SðÛÿo ÿò®øS_?è”ü6ÿÂÂÿü«®“þ=/þ~¼Kÿ…ŸŒ?ù{Gü"z_üýx—ÿ ?òö®bÿè+ÿƒêÿò^Kî©à¿è‡þRòÿ/Á|¹¿øS_?è”ü6ÿÂÂÿü«£þ×Âú%? ¿ð†ð¿ÿ*ë¤ÿ„OKÿŸ¯ÿágãþ^Ñÿž—ÿ?^%ÿÂÏÆü½£ë˜¿ú Äÿàú¿ü—’ûƒêx/ú¡ÿ„Ô¼¿Ëð_.oþ×Âú%? ¿ð†ð¿ÿ*èÿ…5ðƒþ‰OÃoü!¼/ÿʺé?áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/húæ/þ‚±?ø>¯ÿ%ä¾àúž þ¨á5//òüË›ÿ…5ðƒþ‰OÃoü!¼/ÿʺ?áM| ÿ¢SðÛÿo ÿò®ºOøDô¿ùúñ/þ~0ÿåíð‰éóõâ_ü,üaÿËÚ>¹‹ÿ ¬Oþ«ÿÉy/¸>§‚ÿ jøMKËü¿òÍÒ>ü7ðþ£o«èü¡êÖžwÙ5M#š›¨Úý¢ mgû=í•„0yöÓÍo7•*ùM,/º9M¿øÀ?ô üJð¾$xVîhn.¼/ñÁÞñLJ.n-„‚Þyô/éš¶•,ð ¥Ë%£I–@Œ¡Û3ÿÂ'¥ÿÏ׉ð³ñ‡ÿ/hÿ„OKÿŸ¯ÿágãþ^Öo]Ô…gZ««MÅÓªêOÚAÅóEÂ|ÜÑq–±qjÏUf_Õð¾Ît}?cQ5R—±§ì椔d§ òÉ8«>dî’OM¼þ‡ö#ÿ£+ý?ñ¾ÿó¿£þ‡ö#ÿ£+ý?ñ¾ÿó¿¯xÿ„OKÿŸ¯ÿágãþ^Ñÿž—ÿ?^%ÿÂÏÆü½®ÏíŒÛþ†™þâùiÇý“г/ÿÃ~Ëûž_‚ùxXý‰bPÿ†*ýŽ8çöUøO¤ü=$ŸrI=èÿ†&ý‰èÊ¿cüE_€_üï+Ý?áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hþØÍ¿èi˜ÿán'ÿ–‡ö6MÿBÌ¿ÿ ø_/îy~ åÁü;ýg?„"_|$ýœÿg¯…~.ŽÖîÊü5øð§À~&‚Òú -¯m­µÿ øGIÕ­ º·–H'Ž ÈÖXãpUˆ®ßÇ3CoàÏI<ÑBáý^y¤HѦ¹±žÞÞÎTn.%Šc|³IQ†wU2ÿÂ'¥ÿÏ׉ð³ñ‡ÿ/hOè‚æÎêTÔï¥ÓîVöÍu]_Ö-­ï#ŽH⻎ÏTÔï->ÓË!·œÀe·‘„°¼rª¸ä¯ˆ¯‰ŸµÄ×­ˆ©Ê£í+ÔYò«Ú<õ%)r«»+Ù]Ûs·‡Âá"¡†£OMKŸÙУNŒ9´»å§Ë»$åkÙ-ö]-~ÁFÿäDýªÿìõeýcWï­~ÁFÿäDýªÿìõeýcW£’ÿ½Kü¿õ3 E‰~Lû»ö0ÿ‘³Sÿ³*ÿ‚pê•ñ…}ó©jV=…Ö§©ÝEgcgšââbv"d*€ªä–GeŠbWšyž8aŽIdDo¿cù5?û2¯ø'þ©_WÜ^,ÿ]¯ýŒ¾ ÿÔÃB®\Ãýê_õë ÿ¨´K ¯'³vûäÏ+ø×ãßøà/ƯøoN×¼!â |øâï kº¯†._M×t_꺮‹sý‘s{®#ÞYÞÃçØ5½k6Ò[jVÒkI¼/[ñïÅŸÙÏ]ÔtýkÇ-ý¦4MKà—ÄOŒ–V^3Ò~øSÇúß5‡Öþ-Òt½[á/ßøk\Ó¼GáÏ5÷…ô]GÀ‹­§Š<5>›?‹®4ßÀ<1ög‹|+¡xëž&ðOŠl›RðÏŒ|=­xWÄZr^_éÏ¡x‡M¹Ò5{$Ô4»«-NÁ®´ûˈóN½´¿µ2 ìî­î9SÎ<ð'Àÿ -¼IqàUñü%ž ÑÛFÿ„×â_Ž>#|mñEµ•¼w/¤èçÄ?üi⟟iz•ÕÆ­‚¬|G¦xxêšô6¶ºŽ«}}7×ðîyÃy~OS›å”óóÇbêÖÂÕɲéÓÌ0µðØ X*Sâu^>³¸.|+ã/|cºð?…üC¦|!…zOŒu›Gø[ñQ²ŒxËâ½à½*+?[k_Á7ƒiZv«ö­/Š›öøµß„M¥|6‡[ð?Ä3àÓx“VÒ5OŠºçŠ>xã\;xsÞ6øâº Õ“øŸÃ·vž,ý¡¼'âkßêÑkš?…u½ðÖŸâO¨þ|ð¿ |/Ð4»{¨|+ømðÇE×°ÚKÜè¾ ›Ãš‡Œ.'Ñ4‰miw:¶¥©Á¢xrÞËK'õÛoÙ×àÝž›a¤[ø;ËÓ´Í á'†¬mÿá ñKù'À¯]x§á]—›&¸ÓËÿ¶»{s}ö™¥’ï[ó~Ëâ9õ{4ŽÝ)øökøEá/ø[ÄÞÒü_ákÿhðÆ›cῊÿt/ jš?ƒô†Ð<5|¥xÞÓÁßo4Ç¥Zêÿ4/kÆÒÂÞ[ù#Ó¬Û Ç>ð§„Ωåü!ŒË1Uœ±*%˜ãháÔ0T"§ŒXž3x˜×ž2¦>Ζ&¶5€¯[• ˜iëKÅp©ƒ\â–"0èã`þ«AÏ—âÏÚ‚ÛÁŸåø{­ø;ìñÚ|@Ñ<={®ÁþàÞ[‰k¥ Ìö‘üRøá߆·Ú#ÜÃöHWRñlšÉ¶µ‡G»ñ+?۫ľ ñ‡‡¼+¢þÏž>¼Òocøk¥xçZÒtŽ Ô<â‰þðŸŒ"6Z‡…?gÍwáLJ¼¦xï@¸ñ¦«ãÏŸ |E¤ZØø›PƒÁ÷V¶>}‡âÿ‚ ¼w©x·XñW…“RÕ|qà>x—QW×ôÛËÏÛjz޳gq¥j¶2è“&©ª\ßkCm7^yâÓZMQ†¤ mOövøW©xâ/ˆ‘XøËÃÞ&@þÐø¯ñgáç†üJ|/vZøßÀþñ¿‡<ãÙ,4È-´A'|=¯Isáë;/ݵƇei§ÃÍ”æþQÂF9¿ gx¬rÉ#‡u°ØÊÔè,ò•<'.=ÒyÕ9NŽ&¬ó¬AJ•*J†]:+VÆQV7Å­)e¹Ž…5ˆ„áõŠ1©7‡öê´¢¢°“*´á)á£)Ë ÔhÒ©%F½j•)üõû$|uø“®h~üWðm­÷fí#âw‚>![|LÔ<¯xÎÏÂ6_tÜüHÓu_xvo ø®úëǾÖlÓMñ7Ä{=V;­\êý…ýŠAÏx‡öÜø¢7‹ugÍÿÃÓ¾>ø¢ÓUÿ…жº¦§à¿Ù£âb|;ø™¨\hðÆX´ßjK{¥jÿü;¯¨éÞ –MSMñW‰üŸeªkQü'ýœ~|¹7¾ÑüMÜ~´ð–™s㉟þ'Íá¿ YÍ Ä^ðlŸ¼cãðG†$žÖÂk¿x@èš>¡&“¢½ý•ËhšI³±{û;üÔtýKK¼ða«è_¼3¨Áÿ ŠcûF‰ñÏÄÖÞ1ø§eæÅ­¤ÑÂQâ;K}Gí0IÞ‰åý÷Eƒ½«vâx“ÂÚüO˜fUxG‹Ê1¸˜Vú¬ÿ´2ùCÚO;¯Š«C „ã Z¥JùJy¶3 (as,NŽ\±| ,>YÄôò˜`ÿµéá±t§†…,E)a±Nž•ºZj¦+%QŸ;¥™W¥í°•kÂu°´êâëÆ*?ž|AûjÝx>mKÅþ*øUöO‚xƒãW‚¼#ã=+Ç1êß¼Eã?žñ߈|Ik¨ü/›Âºf…áß ëéð³âŸá={þž­©\^iþxgÖ~ ¸ºÑ1¼ ñÏã-ŸíA'ƒþ.xÃþ?ü9ðgBÐ<)áŒ~ ø‰áï%ï†ÿj¯ê(¸:ÇÂÿYGâ_þµ—…õÝ+FÓ§´’Þ×IԗƼZu¾š¿D¯ì·ð+þÝÆsøïµA⸵mUñW5‡¦çÇšYÑ|q¬é¿ µO]ü1мOã=&[Ý;Å~,м!¦ø›ÄVšÇˆaÖ5kÄñ¼5fÛö1ýŸ­mn¢‹Cø€úÔž•|cuñããÝïÄ­5üŠ­<3ýñNóâdÿ<4š^›ãh‰‡üU¦Gsáßê~½[ á´ñÑO?ðŠž_˜á)pæs‡Äf9rÙbÖ¶.®óXªxì:¯Æð£¸*4(\Šu#†©WÛAÑöµ1YrrÄÖÌóõZ–òÖ¯ûhë¾ø“ñY²ðW‰¼Sw«Iàï…^økg{ñ/Äú>&ðÅ?ÛBñ‹îì¾ü-ø«ã}2øgàÇö†£/ƒþøÃSŠî?é:Éÿ„{K¾ñnõŽ›û@ë×_³©øó©|(ñ/‡¯txîµøÄvž3ð®·¤x{Ã^*—Fñlj4k/|<ðÇõM>ËÃZ~¯ãŸÚx‡áïƒ5¯èÑi÷Ú_„nµ‡þÎXcßÙæ×C¸Ð,|ªi¶ó]iš„Z®•ñân•âý/VÒð•¿‚,dñ¯ AmfÇÆþ3ñÄ}vö×Ršæ{È5oüB×¼OâÍmÝÍCXÖï­—“§Ú˜l-­­¢óøŸ>ðÇOS!áœâ8Ì6u–š<=©j¾0OŠ×ž0ñxºÛHÕþø[á/Œ|e¢i Óþ&_¿ÄË» ?xËÃöþš_ |<ñ­Õý݆‡î:§ìÅð_Tð—€|‡¼Aáí+á}½ÝŸ5/|Hø›ðïÆ¾´ÔàXu»X~#ø Æ>ø…ymâFŽ ÏÛê^(¼‹Åz¥­ž±â4Õ5[+[ÈuåøðÆo x›Ámaâ¸ô¯jþñˆµ;‰ßíÑ<=âþ$ZøÆˆv ²Ó¼ áhæ×4ßY꺕Î6¡ª]Þꦯu¥<ëÂ:X<ºú¥œbq”q*–cŒÅb1Š8¼<ÿ 8âéaðœQ……ÇÃ4q4ëáã(à©çªª„Öa«á&XN,ž&Ui‚£…9TŽŒ)Ê¥Dðø©ýYW¯–ÔöØZ8Ú˜jT±2§J¼ðyªÐx¿i,GÉþý²|]ârÓGð·ƒüãøÒh^ Ð|ñÿÃþ)øúÍö½ûG?ˆ5Èþ/蟓Åö¶~ø©^kqá?jé¯Á–ß<-©XxŸ]ÔÐþÜ><¾Ðüw¯xwà.‰¨[|ð-ÏŒþ5Gª|c“G“C¹ðǾ0|;øƒáŸ‡Ÿgø]¬jzV³ðk^¾ð}î»ÿ ëFñv}e6³àm@6šÿB7ì‹ð ´›+þ-u&º\Éâx¾&|S‡âjÞÖ¼aâ ÄÖ¿áñª|F²ñšê_#Öuûíc_×õ-LÅwv/ˆ|sÄUÂpVgRøü­ápø©fiÓËiO Ò5+`øÒJ¸8ÕX*.Œ«ÇŒÆæøšX¿©àyéeÜ`ýœ+gt)ÆXZ‘¯^‡Õ'R8™Vs„èÐÄdRƒš‡$~±*°ÂÆ>ûuåÆŸ«Ýê×p4?eðö±ªÅ5¼s‹‹´¢ŒÈ[÷.§®iÓùÈ¡]ŒpÉÙ,ÌâDJŸÛº§ý ž%ÿÀ¯ÿóY]"Ɖ "*¢Œ“…PFI$à2I'¹&_Œ;]Ûk»_{t>Ê›’„E TQ;\Ös²ækU£w¶‹G²éÍnêŸô&x—ÿ¼ÿÍeÛº§ý ž%ÿÀ¯ÿóY]-‹ºþXÿäßü—õwånkûwTÿ¡3Ä¿øàÿþk(þÝÕ?èLñ/þx?ÿšÊéh .¿–?ù7ÿ%ý]ù[šþÝÕ?èLñ/þx?ÿšÊ?·uOúe-Æå·}BM+\Ô§²¶šp–ßmžÝlážxæx@ã®®kÆò'ø³þÅ­wÿMwT6m'«Jé»ëe}[_‡én–¿¿à£ò"~Õöz¿²Çþ±+÷Ö¿¿à£ò"~Õöz¿²Çþ±+×ÉÞ¥þ _ú™…9«ü üKògÝß±‡üšŸý™WüƒÿT¯Œ+î/È.×þÆ_êa¡Wÿ±‡üšŸý™WüƒÿT¯Œ+î/È.×þÆ_êa¡W.aþõ/úõ†ÿÔZ&˜}©ÿ‹ÿoe/[ý»Oðî–÷Z•¥¶¹ñ;à߇µ)t[Tе4|[ðN‡­YÛë%柫iÿÚN¡{a5ÆŸ{kt°\Ê"ž6mÃê?øe¯ƒßóïñ'ÿÇÇþy5ó'ŠúøþËGÀý^käŸÛ¿ÆŸðN]Köáø/ð¯ÇÞ&ý“¾~Û¶š·À‰7¿´OÆŸ|5øgñ“á'Â|SŸÄø{ð ž9Õ4¯x‡Ç¿"ýŽi¯€?¼_ñö•ý>|2øsû\|BM;Wý¿>ÿÂÙý—¾!üSø/á/Ú'à~øßáçÄOŠŸ³†™¬h$»ñž¹àÍJoÁ¥âo‡Z~±àûXIitÿ¢ÿ±¦®¾ ý’ÿfÝu>øgà;ÿóÉ£þkà÷üûüIÿÃññßÿžM}E_ÇÐf/ÿ +ò~Kî©á?è ÿ‚)ò>Kî>xÿ†Zø=ÿ>ÿðü|wÿç“Gü2×Áïù÷ø“ÿ‡ãã¿ÿ<šúŠ>¿Žÿ Ì_þVÿäü—ÜSÂÐ.ÿRÿä|—Ü|ñÿ µð{þ}þ$ÿáøøïÿÏ&øe¯ƒßóïñ'ÿÇÇþy5ô=}ÿA˜¿ü(­ÿÉù/¸>§„ÿ \7þ¥ÿÈù/¸ùãþkà÷üûüIÿÃññßÿžMðË_¿çßâOþŽÿüòkèz(úþ;þƒ1øQ[ÿ“ò_p}O ÿ@¸oüKÿ‘ò_qóÇü2×Áïù÷ø“ÿ‡ãã¿ÿ<š?á–¾Ͽğü?ÿùä×ÐôQõüwýbÿð¢·ÿ'ä¾àúžþpßø"—ÿ#ä¾ãçøe¯ƒßóïñ'ÿÇÇþy4Ã-|ÿŸ‰?ø~>;ÿóɯ¡è£ëøïú ÅÿáEoþOÉ}Áõ<'ýá¿ðE/þGÉ}ÇÏðË_¿çßâOþŽÿüòhÿ†Zø=ÿ>ÿðü|wÿç“_CÑG×ñßô‹ÿŠßüŸ’ûƒêxOúÃàŠ_ü’ûž?á–¾Ͽğü?ÿùäÑÿ µð{þ}þ$ÿáøøïÿÏ&¾‡¢¯ã¿è3ÿ…¿ù?%÷ÔðŸô †ÿÁ¿ù%÷<Ã-|ÿŸ‰?ø~>;ÿóÉ£þkà÷üûüIÿÃññßÿžM}E_ÇÐf/ÿ +ò~Kî©á?è ÿ‚)ò>Kî>xÿ†Zø=ÿ>ÿðü|wÿç“Gü2×Áïù÷ø“ÿ‡ãã¿ÿ<šúŠ>¿Žÿ Ì_þVÿäü—ÜSÂÐ.ÿRÿä|—Ü|ñÿ µð{þ}þ$ÿáøøïÿÏ&øe¯ƒßóïñ'ÿÇÇþy5ô=}ÿA˜¿ü(­ÿÉù/¸>§„ÿ \7þ¥ÿÈù/¸ùãþkà÷üûüIÿÃññßÿžMðË_¿çßâOþŽÿüòkèz(úþ;þƒ1øQ[ÿ“ò_p}O ÿ@¸oüKÿ‘ò_qóÇü2×Áïù÷ø“ÿ‡ãã¿ÿ<š?á–¾Ͽğü?ÿùä×ÐôQõüwýbÿð¢·ÿ'ä¾àúžþpßø"—ÿ#ä¾ãçøe¯ƒßóïñ'ÿÇÇþy4Ã-|ÿŸ‰?ø~>;ÿóɯ¡è£ëøïú ÅÿáEoþOÉ}Áõ<'ýá¿ðE/þGÉ}ÇÏðË_¿çßâOþŽÿüòhÿ†Zø=ÿ>ÿðü|wÿç“_CÑG×ñßô‹ÿŠßüŸ’ûƒêxOúÃàŠ_ü’ûž?á–¾Ͽğü?ÿùäÑÿ µð{þ}þ$ÿáøøïÿÏ&¾‡¢¯ã¿è3ÿ…¿ù?%÷ÔðŸô †ÿÁ¿ù%÷<Ã-|ÿŸ‰?ø~>;ÿóÉ£þkà÷üûüIÿÃññßÿžM}E_ÇÐf/ÿ +ò~Kî©á?è ÿ‚)ò>Kî>xÿ†Zø=ÿ>ÿðü|wÿç“Gü2×Áïù÷ø“ÿ‡ãã¿ÿ<šúŠ>¿Žÿ Ì_þVÿäü—ÜSÂÐ.ÿRÿä|—Ü|ñÿ µð{þ}þ$ÿáøøïÿÏ&øe¯ƒßóïñ'ÿÇÇþy5ô=}ÿA˜¿ü(­ÿÉù/¸>§„ÿ \7þ¥ÿÈù/¸ùãþkà÷üûüIÿÃññßÿžMðË_¿çßâOþŽÿüòkèz(úþ;þƒ1øQ[ÿ“ò_p}O ÿ@¸oüKÿ‘ò_qóÇü2×Áïù÷ø“ÿ‡ãã¿ÿ<š?á–¾Ͽğü?ÿùä×ÐôQõüwýbÿð¢·ÿ'ä¾àúžþpßø"—ÿ#ä¾ãçøe¯ƒßóïñ'ÿÇÇþy4Ã-|ÿŸ‰?ø~>;ÿóɯ¡è£ëøïú ÅÿáEoþOÉ}Áõ<'ýá¿ðE/þGÉ}ÇÄŸÿgŸ‡¾ð—¹ø‹£ëšß‹þøÏ[_õ94$øñ3Â?ïuÛ ߉/§ÝjÚ%‡‰®µ]-R Ý%µkK/ím7SÓEÖŸsCþûáŸýOÚ[ÿö·ÿÊúúãçüˆÚý–ŸÙ·ÿZ'áe~~Õ_?à Ÿ~.7ÇÙR½ý¡< ã¿ èÿ |Cû1xÊM6ËKøqã6—S±øuñ{À·úRxváü9‹¼E ÇÆÖ5UÕæðä—g^ñLÒü+â_Ùë¶…|­8âñoÙÔjn5jNJ.0³³““QqwQM«ÞÚð¸5$ž ®•¯FšWMrËD·kkv>õýª¾i >øÏâ_€¾3|~xIü=,vz÷ÄýPÒï­uïéž9ã€i·Kf|A­g,7@Í:n¡¹±šêÞOTñŸü‰þ,ÿ±k]ÿÓ]Õ|¡èÿ|ûüXðoíñ³_øññRëOÓº?á¨Gý¿øð?ÿŸ]xGöî©ÿBg‰ð+ÁÿüÖQý»ªЙâ_ü ðÿ5”¯‡ÿ ºðíÝSþ„ÏÿàWƒÿù¬£ûwTÿ¡3Ä¿øàÿþk(¾þ€ðÿø/ÿš¿«¿+V«ÿA•ÿòËËþ¡¿«¾Ú{¿ü5ÿ¢ñ£ÿ¾ÿóë£þ„Ñ øÑÿ_ÿùõׄnêŸô&x—ÿ¼ÿÍeÛº§ý ž%ÿÀ¯ÿóYEðÿô‡ÿÀñüÕý]ùXúµ_ú ¯ÿ–^_õ ý]öÓÝÿá¨Gý¿øð?ÿŸ]ðÔ#þˆ_Æü øÿÏ®¼#ûwTÿ¡3Ä¿øàÿþk(þÝÕ?èLñ/þx?ÿšÊ/‡ÿ ­Wþƒ+ÿå——ýCW}´÷øjÿD/ãGþ|ÿç×Gü5ÿ¢ñ£ÿ¾ÿóë¯þÝÕ?èLñ/þx?ÿšÊ?·uOúº?á¨Gý¿øð?ÿŸ]xGöî©ÿBg‰ð+ÁÿüÖQý»ªЙâ_ü ðÿ5”_ÿ@xüÿÍ_Õß•«Uÿ ÊÿùeåÿPßÕßm=ßþ„Ñ øÑÿ_ÿùõÑÿ B?è…ühÿÀ¯ÿüúëÂ?·uOúºðíÝSþ„ÏÿàWƒÿù¬£ûwTÿ¡3Ä¿øàÿþk(¾þ€ðÿø/ÿš¿«¿+V«ÿA•ÿòËËþ¡¿«¾Ú{¿ü5ÿ¢ñ£ÿ¾ÿóë£þ„Ñ øÑÿ_ÿùõׄnêŸô&x—ÿ¼ÿÍeÛº§ý ž%ÿÀ¯ÿóYEðÿô‡ÿÀñüÕý]ùXúµ_ú ¯ÿ–^_õ ý]öÓÝÿá¨Gý¿øð?ÿŸ]ðÔ#þˆ_Æü øÿÏ®¼#ûwTÿ¡3Ä¿øàÿþk(þÝÕ?èLñ/þx?ÿšÊ/‡ÿ ­Wþƒ+ÿå——ýCW}´÷øjÿD/ãGþ|ÿç×Gü5ÿ¢ñ£ÿ¾ÿóë¯þÝÕ?èLñ/þx?ÿšÊ?·uOúº?á¨Gý¿øð?ÿŸ]xGöî©ÿBg‰ð+ÁÿüÖQý»ªЙâ_ü ðÿ5”_ÿ@xüÿÍ_Õß•«Uÿ ÊÿùeåÿPßÕßm=ßþ„Ñ øÑÿ_ÿùõÑÿ B?è…ühÿÀ¯ÿüúëÂ?·uOúºðíÝSþ„ÏÿàWƒÿù¬£ûwTÿ¡3Ä¿øàÿþk(¾þ€ðÿø/ÿš¿«¿+V«ÿA•ÿòËËþ¡¿«¾Ú{¿ü5ÿ¢ñ£ÿ¾ÿóë£þ„Ñ øÑÿ_ÿùõׄnêŸô&x—ÿ¼ÿÍeÛº§ý ž%ÿÀ¯ÿóYEðÿô‡ÿÀñüÕý]ùXúµ_ú ¯ÿ–^_õ ý]öÓÝÿá¨Gý¿øð?ÿŸ]ðÔ#þˆ_Æü øÿÏ®¼#ûwTÿ¡3Ä¿øàÿþk(þÝÕ?èLñ/þx?ÿšÊ/‡ÿ ­Wþƒ+ÿå——ýCW}´÷øjÿD/ãGþ|ÿç×Gü5ÿ¢ñ£ÿ¾ÿóë¯þÝÕ?èLñ/þx?ÿšÊ?·uOúº?á¨Gý¿øð?ÿŸ]xGöî©ÿBg‰ð+ÁÿüÖQý»ªЙâ_ü ðÿ5”_ÿ@xüÿÍ_Õß•«Uÿ ÊÿùeåÿPßÕßm=ßþ„Ñ øÑÿ_ÿùõÑÿ B?è…ühÿÀ¯ÿüúëÂ?·uOú1Þ_iú~·sá˜ô{½RÒÃR¹Ò ¾}J/T’ÕtûŸ‹¾Õñ«þÓVÿÃÃðïÿ‘kê?íÝSþ„ÏÿàWƒÿù¬£ûwTÿ¡3Ä¿øàÿþk+¦†28hÊ4°˜d¤ùåŒnöKþ‚×b%ƒ©&›ÆWÓþÀ»§ÿ@ß«í§Æ¾;Ó>;øÃÀ>3ð-ŸÀKÍ!|i¥éº]Ö­sñCÀ³XC¤x£Ãþ1·k}>+$M%æ¥á‹ 6i$¾E´±½¼½Hnî-¡´Ÿì¯ÿÈŸâÏûµßý5ÝQý»ªЙâ_ü ðÿ5•‘®Mâi·:—†ï´‘¬Å6›}«kW:¶šn›wo4W×QZéõõíí÷’L6ÁmíÍÔÑÍuu¼2,“‰ÅËEÒ£IBu'û¯lÜ¥V4¡''Zµ]£F *<©jÝÛÓL6ØU•GZ¥W5J-Ôxt£R©%ʨӥ«udåÍÌÝ’V³¿y__ðQ¿ù?j¿û=_ÙcÿXÇÆ•ûë__ðQ¿ù?j¿û=_ÙcÿXÇÆ•Ù’ÿ½Kü¿õ3 þþ%ù3îïØÃþFÍOþÌ«þ ÁÿªWÆú_Ÿ±‡üšŸý™WüƒÿT¯Œ+î]ßÚhÒ¶™q¥õÕö¥ÛÞMn.ÒÍõgOÒðZ´‘%͉|×Å+ù/4Q¬Ë$Eãn\Ãýê_õë ÿ¨´K¢¯%»m}òfÕÍͽ¼÷wsÃkik ·7WW2¤öÖð#K4óÍ+,pà jÒK,Œ©+;°PHño‡´WŸ‹:çöuêRO£Þø‡F×5?…Ÿ|+àx~ÂóO³›]ø}ñž ÐüñE•µm.òÃUð‰|Gaªé…ž»¦\^h·ß¶‡Ä…ã„ÿ>é^ Ö¬µo|3ñŸ€­uýg^ñ¬–ž(ðÝö‰·5Ÿöœq$ö·7QÞÉ&—…„–+)-VM£æOÜü{ø½ðTø[©~ËÞ*ðmΤx>ïÆ·ß>ŸüQ°ðüwãO„u_ xûTñ]îƒñ?Á–>0дÝCâ—„¾iwz5Í–‘ã[M {VµÒ¾«†2 “8ÂIãñô°¸ª¹®:Õ³ü%¥“`qÊ?ÛpÂ…~#¥ÍR»ž ,Æ`'ƒŽ¼f*”3 5Z^NkÆ`ëá#…§:”§KRªŽYŽÇÏVƒÂû :Ø:±¥–OªVŒqy„g‡rp’% M¾ú¯ñOÇ=+ôo„ö>ø‹ãMfçMðÖ·âÍgÁZF‰ªè_ 4?ø‡S𯃵¯E{â=3ÄÓiÞ ×4-~;Á^ñ‹øsNе?øÎ? xn(µy¾øsûÁâµçÄ_ÙÇÃ^ø=¯Ç›ÏþϾ0ƒá~¹áß… â¥ý-4-óÀþñ‹>Aqâ¿ø â‡Å :ÇÂw^#ðï…ïuøµKGHñ†£=¬Úì_â;¹¼ã}à߃¯~.xkáïüêÉ~"kvßõÿhþ2øAñ"öWñøÂïR¸×n5-Àvº®­ª[ë%üc£ØXèZF¡®(ì ûø}„ÄVYŸáñÖÂaa¡•R¡C›f³Ê躘œÕŽ-äøZuóÖX:õ0X*¯‰£W?ʾ»âbs®!¯‡®°y$°óŒ±~Ç:¸ôåý,¿ÜpØŒƒÚ{,Ά"¶êPUç:XˆB:ÔÕJ_®tWóñð·ÃZ?Œüsá­à÷ÁÏ x‹ãGÀÿ隟íñ á÷ŽÿgŸÞ|tø…à¿ÚWöwñ¶­w¨üAðŸÅ?x•|iãåøoñ#Zð6ûKKð¿Z½»šþÒí´ˆ4¯]h?oxàGŒüûJjÿ¾-| ð¼ÚßÄ_xGBø…­ü;ñeÞâi|#û!éžÖ5ÁÞ,ñ††ž"³Ö¾ø×PÒîtëÝv? j: ®­e¬[_\hW·&yáVQÃóÄ,ÃðT#‡Êól{ÃÕ£‘C5­[ìe”áð¹T8¶­lE £R®'Š…KÑ¡N1­‡úÝG…¦`¸³öÃdµçV9†_€§–”±T\d±Ø¨eR£„–T燆1Eâ(ÍÖ”ð¸šô©ª•?Aü]â½Àžñ|Wý•០蚟ˆ¼A©ý–öûû?FÑìæ¿Ô¯>ŦÛ^j_f´‚Y~Ïeisu6Ï.%•• í;X³ÕfÕ ´RFÒ/¢ÓÑu*ÚyæÓtýU%ÒnõK ;]{Oû.¥mêºÚŽ—£þ-âjúV©cgø» ~È_¼Aÿ äêÿÓÂÚ‡Æ_Ù»ãG†>!i:¶ƒû#ø7á7‹~;kZïƒõÿ_x7Jøe¨ü@ñ…­5Uñ}Ï…|qûCk~'ø‰ Å#Üß¶ªë:´º·[qû4ëžv§«jÿ± ñoÁkßxÚóDý”Æ¡û:Ø k÷Á_€~ð‡Äá)¾%Áð=‡…õüMðȸ´ñ”ž)ð¸ñü$>ÒuÕ5)¡è©á—ÑO üKÉñXÈÓÅV–'Šá§’§G,6’Ì8Ÿ.SÆV¯ý©J*c(àgFJøŒNn8|aOˆóšµ¯þ®b¨aþ¹W ½½<ÅÖ*xz5¾½%G-¨¨á”±á(¸ÔÄT•E<,mxU¥‡ý‰¢¿*|ûøßHÐ!ñG|%¢ø×ö„ðïÆ¯ÙWYÒ>/O©é:‡‹žð‡ìßᯌZç† é°K¯£k ªéÖ÷?§Wž°¾¹’êkq%—få³ñ?‰4ûa²5|»=?V¶´‡*€¿•y’–MÒ»»~wÅ9M‘Ï Ÿ‰püFªJt±U0øj8jtkSÁe˜Î|?³ÌqÕq*’Ìjahâq4²úòÄåøÚU0t§Fq·”f8ìÁNXÜ®yd] U¨©Õ­R¤œñXü5J5©ÖÁàýZqÁÒĨÆUœ¨c0󒦥mÊ+šÿ„OKÿŸ¯ÿágãþ^Ñÿž—ÿ?^%ÿÂÏÆü½¯“=¿w¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—´Â'¥ÿÏ׉ð³ñ‡ÿ/hw¼¿ðÿÉzÿON–Šæ¿áÒÿçëÄ¿øYøÃÿ—µ‡â=´Mû^Ñ5mrÓPÐm®uˆÒÿ]×u½;PŠÂÖy®4ÍCNÕuKˆ$¶½€<^|ÞòÎ"îÚá^ $›I7w¢ºÒîÛ´Ûü?àz ~ÁFÿäDýªÿìõeýcWï­~ÁFÿäDýªÿìõeýcW¯’ÿ½Kü¿õ3 s×øø—äÏ»¿cù5?û2¯ø'þ©_WÜ^,ÿ]¯ýŒ¾ ÿÔÃB¯‡cù5?û2¯ø'þ©_WÜ^,ÿ]¯ýŒ¾ ÿÔÃB®\Ãýê_õë ÿ¨´M0ûSÿþÞËÚî»§xsN:¦¨o~ÍöÝ+MŠ-7JÕuÍFïQ×5[-G°°Ñô;-GVÔou[Q²°µµ°²¸žYî#=»˜fÂVèFøÑÿ†ã‡ÿ;Úÿêðø{[Þ3ÿ‚ƒhø—ñGÂÚßìÓûNMðàÄü6ø»ûTèºwÀsàwÃÝsÄ> ð?ŽUñ†ôÏw´Àð^¥|EðªøÏÇZìñá?Ásªx›Äú¾—àO ø“ÅšO:t¡JµlEyÖj4ëF”!F•l· •%,=XÓŒ±yž í*T„lN’÷ê%,&ñ.¥og:1¥F•5*3­Vu*¼\œ)BŠs«?e…HÒ¥J¥^ZujYÂåÁÿ„¬ÿÐñ£ÿ Çþw´ÂVèFøÑÿ†ã‡ÿ;ÚúkUý®ÿe-Æÿ¾ê¿´ÇÀ ‰ßüªüMø­ðÒããÃȾ!ü6øu¡èö!Ö°ý·>xÿâ§Ž´ýJ/¶™á_x7Wð·Ã!àŸÚ ÂëÅ~Ѽqð7Àú§Æ3àïkvŠ|y¬^^Û$¹Ñ¯‡ÄK’†V^Ë Z*ž*œJxºõðØYR¶÷¿X¯„ÅÒ£\òœ°ØŽTÕ ®.¥.øw ëPG®oñ6‰ÿ/‹-¼Ga§é:Ö«áŸøFüE6§£ì-J(ð[öÃýŸ>>|RøõðSáÇÄk?¿fßÛx7⟀íð¿ˆGˆ?áмK«xŽË‘^øšOɬxGÐxßÃ>-ð÷Øüí¦œŽ# )ÊœpÕÝHáëâÝ?®RSú¶¦ž&º‹Âs:t'‹Ãª²Iªj¬e+EJIN8ºp…J•ðÑ…JßWŒÞª‹®î•'/®Z3›ŒãN2iÔœesNKç¿øJÏýß?ðÀüpÿç{Gü%gþ„oø`~8ó½¯MøUûhÅñÆzM§ƒfoÚhü ñ&¡â=;µƵ¢|Ñ~x˜øgOÖ®®u›?^üiOÚgIðf¯áí_EðŸÄOþÎþø{ã —F×ü3âSÁ0ðOŠüIÖé·WìG­ü9Ô¾1h¿¶7쯫ü#ѼEªøCXø§¥þП /þé^-Ð|=ÿ v¹á}KÆöž/—Ã6>"Ѽ)ÿ>«¢]jqjzw‡¿âuym›þ“RñXXÓYaëÆðë_›J2ÃaùÕ?k‹„°jxH©Ù5‰).zm«NUìñ¾Òt½¥xWxf¾¥^Ó­QÊgõ¾JötkÅÊŒªEN†"Ÿ7>´aà¿ð•Ÿú¾4áøáÿÎöøJÏýß?ðÀüpÿç{^mûWÁ]?g߀^.ýž|ðëâ7ì›ñCWøÿà{ãn…ªüAýµ~üð>±ðG@Ö¼1áË=_áoµÝ?Æ>ø•ñ+↷ây,¾x*ÿQð€¾"¯‚þ$Ýê_<kàË™o>ÕÖ?mØ÷ß5ß‚¾#ý«f¿|fð¶‹yâ?|!×>:ü-Òþ'øg@Ó¼4x?ÚuŽ­­ø—ÆžÄÿð’xSBÒôíSK¼¿Ö>üð¿ÀÝ/À üwâoŠ~3øéðOð§ø§­hÚo¾!ê:GÅ}q¾øç@ñŠþ×ì>/[x&÷á1Öþ:ü.ÒGÅ ?‰ktÿ.þ›ÿÛÿÂkmñ,o_Á3økûN/-ÓhO~-å)ÑVt¨Ô©J®ѯC V?[¤ù18¦–ƒqÂ8û\WüÃBîX„â試›Ê/(*«†tÝ:•yþ«UCÙÑ9WŸ3ÆYF‚©nïjš^Y&œ¿á+?ô#|hÿÃñÃÿíð•Ÿú¾4áøáÿÎöºOÛÓö÷ðìG¦|Ò5]kà=¿Å?Ú'â\ÿ ¾è´Oí£~Ì ô_ k2ñŠüoñN÷Á_õŸx_BÒô‹?Z]øánµ_‰~8øeày­4¥ñ¤Zæìþý±ÿe?ÛüBK_Úöh¾Õþ jº…¾:éþø÷ðãÄ6ÿ¼m¯j—žÓü%ñ î=fÊ뮥â/Wðî‡eã 3Ã:¶³ªiw–0i1j6×V6ùG„•*•Öº£F¤éT©,](EN—Õ•Wls§JxÌ-*µ ¥F–#GRq¯8ÓzÔ£¥,<'R‚–' OFØJ²S¡W‹ÀÒ“”q’9VÅeøêTiTp­WêÕgNœ©ÁÍüéÿ Yÿ¡ãGþŽüïhÿ„¬ÿÐñ£ÿ ÇþwµõÏh†ø®þÒ¶~ ´øðŸKørÿtMáž¡£xʈ>ŸGMkò|9Ô,uXôÜxÚ >ÛÁrÙkI¦x‚ïVÒÖÛR[{ĹIíõû"iŸ~üxø©ñ÷á/ìñàŸ‹Þµñg†#ý¢~)|4øG«[¡“O±Ö´Px—ÆhßðøK^Ô­¼/â«MZÖ,´Ï²éɨÝyö’ÜÅa)T©F¶½´§NœéVÅÓ¥SÚUuÔiÆ0q”ç…¬ªÂ R Õ5YSö´}¤F8¹ªr…|=HÕ…Z•<-Z‘t誤å(c$¡ b)¸Jn*ªstœÕÜžCÿ Yÿ¡ãGþŽüïhÿ„¬ÿÐñ£ÿ ÇþwµõEÏíSû0YüZð·À+ÏÚ?à-¯Ç_h¶ž$ðWÁ[ŸŒ`øµãß麆³c¯x[áľ"OøƒE½Ò4WU´Õ4îÆãMÓ5 èg{[;™cùãâoüÇö:øuñÃÿWöýšu©ôω¾(øqûB_Ú7ávŸ7ì¼|1ðÇâ¿gÕþ2é£V¾u¿…w¾›Nñ½×‚Íž«{u+ßKw£Í¤]¹bp±¿>¼-Täç‹¥¡“Ž:rrÂ%`åG&ÔpÒMVpqcPÆJ©ØyB0£7(á*Érâ)ζÖÆ>g‰§N¤ð±åˆQ~ÁTjÏžÿ„¬ÿÐñ£ÿ Çþw´ÂVèFøÑÿ†ã‡ÿ;ÚúOUý±ÿdM ÓàÞ¡­þÕ?³†aûEµ¢~Ï—º¯Ç†:}§Çg¿¹Ò¬ìWàÝÍߊ!‡â{^ÞkÚ¥¢ø%õÃss¬éPB]FÍ&á?j¯Úç_ý—%ð¥Ä²Oí+ñ÷Ã~+×<á¼aðKYý”lôMǼq¦|<ðWƒu‹µÀïS]ñ&·¢Âš¦‘á_ÂZm¦¥Þ³âM:;m@Y‡R£©ã±ßìê*5¹ùñüð¤°iÇ$±.µJt#FMMâ+ÐäëÖ¥N¡båMb0œ‘Ã,c“¡(§…wÿh‡65sÒ´*OžÑTéը߳£VQòøJÏýß?ðÀüpÿç{Gü%gþ„oø`~8󽯣ü?ûXüŸÅ_¾|Hñ¿‚>þÒü#/t?Ù;âßÅÏþѱhv¶Úíî¡r¾øñK⇉m4Ë x†þÿ[ðˆ|cá˜,ô=bàkŽšN¤m[áOÛ?ö<ñÞ» x_Àÿµ‡ìÕã/x¯Åwžð¿‡|)ñ×áwˆµßxãNðÕ§ŒõèF‘â›ÍCXñ]ƒïì|Wyáí:ÞçW¶ðÕí¦»5šiw0Ý8ñ8U5aVR”¹#ìñ´j*’úÓÀ¯e(a%ŠXØË SrŒ± ØÅÊ¢åiÇ¢¥:´i§N5𫂝JQ§,<±js…LTgõZu1ž1q£ Õ•¡ 5ó—ü%gþ„oø`~8ó½£þ³ÿB7Æü0??ùÞ׸ë_·¯ì1á·ø£ˆ¿mÙ;A“àv¹eáI­~Ñô·ø?âMOZ»ðÖáïŠ+}ãáþ¹¨x‹O¿Ð,´Ÿ &þïZ²»Ò ·’úÚh”ÿ·ì›Æ€Ÿ øéð³Pñwí;ðÃ]øµð"ÿNøðÖïÃß|/¤ê¾Ó4Èü tž0Ÿµ/Eâ[gÀÉàí#_Ó¼G¡øGƺ…¾¥èå,N¼¨F޽WŠ©ì°îž.”£^¯Õ18õJ”– Æu'ƒÁâñ ›•Zt*:jn6n¬1”}¿¶­‡¤ðÑsĪ˜J°•F½4çV2Æ)SŒ+×£J¤¦’§:°Sq¾¾7ÿ Yÿ¡ãGþŽüïhÿ„¬ÿÐñ£ÿ Çþwµ÷ÇÅ…¶ƒÄ†ëâW€-‡ƒ¼kᆾ.71ðì#¿¼lÞ_xĆME°ükâæñ÷ÃÔþË®ëíã_ *ÂìøGž[ð;öŽOšß‹Û¿þ3øáf…syg࿞8±øqáÿ†¿æÒu›ÏëSü/ðäïþ:6‰c«iÚ€Òü]ñà߀<ã½ O|4ñ|®xoÄzË|<œm…ÄòΜªÆ£ÅB4œ#F†#JÒÁª\Õ(bhU£OŸÚW…zR£Šq¹:xÊpö“«AGÛB‡û¥g'Z§3PPX·6Ò§RU‹(FSªá¹7ÂVèFøÑÿ†ã‡ÿ;Ú?á+?ô#|hÿÃñÃÿíz§m¯ø+ãœåøañÄ>°ñïÿ„¿h Z|3ºø/ð‹ãÅÍ7JÕ>ü-ø£ñ?KøÎþ$ñu¯Šþ´Z·‚>øÓÀÞÿ…¡ài+“êÕx|S«SŽ1ÅÆs¡ˆ§£n¨Ö£QF­_›¿ð•Ÿú¾4áøáÿÎöøJÏýß?ðÀüpÿç{_¤TQõœ/ýâ?ð®Ÿÿ1úÿKUË‹ÿŸøoü%«ÿÍž¿Ò×ówþ³ÿB7Æü0??ùÞÑÿ Yÿ¡ãGþŽüïkôŠŠ>³…ÿ |GþÓÿæ?_éjrâÿçþÿ jÿóg¯ôµüÝÿ„¬ÿÐñ£ÿ Çþw´ÂVèFøÑÿ†ã‡ÿ;Úý"¢¬áèÿ…tÿù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-7á+?ô#|hÿÃñÃÿíð•Ÿú¾4áøáÿÎö¿H¨£ë8_úÄá]?þcõþ–§./þá¿ð–¯ÿ6zÿK_ÍßøJÏýß?ðÀüpÿç{Gü%gþ„oø`~8ó½¯Ò*(úÎþñøWOÿ˜ý¥©Ë‹ÿŸøoü%«ÿÍž¿Ò×ówþ³ÿB7Æü0??ùÞÑÿ Yÿ¡ãGþŽüïkôŠŠ>³…ÿ |GþÓÿæ?_éjrâÿçþÿ jÿóg¯ôµüÝÿ„¬ÿÐñ£ÿ Çþw´ÂVèFøÑÿ†ã‡ÿ;Úý"¢¬áèÿ…tÿù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-7á+?ô#|hÿÃñÃÿípz§Çï†Z§¢kWÞ,Ñõ.X!ÔôSá‡Å ?SÓ¦¹²µÔ­¡¿°»ðt7v’Üi×ÖWðGqo-•å­Ôa ¸†Gý^¯Ïùÿi×Ã[ïügø…àï…Þñíñ§ÃÖú犮 Ó-u?ø·öšø¥áíÕî £Jë ƒ]꺌Ëö øOCÖ ü1ñ߇ôr(%ŽKQÔíµ{MÛn¬¡ue\ïøjßÿÑý¶ÿñ^ß·?ÿCÕEðö ðWìûx«ãŽ<'ãßé:íƒû`èú†ƒðÃKÐuŸëþ2ÿ‚|tøk¡Ïg§x‹Äž±Õ”/t‘uëCR]Iû‰eª_[éÚ=ÏÖ“ÿÁ@ÿg_Œº§ÁÛÏ›ü?û:ß~Óþ*øµ«jÑ~ xG᥅ï†R_øJ¶4è>8¸‚çKN—àFÇ_Öõ­.=OH‡Pں˰øœF깎"XLn//­^–…)bpn'7ĹBYMoªÅå˜,^aN5«Îøz5£ µjR¸°õ3\M &"8Œ %ÃÐÅá°ï+ÆW«*XœVNç Ò›ÅN–+…ÃW1Pž"•J”èÓ©åøjßÿÑý¶ÿñ^ß·?ÿCÕ5¿jÿ.1ð[öÞ|çîÿÁ=¿nA®ÿÙõ:öÆzãŒý—âoÛóö2ð§ÁmöˆÕÿjïÙ²Ãà‡‹/µ-Àÿµ/¿ 4Ï…>8ñ.˜u¸®<3áOˆ÷^)׵ļðæ½e6™¤j—ú„:.¯ÚtËÈáøâ7ü_áO‚þþÎ^=X~øGâ¯í9â_øOÀ^ý ¿kŸ†ß¾éZ‰>økö†ñ^³ãOŒZ…ñ_Å~ð§„|5âÁ–Sk_¬ügâ_‰+øk¥7t/ üLð¯n¡<§‰¤²¼ßÚàêà(biÿiáUJ5³*³¡‚¥(<™Ô«:S”ãÝ _¿Ä*T% ¡SÍš„¾½–ZxlËòÌLT°¹FX¬Êºo:_»ÂÑ¥UÎ_j¤eFŸ=hºf—ü5„è‰~Üø¯Û‡ÿœðÖ>ÿ¢%ûpâ½ÿnþpúUáO? |[mà%Ò¾"ü9Ö5o‰Ôü_àë |AÐ4𯆵h6ZŸ‰t­1lìÛ\Ðÿ´¢ÓgÕìíŸÒ?á µÿžÿSÿЧ%‚‹ÿ‘njÕæ”£›`g {:“¥7 Ée Æ5!89BR4d“ºdGûRQ„Ö7.Qœc8ódøè7ZÏ–YÂ’êš’N.é¤ã$~Qè?µÃkÄ^ð¾¡áŸu?_ÿdxrããGìÃûEü ÐuÍhÛOw…¥x«ãÂÿøcP×î-í§’ËB³ÕçÕõG§Ù]K„>Ïã?ùüYÿbÖ»ÿ¦»ªÙÿ‚ƒ_Zj³×‡Šª¼öŸµ§üò{i[cËl×?··ìÕ¥]=»ä¼/q§jWº|ïS-íݤ… ¹š7ÆñŸü‰þ,ÿ±k]ÿÓ]Õ,M + ‡ÅЧ‰¡µñXiPÄÖ¥ˆœg…§„«ícV– J‘ÆB*›¤åR”½¤•E {`kâe‹­…ÄÏVtiàñ«‡¡W  MLM?g*Uq8©sÂXIKÚ*©J5cgMÊ}-~ÁFÿäDýªÿìõeýcWï­~ÁFÿäDýªÿìõeýcWNKþõ/ðRÿÔÌ)Ñ_à_â_“>îýŒ?älÔÿìÊ¿àœú¥|a_qx³þAv¿ö2ø3ÿS ¾ýŒ?älÔÿìÊ¿àœú¥|a_qx³þAv¿ö2ø3ÿS ¹s÷©׬7þ¢Ñ4ÃíOü_û{"ñ__Ùhøÿ«ÃáíyçÄÙƒö½ñ¾½ûjüÓ´Ù·Ký˜ÿmoÜ^ø¯ãN¡ñ‹â†§ñËÁ¼Wð áWÁ‰Ñ¿g;OÙûIð.¯â­gMðˆt¯ x¶çö¥Ótß Kâ­+ÇZŸ…¯»R›’¢éTU0õªÒ©œkâpØŸm‡§YT„°xœ.+:P­„Æa%:ôZÔ×´…<\Ô9éÕ§ï9rª§(ü«ð7þ Çñá'í)­ø¯]ðvãï‡Ö?¿iŒß þ/ßÿÁDn»}OÂÏí ÿõimOü»XðÇŠ?cÛ]{H|OðûXñχ¾#i'Ä:d÷Ÿàðމã-^ïÃQyíÿÝý²¾%üøKðEñ·ƒµßøKö.økðZÇûfþÕŸ³Wƒ>üið‡5-#Æ?eø]û>ü,[/Û ¿‚4Û_ ~Ñ~1ðß…ü ¦øJîëGð£'Œ¼_¦jÿ}k|aÿ£ø“ÿ„ÇÀþs4k|aÿ£ø“ÿ„ÇÀþs5<è,2†a†Vþ˳œq’uQO7¥‚»úšt'ã'R¶ êµêV…*ò«í½­JñV´ëK)àk7Ž.5uÁ¾UÄá1xÈÁË)J•zø[ÏYÕÃ{F/ +_êëâ?‹_°í§ñ'ÀZÀ¤ý˜,~xcâgí£ñ'Án>)|X“âäý«<ûOØh:‹~/À©<9ðà|=ñ'Çý?JÖu#â×ÅFñ®‹ ÞøªÏHð}ýÄ oÒ‚Ÿþ+|<øÉûXIâ›O‡:·ÁŽž9ðçÅ?øFñoŠ!ø•§ëðgágÂ/øÅ~»ð,~ƒE³o†oâ]â‹ñJ÷PÕÓÄc@¾ø{ ¾ƒÿ »çÚßèà~$ÿá1ð#ÿœÍÚßèà~$ÿá1ð#ÿœÍDðj¬%N®7R5𜷧KlvS ^µñÂ[wøCðoÇþ8ø©àM?ÂÿgßÚ§ádž~$xsÄ6øðvêßâ–¿ã/Úa4æðÑð–›à†¿ô(´ÿˆþ,Õee¯Ñ?Úßèà~$ÿá1ð#ÿœÍÚßèà~$ÿá1ð#ÿœÍn¡UÖÄbjæZø¬_Õªbq5¡Œujã0¸šØªYƒpÁÂÅ©âk&éBuÍí¡‡Ž&1®ª­zµ©Î”°xˆÑ—×á 4Þ :8lÒxãptá J_V«,.iTö•©Æ„0´ëG|,¾sñ'üÃâþ§ðóÇ>Ò¼Að®ÊçÄŸ?ॿ ´ÍÚ¯Š-´Ûm{öËý¦4?Œÿ îî~Íà™$‡HÑ<7¦ÜÙøö{{Yï4ßK¿‡ì›aaÓÅ*ʦg˜UÍáˆöóÁTÓ ™b*b~¯*S¥ˆP£J¯îé%7,Mfœ£„ÄB«Ì¨æ*WÀΗ4p¿PÄR–X‡ CrÂÞéÑ…JÓ¦½¬©ÎŸ„xgöDý©¾&~ן ÿjŸÚ3Â_²ÿ‚âð.½ð¢þ‡Ÿ >)üEøØúJ|1øIûhø 5í+Æ>:ýž¾ ­ÿˆïµïÚGÂZ®œ«á K°ñ5°Õµ Í;L¸ñ7¡~Ã?µ~±ûgxWã¯Åh¾ ð·~0üvñUŽîÿlOÚ‡Å÷$ø[ñ7á—Å߇Ÿ<  ~ÃW|û"üÖ>i1ð/†õø7ZñŸŒ¾#éþ×¼Yâ?[ø›ÄÞ ƒÄ?Mÿk|aÿ£ø“ÿ„ÇÀþs4k|aÿ£ø“ÿ„ÇÀþs5l :îj¦+ìªá1¸JÔ!l!V9††ZU!…X˜V©B„)ÊTkÒ§:\Ô*Sž4©C8Ô©J’Ââß+À*u'<êS§–K<¹âeQ£S:Ñ…XÔkJ†-5Š£N¹ðÏ€?`ÛOÁ/ð/âEÞû#x£âì³áÙ[Á¿¼©üVø°¿ ¾/Z~Ïk‚º§‹üCã¹gkï|ñ^¹á/Ú3JøƒáHôO‡ãð§‰ü=¬|?¸Õ5­3T¶øoÖ|=ÿ‚büRðïÁoÛÂþ#Ô¾ ]üHý©f[áÅœöw¾"Ô<3à/ˆ>øÓû]ütñ_€l5ëï‡ö:ôß|¯þÒ…¾êÑh0kzî•áRøwáײÑO×_Úßèà~$ÿá1ð#ÿœÍÚßèà~$ÿá1ð#ÿœÍuIW«Ýñ›àω>$xïö\ñ&‘ªi:v™ðW⇋¼gâÓuym«]i!ýŸ>0ü&µO ‹]2öÞãX·ñÄ-PtÔît‹Xô›MFê;¹¯ µÓ¯(¼-ÿÈý£u¨gO üRÓÿe­À߱|øwßxëY²ý¡~|=ýª?g_Ž%ø‹ñcá׈¾ hGÂ/ØxcöpÓ$ð?ÂýÆôGñÿÄŸ\_üVÑôû;}KXû¿û[ãýÄŸü&>ó™£û[ãýÄŸü&>ó™¬pتã°ù…,fë8\NEÎÉB8¬q´°õ¥„囆4ÍpŽœ¯Fts Ó9b¨`1I•Z’ÁÏõþͺ¿ìeÿ ßâ&¡û]~Óß—Áþý›ãøNž3ø}aûü/ð#~̾9ÖIâ±~Û™K˜W«Š©Ï)În¤ÞíªeÔr™WçÂ:¿Ù´á‹…LÞ)ÂTk¬~+ÚFpŸ±…O«àž t#ùÑãoø$×ÅÙ|sâOÿÂ+à/ž ø«¤|MðOÄ_†vÿðQÛÇö Ðôo뿵í1ñßÃr\·ì«àøkãý—ˆ¼ûGÞh¾'ø}ñOÀž²ðG‰ü?ª·†Ô,ô8îmàµ¼Õæ³‹RÔ4ËIn/íüû[ãýÄŸü&>ó™£û[ãýÄŸü&>󙨧‡t–G…Ùù¥ã u޲ÅÐÌhf”œà°ªœá ]¶åm:_¸©Vt¡Bô¯^®"½|E\&%ÔÄá'ƒªù°m{*˜H`%ìù±2•ö:Xz )B…°Ôª{'_ÚU«á?ÿb?ÚÇþ&Øxa~[üøßûQþε·‹¾/Ýø·Æþý¤¼â_Ù×Ã? tË/…:Ãý?ágˆüñþ2¾øáÍ~#j~_ø+ÀŸ|w CðßÅÓh67>-ä|ÿÉñ¿…ü'à9> iš·…¾ÿÁ*~ÞêÞm^Òæ+¿Ø[ã7о$|O—F¾¶¹]?TÓ|BÂç–+i/µæ»ÿ„†ËÂíöù¾¤þÖøÃÿGñ'ÿ üæhþÖøÃÿGñ'ÿ üæjpøE†ÂGK„ú¼qù.bã%Žr–'‡èQÁårsXU8Ɔ]†Áåó7o‡ÁÓ«UÏ[‹Å·[šÅINu1R©^N|ÑŒªN8BЧJ-ÝþÌ?ðP‹OÙ¿á§ìÁ¡h_t|Õ<á«-CáOíÓûKþ̾0ýª~øWÃþ-ðü)ñâ'Â_Ùëâ¯ì‘âyõÓð÷⯈`ø%ñâÍߎuí'Äßõ¯éþ ×õ{Íw¹ý–ÿcÚ7ölÕdëôŸá'‹¬>è¿¶7ÃÏ‹ºf¯ñ“ãV½­h> ý£ÿh¯üuðgŠ|ñâ8ø¹àÛæÔ®5¿|gø%iâ½à^·¥é §Íáϰ[Û|C—ÄÞ*ñæ¥k¯éÞ$øð6ÛFÓu;a¨ê>ø;öVÿ‚m|jýŽ.õÍOöwøWû üñ_ÃÙƒâÀÿ†Þ;ðd~7Òî?mˆw÷ž ½øIñƒöíðŸ‚~ü4Õ¼'®d×$ð÷Œ¿hkÚ·Å_ˆÚ·„üwðòÂãTðç>ÏþÖøÃÿGñ'ÿ üæhþÖøÃÿGñ'ÿ üæjp¸8àêF¦„„”qÞÒÑÆ¯¬VÌ)â°Õq8‡"•jôðÜFYIÎNšÀ*jS©, ¥ Ö6²roRJsËá5ƒSʧR®‡°–-Ð_‰ÄÕä§’Åⱸ¸T†'Š«_ξ#þÈÿ¼Iñ·Æšv€Ÿî?g_´×ìÅûZücñ®½ãßiß¼ãoÙŸKø ŸÃ_‡? ´¿…zƒ¼iáoꟳ»³ã¿üqð.­á$ñOŽ<ÏxÊ-F²Ö¿R+óóû[ãýÄŸü&>ó™£û[ãýÄŸü&>ó™ªXf°Ôð‹…ö4ªÊ´¾½&¤ðy~[J1rµN–,ʲÌ% P¡§7 bªâqŒç‰ÄT•9O’§…Ãac VÃJ°Ñ”}»ƒÅ´ñX‡6ñ8‡ïÕTèÑ\¸|6/Ð:+óóû[ãýÄŸü&>ó™£û[ãýÄŸü&>ó™¨ú”è7 ÿ€ã?ù“ú³ò¼ûz¿ô‰ÿÀ°ŸüÕýYù_ôŠüüþÖøÃÿGñ'ÿ üæhþÖøÃÿGñ'ÿ üæhú”è7 ÿ€ã?ù“ú³ò¹íêÿÐ'ÿÂóWõgåÐ:+óóû[ãýÄŸü&>ó™£û[ãýÄŸü&>ó™£êQÿ Ü'þŒÿæOêÏÊç·«ÿ@xŸü ÿÍ_ÕŸ•ÿ@è¯ÏÏíoŒ?ôp?ð˜øÿÎfíoŒ?ôp?ð˜øÿÎf©GþƒpŸø3ÿ™?«?+žÞ¯ýâð,'ÿ5V~Wý¢¿??µ¾0ÿÑÀüIÿÂcàGÿ9š?µ¾0ÿÑÀüIÿÂcàGÿ9š>¥ú Âà8Ïþdþ¬ü®{z¿ô‰ÿÀ°ŸüÕýYù_ôŠüüþÖøÃÿGñ'ÿ üæhþÖøÃÿGñ'ÿ üæhú”è7 ÿ€ã?ù“ú³ò¹íêÿÐ'ÿÂóWõgåÐ:+óóû[ãýÄŸü&>ó™£û[ãýÄŸü&>ó™£êQÿ Ü'þŒÿæOêÏÊç·«ÿ@xŸü ÿÍ_ÕŸ•ÿ@ëñ¿ã<ñgÀþ-øYñÃÚ‹¾øÓÄÿ´.™âO êÉ#ÙjíûT|mž ã– ¼ÓõM:öÖÏTÑu­2æÏYÐu›?ZÑoì5[ ;È>þÖøÃÿGñ'ÿ üækÂõ€’kZ¾­®]|høÝg{­ê7z¾£ƒâO xcJ“SÔ%kJú Ã~ Òt+ RúIõ=RK :Ôêz½æ¡¬_ý£TÔ/®î;0Tháç)UÅa§­Ê¡Š•jXT­iyÞÍv¼N­i%l&!>üøM5O¦+§éè|5ûþÄß¿c÷ñV»áýÄÿ~$ø©!ðäÿþ \Å©øËMøWá±e¤ü8øU¤]ªˆt¯ x?ÂZ…t‹è´¸ì`ñ&¥áý>öK +úü࿼> ÿÈÑûOÙÙ|kÿÓ–™XŸðÎKÿEÇö…ÿÃ…eÿÌÝzGÃ/†ZGÂÝUÑô_ÄZçöÖ¿uâ]KSñE厡«Ýê·š~™§]\\ÞXéº`»–å4¨.®ï/"¸Ôoµ ï/¯¯nn.]ÇUj˜HáêS£RšŸ³Œ)²ÕסYÊR©J ÉR•ß4¤äÖ–»"*½JÔe:5 ¡RS”ªJƒVöi¨ÅS­QÝÊ¢û*)E»ìŸÄ>ðÆ»ñöTðo„4 [FÓn´Û»ã¿Å+±®M{¤Ú7Âßø+‡Çˆõ¼ ca¨É&©{£xRöÓG·–¬îuG´‚úûO´’kØ>{ñ—üÚÇÂ:W…4OÙÓ[ð£h^‡Å¾1Ó4Ž:ψ|5×ïôß_Üiÿ|5áOÙëMøáMA-õí_á7Ãý á¬:O„¾ EáIt믻u¿ØïÃóëzî«à?ŽŸ´?Á;Äšþ·âÍ_Áÿ ¯þêÞø£RŸ[ñF»§Û|gýžþ/ëz$Þ#ׯ5jÚn‹¯Øh2뚦§©Á¤ÛÝ_ܼ™ŸðÇZÇýí‡ÿ€Ÿ±ÿAzð«•4Ð~þÕ¾ø¥¨~ÓÚf™û2ê¿~$ø«ãäž5øM­|Yø–¿ ~h|'û9x"?|$ø³ìû7Š›m¿bÇ®sû>{zcß<^¦Q„„éÐ̰¢òÜ¿'¥KØfrŽ,Êñ?\Áa)Jx T”ib]J޾"¥|UUVTê×:t!Fªâ1uõ«•frn¶aˆ“ö¹É%Ñ?áCÿÂf> ÉvÿŠóþOø[ŸØÿ$—þIö'ü!¿ñXÿÈùöÿù—ë…ÿ†;Ôÿèó?lûñûôÑÿ w©ÿÑæ~Øÿ÷ãö ÿè¬è¼¢Ž…YžQÁá(a“ú¾gïÔŒ%<^)©`g/m˜cªâs<\ç:•kã±UñªÖ¯V­Zš¼f%â1™dx¹UÄã*bêÊO&½KÕÀ:jòfqHa°yv.…£ö7ˆ¤”UeÉÕ~Ó~+¹×~ iÖw7±\Íí!ÿû¹š8žP™?à¢_²\R4^a/凙•7|ûXnç5ïž3ÿ‘?ÅŸö-k¿úkº¯<-û"xwKñO…üGãßÿ´?Æëø›Cñ¶ƒàŸ‰š‡ìÿ¤ø9|eáKäÖ<â Zƒ³§Â/ë’x[Äúˆô­+Rñ4Ú ×t­+Q¼Ò®§ÓíL_EøÏþDÿص®ÿé®ê¼ÜÓ…:l-HÖ,F+*´áV¿Úhài*QztªóSx9JMÓPµH(¹5+<²u‰«‰«F­Ά xŠ”jb%õZ˜º’­VXz•¨þñâ”RUe&éÊRQæHékð+þ 7ÿ"'íWÿg«û,ëøÒ¿}kð+þ 7ÿ"'íWÿg«û,ëøÒ§%ÿz—ø)êfí¯ð/ñ/ÉŸw~Æò6jöe_ðNýR¾0¯¸¼Yÿ »_û|ÿ©†…_þÆò6jöe_ðNýR¾0¯¸¼Yÿ »_û|ÿ©†…\¹‡ûÔ¿ëÖÿQhšaö§þ/ý½-|…uûYXZ~×Úwì»/ƒ$¥á9Ä?›Ä*¶ð¹¢Ðåø€¿ÃØŒYo„×ßXÅ"é¢+(t…yµ o¯kó_Sÿ‚nøSPø€>9¯ÅþÐþÔ´•—‹çø‰ñžçá=‰²Ö ðÓø2ßöfOŒvßEÍÏìÞ—_³ëü@o 7‹ÖÆþçÆFáîˆÐO >ic0°›TðÛY¯h¡íq\%çF.§ 6‹ÍoF¬&êå”°þÏKÂWª‹ýš»ƒ¾"߸…­yS¥_ÔmÂÄWÃaòÚ®T«J,ÆxšpŒðÞ֟п?l¿ÙóöqÖãðçÅ/øÊ-m<+'5;áïÁ¿§ð_€ÒþçKÇ_¿áK|;øƒÂïÞê~¯i¥ø»â3ø_ÃÚ¼ú‰SKÔ¯†uÿìÚþÜŸ²Üž:ñÃùþ'¶•¨x ÏÇ×^$ñwˆ|ñÃ?#›áNŸý«ñODѾ>ø‡Â:gÀßx³áž£yñ Ážø‰­x·ÁPøÅ­â]Lÿ„?Å#GøËöûø!ûUø³Ç¾2³ý–|5ªkíKðC@ø ñÃYñO‚>øËá„tOøƒÆöþñ ׿lÏÙëâŸÃMZÇJø©ã;¯jž øûRYjzU—‡n´o‡çÄšMþâî×Å?ðMÝcâ ú¿€¼}ññu/ÙÎÇÄ´‡Ä†ð÷»ücð/ÄoÚoÂÿü-âÍSYøÏwãÍÁ¾7ðŸƒm~5üW¹ø{áY¾è´Ú¯„ׯÞ.ñÊxRóþi¦å,,«7%SÙg±Œ}”c?­`êÓŽW†©‰ŒÝ:𜽔¥Z–3å”åÈãYnÖbU)*jY\§R.U èâpª¦-ªÊ„]#ñ®uâ/ÚøözÖþéÿ>!Ùx§Ãºn½âë~øqâ=WÐ<)ãmjÇRŸLðG‹®´Vü#ý±<)¯þË÷´ßʼno<áoøXß<'ciÃOŠZw‹ï-4O^-øCðÓÃÖÿu TøÇuñOÅÃNðÎŽ~[xE¼uªø÷V}Kðm–§soáû?°ÏÇËï/ÇÝöœøc¨þÖz&»ðÈx3â—ìÉâ/à•§€~ø+ã'‚,ü!ã/mûK_ø¯Å¶½kûB|Y×ux{ãÇ€š?\ø%ô­ Nðÿ…µ_ø»ÔncÏ\þÈÚÿìÙªxÛáÄOøÇž,ñö·â?ß³~“ñ[àç‰/¼eñçVøß«hÞ.ýŸo~"h°ëZ$RëèZbÙ|JÑ5}*þÓKñf›«ÚêZ|V§zêœ#ˆöÚKë8(PæºKRžëuq¦ë{’ÅIÔ’ÂT‚‚ÃÒÁãT!ŒÅcO–Up0©Í 2J¦6¬TTéÉk?>|4Ð2|:ø·ã}7Äçörý¦ì/ü1ª|%ñχ< ªøOÇ ½ø!³àçÔõ&©qñOáÛíÃÚ]î™<ÿ<%þšÿÁBeÅÓc½Ô5ï‹~Õn<]eà]?áÿ‹eÏÚ›Á¿õŸêžñGŽôk|ñ_Á㈭üAáxÊûÃz¶…àmCFñ×…(¶ñ†ƒð£öø;ãψƇñOÆ>"Ôü+ûDëþñt— ¼[âÿÚ/YøÉðÇ\ø[â øzÏáž±ãOŒ_/tÁuá«Ù/õÐ#Ô¼û1þÉV³OÃM^ëÂ? ÿh†‘jh ñ“↭/ŠuË/ŽÖº—ˆ ñŸ†5Á¾3׬5‰ôox–ûKñOŽ?ðOoüdñoÅÛ„øõ¢ø{áÏÅø¯â5¿….>]kž0ðÇ|gû(jÿ²–µ$^<·ø± i¿‚—C¸Ñ|g§øjçáõ¯ˆ-µë-jÂ^iZÖ›†Ÿû\þÎm"ÿ¤¶ð…×Â}[À¶_¬x#Cð¿†|Uàÿk¾*ñ‡ÃmÂúnƒãëZÌzü)q¬x-—ìõûTÜ~Á¿~íð>ûMß~ѾøñâÔ¼-kàŸßkß¶M¯íâ)õïéŸL:¤>ðÞ§tþ"ð?„h_½CIÔ<;àÏŠ^3S¥xŸXØÿ†øí¥x¯]øïáÚáÞ…ûU|D½ø…oñoLJìѬëßüGáOx3ာôo|oÚ+Mñ¿õè_¾]øÄíãkkÝy¼y{â}_Ò¼MáýÀú΄ói¸PÅcp¸8Ƥgí§C ’WÂÕöªÞß^¾/4ÂׯFSŽ|<¾€ª°®…EƒuåVš­V³tåNP¥)æ‚«M¬°•:8Jªœ^:¼ñcƒÄPÀá±/6Àû±ÿ ý›¼-¬kº>¿ã½zî½JïÁÚgÁ/‡ÿh_x»Áš/¾øß[ñ|^øMðcÄïc¥iÿ<¨^ÝxEüsá{ kZ?ˆçñt3Iâ=Â?ÃÛ+á×Å/Ú]ø á#ÆZÅ­¿Áo„ß|'ñSIðÅ=Kᇋü9ñV/_Ù¬"øwÂí8toiú Å÷ÄI.¼gw¬ë:‰¦ _Á$¶ƒÊÿgoø'¿†ÿfÏA­x;⡨øOHøe¯|,ð×…õo£êº~‡©|2ý•¾iwzŸŠ#×ü½_PÓlÿf8uK׋ÃÚ\:¥Ï$·Š-.?¬šÏyðöSñoÀOxYÑ>,èº÷ƒ´Ù‡à·ìñãÏ jÿ îbÖ¼K©ü‡Æø/Çþ ñe—ÄHmü ¦ø1ðGÇšwÀÏ ø>?Ø—öÂñŸÅÿ.¼!àï]ê¿ ¾'xcM¸ð‹ZøI5Ûm7àgÃß„þ"ëžð>­ûAZxª„wÑê6]xöËý¾(øÇÁÞø{ã={Åž-ñǃtŸˆn“¤|.ø³7ö„õ¹éw_|.ü5øã M§k>økñÆøƒâK]«£øfòoøf-[“øÓû‹>'|GÓ¾'Ýx?Uñ‡Ã è^ ³‹ÃjÖ^ø³áøkÅcãÈ‹Åz+ø®îêßá·Â= “áø¬t¿ë16»yŒ¯môîÄ?ðOýjûÄóxsÃßtM öb×~$|øÉâ߃ßRñ÷ü,_Ùïÿ4‡Ðøã&™ñ'ÃzO„>\ê?þëÞ*ð†»ð‹Çzþ£6â3@ñß…ôŸÙÚxkž2ªéÞpQ©û… T‹ä«õ|\ªóN—±uaJ¦gƒ§Iâ”)â0yV&·¶X¼Ë¤ÖJ¢„ª5IFwRÿlP¥^’¡N›ÄÆK°50ø‰å†'.Çb¡˜TÂâ0«©ücà¶³â¯ø—þ%¹»ý¼MðsâÇ·ÿ >4iž ñ—‰´¯þÎÞøs¥üѵ? éÚßÅë/Ž  h6? |ã½GÆ_[Nð/„ï&ñ~•­øeú&ÿ‚Ž~Ìz_ØxÛÆ:¦Ÿ®h÷úÔ¾$¶ðO¯Ú'â>‰àOÚ|Sø“ð«JñÇÅi_4ëO…žmwáwЬ¼[⯈6þðƒ5#U´ŸÆº·‡áÒ ÿ‚zYêúGìµw§|QEø¡û~Ϻ§ÂŸ‚¿"ð wZ—‡>$Omð¦ÎÃâœZkx¾¼Òþêžñ÷Âë=§üãßxF÷ÅÚdonð¥¤|;ý§|¬üc±ÕuÚcቼªëÚgÃIô]7º—Š~)þÒ/µý?Ã÷_uë­JÆ ¯Ú]"ÓA¹ñ´ë„ã»›^šMm¡Ò»§,iÒ¥N¬ç,>'ªW”úöY¾fð“†Ò¡‰žajZ­9ÒÂ`êàpïë˜Èc¾«Ï+ËÞ©Ê´pZ6æ°µeG Z$’¯B…ç5Rž"±¸µŠµŽy¾hŸ¶ìñâOŒ| Ð|Oã_Ç^,ñ?€lµ{ƒn>j>=ðN‡«x‹Æ^Ó?h8þŸ€zŸ|)§hü~$ð‡Ä»Ÿhš¾®øwRÓ­¼A£êZe¯iuûIü±ñÄ_ îüq5—â{|þÃ}ľd?W᎕ñŒhWwƒF:m´ßuýX¶ñåä»Ô5ý ÂÖÚ̾-ÖtÍ ëó«áwÀŸÚ¯Aý®¼àááÝSOýŽþ |oøýñïÃ>0øƒào…¶ž$ÖõÏŒ^ø£ׇ<-ñ7Á¶wÄ¿øÇIOümñ-÷‡´¿ˆ_±ïÁKÝ'ÀÚñ†¼V>1܈¼W¢¿Šîî­þ|#Ð ð¹>ŠÇKðn³k·‘xÊößNä|ÿUËêÓQ©SöÕÕG,<¨b#û×ípÖ­S :Ë_O:•§GÁckcžZ‹ƒ„±…:œÔ©Ð¨èáç ×Sœë:êÒ¨áBì6l>c^vËÝ|6ƒ £t)¾?ÅŸðQÿ†:ßçÐ4|BðßÅ?‹sü0ð爾ü:ý¡>!Þèö·³nûBh>#ñw…<3ðãPÒnu[]wÃÖrè±_ÜhÚoƒõ[Ÿê>5µñï†ü#Þ~ǶçÃÚÁß ìãÔõ O‹Þ!ø#àŸ‹>#ѤøYñoÀ~×!Ö4ÂY«|ñ—Ä/ YxGâǃ¼3â}~ËDÕuo†¾6ø…iá›KEÓüE«Ã{©Y5ß!©~ÂúÆŒÖÿþ-h^Õ¼;ñÿGøÅá;ü*›Æ¾Ó¼/mû-èÿ²–³ðçVðþ‘ñ#À:¦¤÷> ²ÔͬE:‘–ÐÂà厯•g9S¥*PTªòU©(9ªÔàçžS¦¨Tn'V¬rHʽ´ä¨Ò©iTUëש‚£•©þ×zV“û[Zþ;’/\x6òvø¼Úù6 ñ‚ÓÃóüDo‚ëáhô)]gþí¥×Ä×Õ¿á#I¿³V+}ç|·öõ|ÿý—¾'AªMà_üMñÙ|2Œº5Œ?³oí-g«üIø_ š4~3ø¢j_lõÚHÓn|Iá»M]¾ØüA¸Ñï3{¦¹?ØUâ ÿ‚qþÐ~|!ðÿí!ñ«á—>þÍþø5ðãÁ^øâ}/À¾Ñõ=[àߊ>+øöÓmjoÚoþ1·ø-á?†>1Ò|ãO‚> ñG‚o~!Ø\iz…—,G‡¹0¾Öxz“ÄrÓ­F Òå\ó¯Ës<]á]TT±TòüÙ`ò¹S¥‡Â¹`p•*â±kãðXìWL£B5íí&èT¬¢§N S…<>2†£Žr‡,1x(¼ÏÛWǪ´jâêÓÃà±?Qy{ûªÛ»öo‡Áº'ŒÓVøµý¿â¯x.Çáî‹û1þÓº÷Ç«øRÆÓTñ5¶¹û6h¿¯ÿhO Øè:V© êº¶¹âO†ZN…c¥x¯ÁzƤ–>5ðƳå¿¿à¢ß¼miªi·}àíHÒ¯­t¿+øAÿâøû9‘âßÙëâ÷ìÝð§âtþ1ø«Ýé~ý‹ît/ÙšËÁ¿<ð[Fño‚ü'û>xö’ð.¹ákˆü]ð7Ã4Ð|OÆ{ë¨[Uñ&•âm;Å·:Šk¶þ§ã_ø'æ—ñ3à‡¾øïâd×ZM·¿j_ø³Wð´»rÛö¡ðçí áý_HÑ4Ý_ñv ËáñîkÍ:÷\ƶÃxZ]WB6ÚÍÂY]FãB¥ZIÕ¬°Tj,#Œa'©‚…J”(â_gR eéÔ«^ž6熢«Ñ§O6ÄgEFs¡ ïØÂXú®­h·7¾ž# \ôÔ…jø_©µì¥ŠŠ¨Ö.¤i7S+Ãý%ðÏöŽð?Ç=Ç/ðzßÅW2ðe”O'þ5ü2øÛû5ky«ØêøFÿRо2|(ð÷­<â‹í2ÿN°ø¡øÅ>¹›Hñ ×µ_jºL1øöÊøÛ§ß|p×jƒ³ÏÀï„?³çŠâð|uàÚâÏÇ/ê9Õ¼#ðçÅ~Ñ< ðÆoØ·á]ÿ[Å’|OðׄôM3Lñ øë[ñµÄ^ð§¼O¨ê:Lwýßì[ûAû'iþ6´ÿ„gö0ѯ éº‡Š´èu?ê:LJƒ¡øKÄÚ/Ž5FßÁ—öúóô3~Þ¿³*x^ÓÅ~#ø—¯=ï|CðþøKörý¤|gñ¡ðKkÿ´?€Þðþ¿àÏjÿ¼o«xwDø}ðÿö{ðv‰7†u_ˆ>(Ô|_®^ë$ŸÅÚO‹¢øƒö=ø§¢|YñOÇŸ?ü à_Š~%ñŸ‹5[âÀÝsâ瀀)øñüi¥þÌRhÿ´çŒ,~*ø3â„®þüGý§{ f-'OÕl~ªø]û4ê^ý“­¿e/‹ž6о)èZÃk¯ƒV~'ÐüuðöêëὯ‡SÂ^þÝÑî¼qã»{Ïéº6Òëž+Ño|7£k ‰µÁž¶0i6ÑraëÔ© Õ¬ðYmjxz\œÐÆQÄæÚ˜ZU§:4äñXJ™\pÏFhU¯,U§ƒÅ+sb#5ñŸ‡ì/¼z<w6›á™î|N¾½–ÝtI¾z›ö;ø• xoá&½ð×㯅tßÚ/áî“ñIñgʼn¿¯¾#øâb~Ñ"ðçŽ>5Ï«| Ð>/ü1Õ4I5x?ºßNø­2xJÑ ð­ðñ~=Üsß_ØÃ[°ø+eðHøÛ~~x áoìÓáÏÚ^»ð÷׳|<ø»û3xÎoxâçˆîü;}áé>,ñð©|CðªÖOxoNÑ|}¤xSRðúx¾îãJ®HF–"jÔJX¬º«„Œ#S†ŒjÇ7­’,RöKÚB:ÙbÏ)aªRÇbVJ® ,~3¢’Ãʶ ´Û§EFZÂÔR“šžkÐujR»Ž"–[YO -O«Ê–,4匞†#¶ø{ûSÀ>|vñ×íáÿ üÖÿeïøŸDøùeá¯k?ü á‹øÃ_­üUះŸ|Yâê «£¦‡}m§ÙkZÇQ¥~Ößõo øûÆiâéZÂÿCñGÇ/⯅¿<«h¿®õOéw‹Ã^/ð>‡âMWIÖn>øÆó@—EÒuñ‡a§ø—EŽÿþ$ðΩ¬y‡ì“â½Wöý¦~|Hø± x“â¿í]qã}OâWÅü.»ðOƒtícÄŸ|;ðŸÃ§Â_ 5O‰>9×,tO xÁ~Ó¿³uï‹^$Õ5RÃTÔ›Ä:mž¥g¤hÜßí#û|QøÇ¯|T¹øqñóÂß ü1ñóàV…ð#ã⟂75É4_ Kñ ëß üEañ{á­‚5yÏÅ ~×Å‘x»Ã¬u>ËFOAàÝFÞÿTÔµ’¤å‡WŠçÂe¯*J¢¥Gõ o4ªÝW*ÓÃ<´…Ó¦êB6j5iÍ:8%IÉ:׆+>J¾ÉÔ«…þÑÂÓÃRÃ*Q(?©UÆW¡üwOø—ÅŸŸÄÑ|GøwàÿˆÒ|2ÿ…ã?‰þxšk†>ñ&½ñïNѯõ}+Âú†—ºoøgÿOýŸü]àxÿÆÖ¾9øtž7ðÂßhþ‚ßµ7ˆ¾+Ýx£â…>)xÒÿÚ/Ã…ýœtoxÓÃz‡þxÃSð—ÄAâ}7Çšfƒ¯kiz“‡o|Uížý‘£Ðô߃šdÞ?{Ø~|zý ~6Ë$^[92ø{⟄¾&ñŸÇíÇ2üð§Ã¿‡ž‹Dø1wàyµO|*øWûI|&ðzxš{Ÿ‹¾2¶»ñŒú/ío©ø£ÄZ6Ÿ è:¶­àéÎà¿ Ùx–;OrËÚÙr8VÅ,yktå 3ÆÒžbñ´åoBšu²ØS§VrŒe…­]c(&ð¸§I:rš”#íq<ôá%í}”êQŽ.nœéÉѧB½jÕ¡9¬e<!hâ½Æžøß¬Þé:.‡ãŸxƒÀ^-ðï‡5û?ëÖ‘_è—ßh|øâÿ‚Z? i%ø)àï‡ðGÄÄÿ¿goÙ³Eø ð{Ä~7ñ‡<9â øóÁþoüEÖþÅá; Oéú·…,¼[â?Ç:çÄ OÅš½í敦X¯tá…öøêtªÏØÓÆÊ–½Dùq:X*µåŠ«Óui¼N*ðxjN©JµXýfª˜êy¾u °”ç…Uq¶RŠ¥‰•I/«RMÊî•9Cš|õ)Öä«R5)IÓÃK#ãGíeað{ãßÀïƒ3ø2MsGø}meãïˆ+âÓlþ7ŒuIêÆæìO©ÍåiÒù§Ä/ø(?Â/|kðÂïxŠY´?ˆ¿ü/ñãâoˆ¾ü_Ó~ øGøMðSâÄ_[i´•÷†´oÙîçÆ^ ñ‚,t¯ønÓâ‰µÏ ÛXøÏJÖ¼=¥jþÖ.4 _ÿðMÿþÐÞ(øßñ#Å~,é¼}oðú„ºÇ…>%|eð‡€>ËðvÒÏÄo¦xcÆ×¿.„þ&“†´XWíœ^-,Ö¼\i'M¤pu2l,×Ö §ŠÂÉã¨c¡e†Åÿ³{<Ï ¡S[¢q¢ë^3kQà0ª’­BÔ1k4Ì'7Fq•:Õç„XOž¶•Õ«ÆN~ÈÝð‡ükÂ>8øÍ⯠x{BñL ´ÿ |?Õ|57Ä?µ'Á¿Š~&ÖµßþÓüF<à_ü¶×~#é’øoà~/…n4Ïøg@Õ#ºñZè~4ñŠìô_ßßøQÿ8øã߆~øŸâË/ü>¶ñ~kúoÃÙ~þÒúçÆ_Æmü{skàß|“özмsñcNŠßáïˆõ? x·á•ã´ñ…ü;ã\h^ðG‡­¼C­ØðìSñr÷ãg†þ=|vý¡¼ñÆZ!ð}¥Î›ð×à¥ð‹Â÷:Gƒ~~ÒŸ­-¬,uÿŽ5}?RÔ“ö‰›_ÔõÝwYµþÐð»ÚéÚNŸ§ë°Ááÿ8ðoü³ã­¼âö¢ðS|Yø+ |ðÁ¯ßþÎ…Ç‚âðŸÁ/ |xøqa§ü`øÇÛ}Oâ¥â¯†¿5‹jÞñÿÁQoãé>.Ðìt­{ïËÓ?e˜¨Æó§%’ýRIsºmb±PÎyå)a[ö˜jøJ”Ô¨MQú­Z”g^tÖ 4ÂêENkÙMR¬åIË•J·°¡õxEÂ8µB¥ Ñ«UJõ剅¨ÐS•lÐZŸüoö?Ò Ñ®¦ø“âkÛ][ÂñýõƃðKãω ð/‚3“GðŸÆ {ÁøOñBxt¸dÕ¯ô†¿5m}ô]3ÄW¶ë×ntÏ?ð_ü½|'ð«öˆø7Åѩ뿴ŸÁ›ïøÛÅqø´û+/ˆÞ-ñÿí ñOâ7ÄmÃMã{öƒÃÞ ñ¿í ¯OáχrkÏ?„ôNÑî|qâk«‰µˆüÇðH‘ãψ¾;ñæ§ñGà;«âOãÍæŸñ2?Ù`êµþ“ñÏáßÄϯƒ>*þÒçÇ=WYø‰à/†6¾>Ò­¾x7AðÃmBð—€ü-àæ²ž ;MÕt¶£J8×NUðn9Œ–" §Oû6‹SŠ©>fê{zþÂ’­Åû Ÿ+w助}Ç‚ŒhU¤¡:˜esÆ×­Éˆ©N„ê·:pÂR­‹X9ÅÅbóJJŠ¿Tþܵ_Œ¿gë_Ù÷ÁßtíBþÐÿn|§øÕÿf_Úö§ðýÃÞñ/|E¯ëŸ ?g‰´x›QÔ°tï h^_ˆ º·ƒ]Ö~#K>«á?†~3´_CÓÿm€EñËÅ^!øáká7‡¤×¼eÄ?ÙÇö‹ø4þ$²±Öí¼%yª|!Ñ>(ü8ÑuŒÖwÞ0½Ò|;¢Øüºøw¨k~*ðV¦ÜjÚ§Œü(šï¨|Hø?ÿ Å_-ý§>![xÓáj“xï\±°¿ñ6£©øOáľ=Õ4¯‡¾“âæ©%—Ãí^ÏW‹Ã~-Á6<_ñÏâG‡¾6üdÖ?`/?OôŸ‡>6—ãŸü~O‹ß ÛÃ>ñ‡ŠüOàû߃Þñoíeqãß„^+6¾6×4ßß|[øá/ j–> ðÞ‰vºÏuñ³öø“ñ#\ø§/…¾-|·ðÄO‹Þøç£øcã?ì­â_ŠúÏÃo‰ZÁÝ+àõlj~|Cðí5ðÆ~ñ—gᯠx¿áw>jø©ð³ÅÑx‚ïNøƒ­iúÆ›§xuFRQIAÊS£Ž£<:j^ʬs ¡à±J¯5%O/§œ¿d¾³Mφ£VªEc(ìãEÔ”ç Q§B¢®ãÍ)U–«aÕ{ñ†aS Û”ðÿìØyÎyί±?D<âÿüAð‡…üwá;»‹ÿ xË@ÒöÚ‰nÚ6»{§4>•¶1éö‹—R”ÛR~ÉáqeUtj{Jµ0ÍN•UN´hÖxjx¼-Lèâ®.„p˜º˜HaªôSœ"£x§%‰ÃU—55R¡KÚº”%8IFU¥†ÄOÙNLE<,òùV¡C^´?4þþÙ·ŸÆÞü‹Iøðkãaý¢ÄŸ|Sø?¨x¢Ö+û4ëþ²²ø?ðKöÝø‘áÝã]Ð>>ÜèÞ"·‹ö²ñÄšEö…aâ\Ás{¨ü;Ò½wãíayð³þ ßûSøðÙøÂý¼Eñ¿ÅŸaÒuÿéþŽÿöøÿã=Ylô=;_ø¶ÏGy¦[}/LŽ×[Ö -mM½íÂ2}÷ðÿàÀ„Öö– þ ü#øii§éº†akðÿῃ|oe¤jöÞ³Õt«H<9£i±[iºŸƒ¼#k¨X©k{má_ Ás±hzbZôW? ¾Þè>ð­çÿÝø_Áöé^ðÝÏ„t ô isøgQðTúo‡4yt÷ÓôK ¼«êÞ–ÏL·µ·“Ã:¦£ ¼m¥^ÜÚKÓ6¾£R”cÏ©„Ëã,B”°Ñ–a‡þØXüMZX*Xøâ²žZ}¥<,ð•iÎN®b•u:қú™¤]éͬ&;êÏ ‡”¥N0¯<½GJz”ã*Ô«¥YJÉCñWýªÿn¯xÇ¿ ¼syáÙÏãwÃÏÚö½Ñü_⃺g†,µ‡ß´/Ç[Úx{Äß þ ÁE¿h9âµ½Ö<4é¬Cª~Ñ~ÔüyàíkSð>¡ðÛÂmueã K¡½ý¾?oñkûCüKÐgokÿ¾AûSø>߯WÚÃMº7ŽÿfûøNñoˆ|_¥~ݾ7øÍ®é<øƒðþßMÔþÃxÄ^±ñô ßü[§ø ¼Wñõ7ÿ²ìàÿx§á_„¿fÙãÂÿ "ê^oê>>ŸàÃ)|ká7ðÄ~  ^øªO 6»uáçðdQxE´YïäÓ[ÃG c¥"Ú „á •’…©UxŠÑÔåÕò|«+¦¾¯4è§…ye\R¯NtãŠÆfu1•pt§€§GàíJ ¬cR´kQ¼“œ#õZx¬f.® 7$«ÖÇAÂuÖ&¾ •á²ï¬b(cñ•aóïíimñ¥?eÏ‡Ðø‹Ä µoŒ—_´ßì£%¦»¢ø+Åžøg§_j?µwÃI¼6·¾ñÿŠøaüã |'ðWìéãX¤ð—ÀðP/Ù²ëEÔi-3Ã>6Ô4ÿÚ›â…ÿ„u”±xXÓüe,ß¿e~#|.øgñ‡Áº§ÃŸ‹ü ñKáî¹öí¯|FðŽãëÙ—ÖÚž›ý©áiúž‰¨gêVvz…Úìfû%õ¥µÜ\ðE"y–¹û!þÉÞ'ø]áŸÞ$ý˜?güðV¢Úǃ~ëŸ>jß ¼%«1ÔÙµO ü?¿ðÕÇ„ôE›[ÖK^éZM¥É:¾¦L¹¿ºór§zqÆBÏÙWÆâ±”¨B£ŒaW„È0¸zê¥hb%Nywö5yJ‡%ZYÍ,zÃæ!)TºRQŽÚ(Õ«J„©×«8]ÍòfnQP§:1œ+×Ì)Uƒ~Ée³ÁÆxZUUyS¥òoí{ûM|hø-ðà?Å÷øo¢øKã¥áÿˆž)ñ7ÂïøÏÄz‡‡ü%ãÏ ~È_þ(Mà¯j_ ¼kaá¿éZWŒü+m j_7|1-¬rx“Ãviâ[ ø“Ióω´Ïíåðóľ0øMmcðâŽ4íGàÏ$ñïÿ‚>9Õÿá[üø“¢|xÔüY?ü3>³ûWx{â'í/⟇wŸí็à×Åo|BñW‡üawâ|ñ·àÑàoþœj>jþð÷µ_…ÿõ?øKL}žÔ<á«ß xcF“Ã7þ “Hð÷‡®tÉtL꺟„žÃM´¶´o êWú Dt«Ë‹I9ŸŠ_³gìëñÊÒâÃã_À?‚¿,o%ðýÅÝ—Å/…žøiu?„£ñ^šâÛÅš¯ òøf/ø¶?É*3èÑø£ÄI§5²ëz¹Ó(Ô«ˆ«‡¥¹×ŒèQ”±°´¨¬T1—±§ˆwN¢§NX<\±/NXZü2Äâ«Öœ=£O ÜߺÁV£Zq”jÖ©ˆ©g Ê­Jp¦êP§øoáÏÙ³ã?Œ'×¾8~Ð>&ø»àŸ^øÁ5ý§¾ ÜøRËÇŸícÒuâMÃkó£Ïáâ?Äï‡Q|3ñ'Œu™|AûAübø×ñWá ü~ðM¯„~-üø¹mð»ÅºF‘ øOÂçQ};öÈÿ‚fø÷J¹x#ö†ýªü5áXèþ9±Òo4m;ö€ø‹æ^iÇS¹¼Ðo5; x÷¯ÆŸ³7ìßñ Ø7ÄOÙ÷àN•à{φ:añ§Âø¤éß µ´“Pø{`uÍøÙøùì,^óÂvþ^ƒröV6žæÚð¯ìÉû6øÇHÒüû>|ðn™áùí.t ;¿ üáëæÂ÷•Ƒi¤hvúlöZÃßê’ÙG –×¾ð…Ô,“økE’ÉП±Í¨fr…<&®'{:Õ(UXʳÁâ}•Y¥…¯ŒX„ÛÂb#ŽÃàiápÔ²<>+hû\$°ñ^ÊUc‡Ž!ª“š­NžQ„Á×ÃNsRœ¨TÆÐŽ.”’†"œðî½jØš¹†"É¿…Ÿ·ÿíéã_…ƒãG‰?gx;áÆáüø‘âËo…ú_߇ž.øçñá§Âÿi^0Õ~~Ûÿ~!|~д½3âe߉îõ¹¾~Ǻ½ßé<-¨hžÖ¾#Ú§Ã﬿d´ø«—û~Úø·â7Ã?|\±ý£|Cgqãïü5ñ‚¾AâKoÙwà iGðÏSøËñÄÖQèX[kºDŸe¿Ôï¬o¥¶Õ<9öØmtÏ¥lÿc¿ÙOÕþ&ëö²Ïìåc¯|kÒüA¡üeÖìþ|2¶Õþ-è¾,½þÒñVñ7R‡Ã yãÝ/ĺúˆ4ÿMªÚk7¿éZŒ73þò½3á¯Â_…_<: 5²<9ðß[³Óµýg@÷Qû~ÈâçÁw£öZýœ…çÃojÿ¾]‚ þÓàˆ^ Ölx+ÅzNµðÇÂ^2ø—û3jÖºþ#x“âÏŒ-~/j6öw:nþ/Ð~üÓ$ÖtmzHü0Ñ^ÛÙé¡þË_³þ0ð·Ä9¿g?xÿÀÞðß„|ã™~ü>“ÆðŸƒuuxcÂÞ&kÃþð¦«mo©øoEÒom4ÝP‚Ý.ÚÖæ$•u<û;~Ïß ¼QâOü/øðsá¿ø}ñ7öžøáÏ |>Ó-øañVóFÑ+Öü-â_èžø-ðßÁúG‰ ö[øãñKâýïŒ4Oˆº„´}_ᇇ|+áÍá­7ZÓ­døñ§x³â‡þ'[èö:ψ5›Û/\hÞøã?Øê]kè8·’ÿÄç› Öÿœ¿°<ÿþükø“­|RÕ¿fø§ãõ—íÝñOÅß|-û?ë þ9ê׳WíYeðçGѾ üT×þ=|M¹ñ÷¿ è>5WÃÿ \èº|%ðf‹á ÚëÚÌrêw߸:?…ü5áÛ¯_xú‡{âÝhø“ÅWš>“a¦]x›ÄGKÓ43¯ø‚âÊÞ uhèº&¤WR{›ã¥éfžgû%…¬1yfÏÙÓâV‘áÿüEøðWÇÚ„ü_¨üAð¶‰ã_…žñV‘á¯ë•þ³«øßÃún»¡_ÙhÞ/Õ5WSÕuéÐÛk7Ú–¥}s{-ÕåIJÝIÔž&‡³Ãâkà1ØJžÎ.4¨Ï2ËëЪðɹÊ4p9…j9†št狆]…ÂV«‡GV†tåû‰aqØŠ 4Ácà›§ •c•KO«Ê•*p|N¯²ÇÊ(áÞ#ŠÅC >ZTOÌ_„ÿ·ímñ Ážøé{ìéoðžÓâ×ìŸð¿Å_ô‡¿/¾"xÎ/ÚOá—ìݯêž"ðŸÄ ~0§†ü /‚¼]ñÒúãGе/‡ŸWÆ>Ѭt{sºœókï{â/ÅÛ?â'ì³ðÓãÖ…ñïövøkañ«ãoìy©ü2м=ð?â¶¡¨ü7ð×ÄïžÑßá÷Å/YþÖÞ‡ãÛ[ø‹Að¿Žmü?áO‚úˆE‡Œ¼(t[Dñ=•χTô¿„_ ô=|9¢|0øy£øy5 x‰4/Á^ÓôTñí¼;eà­ut»M2Ö<gá Úx[S ßÛx_ði3ÚE¢i©mçPþÈ_²m±ø¬mÿeÿÙÞÜüxóáx˜~ |5ˆüeóõ;­joøZÅ<2¿ð±<íbö÷V—þÿí3S»º¿|Ý\K+íQÑöôªÒ¡' >eÌiSž"¤%*x*Y5lF[R¤#+ÒÌó,>[”*ÕÊhcm„Ãâ å…ŒCŸ’Q«QsUÃ<-_gF 7œó \¥Îå*uhaqXxýZ2uL<"­)Óy~[Û‹ö“ðÇ„>0ê¾½ø –_²§„¾(|løÅ x¿DøÃãO|}ÑmjÏÚ;á¢x/à³kŸäÔ> Ks£ü Ôí‡CøËñ‡Xø ~Ï'øŸû_|/}Ãþ-ë?¼§þÎþÐzï‡þ'ë#´ø©ªZøìê:Àï°x—á†þèz´Ú®´÷ÞøŽâ´~ÿÔ?e_ÙV“á¬Ú¯ìßðS—àÆ·yâoƒÒêþÞIð£ÄzŽ·mâ]CÄ ^çò7u»ïÙYø‚óUð¹Ò¯îu»KmV{‡¿‚+„ïn~|/½Ó-t[φþ»ÑìµOkvZMσü=>™i­xîßÄVž7Õíl%ÓžÖßTñ•¯‹üYmâ­B(’ïÄ6þ(ñ:¼×‘ëz’ÜçZÓÃN1æ–!K3tåÍõxMâæÖ´§ENt¥K /«SÂÆ5p˜Cë˜hTÅÎ0ú©AÖ„œ]:®¤áªÕ„)P’–5+FJ²–7ýº¦&¬|Rªð5ÿØðêç“âÏíûPë"}öŠøyeáŠ_³þ­âoŠ~û?†¬>Þë>øûþÚ7-¶­áß¿·?íiâO ÝZj_¯®müG¥þÐ^ñÅÅž¯ Áá\èÖ^!ñܺ/ÇÚ+áOŠÿmŠž,øŸðÇÆÿ¾~×? ´?x;Pð/Ž,¼Sð“à¶½ð§ö¾ø‡âkˆ:¯Ç½sÃ:>ðßÂ~=·ø§®éãᮕ§Êžøâ—U“Ç6~û£ÂŸ±ÿì•àM _ øö\ý<á™–å&ðï…> |4ðö…*^é¾(Ñï]#HðÍžŸ"Ýé7ñ¦•r­nDúo‹üQc({]VŠîÿÄŸÙ›àçÄÛŠ"ûÁú?…¼UñŸÁ? þ&|Nð.‰áß |WñgÛ) ê¿áÑgñ%χ$ÓfÔth¬å¼wÒ4ý[P—ÃÓhÚ£[jV×^«UˆÃSƒ©OðÔ©Öçú³¯ ù>6L^Z1ÇSÄTÉÿ³ñÐU°5já³,f3 ‰Áb! 0§hÓ§‰”œ=¤IQj5U:µ1Qœ0Õ§•0ÿW§ÄWÁ©:ê5pØ<6)â`§‰Éÿ¾/ükñgüã·Ç›hß<¯üøµñKáÞ¹máÿé7^øouý¿â?†7:ÕŸü'žñ6›ñ/„ÿØ"Öm|GáÈ4]^jVú¾Ÿ¦ o?µíIá?ÝÛx§Ä¿³‡Œ¼ð›ö‰ý›e?Š^ð‡Âψšů‰ž/ý ôO…÷±ü[ð5Ö£ñûźG ø^oŒþÕ`øgâ/ üiÔüWᇞ6××⇟^±³ð¯ê½Þ‡¢ê%φµ #M¿ðíî•6‡{ ßXÛ^h÷º-Í£X\éšmÌRÙÝi·6.öw7Ém=«½¼±ñ·Âo 7ƒ>øÇÃß>è¾*øià÷‹Y· |?ñ›áËm_Á¾xüA“Áúm׋­­Âkl4|cý±ÿmŸ‚)Ÿà,~ø7ñã?¼[ðSOøU¯ü0øc‡t¿hŸüûGxÆóÃZßÃ/Ž_¶ÂM⿊ôÿfýCH±Öíi¿‰â[_?ˆ´ÿŨx)|ãÕ_‰þ üdÿ„þ÷Â?†?á»Ô5 ÿÂÈð…|sÿÍþ¯§K£ê·¾ÿ„ŸIÕ?±®õ="yô½BçNû4׺tÒØÜ¼¶ÒƒñKàÿÂ߉:´ï èþ3Ñ|ðÿÂ~1Ò|]¤x;T¼×*üHÓ¼9âo h¾8‹HÖ¬õ ߇0}¯ãÏØóörñïÀ½+öf¹øQà/ |Ò|MàEð{Âð.ðÎæüBÒ>%Áák߇ÒxbóÁsxCÄ~!ÒBx³D]5Ö,5UR{KëÏ·Åé_~|øG¥økCøQð‡áÃÁšWˆt/èÿ|áOé~Ñ<]­Úø›Åz?†´ÿ é:m¦…¥xŸÄ–6^ ñŸ¥Ãki­kvvº¶¥ Íý¼7 ºqu±ø†Ô'Wš}N¤Q¯–ek)Å}V¥J˜xC-Íðøú³ËÛ­GCZ–.~Ç †¥[°ô)r©MFµ“œ¹£¬âž&”kÅB­iUÁÎ…uªÂ50ÎŒkSœñ©R޾ ýµÿjÏ| ×¼Uw®þÎW0|gý‰§Ç?Zë?´f¹û?øà]ûFhÛ¼@úç‚þ/ø¾ïáž¿âM[GñSøŸ[—Xñ?‡µ/ üS±ŸP¾ºð·Ä?\êZ¤×Þ¡ìÅû6Cñfããä_³çÁøíwjö7ÇŸÂÜ»³“BO Ékuñ$è'Æw6òxj8ü=$SëR$š".”êÖ* «R£F*…E„Íðþü§[—Œ|Ùm{6z9^¥¦•z•(â±8œ\ÿ‡†3Zž+iÊ“«R^ÍT…L^½ã)Q’ÁÒ§ Xœ#ÒÁÖÅâéÔÍjT£KNêa²¨Ô©…Uc‡øgâ%ÿí¿§øÃö·Ö?ißÙ£ûOâOíâ5)>þÎ_4ø›Á'ögø­ã4ðuî‘uûiê÷:‘?á×5MÄSê–ZOöÏü!Þ1_øBîô¯þxsÅ>ñ†Ÿ6­á/è>)Ò­õ}{Ã÷Ÿ‡5}?[Óà×¼+­êñF‰5î™qum¯á¿é:§‡õí5å[Ý[Óu +P†ÞþÎâÞ? Ð?c_Ùž»øáÙSömð߀¯üg£üG¾ðFð7á†á߈~kwðÿ.ü7§x^ÛF¹ñž†ö–­£ø¢k'×4ƶ·k+è 1•÷Ox[ÃÓæÒ|%áÍÂÚUƯ¯x‚ãLðæ‘§èš|ú÷е½CÄÞ(Öæ²Ó-ím¥ÕüIâ=[Tñ½©ÇJÕ­u ë&˜XÜÀßé1|çáoÚâœ_ þ(xË]ñ—ãMH±ð¾‰ðïBÔ?c/ÚcöM·½ø‰ãQü3àÝ*ê=ñÞ<Òõê…ððbi³x~Ù¥ŸR¾ÿ‰¦œb÷rŽͳ¬²Y®ÙûíL.MJ¡™Tu±ØºØéφËñnùŽ–¦mŽËá]Êp‹…|fY‹Œj`1X¸á`°òÌ^ã°1Äa…â<¿[B2t§„ÀÇ0Ä{oª§B‡Õ0˜Úʵ(V©^Œ°´q”wZŒ){U^••§‡Ä*~Åý…ªÐçâ_üðÿ2tajŸô9ø—ÿ|ÿÌ|}'íûðŸJе¿x×ÁŸ>iz>ƒâMN ¿Yü>Ñ,5wÁt/ƒÞ4ðU¦µÄkÿé:×…~&xŸÃÞÔ¼Gâí[Ã_ nSSohÞ?Õ|¥k¾&Ò¹Ý/þ GðW^ð̾'ðç„>$x¶ÛG²ø…«øÞßÀ—ß~"Gðÿ@ø_ÃýCÆ:æ¹âOü`ñ7üCkaáÿ‰¾ñ ¼Wã½~öÖ[ýÛF“Æ:uφWj^øZ2©G†1ÕiCSëÓ©„žëtiΦ"ŠÄGèÉá}œ¨â厞*x,L©c+R¡8Ÿd4Üa<Æ„*JꌨÕXiЫ<;£íãZ­ãþÂÕ?èsñ/þø?ÿ™:?°µOúüKÿ€¾ÿæN¾ Ô?l/ÝüXÑ4 üøß®[èžøÓgãG [ø“Á÷|AáÏÿlkÿ´¿¾Œ< ñ7ûJÊËJøu;óâx4­CÃOâ­&ãIÑm·üögx#Àöôºƒxæ‡bÖO‰~èréú‡Å­B×|¥\|9ñ_Äüo×&Öl|Uáq>«à…^,ð΋s­5¶½¯i’x{ÆÃx]Ç5iaêá2:¹‚¯–Öͧ ¾¾S ‚¥ŠÄá)ÔÅÆ•WìÖ>XYTÊ*EÔ£S©N9M\eeZ"\U’S•xÖÇS¡ÖÚÖ¥(R­Z0Áºð¡QÓj¤ðSÆÑ¥˜S÷jàdÝ\U:XiÓ¯SíOì-Sþ‡?ÿà/ƒÿù“£û Tÿ¡ÏÄ¿ø àÿþdëäsûrxZ] á^­§üøá©j¿¬5ÍáO‚„´oxçÂ>ð¦âÝ{ÅÓ(Ê!*qöó”j*n5Vº ½¬a: ÖÓq­Nt«Æq”©Ç Z†.¬éáq4+Uûßû Tÿ¡ÏÄ¿ø àÿþdèþÂÕ?èsñ/þø?ÿ™:ùçÂßµ‡øS↽¦ø?øƒâ7ùük¹á«h4ˆZßtÓ{ÃßÞhZÖ½à+Ã:œz|v1뫬ÞÙi·EÍâm6Þi ’ÛÄ ðË$.ÐøKÅW0³ÆåÅqo£Koq*LsA,ʘ’)Xü®o‘æ™j8|×ð•kÑ•zQuhVR„1ð•S–­XÓ­C†¯‡ÄaêJŒ5zU)W¥N¤\OO˜añê£ÂÍTöRŒj'FP’rWŒ’8ûJrjPj|ôgRi¤§N¬cö©ÿCŸ‰ðÁÿüÉÑý…ªÐçâ_üðÿ2tÂY¥ÿϯ‰ðŒñ‡ÿ(¨ÿ„³KÿŸ_ÿáãþQW’vûÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉÑÿ f—ÿ>¾%ÿÂ3Æü¢£þÍ/þ}|Kÿ„gŒ?ùE@{ÿËÿ’//îú}þzŸØZ§ý~%ÿÀ_ÿó'U®|"º—ÙâÖõís\Ó๊îM&ýt(4ëÙm÷5ºjéZ›=í´3”¹û÷ g4ð@×0N‘„6á,Òÿç×Ä¿øFxÃÿ”T'‹´Csgk+êv2ê+efÚ®¯èö×’G$‘ZGyªi–vŸib[ÀgÜH¢(RIYPïô‹^j >šÝ+®šùù-~ÁFÿäDýªÿìõeýcWï­~ÁFÿäDýªÿìõeýcW¯’ÿ½Kü¿õ3 sWøø—äÏ»¿cù5?û2¯ø'þ©_WÛ¾2†+{ˆb¸·¸ñƒáž £Iaš|]¡Ç,3E d’)™$Õ‘ÑŠ° ‘_~Æò6jöe_ðNýR¾0¯¸¼Yÿ »_û|ÿ©†…\¹‡ûÔ¿ëÖÿQhšaö§þ/ý½•>!x+Lø“à|:Ö®õ+ ÇÞñ7‚µkíKHu{-3Å:-î‡w¥M¨YjVjVö·òÍc%îh—I\Ù]B <ÿöTÓ|g¦ØøsãÅω¿´W‚l|E¢ø—þÿÅï þÏà½FóA°Öítû-{Gøwð+áéñŽ·ºµž½&—¯\ê6§\ð߇®‘c‚ßP´Ôþ¨1\\\i–6“CoqªkšÍÅ»ÝÃmýµ­éúKܽ¬w6oqöt¼i–»·óL¨ 5ìßð¢%Ô¼5á˜tÏx£GñæsðzÓKð­—Áí7Gø—¥|0Ò¼k¦èž Ó¼7g§k§áV©Þé«}&›6±¯x¶þ[9Xl»Ø~iMðßà µ¯üEñf•á?x/Åš6¿â­kHÕübáoxG@Õ|DÞ†ãÄ:f›q iz ίâµ?kš,2Üø‡Åº¯Š.®¼I7ºêÚuׇµßè:…ý¦ úõ¥¿öµŒº\3Ãu húÖ÷´›QÕ„êo7Û]aY6ÆX æü;âMÅšM¾¹áûåÔt»§ º\Ûo{iä¶™LÛÜÆVhœ2ól±ïŠHݺ«qŸf3ÃUÅçXÜ]|%\/SRñ4+åÓ­.*5j)ÕU¡V½okˆçsÅT’–&¥yF9Óɲ¼<' 8= u–2œáFÆœã˜Ñ£ u>J|‘åÅRÃPöÐI)ºê5ÍN2_9k²ÃmvÊ+YõïÙ\XÉñJÿEÕ´ÍkH³Õt|QøÍáŸ3xŸI¹_4i¬ø/â'„4ߥìºBéÖ²é~,Ò¼YousæÍ©~Ë–>*Òõ{ˆÿ¾.üMÔu‡þ?ˆüK X²ð‡Å¥ð_öõµ¿ÃŸ„~ð÷Ût©¼cs _^hW“A.©¬&­ý±nÚ\_º74´ð®¯âóo¨fèÇÄê·Û¤>Ô/´Ûï³Åö¡nþlú|Ïiæ\ž&‰¦òž4딆PãFzàŒó]4øã‰â¨òfõ%<=|V; ^x|\V¶g*Õ1µpxº¸yâ°k0•Z’ÆC V”1|´Ö"*™<›.”å9a¹eRPUc µéÓ®ðìV&•:±¥‰ú¤¨Ñ–W…E†Ÿ4èrN­IOäÿþÉzNµã­_â?…¾1üdø[â½~ãÄ­¬Þøþ]Ç}§x³Âß ü'¬h¢ˆ_ ¼z,,šÏàß„¯­ot¶±×í59uy`Ö–ÖîÚÎÇC߲΃à fÊãá7Äߊ_ ü–~ ±×~xVO†Ú߀üW|5£ø'J“V“âOÃoxßIº½ðW‡|?ánïÁ^4ðÆ©i£Új’Ⱦ%’ó]ºú†«ÍsÚÂëpÏy+ÆÒîâ$t‚[†k©íá– Œpº¤÷²[Á$æ+Xäk™à†Føß‰žŽ_S2\, <±akà2Úôkà©N3Âañ¯ƒ¨³€ª•L®xï¬UÊëJuréáªTœ¥Ø™g·ž&8yÓÄN¬± µ,V.J5§ìÝzøYÒ¯ƒ«‰4ñµ0®Œñ”(Ò¡‹•j4¡ü±ã¯ÙÂ^;øKà_÷_~#é? üàk/‡:dž-m¾x‡Lø“áM:ßÃpX[øóNøƒð»ÆšgöµƒøfÒóJñ7‚¬|âmþîþóDÕôéžÕ­-x—öFøkâ‡_ ïuŸ[xwOñGÅÿÛ\ÙêÚCkÿãV“ñCFñE´·º‡‡ïãžËN´øµâ&Ð<ÛW¾‚âÇD—V¾ÖE¾ ºŸÔµŸ«a>§{£Å>íGN´°¾¼¶ò¦_&×S’ö+|æŒA'žúuâìŠW’?'3$bH‹¸qÏÒ¥†ÃÓÎñiá³-ðÆ›­x‡\ºÒ4é%Ó¼/©é?cÖ}–«a¨Í©ÛÙÏçM£ß3QO*hþÏzlìõécE›ýþÒo2–Þù~g›ˆšæçœA™ñ&1fjUj8OØÇ†Ãá0ÔéW¯[?cC N•/ß×ÄÖÄÕ¯(ξ*µj˜ŒEjÕªJ¤¶ÀåØ\¶œéaiÎ u%)º•jÖŸ2m*jU§7N•-cKO’…åT œ“(¢¹ïø§Gð¼v2jϨ–ÔïÂÂßIеßß]]%­ÅëÅáý7T¿a¥¥ÄòKöaqÄÅä^ñ%(ÁsNQŒn—4šŠ¼šŒUÛJîM$º¶’Õé7²oFô×D›oÑ$Û}mèt4W!?Žü3ia£êW÷WúU¶¿«Á¡iI¬h ѯ§Õ.d–8 —KÕ4»MNÊ9]ßZ[Y‚Ì×#‘¢—â…`ÖæÐ&»Ô¢¾·Ô­t{‹—ðç‰B·Õo¡µžËNŸÅH†öí/¬’ÚÞMYežâîÖÒ5k©â…×´¦ä¢ªC™ÉEGš<ÎRTÚŠW»“U©4’»Ui´­8Ýtrû)s7ÑFóWod¯NjïKÂkx»v”QEXQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r¾9†xª9áŠd_êó*MH‹5µŒ÷ópÀKoqSà âš8匫¢°ê«šñŸü‰þ,ÿ±k]ÿÓ]ÕCãø£ù£¥¯À¯ø(ßüˆŸµ_ýž¯ì±ÿ¬cãJýõ¯À¯ø(ßüˆŸµ_ýž¯ì±ÿ¬cãJõò_÷©‚—þ¦aNzÿÿü™÷wìaÿ#f§ÿfUÿàÿÕ+ã û‹ÅŸò µÿ±—ÁŸú˜hUðïìaÿ#f§ÿfUÿàÿÕ+ã û‹ÅŸò µÿ±—ÁŸú˜hU˘½Kþ½a¿õ‰¦jâÿÛÙÒGume©xrööâ K;Oø&êîîêhíí­m­ü]¢Ë=ÅÄò²ED,ÓJëq«;²ª’>Áÿ…ðÛþŠÿð¬Ðùa_Ñ^UJNxÔŒS„bÔ©¹?vSwº© Ôík;Z÷è]Õ¬ÓÝ½í½¼Ÿc+ã$×>-½ø¦žÔ´ÝJm~ÿGÒtý^ÊöÚóN†ï x?HÕ5(î­®’+‘£[=ýÔ[Ý-ijX½œ$]²%|÷7Ãïé³\麮ƒ¦xïÂÄúGŠ®´ ËMÐ4ÝU%ðþ¥ ÞèÑø{Å>.¾´¹]+S²ð÷‰ä·Ö5¨ô»ù繸¶&þÎ+6úfŠ©ÁÚR“ö–„g8ÙF¤)×úÌ)ÊOkX×Q¨š^Óš+ß¶ƒrm(½Tyù.Ýá*”ý”ç­ïJáïsE&íê|}sðÃ^mQ°»øao«Ë{ ë¶^±ž’Çáåý׋|Wª‰"†ÿU·µÓžûMÔô¶Ô<3íÒ¾˜–‚ [y[ñQð~—âïŸhWˆôùü!âëkm;YÔü¦Ø­ùÔ<*c¹iVÒ>ÝéÚfÀÞ-½Ò›[Ño|Kàp|°ÒüImm§kÂM+LðLÚ/†/¦±Ôï4ÝKP>+6jÑi:n$’{ xÑ|3á=/ǯâ o†öš ž£á ÇN½†ÏÁð\øVçK“ZPÑîÓKÔ§šÝ¯l®´¨!¶­§M¢Áwso¬ý’ŠÒjp”eûµHÝCF°Ï nnNv½›½Üœ¹´RTï?g—§$açh×…tÕôMÊ .ÊÎ-»s¨Í|Õ­|<|KâïøV–ž!Ó/üoiâ]Q-„`0ÐeðÄwö5Äz¦§§=õÖ‘â |K>‘â%´Ðnš/í}FãUÛ7V¾ñ=¯Â3áÄÒ-îõ äž3áˈt ]ôß j!–á|?eµr<+{©ø{Ã7 §i‘êw3øt_iðFíy¦Æ‹7µQQ(RÊj‚§eìãh(R¦¢”)Æ2÷(Â<ÓS›Nw“ö“æ§6ê*šs&åÿo9NMßâøªIò©(]A¸·N›‡ÊÞøEs%ô¶Þ(ð‡Ÿákkoaé^%À³-›ëø&k›BðzÁá[IÚöÇ_ž%Ótáker²]yæêé/.»-oÂþ ›Â_ í¯4?ëwž:{x’ËÃ>)¶Ð¼C©àÝKI–H5ãâ¿ y¥5K˜Ré­5ð×P´§03«û½PÂR…cò¸ác)5NRŸÕ*Ö«JS惌åzÒ„œ¢ýÈÁEE¦Ú»ærÝ¿nºè±„j%fš^â’WÖNN\ײù×^ð‹|k¶Ÿaσtm7ÂÚ½…¢ü@–Okòk:íû/!Ô4߈wÓ[_èði–“éÚ­þ±¬,1ê¿gŠÄ‹y †+/|A™oÛÏš;h>Ñyy,6ðù×Co™"ù“KI™TãAã¯\è·ž%¶ñ…n<9§Ü-þ¿ˆt‰t[·kTK[ÍV;Ʊ¶¸w¾²U‚iÒVkËU MÄAêøò ¹ôìRx† ­¾ ü)Ô÷Âz$¾$ñ.™i¥üPð~¥¬hš Z/‰VÔ4{KRÞÄø{\Šv³Û6“¨CæZË_ÄPxÇÇW>ÒŸBñg‹|3 'Œ|Mây¿ik_øSJ×L¶°Ð4}PÒÓà„:~­x‡â…üO¥X·[G¾“áÔ¢ê{»û{‹Í;…»?êþ‰uûýz^½GÅþÒ5kVñ?‡tÍwSû7ön‹¨ëZm–­¨}¶åì¬þç\ÜÅywö»È¤´¶û<2y÷1¼o•C^gáߊú—…µ³Ö¼W¢iºçô›hzÞŸ¨Þø¿ÁúíÖ‰¤Ky¬MÜ|AÔtÝS\øys}¥xÚ×þ)ñv±/†<)eñ+Mñ-å•ïˆþ&ðÎÚ?Ãø4¯ˆ g¯oáûÛ»[;#mkgöZ ; [¶)o¦ß¢O˽¾Zë¢ê«Ý^ZXij^Ý[ÙÂ÷vi-Ôñ[Ä÷z…Ü«$¬ˆ×××6ÖVpe¹»¸‚Úy¥Éàð· Ñüw¯ã«Oiß|8ðÆ±¨]éÚE§ˆƒâïìÙ¦ø.ëÅ:§Åë~$¸Ö~*ßhÞ>ÔüB¼³ñ¦§¤ßøCQð,6Ј¼ Þ¤÷F—oâ¨MÌ—êÞ~`zmW[ËG»žÁ.­ÞúÚÞÖòæÉg‰®íí/¥¼†Êê{`Æh­ï&ÓïⵞDX®%±¼Ž&w¶˜'†øcþ/O C¨ëÚ×Ä«‰eÓ¼ >&ÜÙx Çþ±ŽòÿÇž?¡ðçŠ<]ñÄ–Þ#Ö|?àßøZnƒoû5øE°Ô¦·}cMŽ9l<o7áÝÂÓÆwš’x+â>¥àŸ [xNÛX_«§‡µ_2Öüoeâ}^iã“I_èøbû⺶–VûÊð#]/ˆuÿ¦ªÙ÷ÞÐ/4øü0—°üNÔ…Ï‹üau¤Új~ñ'Ãûk=Ëáf¬ñÜxƒGøƒã߈?'ðŽ¿ˆõk{ÿkPÜjÞ5‹Ãú?‡,S¶Z;Js-µë¿–úíøÚXéö§‰üc©ÙZj63ëWþ}õ´7v³y^ñ,Ñù¶÷ $2ysG©½Épʤsú§¼¤jRi?ü9s¨Ekm{47Â{Ä+µä—ZÉq>¢êvöæw´¹Ç4©#]¶mž¯Cÿ‘ÇÁ_öÔÿõñExˆ´;æñ¾£¬IáëVZiisàïÁá˜ÒçO»×%»‹Rµÿ„óÂÞa/mšÞú%V™#x÷JäV¥˜Ê×£N¯¿†ŒœéÔ©ÉNTkJM*z¦å+ËÜÖͧ$mr7ÌÓQ¼R”UäêÓ‹O›{EÊVZû·Õ&Roø5¯øGŸÁÿ—YþÈ:é±o¢ºék)€Ü4†È$F”^íO³ù`¸£ xãá߉¥H4Ÿø;ÍšÈjV©©ü8Ôt¨iå¢S}¦wLÓF©i\[ ®4ãsjµ3lÓûwþ¹l¿áxdññ/ö8¶þËcâfÓKi¾Ú¢!z×DÄu<á_xjëÂ’ëQñ QøF×Cßsq A7®„6sêvK›—o¬èú”–66Éx¿ÚºÕ…Æ—n¾mõ–£uudèá©N¥ª`!N—4Ræ¦ùÜjÓJmµRQN Ð¥WIEN5ÝGFð€MòÅòÔæ’IèýÛÂtéÍ$Ô\®£R¬6nšŒjµ9?qχèAøÿ„­ðïý?ÿ𕱪tWoÔ0ô Kîÿƒåù÷f|òþg÷ú’.gÿô ü?ÿÂVÆŒøwþ„‡ÿøJØÕ:(ú†þ©}ßð|¿>ì9åüÏïôÿ$\χèAøÿ„­ðïý?ÿ𕱪tQõ ýRû¿àù~}ØsËùŸßéþH¹ŸÿЃðÿÿ [3áßú~ÿá+cTè£ê?ú¥÷Áòüû°ç—ó?¿Óü‘s>ÿ¡áÿþ¶4gÿô ü?ÿÂVÆ©ÑGÔ0ô Kîÿƒåù÷aÏ/æ§ù"æ|;ÿBÃÿü%lhχèAøÿ„­S¢¨`ÿè—ÝÿËóîÞ_ÌþÿOòEÌøwþ„‡ÿøJØÑŸÿЃðÿÿ [§EPÁÿÐ5/»þ—ç݇<¿™ýþŸä‹™ðïý?ÿ𕱣>ÿ¡áÿþ¶5NŠ>¡ƒÿ j_wü/Ï»y3ûý?É3áßú~ÿá+cF|;ÿBÃÿü%lj}Cÿ@Ô¾ïø>_Ÿvòþg÷ú’.gÿô ü?ÿÂVÆŒøwþ„‡ÿøJØÕ:(ú†þ©}ßð|¿>ì9åüÏïôÿ$\χèAøÿ„­ðïý?ÿ𕱪tQõ ýRû¿àù~}ØsËùŸßéþH¹ŸÿЃðÿÿ [3áßú~ÿá+cTè£ê?ú¥÷Áòüû°ç—ó?¿Óü‘s>ÿ¡áÿþ¶4gÿô ü?ÿÂVÆ©ÑGÔ0ô Kîÿƒåù÷aÏ/æ§ù"æ|;ÿBÃÿü%lhχèAøÿ„­S¢¨`ÿè—ÝÿËóîÞ_ÌþÿOòEÌøwþ„‡ÿøJØÑŸÿЃðÿÿ [§EPÁÿÐ5/»þ—ç݇<¿™ýþŸä]ð÷†|wáèu+ø%n//ܲxOA•bTÁJ^ØÝ*—û[÷oÝóc.Ø.|1á(†áá/¨Ý· à“žOñx|ößih2y^ Ò[×ZEïÎbñ9ç²x®«à_-åÞ§øŽé|­Ý\ꚸ¸’ë\ÓŒÓ<šŽ‡eytòÏ=¶·5ÏÚæwâ£çM%Òø‹Áª¡ Ô„"¢¡V´b––J´¬¬šnÉ$žú[b•ÛÝÚÑóOE¡Ðx³HÑ-,tk› úuÔ^1ÓáKí+úzmo<#ãǸ³–}#N±im^]>Öo*@ÀË»)ÌmIÓµßéšn±i£¦Ç ëú¡Óï"K‹)¯lõ ZZËsm*¼7u+¿-%V@òïÁ*+wÄê‘èº<™Y-üc Â4Ó\LV?üGE2Ü\I,óÈBóM,“JÙy]Ý‹~ÿ‘òÃþÅéçÁuß…wÀWkþoò¢¿àz ôÿ3©ƒDøAso-å¶‘ðÚâÒ \ø~k¨,<1-¼:ð½M:$³ÇE®5b°:k°¼ûl‘Úù>{¬goþÿ€ÿèIðþz7ÿ!WÌrx+źF—¦ê&ƒªJ¾&øÆ&ñV“ö Ök6Ò¾6]ëžñÔ¶ÒœiÍ DÖµÜÊnt©|;©]7Jšár¼kñ:/ZÕµ_|F»ñV—£XëÞ!ð{x ã–ºŽ¿áÏèºÎ«e£x›Äž-ñG€uS©[XëZ ¶‡ðºÏCмI§ë›íôÕÓìì`°à¥ˆr‡5H8r9û]’…<- DªR¤¹ªVOž¤œhûGJ3ÃSªÕIÕöD¢Ôœbù›”=ySö˜Š´cÍ7hÁ¯girº’IRR‚¦çõü+ÿÿГáü&ôoþB£þÿ€ÿèIðþz7ÿ!WŽø>ëâ‡n5}CŶÞ4Öí|/á-KħXE«Ýëú—Œ"ÐõÙô&9ä¶µÖ5o jÚGŠt}L…ñ¥éz®“cY[Ï Oì:§‹¿³?á$ÿŠcÅú‡ü#ž´ñüJô_µÿo}¯û[þ$^ÿIûSÄv¿Ù_éš_î<Ÿí-'÷íöÏÝî¥îBR\’q“6Ó•)Bua:sqrƒ’tfÔ¡)Óœ9gNs„á)J¼¤Ô_4y’„Ó´jF^ÃÙÎ7Õ)¬E ÆV•9IÂiJE7Çžð¾ ¦­¢øFѵ=oÃ1Åy¤é–:læGÄzV—{o,–pBÒÛÜY^ÏÈY e|nPkÌügÿ"‹?ìZ×ô×u^Ùñ-·ø6WÚË»[ð[mqµ×wŒ¼>v²ó†à œExŸŒÿäOñgý‹Zïþšî«ÔÀü5i/ÈpjN›NéÉ4ü½Ö·×®ÇK__ðQ¿ù?j¿û=_ÙcÿXÇÆ•ûë__ðQ¿ù?j¿û=_ÙcÿXÇÆ•ô¹/ûÔ¿ÁKÿS0§=‰~Lû»ö0ÿ‘³Sÿ³*ÿ‚pê•ñ…}ÅâÏùÚÿØËàÏýL4*øwö0ÿ‘³Sÿ³*ÿ‚pê•ñ…}×â=:óTÒf¶Ó¦¶ƒPŠçMÔl^ö9e³kÍ#S³Õ­a»X9ŵÄöIo<±–¥ycI]o˘½Kþ½a¿õ‰¦Ú4ÛÙJïÿfåÊïkM MqàEpÑFgŠCÂ7Ç1@eŽ)äñ-³Í>åŽg··yhb,cY·uOú÷Iº–ÒR –òÜéZ–£¦\I #M§ßÞÙHZÚêxäç¿·uOú𞯫XëÚ·†<;©ëºgÙ¿³u­GEÓoum?ìW/{göFæÚ[ËO²^K%Ý·ÙæÈ¹‘ç‹d®ÎwL0µÖŸzÑDot‹Á¨éWf57Zf -®lÅöŸpG›ex,ï/-EÕ³Å8¶º¹ƒ•<¨Ü÷öî©ÿBg‰ð+ÁÿüÖQý»ªЙâ_ü ðÿ5”+þïþóóüû3¥¢¹¯íÝSþ„ÏÿàWƒÿù¬£ûwTÿ¡3Ä¿øàÿþk(Wýßü ?ççùögKEs_Ûº§ý ž%ÿÀ¯ÿóYGöî©ÿBg‰ð+ÁÿüÖP¯û¿øÏÏóìÎ–Šæ¿·uOú¦¿è#ÿ…3þ¿áß•{SûãÿÉyþ}™Øÿmút_ü.µßþeèþÛô è¿ø]k¿üË×ý»ªЙâ_ü ðÿ5”nêŸô&x—ÿ¼ÿÍeS_ôŒÿ™ÿ_ðïÊÆ½©ýñÿä¼ÿ>Ìì¶Çý:/þZïÿ2ômút_ü.µßþeëŽþÝÕ?èLñ/þx?ÿšÊ?·uOú¦¿è#ÿ…3þ¿áß•{SûãÿÉyþ}™Øÿmút_ü.µßþeèþÛô è¿ø]k¿üË×ý»ªЙâ_ü ðÿ5”nêŸô&x—ÿ¼ÿÍeS_ôŒÿ™ÿ_ðïÊÆ½©ýñÿä¼ÿ>Ìì¶Çý:/þZïÿ2ômút_ü.µßþeëŽþÝÕ?èLñ/þx?ÿšÊ?·uOúäòê[]êZF³e®épÙ^Omc¨é“Ø_ÜMe Ŧ¥>™s+¥ì·Ò[ÜC6•nc&ÎttyU‚­\ïöî©ÿBg‰ð+ÁÿüÖQý»ªЙâ_ü ðÿ5•½<-*t¥F<Ü’—3M¤ïh­9TRøSÛW{î&›iû½¾%úÊý~^VÓÓ?ácx›þ…= ÿ Cÿ˜ªËÖ¼Swâ]2çEñïëú5ï“öÍ'Zñ º®™wökˆ®íþÓa}àYígò. ‚æ6'ò®!ŠdÛ$hËÃÿnêŸô&x—ÿ¼ÿÍeÛº§ý ž%ÿÀ¯ÿóYRðti©4ôiËF»1Yÿwÿ^_Þþ®ûiEÓü)á­NÛZðïÀ¯„š³eç}Vѳt­NÓí6òÚ\}šþÇáÌPyö³Ïm7•*y¶óK îŽGVïácx›þ…= ÿ Cÿ˜ªó?íÝSþ„ÏÿàWƒÿù¬£ûwTÿ¡3Ä¿øàÿþk),*Ñ‹ŠÞÉÙ_¾ˆ,ÿ»Óí//ïZöÓ°×üKâÙE¤ÝhúF‘du .þêæÛ\¼Õî¤]'QµÕ`·†Þ]HŠ?:êÊ–v¸¤&@³Gã?ùüYÿbÖ»ÿ¦»ª?·uOúxkRñÞ‘­x¶ MGáŸÃ˜~,øÚÕ4½rñ´_\.°ñkìt˘µ9Y4FC¢iâì&”©«éû­oèó鎋6µ«Yë%檮±â gS[ûBØÚ_m®ïd°†âê"áæ´´¶1‰eŽ 24Gó«FýŸ¾<]øWᤞ-ðì—ž/ñ‹àøeñ‘—Å~[{?‚Z0øM£ê>/º{}Qç×SÇš?ìÿ§ÜAá«-WTñŒß5XõÒiš¤V¿[ fô±3ÏóyeRÃâiQWÌrü$±ñ劅L=] “œ0Ø|·3¡Šª§È±y†IN ÛIas+8Æãð^Áà0¯§Ò¬• D݇–£mÐsoÛáÞ*Bœëýju áR¯±ý?ŠDš8匒’¢H„«!(êIG êH#*꬧†‚+вñöñÅ_ á¶Õ\ð‡„¼ã=NéííÛKŸKñ¾§ã]+J·Óä†î[ùõ {jï¨A.1Ãs¦›K‹Éf¹ŠÓò³â—ì³ñoÄú¯ÅK|k/‰:ÝßíI¨x“öO|;GøåðÓâwü£|*øšœ¾.·ø¡h‰¾Ú¯‡×þµã?Ùk\ðïÆ¼Yà/…:Gˆ~ øsÂmeø¦KàCñÇ‹ôÿügÖõÛÁ©êú­÷Ä…ž!ñÆñ6×þ þñ~­ªë~!Hï¾-èÞ ño…>—ýCàÚx*œ}—b1™†U[„§”BŽC1Ë©B|E.$­N5s*бËhæqÊ]:3­ŽÏ°–]Š¥/ûo8•JðŽI[“–¥eõÈ,E(Ê0ö°§[.W„Sž'<¾¦kJxFM|ó9`áúC¤êvÚÖ—¦ëqjÚj¶6º¬:¶‘ªè¤V÷%Ä1êZ»e¦ëz=òG"­Ö™«éö:•Œáí¯­-îb’$ЯÈß…ÿ±—‹4O‡Ú>½¯ü+Ðì¾;økâ—ì—©xKÆ7þÕ|SáxÀŸ³g…þ+ øŽß]›ûL0øGâ.âFÕtéßâOÃ/€Ÿ¼'ûIühðGŠþüB‡âŸÅOâˆÓÄž+ñŸÃ/ˆ¾8øŠú¯‹u øëÄš‡Ç}/Á~5šÑµ¨ítS>‹âK}+\_†Yòþ&̲N5†oG†èέxRÀå./þ¥™R›ÄSâiʦ¶!ÑÉhã°ØJ؊٬ªÂYe 4'5Íþ´æ*e”ñù/Õ´«`èS©ð­·Ù/®?µ5»?k¾-¹²ó­-§·±òü?á­oPûN£-£ý‹ì±Î×·6–ÓþFøßöUø»­x·öºð/ [@^x»TñÄ¿ìóqñWâN—ñ¯À¾*¾øeð×↗â y|]ð·Æ ü+ªèÚ'ÃoÚ÷à¬ö^’ÿNð>­ãíCá”·žÓ:ŸþɶšO~ný›~!øßFø}ûIjþ<¾øMñ«Jýˆôýw@ð÷ˆþjþ—Uø_á¯×þøᯠYxâãÂþ9Õ4[KíÅ—^!Ò¼GãH´ícĿذê•x2Ž–7âVSˆ•XÖ§ý™‚y$3be’K…”ªWâ'ƒæ“£—Õ•ZÔ)ÍÒĪ˜œtª_ˆ³˜â18z5‹q¥S1öXÚŸ\xZ´02“¥QÂÖ}¶2”©Ð£NµåR<L¯5%úÛE~xþÄŸüMð¦ïâL¿ÁÛ¿†Z¹ ø?O#ñ„ -þ9øûÄv×~.Ô¾‘xcâwˆ<ðÃâÝôÛx³ZY|U?Ý?ð‰éóõâ_ü,üaÿËÚüïŠòlç¸Ü§-ΰ¼C‚ÃG èæø?ªý_ëá(b*ÆŸÔñùžýžµZ˜iûîýŒ?älÔÿìÊ¿àœú¥|a_qx³þAv¿ö2ø3ÿS ¾ýŒ?älÔÿìÊ¿àœú¥|a_qx³þAv¿ö2ø3ÿS ¹s÷©׬7þ¢Ñ4ÃíOü_û{:Z(¯“¼]âïÚÄŸ´‹¾ü'ñwÂh øAðƒâåçÄ„4ø¬ë:ÏÄï|uðåŵµÇ‡>:ü$±Ò4Í"Çá&,K§j÷w—z½ë½ìÁ 4UEZs­KKIU­Z²­(B­KwJ½i9V¯J B”­ÍÍ+EJKN%aÕ/ÝU­Rµ_cJ•d§9ªUkI'Z­QQ¥F¤ÛHß—–7“Œ_Ö4WÈ¿tïÛOá/À¯Œ¿äøÍû3k‹ð“á?ÄOŠðÿÃ+|TÒψ€|!¬x¬èŸÛðÙz‡öPÕF“öí?ì½Kì>Ú¿³ï<¯³Éì_þ9|+ø&ø¥âÈ|+ÄψžøQà–“J×uc­xóÅ­t4-—BÒõFÒí®•Ì—zö°º‡tˆb3뵄,’5T£N4°õ¨â°øºxœKÁÒt#Šƒ–+› PPÅa°ÓJÕ1t)Ð8ÍÕ©5N7›QqCí§ˆ§S _ ,.8ª¾ÝáÜVÇ)VsÃâ1:PÂWiT”:ps—¹y/X¢¼çâ‡Äýá6ƒ£x‹ÄvzÅí–¹ñá¯Ã‹H´K{+›¨õÏŠ~<ð÷ÃÏÝ\¥ö¡¦ÂšUžµâ[­fx§šòßKŠî{+Fî8l§5‰ú›ñk¿ç³ÖÄþ/ø㟈úmüVöM Á¡ü?ñ€|7¬Úß]>¡¡«s}ñD—L‚ßK¹³šÒ×U’êúÊh- ¾Â ÕqTÓ“•|V6ë_—Ã5ÅR_Þ¡—ιôT¤šmèuËÝMËEtª»ô§[ð”¦ü§‰NŒ¾»jz5QHŠÈÓ5Ë-^ë\³µƒXŠoj«£_¾§áíDµ¸¼}/MÖÚö³¦XYxŸJšµ¬-¯xjãVÐÓT‹RÐßQ]kEÖ4û›ˆlí®.îË·µ‚[‰äÚï²#ie}‘«;mEfÚŠÎØÂ©$3œ)ÓujJ0¤©*Τä£MQpUUW95IÒj¢¨ß+ƒSO•ÜqŒ¥%ÅÊn~ÍB)¹9©r8(«·5/w–׿÷m} ¨¯*—ãoÃ~ Ú_mø<ßáø®<_ý‹âÏ€.4ñ4Zÿü#뤟|ú‰}ý–tOí¥ÝöfÓ–ðqêhë"$ˆrŽªêpFU€e8 AÁŽàÖ¥:”§:ua:u)ÎTêB¤e Ó©ã(N2JQœdš”d”“M4šd©FQ„£%(ÔNTäšqœb Ü Ö’IT¦Û‹i)Á¿Š7uQP0¢¼çÆŸôø«á?„5{=bãRøÅã=_ÀÞŸN·²šÆÇVѾxÏâMÕÆ»-Ρgqk§I¡øV´·›O¶Õ._V¸Ó ’Ò+9®oí:ý3\²ÕîµË;X5ˆ¦ðöªº5ûê~×ôK[‹ÇÒôÝ`M¡ßk:e…—‰ô¡i«ZÂÚ÷†®5m 5Hµ- õÖ´]cO±i7{+Ú2›¶­B2§ I®‘ŒêÒ‹–ÊU!ï8¦=OFÔZ¿U'UFßâtjÙnýœÝ­Íz(¢Éx÷Ç>øcàŸüEñÆ©ý‰àïxUñOŠ5°ê:—ö^…¢Yͨj—ßÙúE¦¡ªÞý–Ò fû.cwy6Ï.ÞÞYYPõhë"$ˆrŽªêpFU€e8 AÁŽà,í{iµú_°=-}9¹¹oö¹9yíß—žÖøyã{s+ºŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹¯ÿÈŸâÏûµßý5ÝWK\׌ÿäOñgý‹Zïþšî¨*ÅÍ-~ÁFÿäDýªÿìõeýcWï­~ÁFÿäDýªÿìõeýcW¯’ÿ½Kü¿õ3 s×øø—äÏ»¿cù5?û2¯ø'þ©_WÜ^,ÿ]¯ýŒ¾ ÿÔÃB¯‡cù5?û2¯ø'þ©_WÜ^,ÿ]¯ýŒ¾ ÿÔÃB®\Ãýê_õë ÿ¨´M0ûSÿþÞΖ¾EÓ¾0ü øKûiüf“ã_Æ_„ÿ \ý™¿eoøFÿáh|Dð‡€Gˆ—ñSöËþØþÄ>+Ö4‘ª+ûCKþÓûŸöí-?í^WÛ-üÏ®¨¬¨U£xª8ŠU*ÒÅP ªU£B¤y1XlTeΆ"?A§MÞ2m4Ò9±xzµÞtjÓ£W ˆuâêÑ•xK›ˆÃJ2„+áåð┕EiE]4Ùó·í‰ûb~Å^ ýŠ¿k¯ xcöºý—¼Gâ¯þËßt xk@øûð£X×õýXøQâÍ;GÑ4MNñeÆ£ªêú®£qma¦é¶ÓÞß^Ï ­¬2Ï,q·ÈŸ·Gì£ûIþÖ^7“Ã?¼}ð«á7ÃMö|ñφl&xwâ_ÅߨrÇÄ´Wˆ¾,þÅß4oÚwVñgìçâø?f_|=ƒàpøÉð[ºοñã⯅5xÇÃxËXý¬¾ø›Âß³oį…ß´/íq®ü ñ‰j_Ú¯Ž~ ëð´o|Yà?x³âïÄÆ7ñï‹´¯|u±ð¯Ä'Õïí¼Gá ßßG ÷ìÝQ­õzŽ¥T)¯oޝ P¦¡N—×ò7Ãõ)RPq•:QÁ?k%óãqѧŒÌç­J“‡EH{Z^Æs«(û,®‹”êJ¬å§,fS•gUÔ›«'*œÿS çC+X UkF§ó ¨þȾ-ý¢|ñ*ãà‡ì‡®ü=ø£cñsþ ;kãOÚÞÿÄ?¼3yûGxÆ!ýª~èß³þâ üeÔ¾;êe×¼màmvÇHøËᇠ|ß eñ&…©ÛkšG‚SVúÓö°ý†5¼Ow¡|ý¼7ã/Pø!á~Ë?ü-©üðö‘û~ÐÃâg#ø?_Ó>-xWâŠ>ð?ǯx·â–âOÝéºöñ#ÅÿußÙçÁ^7øQ♾(k~%»ÕþËsâ1§~ÓQXJ)`©eòNxh`pƪ¥9Ξ .ŽR§?eá¥U{IÓ«†tñxZ%—ÐÅG:ô+žÚ¢«í!)CÙϰöYJ±™¬óH{yNrŽ.½9:pÄN¬ˆƒÌq/¯{*Ôf¯‡?hÏø#ŸŽgOÙïáÇìåªÞY|ñgÁ=ÁŸ ¼oû6|Dø?âÏÚÃÞѧ¼ñ5Ç‹>x§â7Ãõºñljçðïl5¯ â]½¦µáÿxïÂÕî#¶™Ðd~ ñ'ƒ?aðC^ÿ…Íû8|Aø=ñøj³ °ýfÿ‡>ðE§ÅÿÙLxÀ¿µÏxxí|5ñãÀ?³Ž‰ñàwGÇïøK|gã 3W½ñ¼:'ïEÖ±´£šÉÂx¥W^\ÔéªS«ÄCNNŒ\UJ´¡¥*tá…uòü4pù~7…Åbラ„# 50ù®Êój–l°±­B«©G1ÂÇÙSÅÒÄQ¯R_XÌ)ãq40u°ßšµ—ì¿ñ3â߯}?Wø}e§†¼aðÎÊëÇ>/ŸW³<9ñ/öm½ñçŒÿe±gáÛnÊçQÕ¥ø»ñn?&«i§>—§CðŽ+oê0\]øUW⟌Ÿ±‡Æÿ@º¦©û,Ëñ3âÅ„‹{ðkâ\Þ:ø3¨Ëÿêýª~ |sø©ñ“âÅW‡Æ¾<Ðn´áý_âg€5þ$þÌßþ#ø¦/‚1øNïH›GÓ¼y®@TVXy<3¸>oªckcéóürÄâ>» õ%Z•ã:¸|NíhÕ¥^ž&ÊptjÓÃÒÅSÆmZµJΣ›MÕÂÑÂÔŒ£´jCð?R•l%uWˆxHàêÓ§O‡«‡«O2Ì£‹¡‰öôÝïÁ<¾'j>ð@øs¢X|*øÕ¯~Ö´÷Ä¿Œ4ýOÃÖþ%ñgÃOÚì|1ðï¼o¢êòüD¶ø}âí7âÞá8,>x—Gø“ð‡Gø‘¯ëîþø«OÔ5K ï…ÿðOûO‰ßµkã¯ìGà|¼ðoň|#û?xêO‚>8ð€õ]gágì1áø~?x#Äþ)ø}xš§ðgâ=§ƒµht—ƒÃPøvÛX¶_ Ýë:B]~ëQY:Q“Ä©$éârÜNX¨òST°ô±X_ªJ®1‚p­B¥Sʦˆ¤ëa0ÔgŠÇðÇ€¾>üð7ÅÿÛ«Tø“ÿòñÊ2üSý—>&üløðÃᧆ~'ÄÿËáüsºýªü%¦èº·ÃÏÞ;ñgˆ>ü-ñoÂoh^5Ô¾$ø—ƶ§ãë ôsö¾ý™þ!üHý´¾ üYðOìÿyñ6ÿúÁ­*ÇâoÅ7öyñçÀ_ƒúG†~+ø‡Æ~6ñGá×>(|1ý­þ~ж–é-aãÿ‚¶¾üHÒ_þø¯ð“ÄØ–šç„?_(®šÕ§ˆ…/keVžqŽÎè^Œ'8ø5ñËSøÓñ7öVøƒðÓÆ:÷Å“ÿÙ?³í#ñ®´½GAñäþ-øà¿ ~ÕŸ<]yã !üMàŠ¶G…®üká3Äþ.Ô|S}oãwU¹Ô>…øû(ø‡Âÿ¶¿€þ/øö»øà¨²æÔµo‹ÞýŒ5];àwt€-à}+áÇì­ã_Ù»ãœß>¥ç‹µMB?‰5Ò|+â|SûL~Ϻ]«è7¿·¶ð~—ÃËZÁáÔ¦ñW†a³ñ–¹ªkÞ&Kȼ}¯f¦4ZôzÖ•ñ.óÀv~!ñŽ—áÂ÷_5íNÿU¶ð§À_B¬ø7PÔ~-ëz4mâOW·7×Þ$¼ðÝ®©ac¢ß\Û'ÃZ:%>ëkvê¯ßM5צàzÅäPê×ß >Kiwâ›ëËÿ|-×u;EѾ$x£Zñ½ÕßÂÛ_hú†±ðÞvñÿ…íõÍyã¿Õ*h¿­uÕåø‡ ø‹Xø¥¡x·Ç6Sh×ÚÖ…,÷2ø Ô7$­æ¯è´ßïÔlï-5 K[û «{ëëx/,¯lçŠæÒòÒæ%šÚêÖæxn-î!t– âwŠXd™b¼ëVø[¤øwÂõûý ÂvZ^µàƒíh¾9ñîá_xwV´·ø«¢k ¼%àíUõK?]h²IðgX–²D-ll“Å^÷ˆmVÞ÷Æ –š² ñî¥jšÕì·^»[_ø­§€Òy%Ÿþ+!8Ÿí³;Ë}âmGÄ‚I${R@¤›K¯ËO-ÿOÉØ*ØØi’&³us£hw×RxžæÝ®u=HÕ'[ø[Á²CM¨Ù]I1Éuq"Ç*ošF*Y‰«?aÑÿè[ð—þÿåMñéªÿØÛÿ¨Ÿªz㡇ÃÔŒç:g'ˆÅ^S¥ IÛY+ÉÅ·d’Wz$‘r”“Vm{°Ù¿å‰Øtúü%ÿ„‡†?ùSGØtúü%ÿ„‡†?ùSSÑ[}S ÿ@ØüOÿ‘4¿š_{þº/¸ƒì:?ý ~ÿÂCÃü©£ì:?ý ~ÿÂCÃü©©è£ê˜OúÃÿàšüˆsKù¥÷¿ë¢ûˆ>ãÿзá/ü$<1ÿÊš>ãÿзá/ü$<1ÿÊšžŠ>©„ÿ l?þ §ÿȇ4¿š_{þº/¸ƒì:?ý ~ÿÂCÃü©£ì:?ý ~ÿÂCÃü©©è£ê˜OúÃÿàšüˆsKù¥÷¿ë¢ûˆ>ãÿзá/ü$<1ÿÊš>ãÿзá/ü$<1ÿÊšžŠ>©„ÿ l?þ §ÿȇ4¿š_{þº/¸ƒì:?ý ~ÿÂCÃü©£ì:?ý ~ÿÂCÃü©©è£ê˜OúÃÿàšüˆsKù¥÷¿ë¢ûˆ>ãÿзá/ü$<1ÿÊš>ãÿзá/ü$<1ÿÊšžŠ>©„ÿ l?þ §ÿȇ4¿š_{þº/¸ƒì:?ý ~ÿÂCÃü©£ì:?ý ~ÿÂCÃü©©è£ê˜OúÃÿàšüˆsKù¥÷¿ë¢ûˆ>ãÿзá/ü$<1ÿÊš>ãÿзá/ü$<1ÿÊšžŠ>©„ÿ l?þ §ÿȇ4¿š_{þº/¸ƒì:?ý ~ÿÂCÃü©£ì:?ý ~ÿÂCÃü©©è£ê˜OúÃÿàšüˆsKù¥÷¿ë¢ûˆ>ãÿзá/ü$<1ÿÊš>ãÿзá/ü$<1ÿÊšžŠ>©„ÿ l?þ §ÿȇ4¿š_{þº/¸ƒì:?ý ~ÿÂCÃü©£ì:?ý ~ÿÂCÃü©©è£ê˜OúÃÿàšüˆsKù¥÷¿ë¢ûˆ>ãÿзá/ü$<1ÿÊš>ãÿзá/ü$<1ÿÊšžŠ>©„ÿ l?þ §ÿȇ4¿š_{þº/¸ƒì:?ý ~ÿÂCÃü©£ì:?ý ~ÿÂCÃü©©è£ê˜OúÃÿàšüˆsKù¥÷¿ë¢ûˆ>ãÿзá/ü$<1ÿÊš½¥ézƧ§[Í០<3ßZC*Â%á¥ß·¤‹¹4¥eܬFUƒ äpj ÓÑä3¤ÿØNÃÿJ¢¨©„ªsk ‡MBM5FÓ³×á)]{ÏuÕ÷_ä¾ãÖõ? ø%.®’ÛÁ~ a¼½¶òãð_„dE[{© L´YdÉXÁmÎ~bqÀæ.t Â$hü'àÖhw6É| à£ù|”/Ãé&ÇÁVØèàµÕ°C¾ h7ž"’íô^ëE×´?kZ†‹{ó‹O¶-õô BÑwÁqmslò½¼òÛÅ4ê‰=¥Åõ…÷áÝY²:—ˆ|Q},þ!Ö Hç°·žA¤höP™%µÒím’g‚i-LÒ.˜ÌRY'[iæiï¯õ?ž©$›i$®ö{mÑ=6µ­m4.Ý·èþZùÿÙ/kmc¨øŽÊÊÞ ;;?xÞÖÒÒÖíí­m­ü_­Å½¼*ED‰0Ä‹qª¢*ª€;Oø'ÂþðÎ¥©xgAÕ5-SAÒ5MCPÕ4?P½º½Ô4û{»™e¹»·–f 4­±7l0ˆÉ^ÿÈoÅŸö<ø÷ÿS=v½Wáÿüˆ~ ÿ±GÃúf²¯Z·û¾ tö1ÿÒ)™¶îõêÿ0ÿ…à?ú|#ÿ„ÞÿÈUÍi¼A©êz.ƒkð³[ÖtW’=gIÒ ð–¥©é2C;ZÊš…šÍu`ñ\£[È·QDÉ:´,€¨õ ?Õ¿ÈÒ|ò.?Ê~E,È¡› ÜÊ2FYG#â™ƶ~—ß ­üs&¡xZÂÙ/ü[ð³Ä~øƒà½5¼Oá8õ h:Œ~—ÇsøR×[‘­ü(ñ\Wš6¾:Ôõ­OÓÃçΫ…XÕ5(Éî£gË6¥Rr’T©BQ‹©S’¤e.yQš£E%xß™§ÏN7³vR’M(«9Mí©)I¯r5-.O¥äðÏÃu›?Iá/®±¦ê½¥§ü"ºqótí.çN³¾¸ûBé¦Ö?"ãVÓãò¥'—íáŠHâ£Ôÿ…à?ú|#ÿ„ÞÿÈUñåΑñ&yáÍwÆþ!x4?ZÿlÞ|9ø» jú…{âÿ„³ëº.ŸeãÿÜ|I×næÑ,üM©é’ÚxÒÞ+_iÞ ¿²¿Òtô³ê´¨5{K x“ã‰|ÚŸŠâ_ x3ö…ðwŠ4ÍhÙøtøMÔ!ºÖ|Eñ£SðÐŒø®ö-Rmj÷BmVò×Mºx Ót›[u ÎP‹”TI7RJMb%)%Ï(Âtœ!N½¥CŠŒéÓœT©9'£Ñ¶¹ùR¼ì¨ÂnIû±“S»5j”iZS‹q•¾·ðoÃk¹/!´ð¯î¥Ó®E–¡¾‡ Í%á··»—‰«5µÉ´»µºNSoso>Ï*hÙ­¿ðý >ÿÂoFÿä*ò/%¯ƒ<_ñ:ôèïîuÿxb}9Z?kZM΃â-'ÁšÔÿÅÿ·³¥¢Š+ˆ£\ð燼Oi‡‰tÄ60Ü%äVZæ—c«ZEwSCÔv×ð\B— Äñ$ê‚UŠy£V #†4?x{Ã’XxkAѼ=c5ÃÞKe¡év:M¤·rE 2]Ima¼/pðÛÁÎÈeh †6b‘ ]š(¬msÞñ=¤v%ÐtoØÃp—‘Ykš]Ž­iÜqM wQÛ_Áq \$7Ä“ª V)æX$ŽfŠ’Ye™ƒÍ,’ºÇAåv‘„Vñ$DÉ"8`Ž8b@vÇiEP#¢Š(¢Š¥o-í™Ô`þɵÔ-îµy5Ky¿á!—I™<ýCÓ%‚køEõ”m¯£y±Ê—+¹&ÚÑ‚¹3}²çþ…È?ðµ“ÿ˜žŠçXdœ¹jׂ”ç>XÍ(©T›œ¬œ]““n×êÊæî“Ñ.½K¯d¿¦È>ÙsÿBäøZÉÿÌ l¹ÿ¡rü-dÿæ§¢«¿ùÿˆÿÁ‹Ëûž_‹îþìóòüû²¶\ÿйþ²óGÛ.è\ƒÿ Y?ù©è£êïþâ?ðbòþç—âû…ÿ»Çüü¿>ìƒí—?ô.Aÿ…¬ŸüÀÑöËŸú ÿÂÖOþ`jz(ú»ÿŸøü¼¿¹åø¾áîÇñÿ?/Ï» ûeÏý ák'ÿ04}²çþ…È?ðµ“ÿ˜žŠ>®ÿçþ#ÿ//îy~/¸_û±üÏËóîÈ>ÙsÿBäøZÉÿÌ l¹ÿ¡rü-dÿæ§¢«¿ùÿˆÿÁ‹Ëûž_‹îþìóòüû²¶\ÿйþ²óGÛ.è\ƒÿ Y?ù©è£êïþâ?ðbòþç—âû…ÿ»Çüü¿>ìƒí—?ô.Aÿ…¬ŸüÀÑöËŸú ÿÂÖOþ`jz(ú»ÿŸøü¼¿¹åø¾áîÇñÿ?/Ï» ûeÏý ák'ÿ04}²çþ…È?ðµ“ÿ˜žŠ>®ÿçþ#ÿ//îy~/¸_û±üÏËóîÈ>ÙsÿBäøZÉÿÌ l¹ÿ¡rü-dÿæ§¢«¿ùÿˆÿÁ‹Ëûž_‹îþìóòüû²¶\ÿйþ²óGÛ.è\ƒÿ Y?ù©è£êïþâ?ðbòþç—âû…ÿ»Çüü¿>ìƒí—?ô.Aÿ…¬ŸüÀÑöËŸú ÿÂÖOþ`jz(ú»ÿŸøü¼¿¹åø¾áîÇñÿ?/Ï» ûeÏý ák'ÿ04}²çþ…È?ðµ“ÿ˜žŠ>®ÿçþ#ÿ//îy~/¸_û±üÏËóîÈ>ÙsÿBäøZÉÿÌ l¹ÿ¡rü-dÿæ§¢«¿ùÿˆÿÁ‹Ëûž_‹îþìóòüû²¶\ÿйþ²óGÛ.è\ƒÿ Y?ù©è£êïþâ?ðbòþç—âû…ÿ»Çüü¿>ìƒí—?ô.Aÿ…¬ŸüÀÔöº¥å¥Í½Ô~¶i-§†â5JP¼2,ˆ/€•Š–P+)#8`y¢ŠO tÓ¯ˆi«5í«Ký޶ü_pæò_—Ÿ—õvu^8¼º»»»ÿ„E kË™î䊈 bY®ey¦1ùÿ ¦•U¥wp¦V »jᨢþ(–\ |$dMÀ´gâÕqJ1á¢8Vi(ÈÀU•°ÃŠÅåØw¿;¾¯ø~]=º~,9ße÷¿óòþ®ÈÖK›‰õ;ë¸`¶¸ÕußkR[[ÜIw ·öÞ¹¨jÉl—RÚÙ=ÇÙÒõaišÒßÌtg V¦ƒâïø{FÓ4$дMR Æ×L´¿“ÄÚ\×–0Gmj÷Iá½R8®<˜Lc¼‘òÊ£>Šè–œ¡Næj”Tbïgd’ÖÚ6ÔUôô÷Ñjïý_ŽŸþ7‰¿èSпð±Ô?ùЬ½kÅ7~%Ó.t_|:ðn¿£^ù?lÒu¯˪é—f¸Šîßí6ÞžÖ"ê.aób*â¦M²FŒ¹”T<šjM=rÑ®Ì/åùùyÿWô³|5{§ø/í¿ð‡|"øsá?í/³hÿÂ5¨A¡}¿ì~Ù>Ûý—ðþ×í_eûU×Ù¼ÿ3ÈûLþVß:MÝOü,oЧ¡ác¨ó\Å– ‚VQi-’v_rA/ÏËÏËñô·Oÿ Äßô)è_øXêüÅQÿ Äßô)è_øXêüÅW1E?©Ñí/ü ‡É~?çý]ù[§ÿ…âoúô/ü,uþb©Ä_àíðž‚øÃP pH R@=@`Hã#­s4Qõ:=¥ÿ0ù/Çüÿ«¿+S±†xa•®Þ9.îïõMRí¡VXëWÔ®õK˜àóùÏy$P³áÚ4VuV%F7ŒÿäOñgý‹Zïþšî«¥®kÆò'ø³þÅ­wÿMwUÓ£´RKÑ+/Àpøãþ%ù£¥¯À¯ø(ßüˆŸµ_ýž¯ì±ÿ¬cãJýõ¯À¯ø(ßüˆŸµ_ýž¯ì±ÿ¬cãJö2_÷©‚—þ¦aNzÿÿü™÷wìaÿ#f§ÿfUÿàÿÕ+ã ûçRÓl5‹ ­3SµŠòÆò# żÀìtÈe!”«Ç,n«,3DÉ4$sC$rÆŽ¿~Æò6jöe_ðNýR¾0¯ÐzåÌ?Þ¥ÿ^°ßú‹Dª:B-o¯þ”ÎVjVðÅ~5ñS$1G 4ÑøVæfHÐ"™®.ìæ¿°µOúüKÿ€¾ÿæNì-Sþ‡?ÿà/ƒÿù“®–Š™ÿwÿùy~}ÙÍajŸô9ø—ÿ|ÿÌØZ§ý~%ÿÀ_ÿó']-3þïþòòüû³šþÂÕ?èsñ/þø?ÿ™:?°µOúüKÿ€¾ÿæNºZ(gýßü?ååù÷g5ý…ªÐçâ_üðÿ2tajŸô9ø—ÿ|ÿÌt´PÏû¿ø ËËóîÎkû Tÿ¡ÏÄ¿ø àÿþdèþÂÕ?èsñ/þø?ÿ™:éh 9Ÿ÷ðÿ——çÝœ×ö©ÿCŸ‰ðÁÿüÉÑý…ªÐçâ_üðÿ2uÒÑ@s?îÿà1ÿ//Ï»9¯ì-Sþ‡?ÿà/ƒÿù“£û Tÿ¡ÏÄ¿ø àÿþd륢€æÝÿÀcþ^_Ÿvs_ØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉ×KEÌÿ»ÿ€Çü¼¿>ìæ¿°µOúüKÿ€¾ÿæNì-Sþ‡?ÿà/ƒÿù“®–Š™ÿwÿùy~}ÙÍajŸô9ø—ÿ|ÿÌØZ§ý~%ÿÀ_ÿó']-3þïþòòüû³šþÂÕ?èsñ/þø?ÿ™:?°µOúüKÿ€¾ÿæNºZ(gýßü?ååù÷g5ý…ªÐçâ_üðÿ2tajŸô9ø—ÿ|ÿÌt´PÏû¿ø ËËóîÎkû Tÿ¡ÏÄ¿ø àÿþdèþÂÕ?èsñ/þø?ÿ™:éh 9Ÿ÷ðÿ——çÝœ×ö©ÿCŸ‰ðÁÿüÉÑý…ªÐçâ_üðÿ2uÒÑ@s?îÿà1ÿ//Ï»9¯ì-Sþ‡?ÿà/ƒÿù“£û Tÿ¡ÏÄ¿ø àÿþd륢€æÝÿÀcþ^_Ÿvs_ØZ§ý~%ÿÀ_ÿó'Gö©ÿCŸ‰ðÁÿüÉ×KEÌÿ»ÿ€Çü¼¿>ìæ¿°µOúüKÿ€¾ÿæNì-Sþ‡?ÿà/ƒÿù“®–Š™ÿwÿùy~}ÙÍajŸô9ø—ÿ|ÿÌØZ§ý~%ÿÀ_ÿó']-3þïþòòüû³šþÂÕ?èsñ/þø?ÿ™:?°µOúüKÿ€¾ÿæNºZ(gýßü?ååù÷g5ý…ªÐçâ_üðÿ2tajŸô9ø—ÿ|ÿÌt´PÏû¿ø ËËóîÎkû Tÿ¡ÏÄ¿ø àÿþdèþÂÕ?èsñ/þø?ÿ™:éh 9Ÿ÷ðÿ——çÝœ×ö©ÿCŸ‰ðÁÿüÉÕkŸ®¥öxµ½{\×4ø.b»“I¿] :ö[}Ínš„zV‡¦Ï{m å.~Å=ÃYÍ<5̤a]EÌúYy¨¤þô®½Í…~ÁFÿäDýªÿìõeýcWï­~ÁFÿäDýªÿìõeýcW¯’ÿ½Kü¿õ3 s×øø—äÏ»¿cù5?û2¯ø'þ©_Wè=~|~Æò6jöe_ðNýR¾0¯ÐzåÌ?Þ¥ÿ^°ßú‹Dª_ÃÏÿJaEW QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWàWüoþDOÚ¯þÏWöXÿÖ1ñ¥~ú×àWüoþDOÚ¯þÏWöXÿÖ1ñ¥zù/ûÔ¿ÁKÿS0¦5þþ%ù3îïØÃþFÍOþÌ«þ ÁÿªWÆú_Ÿ±‡üšŸý™WüƒÿT¯Œ+ô¹s÷©׬7þ¢Ñ*—ðãóÿÒ˜QEÄhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEøÿÿ‘ö«ÿ³Õý–?õŒ|i_¾µøÿÿ‘ö«ÿ³Õý–?õŒ|i^¾Kþõ/ðRÿÔÌ)‰~LûsöAÔ›OñeöÝÆ:ÏûÁ93ÿŸ1áŠøÑÿÌð’IÿBGÆ/ü1_?ù‚®’Šâ׺ûŸùšßü$’Бñ‹ÿ WÆþ`¨ÿ„’Oú>1áŠøÑÿÌt”Q¯u÷?ó›ÿ„’Oú>1áŠøÑÿÌð’IÿBGÆ/ü1_?ù‚®’Š5î¾çþ`sð’IÿBGÆ/ü1_?ù‚£þI?èHøÅÿ†+ãGÿ0UÒQF½×ÜÿÌoþI?èHøÅÿ†+ãGÿ0TÂI'ý ¿ðÅ|hÿæ ºJ(׺ûŸùÍÿÂI'ý ¿ðÅ|hÿæ øI$ÿ¡#ãþ¯üÁWIE÷_sÿ09¿øI$ÿ¡#ãþ¯üÁQÿ $Ÿô$|bÿÃñ£ÿ˜*é(£^ëîæ7ÿ $Ÿô$|bÿÃñ£ÿ˜*?á$“þ„Œ_øb¾4ó]%kÝ}ÏüÀæÿá$“þ„Œ_øb¾4óGü$’Бñ‹ÿ WÆþ`«¤¢{¯¹ÿ˜ßü$’Бñ‹ÿ WÆþ`¨ÿ„’Oú>1áŠøÑÿÌt”Q¯u÷?ó›ÿ„’Oú>1áŠøÑÿÌð’IÿBGÆ/ü1_?ù‚®’Š5î¾çþ`sð’IÿBGÆ/ü1_?ù‚£þI?èHøÅÿ†+ãGÿ0UÒQF½×ÜÿÌoþI?èHøÅÿ†+ãGÿ0TÂI'ý ¿ðÅ|hÿæ ºJ(׺ûŸùÍÿÂI'ý ¿ðÅ|hÿæ øI$ÿ¡#ãþ¯üÁWIE÷_sÿ09¿øI$ÿ¡#ãþ¯üÁQÿ $Ÿô$|bÿÃñ£ÿ˜*é(£^ëîæ7ÿ $Ÿô$|bÿÃñ£ÿ˜*?á$“þ„Œ_øb¾4ó]%kÝ}ÏüÀæÿá$“þ„Œ_øb¾4óGü$’Бñ‹ÿ WÆþ`«¤¢{¯¹ÿ˜ßü$’Бñ‹ÿ WÆþ`¨ÿ„’Oú>1áŠøÑÿÌt”Q¯u÷?ó›ÿ„’Oú>1áŠøÑÿÌð’IÿBGÆ/ü1_?ù‚®’Š5î¾çþ`sð’IÿBGÆ/ü1_?ù‚£þI?èHøÅÿ†+ãGÿ0UÒQF½×ÜÿÌoþI?èHøÅÿ†+ãGÿ0TÂI'ý ¿ðÅ|hÿæ ºJ(׺ûŸùÍÿÂI'ý ¿ðÅ|hÿæ øI$ÿ¡#ãþ¯üÁWIE÷_sÿ09¿øI$ÿ¡#ãþ¯üÁQÿ $Ÿô$|bÿÃñ£ÿ˜*é(£^ëîæ7ÿ $Ÿô$|bÿÃñ£ÿ˜*?á$“þ„Œ_øb¾4ó]%kÝ}ÏüÀæÿá$“þ„Œ_øb¾4óGü$’Бñ‹ÿ WÆþ`«¤¢{¯¹ÿ˜ßü$’Бñ‹ÿ WÆþ`¨ÿ„’Oú>1áŠøÑÿÌt”Q¯u÷?ó›ÿ„’Oú>1áŠøÑÿÌð’IÿBGÆ/ü1_?ù‚®’Š5î¾çþ`sð’IÿBGÆ/ü1_?ù‚£þI?èHøÅÿ†+ãGÿ0UÒQF½×ÜÿÌoþI?èHøÅÿ†+ãGÿ0UøKÿ¹7Ÿ?j{ƒc¬é¦OÛWö[Í–¿¡k^ÕáÙûxÙ?ÒôOØizÅ—™·Íƒí–0}¦ÚHníüÛ[ˆ&“÷ú¿¿à£ò"~Õöz¿²Çþ±+×Éoõ¹]¯‚—KÌfÍ˜×øø—äÏ»¿cù5?û2¯ø'þ©_Wè=~|~Æò6jöe_ðNýR¾0¯ÐzæÌ?Þ¥ÿ^°ßú‹Dª_ÃÏÿJgœøÏÇwš&­¢x/Áþ›Ç_üU¡{ xF FÆ×FÒMºk>0ñŸ‰n-ï-¼à}[Ë}K]šÇR¾¸¿¿°Ñ¼;¡øƒ^¾³Ògù-j½ üNÞÚ÷öZ¶ñ¼k4ðÚ|øÓ}à¥Ô|ß%t†ý [âváé,ËfFñøgŒ"äiåþZúƒá~—¡ø¿ÅÿµÍ‡ŠôÙ57Öõ¯ ü¼ŠÞöûIÔá(ø%àÿÛÙZjºeÕ–­¦Åâß‹_j:Mí•Üwpy¶×1^iÐÍæÏíKáíy¼-ÿ¸ý”~øsM½ñ –Ÿñ;Æÿ<]vÚ…÷ƒ4X½IІu'<=lº(·‹Ãâa(⪹(B2“Q÷¬š~eÿ?üsþˆ‡ìEÿ‰›ñ×ÿ øAÿࣟôD?b/üLߎ¿ýõúÿ ݇üüÃÿ|ÿöUæ?iÿ…|7oâˆÞ%“L´Ôu4Ð|;£h~ñ/Ž |Fñ|Ú>¬ë0øOÀ¾ñˆåÑ´]gVLm;IÔnm¦u•8óO&ÊãÆ7xœá^S”a¯øWÖSœ£E^S””bœ¤“!„ÅMòÃ6Ìç.YJÑ£“ÉòÂ<ó“K+~ì!NrÚ1ŒäÚJçÈÿðƒÿÁG?èˆ~Ä_ø™¿úé­àø(ñ'ÁØNz·í•ñÝÆ=0?`¤9Î9ÏáÎGkñƒöÅøà¿ØçöŽý¢Óá4Ÿ ðþ«¢é­¢ü_Õþ+øOÂ_u wWð7€4ożD·juÕ7]TÉrØ}^†½Kâ3™J1ÆWŽŒgJžo:Ô$ªJ1ªñ蔹©Nj¼*R,)¬;†o˜ÕúÍ|N—³¥“J2–•%¿ÙjXÍU¦¨û •g[›ÚSƒ¥(T—ÑðƒÁH¿è‰þÿø˜ÿ?ú¨ÿ„þ EÿDOöÿÄÇøñÿÐYþÿ‚ªü>øÕàÿ‡ž ýœ>|iøîÿ<xdÓ¾ êðFŸðÏÃþ-¾¿øu¡øšÿÇ>ø‹áíMTªññŽI–)eµ0ô±xœçW^¶i†”é5›¸ÎŽ”â0•ë·/W†¡R½iÔ…,ýe‡¬³œÆT±0ŒéÎ4ri(©Ã VŒ*%•ÞlE T1T¨5íž 51³§ '³­<øA¿à¤_ôDÿaßüLýÔ¿ð„ÿÁG¢G’O¿±5ÀE/äÙþÙÌAc wû ÛÛ<òcl"âêÒ05Ä1–‘?Bÿá;°ÿŸ˜ïŸþÊøNì?çæûçÿ²¨Sô$Ë?ð§9òÿ©¿šûÇõ|Gý3ü’ùÔ¯ú×ÈüŸÐ?hˆßá§‚~|*Òµ¿Þ?ã;j^ø…ãkxKáû~Î_ìþüs—Æ^:Ðü)ñS†ÏÁ?u='Á6Sh>ñ߈¯uKK¨tý>*Gë?ðƒÿÁG?èˆ~Ä_ø™¿úëæOÙþ=3öÎÐ/¥eD‡Nÿ‚ënfÌÿ‚¾ü„g‘ÔÈç®+ö‹þ»ùù‡þùÿì«ÐÌp´p5U,>Y…ÄÁÔÌ/SˆÌUEì3|ÃJœV†‡$(ah«ÊœªJnr”åÌ’ó²ÚøÌÆ‹­W2ÅaåyzäÃQËT¯”e¸Úµ%õŒzœÓ¯Šªì¦¡rƵüøÿ„þ 9ÿDCö"ÿÄÍøëÿÐGü ÿðQÏú"±þ&oÇ_þ€zû×Yøk§é­üÚ´ö:mõä+*3DÒÛZË4k"¤¨æ2è…tb¤…e8#ñ×áŸüË_Ó¾ ~Ͼ<ý¥­>|<ñ¡iqã¯ÚNçúŒ&ðÝ—ÀýOöGø¿ûOx3âÇÂmOëþ#¶ÓµøWoá;ý+Wºñµõ¯‰ü!ñ'Â:zêwVº/ˆ$óx¿®7“epŽŽ¾"sÄg‚†2XÈÑ9<ÞÕk5€ÄÔ–Ÿ5aJ®"4åBŽ"¥/V8dÝÓÍ3ZÓÄÕ­F…*8|¢­YÔ¡F5¤:yT¥É8R…Y¨Ñ–&µ /´XŒVo¥áÿ‚ŽÑýˆ¿ñ3~:ÿôÔgÀßðRœ|ý‡€ÉÀ?¶?Ç‚@ì °hã©ÀÏ é^_ðŸþ û'üZð_|}¥ÚxƒMð׿|5ðÿÆM^Ãâ_ì“ñwÃÿ| ñb]~ßþ&øßöqý§>5ü=ðïÂK]wÃz¦ã9—Åן¾[D|oãøa ߎ­½?Eÿ‚‡øÃÆ´ìíðç³—ÅK¯ƒßþ|bø‘/Ä=^?ƒš&¡áí?Áþø_Á?5+Xý 4ÏØü9ñG†|Vþ(}ÛáοñM­ËûdxŸvÁ¾wüÿöðÛžO_$ãèk|58b%ZL«B+¬«PÄf’«N¦ˆÄÒ”U|ʽZTÔ”éM8JJɵ%ωúÖ4jÇ4ÆÖ¾7/£*U©e^Îtñ8ü.¬eì2ú5SöufâáR M'wñ³âÆ«ðʇÚ7…<(ž9ø‰ñsâÃ/†þ¸ÖÃúv­â{Ä/¿—Z×E–­w¥hš‚¼!âßê“hú‰üCuk ¾—á¿ ø‡_Ô4í.çþÕÿ‚‰Ñ­þÍ¿ø’¿´gÿ@-Rý¡gû7í ÿÖ“8ÝûqÅþ~Êßµ ¨Æ¿Wÿá;°ÿŸ˜ïŸþÊ»hÃËrúõrZ­loÖªT©‰Çf8od¨â©CŠÃÓpq§ÎÝHΧ<åïòrÁsÖy†71ÇÑ¡›â2Ú8á©Bž —VU}¶Ž"U*O…ÄOŸš£‚Tå(E{œ×rü­þÕÿ‚‰Ñ­þÍ¿ø’¿´gÿ@-Ú¿ðQ/ú5¿Ù·ÿWöŒÿè¯Õ/øNì?çæûçÿ²¯ÌÛ£öáøÇðSãÀÿ†? <_á¿é_~|bñlj|Cuÿþý¯ÿà úû_ü>ñ'Â- CÑôÿ‡²Å/‡>&ðV‘yoñY¼Õ|câµÕ´G¼Ó´ÜÙ__Æ.r–c–Æ¥ O„rî|DëBóœæ½ #UÊusHA[ƒ­(ǙέNJ4£R­HBzC,ͦªIqFcjPU'ÿ ¹$ÝJT’Q§•ÎZÔ©)4¡N.U*Ρ9¬Ïí_ø(—ýßìÛÿ‰+ûFôÔmªÁEÉ;eïÙ¤/`ß´‡íÄqÎHý‚ÔÙsÖ¥ðÏü:m:öïáí×ÂoŽ?´ßÅË-'Q×Gø#û<賃¶à…?³GŒ¼{ªjÞý¬¿jmQðÄš—í¥êÚWƒþ%x«Â=Ò þÓøiuá­ž >#ñÝH¿à²_›Zðö‡áOüZøåâ_‹^ Õnþ ü:ømàÿ…üu©ü>ð×ìùð3㿊µ(#øéûHxÃâ~½ h4}VçžÅûëIõ[ àv¹£ü=ñ'õM©ârúÕ%Nà*¸áhc/ω!͇ÄUuT*ãiÕTT¡‹•\L©Ç ‡†_˜Ô¯^œpuYÙÙÂåO‰3>i}fÐŽ_ÃõdÖН‰kÙeõ#)S¥ìçìã)V’ÄPtéÏÚŹµ?à£?ôkÿ³Gþ$íÿÐGö§ügþöhÿÄý£¿ú+¡ý–?à¢ÚÏŒ¼A |3ø±ðÛãHºñçÇÚÇá§ÃÿÚVð·Â­á‰5o„þ5M ü0³ÒtOZ|\²Õô„ŸfŽßÆZ÷Á]3áÿˆåðµì+ñ#]ñUôKªþ›Âwaÿ?0ÿß?ý•BÆeÒ„*G„p#ÏNO6âóÂöŒãæ—%Ej”gnJô*RÄQ•L=jUj/©fžÒ­/õ§0s¡Vt¦¿³ò sS¨éɧý›¬yáR/iS© ´jÆz5iCò£ûSþ 3ÿF¿û4âGþÑßý•¨ü^ý©>_ø/Qý¡?gÿ†øyâÿˆžø['‹¾|døãO@ñWÄízÛÁ¾›TðïÄÙËàeΉ­xçUðï….%ðÿ‰ußi×>!´Õ‡†/t-;]Ô´¿ÖøNì?çæûçÿ²¯à£þ%·Õ~|Ž c“?·Ÿüî 1þ·ö³øcr òsŸ°±ú)®Ì½e™Ž.Ž|3„ÂGåIâ¨f™ÍJØw(6«R…|}Z2œ%iF5iΛÑNÓæÆÃ6Ëð•ñ«ˆq˜§†‚«õzØ –«r¸ÞIPÀS­KU'J¥9¤ß$âÒÿŒâøMài¼Yý{â=FëÄ^ ðO†<7§41ßx—Ç?¼c¡ü<øá«i®%†ÞÚOxßÄþÑ ìïåX-û^ÉÉna“2?ÿÁF¦%__±eºÊ‹"Ûß~Ù_ã½€:†Þ%ì)¨Ø¥Ô@ì¸K=BþÕeW÷·P„žN#ö¬ÿ‘;àçýžÏü×ÿ[«öx¯ÔøNì?çæûçÿ²¯8CK°8leZ˜ìe ¼M\l:x|>]R’§&3 ›”ñUyåQTm((ò¥.o^´«ÕÌ+aãÄa)QÁàëF8zx9ÔÄb1ð¨ç,^+(a©(F ~ñ¾g%oÏøAÿࣟôD?b/üLߎ¿ýôÂÿÿ¢!ûâfüuÿè¯ÐøNì?çæûçÿ²¯ˆ~-þп´?><ê³Ïì¿âŸ ï~ü0ð‡ÅŠ?>;|)øñ»K1|GñŽ|/à‡^ øaà_‹¿³´wz–¢~øÇÄÞ)ñÝÿÆg_Úi~Ð øoâYµ¬.#ÙÕ«,ç1:¥*’t²woo‰Ã`è¥eR©7S‰¡G݃5RU«:xzukSå¿áÿ‚ŽÑýˆ¿ñ3~:ÿôÓÀßðR~O‚_°úŒtoÛ'㻜úä~Áˆ1ŒqÇœ ÿÁT>~Ï_þþËß´UŽ›eñ‡â‡‡| ׋üñ+ölµð=ÿŽ<^/ôHàðŸÁo~Ò6¶Eï…µ_i7Z&™¯iÿ³÷Š<1¢­õ´Þ ñ¢éZ/мC£UðŸü×á_ˆü?§ø›Wø ûMøLñ¿Â?|aø<)ðu_Ú/Hñ_ˆ|à½Âß ô/ ühñNµá¯Þxçâ¯ÃŸÅ£üt°ø9a5ç‹-5û}^i~"ñV1ÄB«—°ÉòÜDc_…ŒèTÏäªbp”±5êá¡™F£Å<>‰£ƒpXºøzn½ƒRkêØ¨JëfÙ ²£ÄJ•hä•*9Zx|-Z³Ž_*Q£'üVý†¼;ã…ÿõëžÐüu«éçöʵø±i®ËáojÖ¾ ý—¯¾?|UÓt½¼IðûB×Þ.W*^Ò¥5ŠÎ]êÑöJ­;,ÞêTÝhFWIsª”Óu)UŒ\6&Œ¡ ¹¶gN¥ObãN¦'„Ü+Щ‰¥W–YTw:ãU5yJŽ' ^1x|U ³ðïøA¿à¤_ôDÿaßüLýÕÆ|Gñí¥ð+Àž(øÁñ£àìÔŸ ¾è×Þ.ø™ªü"ý¦¾&øûÇ>ð&‡ ê*ñf•àÏ~Ê_ 4]~ßÂÚºö©`þ<Ò.äÓtû¦²7 –ïúÿ ݇üüÃÿ|ÿöUò/üÅ–šŸìûuXÅ4¯ß˯øù¸ÿ®òÿèÆ¯À?ø(ßüˆŸµ_ýž¯ì±ÿ¬cãJÇ$ÿyõî—þ¦aOf¿À¿Ä¿&}ÝûÈÙ©ÿÙ•Á8?õJøÂ¿Aëóãö0ÿ‘³Sÿ³*ÿ‚pê•ñ…~ƒ×6aþõ/úõ†ÿÔZ%Rþ~úS<ƒÄv~4ðŽÇÅï‡z#xÍu Oð·Äï†qêvZ>¡âíD½Ô5x—Áwú¬Öº ?¼'.±­ÙZéúýö¢ø¿CÖ¥Òu_h“hºí¿’‰›ö—‹ãhø»ûD'†ãð#|?›öToÙËãDÖñxµ<ÛæÖSXƒA¼ðC^ƒ.é¼Eg2i1´-¿¥Ð„¶1ýuEe ÑJ\ôÔ¥*2 æ¹åJV\“u)Öº’Œ*S:ЊQUyb²©‡r’p©È•HÕäjN*¢wæ%Jms7yFntå/yÓæroÉ4›_üEñå§ÅOhøNðÞ—«h? >ÝêFµ«hqëSÛÿÂCãïêz$úŽ„8øc¤\þÌŸ¿gß xƒâ.½¥üCð/Ä_xOOñÿÅßꚟ‡'ñ†nì`ðÖñ{Çžø×ã=#ÃGÄÜj¯Œ|7ñžOÛêÓé~ðž¥àoxWáΛðïÃ_ÙöŠñŒÅÿ´§Œõ?|QÑ/|5â~Ö¿hÏ…_~9xcPð&ãŸøCáÆ•ð£ÄßðJÏÙëögÓ<†>5üp¿»ñeïÃï|BMwÆGö›ä}TðOê‡ü1ìGÿFWûâ-|ÿçN_Øö$S‘û~ÇGŒ|ß²ÇÀV“|>#>øÏæjeÉ¥77_7RpÃÂN8j)¿ªÕ…j3SþÔç…e8/k^œ¡[:XŠ•iT© 5,ÙAÒúŽWì䱜?´kòÔŽ.0Ž&Wö5«S«ìá7N¯=5V¯Æ´UHüáŸÙCÃ>ŸB¾øeûFþÒÿµh×ÄV¿õ}óà‡‰/>8é"ø§ão‹Í£üO‹âGÀoéÖñi(ø•ñ×EÖ¾Xü8ñe¶…âÝCM¹ñ ãZh×:_­üø?ðïökÍ—Ã?xþÛÂóøáÿ„5/êw¾ŸÂš¯ˆ~hž¶øµumaá-7T¶øŸâ éZãmCIÕ´ß x†Ûú5üž·×`¸Õ®½ƒþ›ö%ÿ£*ýŽ?ñ~ó¼£þ›ö%ÿ£*ýŽ?ñ~󼪧ŽÈé9ºoi9Nj8 2‹æ–.~Ï—ûO•P\v.½<:J…,Mg‰§Nã ‘‰Ç5©n|[7V¥,Ó)©ÅRЬ¦òŽnéQ§‡ž#›ÛÔÂGêu*K )Ñ}¿ü,k_[ûîþ&ƒñÐK\9$¼ØÔüµÄÃ~Ä¿ôe_±Çþ"¯À/þw”/ìOû«¤‰ûþÇ‘É+Æñ~Ë?btu!•Õ£ø|¤2°[9R24Þa“[Iæé|×éøSò×çÝŽÙ¯ýeßøtÅyÔ£×ðï§Çß¼oáý3ã‡ÃÏ6¥øcâ~™ÿ’o‡ZÓyÐÙxÀ|Eÿ‚©ü'ø©à¢Nñ¡¸oü4ðçˆ6Wñ¿‚4x”_~¯ÿÃþÄôe±çþ"×ÀþwôÃþÄôe±çþ"×Àþwõ„ñYÕTç™EVŒ#[—„¼ãN†; Í,ÆS…°Ùžc‡nœ¡)QÆâiÍÊ5;c<æ\7'Û9áêJܹJ½êahO[®j4ä¬Õ×ÍËð x‡À7¿ þ4~ÓŸ´wíðãWÖü1yâ/ü[°ý›ít¿øKÃp_¬ÿ üa7ŸÙÃá~§âŸ†¾0½›I¾øƒ£ëº…ö¯ãkoÛxS_×®üâOˆ>ñ–Ç…>x[ÁZ¿À]oÃß>:A¨~Ïš<áɵ-sÁ> “Åÿ|u­xwY> Ïâ‡:¥Ö³á Âà]/¾-Òn4Œ‹¦ø>Àx“⇉/õ¯ßø›Þáˆb?ú2¿Øóÿkà?ÿ;ú~Ä¿±(Ã~Ç sû*ü'R~’O¹$žõ²ÌrxÍÔ\ÍT•zX™ÔXJ ¥JÔpòÂFUj,Óžª–¦#Z%*xŠÜ–"5a˜ã£ˆ›f¾ÍQX¶4c ”ãJ¦*á ²rš§NDcOÞp”5Máp.›ƒÀ`¾¯Ã|Nø}ð£ãN¿¢êŸì5¯ˆ~ðõ¬+¦|'ñ6³¨Ýü¸ÕâÔ§ÿ 7‹~B-ü)ñ7_¶½¶Ðo|9?Å;X|?Õü3¤x“á®àßO¯kz׸ÂÆµõ¸ÿ¾çÿâkˆÿ†&ý‰èÊ¿cüE_€_üï(ÿ†&ý‰èÊ¿cüE_€_üï),Ã%ŒT#,ÁENu9V —=Fœæ×öž³Ÿ,y¤õj1‹vŠHk5”¹å‚Ë\¹!NÿÚ˜­!MZ0ŠYBQŠrœÚŠJUjT«+Õ­RríÿácZúÜßsÿñ5ã|k¦x›âÏìcá{[–—Ä~ÓÞ*ñÇöV'’èxGÃß°çí«á}Ä,¥ Ŧi^"ñ÷‚4k»™UuhöãsÝ(‡ü17ìKÿFUûâ*üÿçy^™ðÓà‡Àï‚×½çÁŸ¿þÞø‚Äišî¡ð§á߇:ޱ¦‰¢¸þÏÔµøgE½½²óá†Skq<"G1’ …<Ó,§J¿ÕÖ2¥j˜lN1«†£Fí8z˜g9T†7%ìãUÔIR—;%áÎêG:˜lÇì©ÖÃàhSŽ+ˆ•JXìF"¢XL] W$iO/ÃFN££ì¹hò){KO—’_1~Ù^(Ðüñþ ÿñ꥝‡üà?ÛwÞ ñ‰u :g‡ô9~þÐÞßÌ[­[XÓ4{#Y.u [SÓô»(n/¯m­åê¿á°¾ÿÑDÑð.ïÿ‘ëêxwÞ-Ñu/ x»Ãžño†õ›ce¬xsÅZ•âOêöm$rµ¦©¢kv—Úf¡leŠ) v³DdnäR>zÿ†!ýˆÿèÊÿcÏüE¯€ÿüÀW£’g|-K-£ƒâ³>ÄÖÂT¬°Õ²|Ï/ÁÓ•õi*ô±¹^6N¤j9(ÊHÅÂÉÆ÷91y~wOŠÅeU²§Kì'ZžcKêS«B”h~êxZ±Œ©Îœ#&§(Îé7§9ÿ …ðGþŠ&‹ÿwü_(|oý¤’ÛâÇÃOŒcø%ñ'ÄþðÄÿ‡Õ—Å¿Ú;Çt-/Cñψ>x’+­.ÛÁß²¯í¨x³T¹¾ø~±I5Þ©à{?ÚÄQl|Y6º'ð¿Ú_ðÄ?±ý_ìyÿˆµðÿýðÄ?±ý_ìyÿˆµðÿýz¿Û^)Ó©›áV—µöu#Ÿd<ÐöøjØ:ÖæáÙG÷¸\Ez¼_¹Vv´š’ÇØqƒŒ çÃ.3äç³Í­/gV•h_÷ßf­(MyÆ>gŸüYðRËÇ÷íñ3Æ:ƒ¾7|Bµø•iãxâÅïÅ/…š$~<²ø5áIO…¼_â¿ü]«¼žýŸ>ê¨u éK£kúçŒô¶_éÑèz¬/¯þÏŸ±®¹ð¶o‚)ûQüXÓþkÑh?>Nß:·Óît+àw†uÅßWÀ¿|;â}cÄzφü_£»øzþ©ÿÃþÄôe±çþ"×ÀþwôñûþĪ0?b¯Øç×öVøÇ×’ßI?‰öéSK8ðÒŒ(Ó§’q´a‡Âa°ãý½‘r¬WC (®Q•b+Ö¨éJ.u'ÆP|¦‘F§¶n_oÛmE]»·mwwÆ8n.ŠŠ‹áx¨Ç’1,Ö1Œ9çS–1URŒTêÕ’ŠI'-ZÇü6Áú(š/þÝÿò=xWíûB|0ø­àß‚_<ã=+^ñž«ûxþÁºæ—áËIî%Ôu=Â?´&¯x¦îÆ9a.?°t‹wÖµx]®¢ÑìõWÈk +Q¸µúsþ›ö%ÿ£*ýŽ?ñ~ó¼®ãáßìëû9ü ñøÃá'ìçû=|+ñtv·vPø¯á¯À¿…>ñ4—ÐIm{mm¯øWÂ:N­mÕ¼²AxŸÅ^ Ô$Uo#KÐ<=¤êZΩtÃe®Ÿcsq! è‹ñ"ÉÕ]gGPÈë$̬¬2¬¬ ¬ ‚A â½rîÒÎþÖêÃP³³Ôl/­®,¯¬5Kkû ë;¸^ÚîÎöÊî)­nín­å’ ‹kˆ¤†xdx¥FGe?6Éû~ÅI$Ó~Åÿ²ÓJï,³Mû/| –Ye‘‹É$²Éày$w%Ý™™‰f$’kã²ì~ Žáqk\UlL'B•:üÞÞŽ”¡(ÔÄa¹9>©))TöžÑ¦©ò^§¹ˆÃâ㌩ŠÃSÃWU°Øl<éâ1°®›ÃUÅÔSŒéaqj¢¨±M8¸ÓätÓRŸ´´;øXÖ¾·÷ÜÿüM|ÁñáF™ñ'ÇÚWů|høÙû:|X²ð¡ø«øÿà¬ß ïo¼gðþ-VçÄgƒüiáOŽ þ4ü7×,ü;âÝKZðž¼|oãO O­øžÃþ(Ó4Ox»K×=“þ‡ö#ÿ£+ý?ñ¾ÿó¿£þ‡ö#ÿ£+ý?ñ¾ÿó¿®©c²I8KŸ3Œ äá:xZTªAΜèÔP©O5ŒâªÐ©WZ*J5°õ«aê©Ñ­VIæê3‡Ô²× ±ŒjBYž&p¨¡V•zjp–Ná/eˆ£KIÉ7KFzn5iSœ>8»ý޼yâ;­Z_¿´—ü#úçŒþ|Oñ×[Uø?>‹ñ/âÇÁ+‡ZW†~&xóÅ—®>.jÚþ¯§ü.𥷉tK?‰Zg€nÚ«½'Áº-üÑ][özÿì¿ð{_ðWÂÏ7Š>(é_ð¥þ Yüøoâ[ðý¿Š|9‹â/„^0ðŸÄx.®|y¥MñÁþ,ø%à}D¹¸Ñ¤ð]ÅÔz­—ˆ¼®èÚÓ!úSþ‡ö#ÿ£+ý?ñ¾ÿ󿧯ìIû¨ÀýŠ¿c“Î~oÙ_à#;“lãó4C’S„©Ò–cJ®± SÁЦéÖ†¶YFte Ò2 °¹myà00 éÃ64(á°ð¤¿á[ž5%ƒËªN4¡Gš¶k‹®åJéây*ûl¢~ÙTÄÓXŠþ×âq«[êUÄW”þXÿ†{ñ"Óé§À×^.ñfŸ ø‹á¯Ã¿‡Þ2¿ÑüCwcâïxœØèré?Lü+·ð¿Â/ \xCÃwºýö›sãˆÞ7’ã\¹·¸¿þ×øñÄß5øVM;MÒí……®»â½FÛI‡ì†âßJ†Î Ë«û¸ç¾¸¿ÿ MûÿÑ•~ÇøŠ¿¿ùÞQÿ MûÿÑ•~ÇøŠ¿¿ùÞUG0ÉaN2Ì#*’ŠúŽÙÕš©RÍænJ3«zÓùeZuk4êÖ«9’Y´åÏ<_)?evólcætiÊ+å6”©P“ÃÒ”¯(aáK¨Ò¥ }¿ü,k_[ûîþ&¾wý¯þ$iû!~ÖÚeÝÓÁ7‰ÿeÚ7Á:$R}¢GÕ<[㯃7ðw‚ü?g Fïq©ø—źæ‹áý*ٵƥ©ZB0_#Ôቿb_ú2¯ØãÿWàÿ;Êè¼!û+~ÊŸ¼K¤øÏÀ?²·ì¿àh7qjмû:üðψô[ø<ÚF·¢x"ÇRÓo!uWŠæÊæ ãp0ÍiK6Êpõ)×¥õê•(T…hSž…8NT¥Æ©«¦¤â¢ê*UrösÖ2ÆÍ1X|FXl¾Œq4jЕhæšÒ¥ÐtÝHÒyeUÁIÉSui)´¢êA7(ýx¬—wHà —3«Ô2Êàƒô#øÿÿ‘ö«ÿ³Õý–?õŒ|i_¿HòÈòÊìòJí$ŽÇ,îìY݉ä³1$“Ô’kðþ 7ÿ"'íWÿg«û,ëøÒ¼œ•[×jt—þ^aOb¿À¿Ä¿&}—ðçâwÃY<1ãkÙ×ãÇÅ/ üBýŽ¿a+BñÂÿ 讘·þø)tuè.®óÛ¯ã^Š?ÕúÏüWÿšCÛOËðÿ/_éký”Âõø‘ÿFUûdáðãÿžÝð½~$Ñ•~Ùø@|8ÿç·_ƽ«ô?ž?ø.¯ÿ4‡¶Ÿ—áþ^¿Ò×û(ÿ…ëñ#þŒ«öÈÿÂáÇÿ=º?ázüHÿ£*ý²?ð€øqÿÏn¿z(ÿWè<ð]_þim?/Ãü½¥¯öQÿ ×âGýWí‘ÿ„Ãþ{tÂõø‘ÿFUûdáðãÿžÝôQþ¯Ðþxÿ຿üÒÚ~_‡ùzÿK_ì£þ¯Äú2¯Û#ÿ‡üöèÿ…ëñ#þŒ«öÈÿÂáÇÿ=ºþ5è£ý_¡üñÿÁuù¤=´ü¿òõþ–¿ÙGü/_‰ôe_¶Gþ?ùíÑÿ ×âGýWí‘ÿ„Ãþ{uükÑGú¿Cùãÿ‚êÿóH{iù~åëý-²ø^¿?èÊ¿lü >óÛ£þ¯Äú2¯Û#ÿ‡üöëø×¢õ~‡óÇÿÕÿæöÓòü?Ë×úZÿeð½~$Ñ•~Ùø@|8ÿç·Gü/_‰ôe_¶Gþ?ùí×ñ¯Eêýçþ «ÿÍ!í§åø—¯ôµþÊ?ázüHÿ£*ý²?ð€øqÿÏnø^¿?èÊ¿lü >óÛ¯ã^Š?ÕúÏüWÿšCÛOËðÿ/_éký”Âõø‘ÿFUûdáðãÿžÝð½~$Ñ•~Ùø@|8ÿç·_ƽ«ô?ž?ø.¯ÿ4‡¶Ÿ—áþ^¿Ò×û(ÿ…ëñ#þŒ«öÈÿÂáÇÿ=º?ázüHÿ£*ý²?ð€øqÿÏn¿z(ÿWè<ð]_þim?/Ãü½¥¯öQÿ ×âGýWí‘ÿ„Ãþ{tÂõø‘ÿFUûdáðãÿžÝôQþ¯Ðþxÿ຿üÒÚ~_‡ùzÿK_ì£þ¯Äú2¯Û#ÿ‡üöèÿ…ëñ#þŒ«öÈÿÂáÇÿ=ºþ5è£ý_¡üñÿÁuù¤=´ü¿òõþ–¿ÙGü/_‰ôe_¶Gþ?ùíÑÿ ×âGýWí‘ÿ„Ãþ{uükÑGú¿Cùãÿ‚êÿóH{iù~åëý-²ø^¿?èÊ¿lü >óÛ£þ¯Äú2¯Û#ÿ‡üöëø×¢õ~‡óÇÿÕÿæöÓòü?Ë×úZÿeð½~$Ñ•~Ùø@|8ÿç·Gü/_‰ôe_¶Gþ?ùí×ñ¯Eêýçþ «ÿÍ!í§åø—¯ôµþÊ?ázüHÿ£*ý²?ð€øqÿÏnø^¿?èÊ¿lü >óÛ¯ã^Š?ÕúÏüWÿšCÛOËðÿ/_éký”Âõø‘ÿFUûdáðãÿžÝð½~$Ñ•~Ùø@|8ÿç·_ƽ«ô?ž?ø.¯ÿ4‡¶Ÿ—áþ^¿Ò×û(ÿ…ëñ#þŒ«öÈÿÂáÇÿ=º?ázüHÿ£*ý²?ð€øqÿÏn¿z(ÿWè<ð]_þim?/Ãü½¥¯öQÿ ×âGýWí‘ÿ„Ãþ{tÂõø‘ÿFUûdáðãÿžÝôQþ¯Ðþxÿ຿üÒÚ~_‡ùzÿK_ì£þ¯Äú2¯Û#ÿ‡üöèÿ…ëñ#þŒ«öÈÿÂáÇÿ=ºþ5è£ý_¡üñÿÁuù¤=´ü¿òõþ–¿ÙGü/_‰ôe_¶Gþ?ùíÑÿ ×âGýWí‘ÿ„Ãþ{uükÑGú¿Cùãÿ‚êÿóH{iù~åëý-²ø^¿?èÊ¿lü >óÛ£þ¯Äú2¯Û#ÿ‡üöëø×¢õ~‡óÇÿÕÿæöÓòü?Ë×úZÿeð½~$Ñ•~Ùø@|8ÿç·Gü/_‰ôe_¶Gþ?ùí×ñ¯Eêýçþ «ÿÍ!í§åø—¯ôµþÊ?ázüHÿ£*ý²?ð€øqÿÏnø^¿?èÊ¿lü >óÛ¯ã^Š?ÕúÏüWÿšCÛOËðÿ/_éký”Âõø‘ÿFUûdáðãÿžÝð½~$Ñ•~Ùø@|8ÿç·_ƽ«ô?ž?ø.¯ÿ4‡¶Ÿ—áþ^¿Ò×û(ÿ…ëñ#þŒ«öÈÿÂáÇÿ=ºü›ÿ‚‚i~<›àGÆïˆ1øWñáFŸñ'öÅýµ_ éôK-\¼°ðçì¹ñ;Áº”å4W]Òf¯¡]·•i¬]M ¤ö^Gj÷‘Å_‡tWF(†¢©N¤oî)/gRî1«N­“•y$Ü©Å_•Ù_BeRSV}ïóþ¯øv×ÿÙuima-addons-2.3.1/SimpleServer/src/docbook/images/simpleServerUserGuide/sample-app-form-result.jpg0000644000175000017500000040047411625126446033241 0ustar drazzibdrazzibÿØÿàJFIFÿÛCÿÛCÿÀÿ+"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þ¸<%ÿ"¯†ì_Ñ¿ôÝm]p¶úÐðßÃ8)Ùø†Óâ“ãk? ^üXø_gàá÷Œ<7Ãÿ†ði¾2øq{¨xWRµñµ‡ŠuO‰‘êÖZ·Å AѵÝWFÓ<%aàü:ùŽ-ã| < ”#ŒÆc'F§ÕeŒ¡€k/Xª1¸š5ñiaëbpôªÎ®*”c‰©MQ«ŠÁ¤k¯g*Éå™FµI×ú­ q©Ööq)âUÔ£Jtè)U§JsP…Zê3t£>xQ¯(ºguEpSøâ…<ãOøGÇ/ãŸüAñ†—©øWáö¹ðãþõøo®ü3Ñoì5 gâOÄßíÿíóñBÆæÒêÞ÷ÃÇDÿ„~êmuÏí¸åÑ;K™Y œHé ßêÚ&Ž—Ä×Ú6·¬Xèë{%²Mn÷ido…ÛÙ­Í£]¬&ÙníL¢â/k ⿈òùæk t«ÔÃ×¥YЕJ¡N•~IUÂWÅ`ê©aëЬ§…ÅW„UUJ¤©âiסK€«—Õ…*²§QT¦«R«KÚ¨U§í*Q””+Ò¡^µ¨Õ¤ãZ)7MÎ T¥N¤ìÑ]]§ÃÍ8êºUߊ%¹Ó¼5âÿø~ÂâóãWí6÷wZ6µ{§ZÍtñ|i¶‰î%‚Ú9'hí­ãiYŠA‘ü§qž…ëa¨âpµ+¼M7QJ5¡J1\î +š2r“q“zE%Ëg+¾_蟾œgãÎ:Äð¦#Md•éÐÄÓ«B¥i78R››”jR„«SP\Ò”Ú©¤T—õE|ëû*xžïÅßt­^ïYÔ¼Aäxçã?‡¬5mcQ¾Õõ;Áÿ~ øKÃÑÞjš¤×¦£5ž…¢iÖFûT¹¹Ô®…ºÍ¨\Ü]¼Ó?¶êÞ&Ðt;Í'OÕµ8,¯5¹þϧC(‘Œ„ÝØi©=ÃÇǧØË¬ë‡¡ÔµµÓçñ?‰<-áˆnŸÄ(ðþ›©}Ó <³ šâ*ÒÁa±X|u<]jtaI㕇£:³”iûIÕ¯N„5êVœ!å8§ø†y‘bò>!Îøn¢x¬nG›f¹EwB•Gíjå8¬FVœ}¬a|5J­N*Té¦çnYZ{Í{CÓõMC¿Ö´›kÄ?ÚØ=æ£gmªkŸÙ6ëyªÿcéóL—zŸöe£¥Ö¡ö(gû»¬÷>\LëW÷~4*ŠÇMÓ>x»ã4¾5ø‘uã¯|Kð¯ˆüwðWÑü+eðûÇZφ´­SZ°±Ñu/‡zÇ…|âÛ ü8ð_Œõ/ü8ø½Å]⽇‰Eÿ¾#_h?Pü,Õ"ñ7„ Ñ5´xã{K("‚Êåšåäx¢=ü*¿Ú#þ…_‚ÿøx“¢êrÙ~ÂóÂ'©x'þŒ)áé¼=ö©ã¯ø@<(Þ-ñN‹ÿ Æ+á_pøcÿ ý¥|u§x j±W„­¼[ûC~Ç<ý­?dø3ö¬²ñ>«ñ6óáî™ð¦óSø3ñXñÀï†øâýfïãO-ü7âm\øÉà‰¬×Ä·ºþ·áË#OÓuܨ⽼çNŽ 9Ó¦ªÎ.8ên0–[ŽÍ⟵ÄSN¤ð^eR“ugWˆÂÆDéX Ú%Å—çì¥ûUþرø…ð§Nøk/í)ûJx¿Çž4øçâ/ üzý§üCðóáÿÁïé³Oì}ñâ/Ãß |D‹á_Ç=pͧüTý¡­¼1ð¯á߆¾é>N_jz·Š< g§i¶þ!Š8ú5¥‹Q¡qÁ帬ΥHÖ­RÇœâ2ZúSÇJj«å¹Ýz؇«áð™>'^¥<-| |DG ˆ“ÃEbqPž*½*ሎ .z¹n5Š’ÄáirT–1Ê=òV©[5ÃaáOÛ¸Ó—éOü*¿Ú#þ…_‚ÿøx2øáŸÚ}ážð⯆u ø[Á?¾ÃãoxÇãÃTÒµ=CÅ£EÐüG§øRÊÿÅ–?´üãã‡Æ¿„*°´ðÄÙƒâÂÈþ)x†{O‡Z÷í]à›?ˆ^ ñoì/ûdø·áæ©¡j¿µì­û|IÔ.ôßü%¹ÔìîÃï‡vzÖ‰áxoâV©­Új¶¾èç­¸ª52êTê`iB¾*œáŽUiЩUR£Z~²ª×¥ˆ“SÂϱÅQ—Ö0ήª‚… ’XiKЧ \§NŒêÒÃS‡·§†úÔðÕç<$c…ÄÒ‚Tñ41N\"k Š…KTÚoøU´Gý ¿ÿððxãÿœ-ðªÿhú~ ÿáàñÇÿ8ZðkßÛÏö”ðÿŽgýžõŸÙ'á©ý¦¼Eâ…zÂ/ X~ÕºµïÁÍÁ?<ñÓÇiâÏ‹Ÿîf»|2×ü)áÏÙÇâD^'ð‡~ ür¶›ÄwÞÓ|1âÏé:ïˆ|GàîCÿ‚¬x³Ä>;øáû<ø3À:OÄ[ü8ø•ãï?üKð»áݧÇ-+öñ×ìËñ à/ìÅñ6÷övÕ¾þÒ_|㆞.ñn‹ð·ÆŸÿfߊŸ¾Oáü3ð‰./<[£øiÖ©Vp§O‡”êâhá)A¼\'Z½|/×)ªpž.2œ=Šq©Z Ñ¡‰SÁV©O PŒF•g„ž2XŒb¡K ]y*XiûS«*Tã5 $š­[ÙV¯‡ —·Äàhb3,=:™~®&ŸÖ?ðªÿhú~ ÿáàñÇÿ8Z?áUþÑô*üÿÃÁãþpµå_²/í ûixïÀz6¹ñoà‡Ã/iÚ·íiûIü0×üàoöw ð×à§ÃŸüzÑôŸø«Ã#ø ðn-N_ xŸÀ~ ø7¥x[Á×*×üK kVŸé~.øO¯|Mñ_Â-âGÇ~4øû$|,ðïì½á?iþ1o|ZÓ~üiøiðsâ÷Æÿ~#|6øxÿáRx ⼿ ´½ çãe†¾žðn±oLÿ‚œ|iƒXÖü=àÿÙ¢/‹/†¾)hñ'÷ãÄŸ ÜXøÿ*X§[—â¨à°õhæ“Ëé`'Oëu"¦j°Æž.R‡Ö7 —µTýœëÆeJ¢” «a1mí±xŠjƒÆ*®kG—Ö«…ÇEß gS ‹Ãס:0s¬Ü%(ÓqRäûKþ_íÿB¯Áü<8ÿç Gü*¿Ú#þ…_‚ÿøx9~Öµ—þ?|Jø…â-¶Äé_ øoZðÞ¿â­KâÇÄ¿ÚÇOý”>1x&×á7†,|>t¿|Eøáÿˆþ ø}®k:<ÿüAð×ÁQxÆÞù¿Aÿ‚½x§ÅŸ|à_~É~/ø‹à+‡ø-áÿ‰¿þÇûL|nð‡‡üañ“ៀ>%Ǭ|3ø³ðoö3ñçì}ñ à‚´¿Š>¸ñOÅ~×µõðÝŒ0þÙKà¾x‡öµø§¡Çðsöuý õ?†W¿ðÛ~Ê_ðMþ=ðOŠtGÄžðO€"—á»à¯økÃú·Œ~!übð޵ Àþ'+b^,-lž"9Ro&«Ñ£O_ )C(GCQWÄ`å(âhQUjU¥Ѩà©a«WŒgKZq”•ð0^ÍÒÆÕŽ'šxxEájgb)QÄEºUëºThJ¥JÔ¢ÿH?áUþÑô*üÿÃÁãþp´«ý¢?èUø/ÿ‡ƒÇüákæÝþ Qñ;Æÿ4„:oìÓ¦üÆ¿ ,)k:”ßÁŸ„ÿ ­>&j^+Õõh~ümçĉڿÁï |AøO xkþ{#Ǿ ð埊YO8¦ý•›p•“vWµ¸ó WÁá*â!‹¯)SövS†ŹէOU4[ø¬Ö¬ùºmsÇ–çY|&Œóã_޽Wög"¥Ò|Mâ)µÝ KÖ4ÿ5‡ˆô_êzv©áx§\–ÞóÁ—¬5M3WÒ¼UðÏáõÝ„—øóM»²ž3x$Š KB‘Ío3þf¯üWÀ¾,Ñ>éÞð/ŽõŽ~-ñ©ðˆg«(V×âµí îÍ~!\kókK£é–º…ôÉ/5 '[Ö%ЭuÙ-ä³ÖWÁ« üB»ð'èg†ß~¿ðå»+öÏ~~×û0~½3šûþ àü£+É¥Ã*ò¯ÎéµR³œ!|>"¬]£.~jP’NRJ2jP÷£oËóÌn+ ¯S½&Ò¥J.JUðôä¯É~W“Zr»Ù©{¶~ËExgíA­êžýš?hhz•þ­xàgŽoGÖ4»Ë;SÒµM+À> ¿Óõ-;P´’« û»xn¬ï-¦ŠâÖâ(ç†D’5aù­á¿Û;Qøszmüã—ñ÷…ÒVAðûã­âÝVêØ7˜þŸ¥x£â&“æßß^ëºßü,+ãqÔÏJðƒÃ]1soøvkÄ›‚Ã㡉Œ1ѯ(â©Qu¨Pt%F<¸…MÊ´Ol½œáJ¤$ÝGM$ÞÜCÆù' ãð¸<æ¼0´ñXu^5åVšqµ9IP“JÔé*mÖt\B•J£†¯í'*_³”W‹|øëáÚ7á¾ñCÀúˆ´ÝQÔ5]2+YiÑÎnt‹¶µ¹’ÃWðþ­â/ø—O,ÿkø?Äþ"ÒmuÔ<9©^Øø³@ñ&£ûM{pœ*B5)ÉNŠœ'xÊ2WŒ“[¦Ñõ8L^…Ããpu©â0˜º4ñzôŸ5:ÔjÅNH>Ò‹NÍ&¶i4Ñù©ûKÁHü)û3üQ×>xƒá®¯â+"ËEÔ!Õt¯YZ¥Õ¶³¤Ùê(³Y]éÚ\Ã4÷0y)uv¯omëMÚ~ÍÉúŸüoàþ”eüñÔ¢Û¿‰ü:äá¶‹%¼E•˜g-€¡†â¿ŸðW;›MSöèñ'…®¼g xEîüðø[Ëâñ ‚éeðÌ“OoÞáÝrÞÉ® ¼6i&­6›“]®.b¶Šâx¾;ýƒþ"| ðwÄÍVڧijſ‡~"ч4¯hiÚŽ§g©j«.ž¯c­xgNÕàÕîžâCosý¸ºŠ]*E¤Ég%­Œv¿Üy_†^Sà®Ìñ<ŠÎó¬ dy¶e>œá%ˆÅã²ÊšŽ/ízT#WZ§7²„(áà§/f©Æ1‰ø^S?x6⊔8Ùä™> ‰x‡,Ê¢ò<ƒÝ,¿7Æà°ôò¹WöTÕxhÔÄV©ˆ©R2©RRÚ_¿?ൠþ>ühøuðK¿üLðÞ­áã7†¼=ÇŒ5Oé^ñNŽòé6ZƯ7ôo\]XØk ÝZi~#»¼³û-ÂßXCqâ§ö‡_ŠxçÂ|'ÂØþ|%•VÊpy®OW‰¡_˜bª¼DkƧ,Ê”%M7¨Î4ÛMÙ»3ê|7Çñ}l_e£èZ—Âí'â«ñOÄŸ4ҤѼA£ø‡Æº>™ã"Þ1Öþ"x“Ç]ø á'‰5/x3Q‚÷DH/ü'áÛØR[›õ•bºÑìçeTÓdE‘R@#º†+°Á=gü)ÿÏþÿZÿ*«ù«;áþâZ*î]…Ìé`1ø<Ó Ldý†;ZèUŒ¡(IÇžšzrÃâè:˜\]*øjµiOö,i˜eu+UËñUp³¯B¶¬©µyQ¯NT¦½å%¨ÎN•X¨Ö¡;U£:u#¯š|ð¿á§Ãa©‡ü à¬ýŒêãÁ~Ð<,5S§ý«ìRŸcöï°ýº÷ìjó~Íö˯'gÚ%ßÚËWKñG4FñM ¨²E,R)I"–7 ’G"1GGYIV+ØáKø§þôü ÔùUGü)ÿÏþÿZÿ*«ÔÂÐÁ`hSÂà¨a°xj\ÞË…£OBŸ<åR~Î(œ9êNu%ËÍ9JNò“o–µzØš’­ˆ­V½iÛž­j“«R|±P5I¹J\±Œb®Ý¢’Z$žåð¶Ÿ Î{¡[iž¾°»–o¶ØèöBáíî4ëý6âÙI<»ãqo%Â^Z¥Õ¼qcwh[ ¶¶†Ò‚+—bYä–I$–F–içšVy®.n&y'¹¹žI..n$’yä’iÛÙ?áKø§þôü ÔùUGü)ÿÏþÿZÿ*«dè©9®U&”\’ÕÅ6ÒôM·o3/ëúû‘óÅχð|XøSñ;áeÖ©q¢ZüKø{ãO‡÷:Õ¤Ý]ixËÃz—‡&Õ-­e’(®n,#Ôšî%–8æ’äEbÃò³\ÿ‚PÝøZÖf’§R Ýõiµv“³iþ§áïž(øS‡Çá<>âì_ ÐÌëÇŽŽ”â'ˆ«Bšr­ÀbëB<”©§NHR“„e(9$Ïþü*¹ø-ðÃJðÿˆm0ðkêú×´-lhz5æÛMoEÔmu]KíMÃÚÿÓ¿ð¥üSÿ?úþj?üª£þ¿Šçÿ@ÿÀ­Gÿ•Tf™Gœä•¸s3ÁÓÅdØŒ5%Lª×‚öwNX~JôªÓÅQ«‡5hbh׆"jTëR«°Œ×Ãb¸‡8ÆçØî'Äâý¦w™fXìÛŒX|-8×ÇæUëb1Õe„¥B(ÓÄÕÄVçÂÓÃC ¡RTaB4mM|OðIø‹ª®ã¯‰~ðÿÂízËáχþ·ðxÒ†›z4v3\^ë3hº–µ£3CÕ ÔôÏ„žÒumB?ø/TÕ¯5mVçZñ¥ç†< ïuë¿ð¥üSÿ?úþj?üª£þ¿Šçÿ@ÿÀ­Gÿ•UÉÂ<1”p^Eƒáü¢¦.®êÔ–#0ļ^;‰ÄTuq8¼UnJtÝlEYJ¤á‡£‡ÃSo“‡£J1§|Û4ÄgêØüL(R^XÆŽ›¥‡¡J F•1”ªTä§£U«V¬’½J³“r~mð¯þN#¿öEþ0êqð½ëQý¾êßð–ÿhx?íðœüaðÇÏÿÅA☿µ>,ü1ÿ…{ÿ?Šÿs­Çö/ìOøU^ÿ‰öO j_Ø?ñ7ѯÿµ5Ÿí*ñìÉ‹¾Çÿ ^‡ðïÄÿÙÿhûü$:bk_aû_‘ö¯±ÿih?fûOÙ­¾Ñäìó¾Ï™»Êo5ÿ eàú'ÿðÒ?ù–¯«æÂÊXzßY­‡ÄP§ j¥”—²Ì)fte ¿Y£8ûñÞ‚5oÇí¥Oᯎÿ´†€þ4xŠÛÅ6þ(ñ‡ÂÔðÏÅ=ü&±ñÇü'5‰^ ø_'ƒ| ñCþ?ˆññgˆPòßÿðK_Ù‹á?À‹ï‚~-¶øñ³þÿÙÖÓöhø•⟊¿hß\k ï<;k¡øãÃ_ ´ÿ‰?~ \~Íþ ñìö–Ú–µàoׂtBúG„`”ÞxB}¾ÿ†2ðGý‚ÿøHiüËQÿ eàú'ÿðÒ?ù–¬¨ÒÀá㈅]zQÅSÂÑ®¡ƒ¤”èàðµ°T(¯ößr”pxŠ˜IÓ§Ë ØhaèVJX\,hm,Fa:”«J4ÝZ5劧UãkûHâe˜k}cŸêœÒ¯ ÕÔÌéV“u(æ±ÊR†'ˆ©QÞ;ýŒ—Ç?´v›'Ä(4ë?Úo€þ š#àéõð·ìóð‚Aâƒu׌Mãø®þ2¨ñmĺvŸáãñZ'»ðGŠÃ:‹xÏoâÏì û,|j½ÖuøÅ–>$×üY®øÏTñŸÃOŸ~ øúmOÅ~ð_Ã/i0ü@ø1ñ+À>5±ð/Œ|ðçÀZGŒ¾ØkÖ¿<[?ƒ¼9¬øÂºž»¤ÙjqaÃx#þ‰ÇÁü$4þe¨ÿ†2ðGý‚ÿøHiüËPé`e)NxÌLêN.3«<,'Vq”ðÕeÕž9Ôœg[ ‡ÄMJMTÄц&iâ/PšUq¸uIaèapꊵ%‡ÄN‡²_WxKCÙ`¡Ê¾­)á쬽ŒçOà©4ö¼QûþÊÞ,ñ%ψîüã OÀV_ |Cà_‡~=|*ø1ã?é~ ¼øy¤i>ü1ø›á‚_çÑ< xžе¯|?ñ½¡èzO†tý'S³ƒÂ^]‘´ÿ‚dþÆÚëêÞø‰ã›ßißÙ!ñ/Å_ÚSöøÁãkKOüUøwm§ê>)ücñ‡Ž/,ôÿ|møáí*Þo¼zE—‰#:ZÚ\h>›GÔÿ†2ðGý‚ÿøHiüËQÿ eàú'ÿðÒ?ù–§`éʬáŽÄÂuÜ¥^PÂÂ2­*•]zެ–9:Žuå*ÒsmÊ«u%yÉÈÏý§’?«a90ôéÒÃÃë9(R¥JztèÇêv¥N p£NQŒ)S…8¥¨¯Eø½û~Îß5 [[ø‹à½nãŲ|8ò¼oàÿ‰¿~üBðÍßÂIü{/€u‡¿þøßÁ¾7øcâMßâÄ]çŵÿ x‹ÄñŸˆ|'âMSWðÎ¥>’ÜFŸÿôý”´[á–©¥ø;âŸoðŸFðމáÏ ÙþÐÿ´u¿Ã'|Q­xçÃçÅï…q|Y_†Ÿ|oaãë6¸ø‡ñÓ¼y«øÊðø«Yñ&¡¯Ám¨CGþËÁôN> ÿá!¤ó-Gü1—‚?èœ|ÿÂCHÿæZˆSÁAÞÜL֩㯠%8¿®Ñ¢°ô±—XÕþÕJ‡î)â?‹ )RŒÔ=ÕNX¹%PÃJ+ ðJ/U¥ƒ”éÕ–'ƒ²Ã:”éÔtîœéÓ›‡4bãÛ迱'ìÕáÿi~0Òü ®Eªh5øßÃ~<ð¯ŒüaேúŸŽï< àËißþ _øŸÂ^ðÞ‘à{Å~+ÕüsªørëÆ³¯ˆ‰ð·üö:ðm—ôÍ áˆF‘ãë^DÖ>4|uñ6…ð¿Àþ ×,|O©xGöoÐüMñ/WÒe/·‰to ø‚ÇHý™lþØéß‚~êºD67ß<>€ŸðÆ^ÿ¢qð_ÿ #ÿ™j?ጼÿDãà¿þGÿ2Õ †^ é¬Ue‡žÁ`ér<-L,0U0Î?]³ÃÏNIÑ·³žÃÊ.”TÏ™9ºAÎUcˆ”Þ:»›¯ f+1g/ªÝÕ†aÇcãQ¾uŒÆb±JJ¾&´å ÷üsöH¾ðg…ü|)ñ[N—Â%ñÇ‹t¯‰žý©?jŸ þѺßÄ¸ì ø…'Šÿj?üjÒÿi/é¾5´Ñ|1§ø›Añ¿Å_è:Î—àŸ‡ÚUö™6ð÷Á6º_ì#û,Zü@ømñIøiuáÝWá—à/Àžð·Ä?Š^ø)d~h÷~øg¬ëß³¿†|o¤|ñÇ‹>h÷PØ|>ñ¯þx‡Æ> ƒGðÀ𾽤¿„|.ú?-ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-WÉ„¼ZÇâã(Ö¥ˆ„ᇌ' E 0Ô1êGÓÄPÃÖ­B…xJ5hÑ«R9Æ$Œ\±r¥R„¨a¥Bµ,U ÔeŠ©*UhcñŽ£R›Á¸T¥ŒÅNxœ]9ÅÈ”«VŒêIÈÉÓ¿àÿõß…?¾ücÕ>!ø÷_øo¤øÞø«À~<~Îú7Å}gâ߉`ñÏÆCñ#ÀŸ>/øJø‡à_ˆž6ŽãYÔ>ü[¿øŸá¸¬îîô›ã¬¦£­Ýjþ©¡~Å_³'†›W:ÃtÅ×"øÇãN¦÷ß þ2øÅž Ñô›MOÃvºmׄüK{áë_OñüÛöY×µ½ÄÖ~ø¥ð÷Äú4þ-“þ‚´Ïí;û>ø—_´ñ·Ä|^×4/xƒàgÆ/‡šÇÄo Ãñ#Æ^0ñ_†üãûßøOÁwÞ-ñ< Ñ´jÖ—”ጼÿDãà¿þGÿ2ÔÃx#þ‰ÇÁü$4þe¨Œp‘ö¸ìL>«^¦' É„§«âkAÒ­‰£Ë^ËZ”§N­hrÕ©á98É œñ•%ˆ•J8y¼]:T±<غ²öô¨Æ¥Nªx;T§ã 'tê5Ï9Iû·Ç/Ùçá·íáïøkâ<ß,m¼+â$ñW‡µ¯„¿>8þÏ~8Òµ•Ñ5ŸJößþ|Eøeñû:÷E×õ[ SC“ÄÒhZº\E.©¦ÝÏgc-·ŽéÿðOÏÙk@ñ¶ƒãïx[âOÃMcBÓ<¤M£|"ý£¿i?ƒÿ+ø/á'Æ-VËÃÖº…¤Õ>)xÅú…÷„4Â:Í߆´-J±àÿጼÿDãà¿þGÿ2ÔÃx#þ‰ÇÁü$4þeªêSÁV•IÖÆb*ή"¾.¬ªa)Ô•L^*–†+RRÆ·'AZ•z±—cáïØözðßÅ?ã ¾›ñ[]ñ–—šl­|Dø·â„—?®< `º­ñnëÁ|N×Eî·©k~-Ô5kÚ†¥•ð7ö,øuû<|GÓüIð×Q×l~ø?àèøIð£án½â_ˆ^=O…özçŽ.¼aãááüKñÿµ=#Áݦ‹ð«Ã>øWá‹ ø/ញðâ-7ö³hÚ–—£x[þËÁôN> ÿá!¤ó-Gü1—‚?èœ|ÿÂCHÿæZœiàáV•xcq1«FzTæ°°N4±8Jøô¿ß¬éÏ ŠÄRt䜟4TgJ)b§F¦X|,¨ÕúŸ4"nßPÄPÅ`Ý9}Kš“ÃÖÃÓTåJP~ÇÚa¤Þ½zSû’ŠøoþËÁôN> ÿá!¤ó-Gü1—‚?èœ|ÿÂCHÿæZ—±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}ÉE|7ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-G±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}ÉE|7ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-G±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}ÉE|7ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-G±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}ÉE|7ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-G±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}ÉE|7ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-G±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}ÉE|7ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-G±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}ÉE|7ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-G±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}ÉE|7ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-G±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}ÉE|7ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-G±ÀÿÐ^#ÿéÿóo¯ôô9±óã ÿ…Uù×úz}É_*~ÒÚ‰µKÏ]è:µ®[ÙCâËmCûM¹Ôäµ’ý¼3-‘ž 8g#™tûÍ’˜Ä!âØò+É¿ ÿ eàú'ÿðÒ?ù–£þËÁôN> ÿá!¤ó-^®I˜arLÏ ™Ò«ðÇÃ/ ê[=”×Ú‹o£ÞKg$°Ï%¤·:w‡­ç’ÚIí­æxÌM,ÈÈ^$+õyÏG7Ëg—<=:1”ÝNhS’“—±«I.ibê(Å:¼ÍòI¾N[.nhøx–g¶æk‘8ºÎqQZ5]¡õZwoØò¦æ­Ìå¯Âüã?ÃÃñwà÷Å…Yÿ„tüOøk㯇ƒÄOþÖ:ñ¯…õ_ gû+íÚgöŸöaÔ¾ÛýŸý¥§ý³Èû7Û­<Ï>?“>ÿÁ>>è“.µñ¦îÛã·ˆ v«áÈ|5ðSN,·ÖÍö„ «x–/}®ÒM&þçþ‹>-ÅÚD~(øz|Ó2ßõkþ¿Šçÿ@ÿÀ­Gÿ•T—ñOüÿèø¨ÿòª¿/Äåù^3„Çb°¸lN/ËZ½5VX_o*2«: iÂY:’­ª±Œ\a8ÆsRõqÜ;’fxü6e˜åØ|n/MÒÃO§Z•8sº©ýVrxYÔ…Gí)Õ©BUiM)SœMyë¿ð¥üSÿ?úþj?üª£þ¿Šçÿ@ÿÀ­Gÿ•Ußí!üÈöà»þ sz¿ðP/¬Bhâ‹Á_ ¼‰P0‰î­ü1atFæýËMkç[ÊêÛš8î"Bçn6>[Øxo_Ó8Ñt-Åǃ`ÖôÙ¼W¤øgÄ7ÚÆ™ x‹Sðôw-«ØhZæ¥áßiú>¯ugŸ©ßhZÅ¥•Ä÷eìpkN…jÑ­*4jÕŽ—·ÄJ9Î4(ûJt}µgÕ*^Öµ*^Òn0ö•iÂüÓŠcÑ9=å»z%Ï8ÓÞËšs„#}ç(Å]É'ÑQEV‰¼Oá¿xs]ñ‡Œ¼C¡øKÂ^Ò5x›Å>&Õ¬4xsAÒ-%¿Õµ½w[Õn-4Í#HÒì`ž÷QÔµ «{++He¸¹š(cwQ£WV• ªW¯^¤(Ñ£F©VµZ’P§J•8)N¥J“’„!¹NMF)¶Òrj1MÉ´’I¶ÛvI%«mè’Õ³rІÞâÞòÞ »Iẵº†+‹k›yR{{‹yÑe†x&‰š9¡š6Y"–6d‘]©ÍPÓ‹q’jI´ÓM4Ó³M=SOFž©“FQR‹RŒ’”eœe®škFšÕ5£Z ¢Šó½Wâ÷ÂmÇ_Ãoâ‡Ã½âN¹ý“ý‰ð÷Uñ¯†´ÿkÛö¾.¾Ð¿²ü'w©Ã¯jÛV_üyy¤ý“O›ûF×Á>.¸³ó¡ðÞ²ö]8\7*ÑÁa1XÉaðõqxˆápõq¡… “­‰¬©Bn–Š”]ZÓå§M5Ï%t ¨Æs“J4æôŒ#t¹§'¤cv•ÛJí+Ý£Ñ(¢ŠåQ\Ä/Šß ¾iVºïÅo‰>øc¢^Í©[Ùk?¼cáïéWw7‡5¿kZê>$ÔtÛK‰´ŸøgÄž)Ô¢Šg{x[Öî–-3J¿º·î-î-ï-à»´ž«[¨b¸¶¹·•'·¸·Xg‚h™£š£e’)cfI•ÑŠOUL2Ž«„ÅRÁã%Z8L]L=Xa±RÃÉB¼põåJ¼¨M¨ÖT§'NMFj-¤&Òq‹iJqs„^ŽPŒ¹%8§¬£û®JéKÝnúQEÊ0¢Š(¢¸üVø]ðîWƒâÄŸøxü%âïIŒ|cáï JžðirøóƯ·¨ØºøKÁ1kš,ž.ñ£øm5}-õ›Ë%Ô- ÝŽŽå¼v“Ãuku W×6ò¤ö÷ó¢Ë ðM4sC4l²E,lÉ"2º1R ê«‚ÆÐÃa±•°˜ª8Lg´ú¦*®­<6+ØÍÓ­õjó‚¥_ÙM8TöR—³šq•ž‚m&“i7Íd÷|ªœ¥e»åZNVÙU¦Ý”ãy¨¢ŠåQ^wªü^øM¡øãKøc­üPøw£üI×?²±>ê¾5ðÖŸãcû~×Å×Úö_„îõ8uíCûjËáÿ/4Ÿ²ióhÚø'Å×~t>Ö^ËÑ+«‚Æà㇖/ ŠÂLJ†/ ,N­â°µ[Tñ8wVUðõd¡Z—59´ùdìÄÚRpm)¨ÂNâQ¨›„œwQšMÁµi$Úm ¢Š+”aEPEyß„¾/|&ñþ»¯ø_ÀŸ>ø×ÄÞûGü%>ð—|5âMwÃ_cñ7‰|wý¿¤hÚî¡£}—Æ^ ñ‡„®?´mí¼xSĺ »u] T´µôJêÆ`±™}yaqøLVÂSÃã0õpÕã°Jr•Ð…HÆ¥9F¤ŠS„£(·›W\Ó×598TÚ„ÒMÂkxÉ&›‹I¤Ó¶¨(¢ŠåQEsºç‹ü'á‹ï iž$ñG‡|=©xÛ]o ø3O×5½7I¾ñw‰—GÕ¼DÞðÅ¥ýͼúþº¾Ð5Ýu´*;½@hú.­©›±iדí±öXz5kÔä«SÙѧ:³öt)NµjœR—%4êU«+rÓ¥ Ô›PŒšŠMè£NMíB.S”žÊ0Šr”ž‘Šm´“gEE5Ý"G’GXãY䑨"" ,îìÄ*ª¨,ÌÄ’@…á_x[Ç~ÐügàøÆ^ñ>—g­økÅ~ÖtïøkÄ:.¡ ÜXjú»¤\Þiz¶—}né=ý…ÕÅ¥Ì.²Ã+£"¡ZTg‰Tj¼=:´¨T®©ÍѧZ¼+T£FuRä…ZÐÃ×*r’HP­(&©ÍÄíç{yòÛšÝíÍöæWÝôQEdEç~3ø½ð›áƧ èŸþ(|;ð³âœÂ1¤xÏÆ¾ð¾§â=Þ"ð·ƒ×ûÃ\Ôìnõ|ø·Ç ð¸þÏŠã>"ñ‡…´Aÿ?i6·}X<71ÄSÁåøLV;UMÒÂàðõqXŠŠœ%V£§B„'Vj8N¤ÜbùaNVŒ[I´““iF*òoD•Ò»oD®Ò»êÑè”QErŒ(¯;ð—Åï„Þ?×uÿ øâ‡Ã¿ø›ÂŸhÿ„§Ã¾ñ¯†¼I®økì~&ñ/‚®ÿ·ôS½Ô4o²øËÁž0ð•Çö½·‘âo x—A—n«¡j––¾‰]XÌ3/¯,.? ŠÀâaJx|f®¼cV©NR£Z©Ô§(ÔƒqJp”eâÓjëšqºæ§' ‘ûPšI¸Mo$Óqi4švÕQ\£ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ñOˆší¿‡WQÕnÖíílŽ­uq•¼—W2G“á2V8c?{/,¯ µ¼aî.ç·µŠiãöºòØjךĖ6³©-­ä›FoJäÝéZ(ž+«x“à O±[5´Ö×—~i–å'··ò¡–n\[j–‰·Ï$›îÞÞIúí»*6Õ7d×êœ4ÏøÅ5{8üa Éa§x©Ú_‹(å¹›D‘#Ç£k‰~rÍ5¥¿ö”—3ÅÛ<·Fâ;{Xní´'ø»ªÞ[xîþed4_íPpïøyÏV&¾¬›BñDà†ðwŽ— \x‹Ä—zµÕýÎ,¶Z%¯öt¶öWÓÛæhZn—nn®-¯ÖÔÞMogÅäV¯qkmu,¶Ö×·ÐCäÿ?Œ¥^½TææªÂMI8ûªwvZ7kß]ŽÚ'ÕÞ‰=šÞë»õ>ªøOÿ$·á¯ýˆ ÿÔwM®þ¸„ÿòK~ÿØàßýGtÚïëêŒB¿4ÿh?Úân“ñÚ×öwO|>ýŒý¦þ~;m®ƒû2iŸ5Iu›åøoñƒãо1§‹¼â «ßØ'â_ÁÛ½3â©úYXþ!ðöâí\ð§Šô=Äþñ>©ø{ľñ™e­h!Ð5«)ôÝgC×4mJ ;VÑõm:ææÃSÓ/í®,¯ì®'µº‚X%’6úî Ï2NÍçŽÏx~—a¥ƒ­C Ï )åXê“¥*Åg‚Í2<Þ¦0© e9îWŽË1´«T„á†Ä,>7 3Œ§NP…GFrqµeN5¹#{TŒ©NPU!:r’jpõã5 ÑÄÑ”[“_´ìWð÷Æ¿~h~ ð×Âý¨µMwáÏÇ?‹Ÿ·Ž'ø_£þÙ°ø/öhÖ~ xzú?‡š7ÃÏ øCĺ¾£ñ³HÒ4ï„þ;O éŸ ?gxOž3Ô5o ëú¯‰4Ÿ…~8Óð¯Ç¯ŽWÿ¶‹ÿe­Kã•×€¼âOˆ?´ŠÞðÅ¿‹þ(%§†|7â ÏØ®ø?ÂÄød—ß¡ø‘¤xÓÆ^,𖡦|TÖ>\|#Ò’îÿÅzÇŸY~•øká?ÂÏIá|ðÓÀ—À_†>“Ã^ ðî…'‚~+èÒ¯Ãß¾—¦Ú·†ü²xwÃò/„ôce ‡Ð´g~í2ÈÁ—À¿‚VÚg†´[ƒ¿ àѼãc⃴˜~øJ-3ÂüC}âS_ø‡á«Ò×Bñι©ø»ÅšŽ±âÝ.+]S¾ñ?ˆnïu î5­JKŸÓéx½–âòŠy`1W‚Ë8_6ȸn¶k•e¬VGšæ8ŒK¡Ÿà?µ+æñËp9^U‚Èr »‚²‰åü/À}g—aðîŽk™yUÕ–"2…®¶S¬jUœå˰³úÆ­uìj×–7ŠÌ¨,V/ëO ‡ÅÃG³ Ᶎÿ³ŸÅ/Û_âõ‡ì5câ_ÛŸâ­”¿¶_ì;ñ'ö‰ñƯ¢|ý’­µo†Þ6øM'ìúú4?…ÿìû©h¶:gŒcø©ªÅñ&ßâ–‰ñeo…»?õø`óÚ/Øà›ßüañÿö‰±øÙñM:o|Qÿ‚PÁ=|kãK&ÉtÍ.÷ÅZïÄOÚ¾ó_¿ÓôÄySL³¿Õ$º½·Óc–X¬"m#–T…do×máÂo Âÿ×Âÿ‡~ÿ…oá=OÀ_ÿ°üá­'þ/k_ØŸÛ> ð_Ø4ËøE¼'«Â5áÏí?èaÑïÿ°4OµYËý•aä?Á¿ >|:šÖãá÷Ã/‡Þ¸±ðw‡>ÙOàßxsÃZ|?ðuÆ­wáZË¢i¶/oàï ÝkÚíχ<3&‹¡ÜkZ´Úe•¬šãMôUãgœ=ÇyNUáÆMøÞ(ÁýC+Çd\;Â<<òì$¸÷;âZ˜\cáì«-«ŒÃK dУQÕ§OÃu1´ã¸ÜMlF«%J¬]zò©Z8SÚbqU(¹aq¼1©%B¥YQƒL“*nâéÏ0›*©ˆçøSö¶ý®üAûüWŸÅßµ¡â‚> ø‡Hø3àÉm|!¥j#öºøus}«øsá…õ©gÑ5¿x‡öžð·ˆRËÁþÔîuA§x‹á.¤šMåŠø¥ì׿Š_?o{‰?e85Úkļ+û#øã/Ä‹Ÿ²†?àÚO‹~ |añ‡‹|[á/[ÍáÛ“ÄþøyÁ¿†º‡‡ôøÓEøA ø—ÆÉ/Œ¼¾#ø\Ühò|Eý¡ñW¼㸴(4øë§üHðÝÏÅ=wÃÿ­åø+â/Úiº¯ü+¯Kâ´ë YøyñoÂRÅâ+¯üǪ~Õ¶7ÂO„Ÿ|CñãÇß üy¸ýƒ?jïÚá†âO~Á7ý”|Iã/…ZW„u˜¾%~É>2ø oâŒPü4ðÇŠô/øDü;ûaE¬kß<ã_Þë)}â ø™n|ü9ð×áσõµ xÁ>Õ¡ðw†>êxsº‰¨ÃðÿÁ/©ËàÏÅ{¦XZÜÇàïÉ­k2xcÃ)(Ñ4Õµ7Ò¬mþèËä~ý?d†ZôŸ†ÿ²ŸìÛðûJø¯¡\x_â–™àŸ <'§üJðÕÚ^ÇuáßÙh>°¶ñŽ…s¥¨Çq¤xŠ=GO™/ïVKv[©ÄŸI–xÍá­Ó5Äfð´²J”ø69fI…à>«‹¤òZUÖ}N—cªÖÄ`0ù¶6²Åc%™åü_™æø PÉãšdãK<£T0’¥ˆÁV•LD©ÐÄä•kaçŽÄVJ9v'ÃbéNuaˈXªØ¶"2¡CûB®aõŒ\á:u©b3þ,~ÒŸ´mÞ‹ûrübÐh‹ï…Gö ð_Ã]{Áÿtïü&Ôü/ûA\ê³ç‚þ:>§ñ¦ûÆŸ |Oñ<è¿ü}Ö|ñŸYñ÷ÁÿüGñ„¯üc®jv&ø¯áGŽ´»MsÅqN³x2ßÀ?®þ.ý›ÿgø×À|yð࿾"ü, ðÇÇÞ.ø[àx×áÊéWË©é‹à?ë:î»á§jJº…€ðýþœ,ï•níü»€$U÷Ÿ…ÚÄm/RømàCLøÂ&_‹šu÷ƒ¼=wcñIn<3aà»…øi>%¿ÄþÒôÏ Ì|¿Æ/2ÈäÕ)xabëarì›§˜pwc(ÂLÓÃZ¹ÍO•âÿ¶kçX.âüLsìÖ…<ç-«Ç¸¬— Q`p³ Ó,¥)á!Ž­[F”ðÏ:XìÆl}(S«Qqx–°Wu9a_ V³9b3çCK ùïûEþÓŸ¼ãZøâ:ø+CÖþøOÄòèIÿÿ‚‹~Ü©¥­Ãuqw"|mý—¾,ø'ᢩU†%ð|º/ü$Ú„^j×sA«éé]ðkö{ðÇÇ¿|,ý±~*ø›Å^'øÍ¢Íà÷†îËözøµûxbîëà­çícá^^~δ5Ï‹¾;xJá4ÚÇöZ«ø¿ÇwúŒŸFðwŒ¼+i£xrïìZ·è•½½½¼–Ckkk VöÖÖñ$ööð"Å C¬pà j±Åj©*¢(Pš¿;¯âZÂpÔ2NËñ|9«†žYšæøUÁTgšdµéU†/,­_(ðÿ&⺴1Sú­J±ÍxË:§?«'Ч‹Ä,>+ ¦ ‰'KŠöðÄ`iàñÔÛĨâ£ì¨Æ·<~µõ~Jµ©*­,,^¶oŸšrü¸øðó@øÿTý¯Î…¨xæÿþ/ÙöYñ¶¯ÿ ·Äï‰_Åž³­üoý®þÛeáQñÅž+ðŒ?fû#áÿ‚‡¼áýÓÿ`øoMûUÏköåñ'€~1Û~È~]wÁ¿þü@ý¼´?‚ÿ´na©h~2ð'ˆ#ðÏÃÿwŸþ'ÚÛMªh×:tÿ´„þø[žñ ÷‰àÓ¼â;ÚœúUßÕÚìqû"xWâ´Ÿe*q¬¹ÝLE/­F´iâåù)ð?ö>ø/ñìþÛ?³ƒÃ¬x[öiø ûi|FÐ~xCጚ‡<%à[‹¿°‰ð¯ã§ÃoÛIáýKKðï‚´_þÒµè<3á+m/Oð¯Å+»›X,t[²~¡þÐ^;ÖÿgïÙã/ÄŸxF_xƒàÇÁ/øÇÁ¾ÿ‰Ì¾(Õ<àOVÐ|:ÿÙ\ê³ÿj\év¶2‹%¾•e³¯žÊG£ü<ømðëჴo‡ üெü9Ì>ð7ÃÏ h~ ðvƒííÎ¥y០Øiš.—Þ£yyr–6P,÷·W7R‡žydnÒ¾w ˜æÕ³J¹})¸Fðæ©ukÆ…Ö?mO …§(ai"ÿ„›Ü>!|{ý©¿d¿Ù^êñ~ý­âë¯[ÁâM[Ç|ø7yãÛû}WÇ7 ¾x+áåÏ5KI/¥µÔ¼Y?„tM_ßÛKªjrÛÞkyq šóÇ"µÝÁ“Å¥âo‡w™¼oa8¢•|C¯6'¸„q…­AQÃdõ±œ1Bx®‡ âyó:× ÉcøÊµYåüG‡Âe”ð”0« ƒÄÑY\kOëŠLeIc³ý¥N3Éj:µ)ûWì\¡–ãðË/u1XkÏ:Õ¾¯[ ü ý©uïŽ~%xSãÂ~ؾ5øãñrÓþ 3ÿøÙà][]ðGìç¤x#áωô3ö_ñN“â/„þð?ÁÏ ë^Ô5Óm&¦üiñ7Æ{£¥hzM…çˆ5[ÃâýsÙ~$|pý¯uÿÁM~7øwö¯ñ¯,ÿb +Hñ_Âo…ÞøYû ñ…æ›û|øý­ø{ã©ã?„^+ñî¿àÍÆz榑Ú|<ñ¿i>!ñU¼;¹†_Cà/ÕO ~Äß±—€àñ ¯¿dÙ‹Á–Þ.Ñ‘kâ+R[›[iztµ½ÜV6ˬËð‡á4úOô þü;›Bø¯µø¥¢Ë௠I¤üJµo iþkoéϦ5ŸŒ > Ò4¯˜|E£ð¶™§ø|¯öM•µ¤_c‰ñïÃÏ«ðÎø{”ñ~ÀÔÊjfyχþ`iã2¬G‰×Âá¸k —f9QÉ‘PâN£< ª*ùö71§SS2Ì#-p¸€†.µzô¨bçWéâ±´«æ[“åðç¯B­JS©–âqq£Ζë®…•\*bkþ8þÓß´'íâ_†ŸðQ¯Œ~ý§ÁD?mÏ?ZÕí.%Ôµø\ß²·Å|,¶ûSÇÿ„%t%ñ‡ö}§R¹–×VÓc†×íuÿãOÚ×Ç÷—þ%Ôÿe{‡¿Ã½/áD³ø³ö(ðßÄÚ‹á]vÇÇ:À/ÚŽ‹^ÿ…QŠô_j¶šKj?üzž Ôõ-SZÑb–kï³Aú{gimaikae vÖvVðZZ[Ä6ÅommÃ1¯ðÇH‘ ìªx¹ÿøY—ðÿ‡u2LŸ#Î3<60|C”e\!™f/'Uxc2Ì>5â.0ð爨qv+äüKžÔÄârÜÊyV'7Åà2ÜÓê¿íÙ¯5,65ºt*N²t0Õ•|tëÕöXêØ™e³¤¨á¨c•Z_Púž6“©/«:°ÆSªg[‡Ãþpü.ý<9ûAÞü=ý¯~'ø“Å^*øÙ¦Ûøi-.,¿g¿‹±§†/¯¾ ÉûZø3À÷WŸ³—íuâÏŽ~¸íKãëVOøöûNñƒèÞñŸ…­t_ Ý=[á-&òÒø"×üßÂ0][\xžûâgüWᶃm:øuá«Øÿön?ð‡|9ðü1wí¥ßxKEÒçþÕÑtÏøX¾°—X½½Òÿ²´›tþÝ»ýû»ð‡„ïüQ¢xÞÿÂþ½ñ§†´wAðç‹îôM6çÅ…â‰ôk¯hº&¿5³êÚV“â+¯xzç]Ó¬nà³Õçдiµn$ÒìZFð‡„ü;ªx§\ðÿ…ü;¡k~9Õ­5ïë6‰¦éš§Œ5Û KðÕŽµâBÊÚ ¿jÖ^Ðô_Új:´×w–Ú&‘¥éPÌ–}¥¼>–_ô’âŒQK ‹ÇñFy˜aü-©À8|FkÅüWJÏâ½>Ägt±Y/äù½%<Ÿ „É:y„}½\&8ºxŒ PF'/¡ˆx™(S¥ÕFkËVý¢l¾.ØøcLøCð*/ÙÆÞÞ qñ~?xæÇâíŒPøe¥Kk€Vÿ³Þkx™­OÕâ~Ì¿³uÏÆX?hËÙóà„ÿ´%²ª[|w›áG€åøËn‰á×ðz,ß@oÄ©á)dð²¬zâ…ðì¢4ÇkSáxWâÞIÀu³Úؾf|7ÉêK Æç*yÝ\&¶#åãø‹÷x‹ÚQ†7Eãø_ðTþµáÏPÄO Fs<×òÌN_ (F»’Œd ©S¥<Ÿ5Ê'J 4ÛJùœqÉÕUã¸HC -ya±ÙðKöFøWðâÄ?‰ž ¸ñU׉¾%E¯wRÓ.4ÛKO~ÐÿiëOÒ´]+[{_~ÐÞ8²°’äÞ]¯†l¼7awuy¨Øê:¾­ñ7íùñgöšøsãŸx£Â?>:xörøOð|@ñ‡‹ÿe-öñïŠ~x¢-CÆZ—мiûOü;ý¯ndñæ½ð“Kð_‡tMgáÖ‡û2ÙÛx÷Åm¥|_Òõ+›Y<-?^ëÂ~#~˳'Æ/øcâoÅÏÙÓàGÅ?‰ ‡L·ðgĈ߾øßÆþƒEÕ¾#xf/‹¿´ìñ Ÿ> xÇÇ–iì®5K˯xÃÂ>4±Ôéß´¯â_…¶‘ø¿Tñ߯oišˆÏ‰uyü- Gu h¾ýÚ°øIð«KÒ>xLøeðûNÐ~]ZÞü'Ñ,<áË=#á…펃ªxVÊïáæ›o¦Çgà««? kz׆ín<7™-¾ƒ«êš<.š~¡wo/Ÿè¿²gì¯á¯‰—ÆOþÌÿ³öñ{Xñ5ßuŠº/Á¯‡:WÄWÆWðkV×Þ-Ô¼scá¸étÿ†Ÿ¶ž©iúÃ]&ÃAºý |{¤jun_ZŸjñ¼ì9ãŒ>þÊ¿³ÿ…i}söLðÂø%Çì÷ûCZø¯Âø9â/üJ×|Y{ão k“xšãã¯ÃO‰þ‡á/Áë‡þ¹ñ}‚4¯ xºëQø™¤I{ãýÎ->Îóöwòì™àŸj?¼û/~ÎÞø£¬xƒTñf­ñ'Ãþè>Õ,ð7€¢·±]¼^ ð–½á»ýÂÑÁ¦§BšŸb±XhmÀ޼¼^C5Åb+x?Â42è¼pæÂ\?ŸÒá•C ̰A<~8cǯ0Ìë`+á)ñ6{«ªÌ!WŽ„)ÕSÀWtª(bªÃ,6_F5#ˆÅû8O C†c‰”(Õ¯ˆŒe©“f‘•jžÞ´u^½WŠ«,L1?xßö¢ý¦tÏ‚²Ç&ñ?‡¾|Cø™ðoAñgÅmÂ?ðN/Ûþ Iá4ñÍÞ‹áÛj xïöøãüáëMR÷RM-sÅ>8.Óe¶Ô|9â«=.þâê÷oíŦxsâ§íã_x·ÅŸ ="Oé7:Öúy¢hš/†t]#Ã~Ò4¿øwÃú^Ÿ¢h:‰§Úi:.‰¢é6‘XizF‘¥ØCoc¦ézm¼Z~Ÿe6–vÅoo pƈº•ùýO(eØW>ÉgÂYö6Í1Ùny”ÒàÌ+ËpyŽ70¨°*Ôøñµ*TrÜsËiGâiÉJšŒ§Z„hÐ¥x|%jO )W›>•Js¯ŒÄNs¥…§FRyb(ÑÄMÕ‡¶uêàJ“ýì×Ö[®~ [üvý­tï…^#ý«µÚ“Æz­§„ऺÇìÏcðþ—ìûcðƒ[ø-uÿ ³Xx¯W‡á$Ÿî¼u¢ø_¹“ÃÞ/ð¿ÅÏé‘Þx{Árø“Â)¼³ñ¦¡ãþÞÚKö‰{~ÓpütÕ >ÿ‚†§ìuìUgà¿…ÇÀþ ÿ†—Òg(Ƨ®MðÎÿö‹?µ?j£ö–Óõm7â­‡“F¸ÑmÛáµÇ„öïRýlo„? ŸÃ·>…ÿßÂw¾3oˆ÷žoxi¼;wñ üfŸÛÇ—:!Ó›?ŒÛâQøñ¼Q-³ëã8ÓÅøëˆ·ÃoÙßö¹ø¿mûB\| ø;?ÇË;ì«OŽ|2ðT¿ít¿ì¹´?ìÛo‰o¢7Œà°þŸ¸ÑþÇ´¶ÿÙsͧùd•áoµÿˆÃá¾&yLo†K=α™ÔxC‚)¿ VþÊžYÀ˜ºTò¼%<ñ5(æQÅø~3É!V‡öE|L*×£Ç`ª×Xׇ­V”ñXìN&š–3Npõ«ñ ¨aé¬=x:ÂÃ7Ëj:xgJ5ÖIG¥‡¥RŽ/çÿ¿do…> üCø™à«]x›âXñ4Zñ×u-2ãM´´ñWíñßö‘¾±Ñôý+EÑâµ·µñ÷í ã‹+ .MåÚøfËÃvwWšŽ£«êß*ÿÁF¿e?…áðæcð{ötÖ?j_Žv'à'ÃÚ#ã-ï†ì<{û9x{@о#|CŸâÏÀ£s»âfµñGád×Ú÷üá‚×¾ñ½âÔÑ5O|Bð/‚ü/sã/ ~¦W=«xKšö¯ák¾ðöµ¯x'P¿Õ¼­êÚ.›¨êþÕuMûÃÚž§áJòÚkÍPÔt SSÐïï4©­.o4}FûL¸’K+»ˆ$üÇXU£:\Ô©©AÆ6>&ý¦¼mã¿Ù¾|GÑÿjoX³è6>Ñg/³×´ÿÚ#ÅþÒµ]qtoƒz§Áÿ MûLÃûD|AqX9ð…ÿjm8h¶—/áÙSÄ^)˜^Kõ7Á?ø›âÂßø÷Æ ø}ñ*Ë@ÔôÛO‰Ÿ ~øöxÃÛðü6øuoñ÷âÝ¿€|Å]K–žÔ~&Ãá] /ˆ:‡´ýRmrÃÁ—¾3Kñ×…,µ«›^ÓóêRiÚ¤ój٥ܯ3vµåçœE’f\;“åtr:/>ÁÎq¼Oõl»(«S*uÜòzY^I…Ãa±´¡ˆ®«UÏóÜFkžceBŒ(Ï*Á©à%ËCR†'šiSÁÂ…:Ã:µñªéR¥ UgQެ)ªj†c‹Ê³¼>³§Rn¦WŠU)Btb©N¤kÓå<ã=#â…´¯h6~+°Òu…»kKOxÇ ¼S²¿ºÓf¯þ$xwÂ~5Йî,æ’Ñu¿éí¨X=®«`.t»ë+Ë>"~Ö~1Ö>>kŸ²?ìéà¿_üqÑ<"ž3ñ‰þ>xêÃá§‚¼-àë©t­2ãÆ¾ øUe&£ûC~ÑvÞÔ<ø{âkV¶ñ/‹P¼›ÂŸ| «ø{Ç¿—ûOÃ:þ“©GÜiÁY— ey´«ñvMS:ÀÏV†Ù{Z´òÜÆs¢èæõrzyŽNóêxH·&I[>Ê0¸šµiOŒ«‡£WŠæÇJ…Jعe¯‚ÃÏRxc*Ð̱X\"«)С^ºÂ`p¸¼R¤©P«yu,4åík¬­)ÃOó®ÚçöžðD¶çÄŠ:ŸÀ|-ý?´¬¼s¡ü?øAñÃÿ~;ê:GìðÏãN£?„u-ã÷‰¼?ðZÑ$“U×õgTÔ<ÓÃÿ°×ìçá»?iÖš?Å=SNño€5ï…³iþ0ý¤i?ØxSÀ>%—J›Vðï«?|[ñ·Ákw—AðóØ]| ‹ÀúŽŒ|9á¿ìkËáýXþ}ÃæUqò«‡ÅÓ­†–Q[:•!ý›Ryµl:±À`!S…¡_4«€ÆS§N¥Ie”°QÃeѧ„­Âf?§à¸—Ãõw â>±Fq¥‚ËñL^„Éž6ž>ªÅåùÒ¯Ò†{‹úþ8ÁãsÌ>iC›Ö¥ƒÀàðØoˆ4¯ÛÃã†àOêºïŒ¾øóÆšOſأÁRøKVý?kØÛÇ^ð÷í!ñÿKøMã=GÄ??hߋ<üMñŸˆõÙûâïÅ?ƒ·Z÷~"|LñG‹5wð7/¥¼ÓVÿY¸K½ ;²jÒt½ΨRǪù_ÖÑÂgx,×*xŒDçõ|"Â8eÔ)W¥9Õ… F châ18×V­jók8{Z¾–Šü8Àãëf˜\³=ú怫–Ny6A‡›…,oâqxºï+Ì2ì ¨å6x[ø;à_Ú^ÏÃ:'ÃísáÄ-_ÅZ¶¥û1üñ?‡,<ã‹ÏÚ¼-àÏ i·^#¶Ô“ÅñéÞïmÿj‰_>)ü+øûVè_¼I㌺µþð³âOìç« —Æ£J“J‹XÖüSû&xËÅšçíà'I¾ñc«jßuŸÚÛÀ^ðí¦³ñKã—Ä‚^‚G²úÛöløKañ“Ä_´›h?ücmmŒeðßÅÿŒðGŒnl¼1oà½?]ñwÂ]ÇzwÂox»Mð­Ž™¡iž4×|¨x»MÓôm nßû Gk+ÿÿgƒm5ؾx*ÛDÕ¼_sc}ãÏk:·ˆø[â?Šº¡gp~îtIQã‘HäVI#uŽŽ º:°*ÊÊJ²°! ‚ |Ukûü+ðƒêºwÀ¿ügý˜|âMÅúŠ~þÏž=Á_¯Å:«¦Ûk>ø©èž$Ñÿg_xs_Öõ/ˆ¶Þ&ý•—àV·ã/ˆ·RxâÕçÄ`Íd~·)|>âì.oG+ÅexÚ3›ÅTɰþÓ.Æ:µi¬¯–fwQÅRÂdžs tx‡…ªãq?Vâ< €Sΰ}:‘£ËkTŽxz8ü=\møcð«öÛ°´¶øQ­hµ‰4Þüñ/Æ{M7â€døà éÔôø¶ÏIñ?†þ(ø·ZiÏ„ß\ðW‡å×5ÛOyÁÏÛãã§Ã¯Ù“ãoíû]xwáøà_¿¾ø;Æ:Ɔ´×uÙþÖ^%øðïÀž0ѵoÙûágÿ‡ß ü-3éZïÆ_⹨ËámxçÆ>´Õ/µ[+O¹<-û|0ð‚?c¿iº÷gÑÿbKíÿáMÍö©áé5/M¢|ñ—Á;Eøƒ4¶µÕb“¾8Õµ …ð埄ÙüAo§]ÆñiÐÜé7|ÆŸû x ÇLø³áø¡ñŽ÷á_ÅxƒâÖ•ðš{φ6žø?ñƒÄ?âøÓ/Å?„^,Ò>éŸtoi?’_xvÛÅ_¼cáM U¸{]?ÃPèðXé–Øê8õˆÅ<'é{â†n8 ¾J’Ék`+Ö£Z•(}~¥œÑÀÖ°ô±?QŽcB¶¾:R'›ø]QÎ>Ãað5sŽÇbéÆYüq‹+ËxƒŽhf˜,›1­ŽÌ±XlfgÙ—ÕÅRÇN¦YVx }hFŽk„Ë£?–4oø+•ªøâ…þ‰á€?þ"ü5ø‡û-xKûöXý¯<;ñëáGˆ´?Ú«âÕ§Áÿ _Ú|e“áo€$Ñ|oáÚøžëżGðûKŽÛM³ðô~,:wa¿Ñý–ëöïñÃ}Cã/¿hÚ'‡>/ü3±ý¯¼)àïÿµŒžøœÿµ?ÄoüøC¢i¾6ñ×Âo€WžñÇÄÿ ßèÞ*‡^ðrx{Ãú æ‘â;_kF}KIÒ};PýŒ×ÅþÔ|3ñƒö–ý¤~7 ¿ˆ?¾"XjÞ;»ø OáÝCöø›§üYðž“ x{áÀ¿†¶Ó¼Aâ6Þj—~¾ñŸˆt8í4„ñ]„6€ÚNÿÄÏØÏáÅ¿ü\ñ¿Œ®¯ñƒá×Áχº’éºå¦“ƒåø ã¯üJø]ãï‡÷Ö:LZï‡þ!økÇ8ŸÄ6ºäúƧ`—¾ðá‡F†;}Q5d©æ+¥:õçY׫´é¬ *¿QŽU…•9áJ5°ôsJ¹œ14àñ3ÆeôgUT©F¶0‚ʶ?—[IdNŒÀV£_ â,}Jticø*ü5 øÚÙB¯Äàiñ½x}k)ÃfTÝ|ÈU§Fºóψ¿µ¯Å/Ù³àßÄïŒ_µ×„Ÿ ôOIðïMðm÷Ã_ÚBûâGƒ¼UâO‰>.ÒôxÇâGÀïÙûþeŽ‹â]GÃøŸÅºÆ…¬øKHð¶¹qâ훉ô-OHO4øGÿ7øoã~Ô>(ñN¥ðVÔ?eÏhŸ|I}û*þÒwícðÃÄ~ñ^›âóá7Gñþ—ðïᎵoñ"ãÄ~ñ‡õo‡º‡Ãøo,÷ÁZ®ŸªëVÞ1µŠËèh¿d‘®ø7Ç øÉûCþÐ?´>/ÞhºçÄkŸ‚þÖ~ëÿ üC?Œ|âï†Q|ø-ðgÃú'Œ´//Å0øŸXÐ|A«Üê^ðå­íÕΉ¥Ç¤¾±ûéŸ|!­øã÷íñ÷ö”𧉼Wð»Ä>"ðçÅØþZø[]Ñ>øžëÆZ_ÃÍ[Á ~ü0ð%ÿüWâ9ínþ#Esቿ†K‰¥šeô§Yî[VxÜİÃ,Ž”øz¦? ‘噾¥LMLNĘj•sÜ×/¯ Ë€Äá]<¾”°øo—þþÖ?´?ìçðGöº?µ¼ºgÆŽ?³ÀÍ'ö²Ñ¬ô¨4†6^>øoã‡:ˆ/ü ¤.…áËËÓá¿Æ|LøSo¬ÝXx¯ÄxVÏÀ~#ñ}Æ«¬ø‹ÏÔ:ï‰_ðPOŠ¿´Ïˆ÷¿ÿfßèWºgìñ·öµøG¤øöÔ|ssã? ü >oxâmΧð/Á ümwÄO)<#sñ¯Â†oøJ#_M‹£ÏâŽóÆ_ðKØß[µñuŸÃŸ…¾ýšáø…ð_âÏÀ_ˆ1þÌþ øað’ßÇ^ø½§i6z¤~-ÓôÏ^ézÖ·á;ÝÇ\ðµwb×^ÔÛQþߢkZΨzoÇÏØŸá_íxÛ_øƒ¥ïý›~6~ˇþmWÖ?ñoþ<¯€ÅúÀþÖð¦¹ÿŽš>hðê:-™ºÕµ<=¬yö‚ÇhÑÍ9U§EÒÁâp´(Æ¥ MÊ8$¥–VX¼M cñ•ðõ'¯ŠÇËÚâñ¸\u|];øÙð2ËÃ5¿‰þñ%Ÿ€$ð֛⿠|Hñ%×À¯Mð߯~Õþ |=:­¦‰áÏŠ^ºÓõÛû­ÄZüú$Úuç©üKý‘þ|`ñNƒâOˆ–Úçˆìto€ÿfëßÜj6¶þñ?ÃoÒü=Åâ³Ó­üAý´aøo£Zé–‡â 4øoõ‰Òâò]6ëLÌøCû%è ü`ž>ñoÅ¿Œ´‹ôOð£ÀÚçÆéþÝÝ|8øk¨^麎¿á/ 'Ã…¿ -ïÿá*»Ð|3'ŠüUãˆ|aã߯…ôu?\Ai$w/ ™Uu0ô1UéÓ©ƒÎ¨¬O´ÂÓj¥Z¼O ®¼ýžb)âèC²§,;Xw‡ÁæSÄSŽ2•8f¾1ü,Ÿ ‰–OJŽu2©™àaS='ާ<$2úy ëæ8¬4p“–‰âužTÄζCòÂVS– å?ÙŸö­ý©¯?àž¿ ¿iŸ7ì¦ëšŸÂOƒ¾3?~(~ÕÚÏÂø·Jñn‰¦Éâ|Xñ·ì…¾k÷7Ú†Ÿ&›àÏ è?ü/uªjo£AâÍ&{;‹ï,ñ×ü_â·ÅOÙ;\ø«û6Ùü_‰¿nÙëöhñn¥àš7Æ€Þ,°ñ¿Äï‚gQ†Ÿtÿ‚ºáñO†è t¦Ðu/‚>×í¼;wðãSðŒ·ëªéW^ŸÂ7Éá«kŸö|n3Þ*† GŠÁá#®8·[ ›ðþ:µiI<­ŠËiçùu|z?ÙQªðó†&®ìòï§Žká]Ò¦a,¯+ÄûN/¥˜Ò¥G Ät²ü>E<ÆQ­•O&ÅT©†Äå°ÊêÓÆÎ´q8|zÍ)âr¬6^²¼.šù?‰ÿl­áÄ_Œ:wÄÏ‚²¯Æo ü!ý’Å·„~~Ñ;øðÓÅ¿iŽÿ> |(ð†,ümðûᯆ|ƒÅšn“s㟌0|6Ò|GªhºúØë:&¿iðßÂðj–üû|üFø=£üAðçÅ/ÙßÃÑü{ð‹¿e>/†ÿ~6ßø»À>0ð/íañ’/‚žñŸ†~-ø¿àßà ´Ô´_éÞ4µñ„üEðã@^xbÞ;I¤k°kÖ^¥«þÁübÿuO‰ß~1üPñŸÄ‡>ë_|GðÓÃ^*ÓoþüHñßń߼5ÂÏ…ÿ<1¡|Fð—ütuK[ëO ÿÂ1t¾ðÄ7þ¹Qâ#â&Íûø^ÒüFß~*üeøµñÅß~xóÄ_üi?Âm3âý§ìÑñIø£ðŸáì>x á¶ðóHñU†§s¨éÃÝ+WÕÏ‹UEC5Z¸Ÿ5c¼0uU\^â½~…H·IÕŽ,àêµ<,ëfê,†U0|cJ|køYெ~x7á‡ÄŸ ~-k¿üâ/üWÔ> hz Ý·ŠüQð{àgˆ4ÿiº÷ÃZ뾺ð,š||þÔtÏjÒj•†‰òï~1þÓþý»¿i?üðñ«Cð§ì‰û6xìü=ø‘û@ëÿ<  ^Üøïö¦‡\¼ðd:Ã/ŒV³üIñÌz‡t¿ôŸ xSAÔtß ÀÞ*ø…¥ A°¿ûßEø'á] ã·ÿhKMCÄxÏâ?Ã_†Ÿ 5Í2æïM Zøágˆ>#øÃךU”ZL:¬Íå÷Äý~-fâïZ¾²¸´³ÑÒÇNÓ¦·½ŸPð±…·ÄŒ~0øÑáÿÚ;öŠø-­|Fø[à߃Ÿ<=ð’ëà}¶ƒãxYñö³£A&«ñàwÄ/ˆ>ÖZO‰~+´ŸÄ|sà½n {›+­*ûMÕôÛ=N#O2xlÂTŸ×©O3R¨ž4ùªà³œ]WªÒœ ×Ëkã–…JЗ¶žƒ”!Ey¹ViÁ´³~!ö˜ ¾†OšpÇ áðØŸb0sŒ67‚3~$£ ˜tóêP«ŠÊø’ŽYV9Œ9Ýl&‹£€¯ZpùgâgüËáoðÅ>j_³Í†­ñöxð'í7oiû`~Õýôé¼ñ8jñø#ÞÕuo|W“ǯn¼;®Ç®hvÚv“á/ [ÚØÜë^<µ½&ÞëÙ­?n/ü`OÙáƒþ)ɬþÎ ÿj/Þ|jøÁ¯| м%ðóãBx¾h–šŸ‚¾ þÐ×~&ñö»ÿgåÕôXt­/Aðí¿‡7\xªêïS³²>¥®~ÆÞ³ŸÂ7ÿ¾'üUý”µoü1ð‡ÁeÔþEðS!øOðì_‡^ ñ.‡ñëá7Æÿ ÞÚøM[\ ø‚Ë@Ó¼e§G¯ë–â[/U¼±—æOÚSàÅ_ x×Â:ÏÀþÙ^+ñ=ÇÀ +àï~+üø±ûÛÞüQÓü¨ßÉà¿ þÒS~×1¿Š!K;Åèø³ðÁ>"¾7ñ´rE5å¿…-­¼üήm‡§š¼<ó Ž¦cŒyOÕ°˜9Ζê\AˆÀQQz«B3Y}\|p8Šxšºx¹’¯†§Š÷rú>æ²Ëðyn[„Áâ–RX®*â\à …©ˆ…l©ã—*1Ép”°ðÍáÃK†sZ’©ˆÄ`jñxbVÌ´ø)¸»Ð,¾3h߳߉u?xûàüÇ1x(þÑüÞÝûi|pñ·ÂÍÃ.…®xfßáöƒ­ü=¾k­_Wøaá½Xø«k6áÿË iÞЮì~ÍøuûPüZÔ|cñßá/ÅÙçO´ø×ð[á×ÿ‹:w€¾|dÓ>-i_<ñ:óâá½;Âþ6øÑàŸÙKIѼuˆ>x£OÔôO[x¶¶—Ô¡ñåÐÔ5;]ƾÁ1>økáG øïƾ7¿ñ§ƒþ þÂß ¼S}áMSB´ðÍö«û xúëâ߃5 ÛYð…ö­ ‡‰|{«j¶ž(Ü÷:„WO³Ò—ÃZÌw:¼ÿ]ë³Â_|Lø½ñ+ƺ^>OŽ_~üø‰ðïÇZo†¼Sð»Zð/íoâF½¦Z]xKVðýÀÔeÖ.>(ø‚×Ävúåþ¯£êºDúM‹Á{6¡õ˜QÃçgŸ·Êéñhëá¡IW¢ø}T|¿ÙS¡‰Ë1uëÔ«ûºÔÖmƒ«ZZŽXÌ6"QÆÒó8¯0ðÚµ ö‡eµ^%ÐËÖI™W¯ŸT¯N® „­‡¶;3žàg†Ãñ¬©,V Ué9åÔ¨OB\=œ~$üPý¦ÿh/…ß~ ø;ö?ý­?eÿ|NøGñWÂý xjÃÁ?¾'øsàg‚®üQñ+áwÁoÞ~Óþø¿á](iÚ‹9øàާãoÙ£ÂÞðŽ¥ã‡ß¾#ü/ñ]ùðφüáË‹_‡–ž-µÓ߯zE•®«ý |Gø“áßÙçàgŒ¾,|MÔõ+¯ üøc¬øÛǵ¬Úž¯{¥xÃsjÚí夳,×Ú•ì:uÄ–ñ\]Gç]L‚æê%i'_ ýˆ?a„Ÿ°gÿøᇈ>"x÷Zø·ñâÇß‹ÿ¾.j¾Ö¾&|Pø¯ñ/SMCÄ~(ñMß‚ü#à/ۘ෰Ñô/à ðî§éZmª%„—Ò__^}Kã¯øOâg‚¼[ðëÇš—‰¼ã¯k>ño‡u)±Öü;â>ãJÖ4Ë“Ü$W¶SÀÒÛM Ì;ĶóC2G"üv}ĹÖiÂ<;ÂЩ•EðÎG8–å“ÏpجÓŒY÷6“Áá+Áã× ãø—™C µ§:OC*.UjNŽÂ4!7F.Rü‹Ñ¿à°¼ð¯Ç=e´ÙŸâˆ>þËŸ?jøWöký´¼'ûBË«x{áLzAñ/€~1ê:'Âß ‚~>–_xB=-2ÇâÇ…µ¡'%Ò|Mz¾ —ûcßõÛÃÅ? |A¯ÚþÔß¼;ð¯Ãöjø·ûTø7YøañoUøÙ®_|<ø'uà¡ãŸøóÃwÿ~Yø?â$zÄ_ ÜhúG„|KñKÂZêx’ÀøâÖ 'JÔ|GÝêÿ±xÇá÷ÅO…?jÏÚ§âÇ€~(|ñ¯ÁðŸÖ0ø'Â~:³±Óu=[@½ð'Àê~,ñ¾Ÿ¦iÖº~‰ãŒ×ß5>Õf3O}â?Ýëñ3öGøCñƒÅ:ˆþ"[k¾"²Ñ¾ü_ý›¯|>¡ioáo|6øß/ÃÖñ´zúZi°kÿÛf†ú5®‘©hšþ‹Ÿ þ±#Z\^K§]iŸfŽ…:žÚ»ª°8¸{ Lrú©‹žŠ®)a©ã©aëÒÅUáŽu…ÅbðoêÕªºU)ÔÅaeú|ÃÂo­à©O <\Fe<æ¾O™ñ:¾ GÃsÊiðý|ååsÅâèçô±ë9ÊkºU±U ðÂG.©†øÿÃ?¿j½{öñýŸ´¿‹¿4?„~ ñ'ì‹ûOxçEøQðïö‡ñÅ+¿júOŽf_ì—ø¡ágáGÁï‡~ø‰á/]èš<ºWо&hÖw^%ñ]‡ìô€ú–½ô†…ûLülñ¹£x{Sÿ‚vþÙ¾ÓuÝWNѵk¾:ÿ‚|Í¡øBÇT¼†ÆïÅÌ>ýº¼YâÉt­Þy5mF/ ø[ľ"’ÒÒdÑ4 gR6ÚuÍO†ß±6•àωþø³ã¿ÚãÿíâO|(ñçÁO Y|gogö?>"_|=Ô5ý.óGøSð3á\ZíóOðÛEU×/ð‡ì)ûøWÅžÖ´¿x_Åý˜¾ è~"ð߈´;è5=^Ðu½3Áº–­hú•­¶£¥êšuͽöŸ}oݤðÜC‹úwcx/-És ?eõ³ ÆKòŠøœ“›b(ʾmžâèÏ[$ñ/€ð8:ÿVÅåž×Ÿ/â<4jR•:©ÑÃÊž;àøã„Æ×ÉaÃÏ.¢²ìž,d²ˆæ8\¶¦6Üeiƒ|C…̳jÔ\+ÆJ¦=Bº“”%ÏMR¥‡ùÏàßì“ûqøà&©ðÛ[ý¶2üuø!௉ֱhÞ:ñ7ìïâoø;â¿à÷/ý·àYWøUÿ¤ð‡ÂÙ;UýŒ§ñ«TÑ<¦|ñ¯ÄoøÇÁø_«üVÒu øÓÇ> ð¾¥áOè>ø…ñàÇø`¶¹>)è:V§¦£Ê~ÏðNŸ†ÿi/ˆ_¶?Œ>*ümý§¿j¿ˆŸô_„W¿h+ß„ñøƒÂ?ô+«mNßᯀðÝî»jž!Ö.l¾?‰5mf[«›í~h¯.­æú«ã«Ÿ‹ú›ásñOâ×à uˆîüWÁÿi^×üwáÓeyg{àKÇ©áíCâ'ô}E®¢½“Äÿü[ð»â–›{§ÙÉáÿˆZ4-{çÖd¼a–å+-âz˜xä¿Ùðx Y¶ƒÏÞ*Çar_cV:RTeF2ÅÎŽª¯—ÔJÌêT–G‚Àbå^¤í„Ÿ´Ì)ckà)T~ÃÙTÂâ1ª©baOó{öÖý ¼MñöNý¨þ,~Íÿ´ïíû%|týŽ¿gߌÿ¼[ðsþ/À­+Å—ž"ÐþøŸÄ>_Šž ý¨¿gOŒW¾"ø['Š~ø£AðŸÅ€ Ó¾üP“LñúxâÇ-t mWBüý¥iÛ§Eÿ‚QÁ#ÿm [öàý®~*|Yý«lØÿÇžð¥×ìÝð/K¾Ó¼i¤üHÖ¼eð³Á¾þÍš†¥áo‰éš.£áoŽ<[à›ŸìýõkÍ*(/õWþ® ø—¨|9·Ò´¯ø‚ûâÇ„.üão‰׊µ­3Ä^1ø¹­é×ڿĈpøÇÄž%×`‡Wñu׈nZäÜ|£ãOø$GìÛã¯Ù#ö+ýŒµüp·ø_û |Pøñgá½§x“ÀPø÷Ä~#ýŸ-5{?Y|GÕ.~^x{WÑ58µ«¦ñ=·†|-á ëÙ#·:V¥¢ªH²üŽròñ.;Ã4ój\7ÿ€1¹],ö¦™SÀå™¶;Åέ:*®Œqt¥ƒ–ªã<=:Icquðõq˜B…IÿeС‹T%Y/ˆ¸C ¥Z¾k‘eØ>öøŠPÂJ½Z8ÿíIâ10¥†X¬>Jq ¨Â’ß·ÇüÓÄþ%ý¿à­¿ ¾+|&øÃû8üpÿ‚xüAý“ü3ã{¯ØŸöÝÔ~Ù^;ý†t ~Í üCð_àÿÂxâ¿üWöÞ¿ýŠ<ñRøƒ¡éZÒèÿuûoÙãöŸñEô]\ðôú¾»®j?5=k[¹ñ𮥥xcP×èŽÿðC¿Ù?ö„Ÿþ #?>!~ÐúcÿÁLuÙÃZøî­«ü:Õo?f=7EýŽt߇1ÇðÚ}ïMÓ´¿ˆ û"ÝþÓkWš³kÚç‡þ>i~0ò5ÿi:‰t-ú.ÓÍ¡%J†J«Ru2|Fi†Yá°õë¾ɰÄÖ2]|:£žÇ4Ì0Ô¨`ªÇT°þ× …©M-q2ÃÊu!OÚ}^–+;XJÊ ®.†˜åÜ)áå[ †¯VX\.?+rÄâiºkÒÄVúÖ* ¼xoø.¯Æù~ÿÁ,?hŒêÿü;7‡¤ø<Ój²Ÿí ß³wÆIuß‹ÞѤOüv†ŸÃ–r>¤mõ‰[á΢Þ%ðÓêZ#C¤XßY|Õñ3þ ³áO‡¶WŽÿaóGÃüø?ðŸÇ#ø¯ÿý·¯ÿbüFÔ¾ èzV´º?Á~Ûö_øý§üQ}E×<=>¯®ëšÃÍOZÖî|G‡¼+©i^Ô5ÇýDý³¿`¯‚·ì{âŸØƒâ>£ã¿|ñF›ðÿFk…:¾ƒ¤xÃCÒ~ø“Ã^&ðņ…ªøËÃ;Ò"‚; éz}ãjZ©4úa¹Ž9`¼’;Ø|'ö¾ÿ‚Uø7öäðŽ¥ðöƒýªj/~Ìú¶¯ðëU¼ý˜ôÝö9Ó~ÇÃiô ½7NÒþ 7ì‹wûLh ­^hRͯkžøù¥øÃÈ×üE¤è^%д;èt»EJJ•lBŒ}¾|AøgJÔÛÀ_ äŽêïY×|G«é^РºñåšC x*ëz|ž*ñÕÆ|þð²jý¿†u»ëkoß~oÅÿãø_áO؃ã·íÉñ%ÿc¯ø;á?ƒ¾ë:ÃoØŸöáÔ?jïŠ7Þ3ø×yq¤ø áçÆ? ø›öaýž/>júž³ök)$ñ >&¾´‹LñÌך-½Ïƒd°Õ¿h¼kð¢ûXøQmð«áwÅ?ˆ_³šé:o†´O xëáð£[ñ„ô? =„Vº>gñçá‡Æ¿‡·—ºM‚è7ÒkþÖï“M¸žm2óMÕÖ×U¶üÀOø!?ìWâ=ö×㎣ñ[öñßí÷eáÿþ&Oð‹ÁÞ7•~E¥ÜxÿÁ:/ìëð{à_ øƒÃ&ÑìÕü8Ú}Õ“|<ñ—‡®ìWWÕô¯ߦ™ii¬üçð»þ Ùñoâ£ÿê³Ô?àŸ ¡GÿDøyñVý™#Ó¿jï ëÚ®ñáêiOy§üh´¼øAáÍ+Á/lµ)|P>'x;^ø•ñJßÁºu̱þÎ7~;–ÏáåÏÝþÿ‚FüÑ|_ñ[âÅ?Ž´·í/ñ—âì¯uûX|aøå®ü>2øSû=j:Í®«á…zgÂ/ÿ ~iz–µw¬6µ­ø»Å>ñ‹5ZÊÞ]KY¹´»Ölõ\ÏÁ¿fjðM-KHñßÇ›™ÿà•ú/4/Ùñ5/ü=š/Ú|CÐí´ jOŒ‹kðºÍüCskgkº[ø&O‡‘Ar]îὈ¬+ÑíJ.«‹Ë^7+xÐŒãË–Ï0ãyf3¦ªÊ¦!c©eŽŒã*µ0ÿÚ¸ÁaU|«TÇrÓsXI©)K¿2œYB^Ó6£’ðöu):1¥Mex®"Ãñ†ªÆC&Ç`½½jØRúŸÄqÿÁÆ_ ¼;û'|Føßñgà,? ¾4xöûñ_üþ]üsÐ%øCsñãÃï5Ì2Öi_xÁ1xKà-¾…ƹã?ˆºÇÂ?íÏÚØjE< ¯ÛAiyö‡üþ Éà¯ÛïãíYû=¯‡þX|Ký•®þê:ŒÿfŸÚCGý®fŠ~ø§áµÕô|3øé¦|<øIy­hZÝž»á_øKZøs£ËáíNÂÌYkä×ÅŸ‡¹›oø!OìcÂ_ ®üCÔ¼smiª¦‹ð/P¶ý™¿h}?ⶉ¢ë>–ûQ×5¯jzŽ«qâ /xoWÒ¼+¨kòÛÿ‚‡ÿÁiõÏØkÆÿüá/ƒ?ÿiWà§Á{oÿ~ü=øýûSk<áÒtÝKTÔ>'x_à×ü‹ãçÁïz ¿Ú–—>ñWǯÚᎋâoÞi¾'»—ÃÚmükÖ?¶¿üÿ¿ðP 'Å¿hïÚŸöœ×¿g/x§Á)ÕeýCýt¯†0IàmGEÕ­4½ÇÓþÉ:‡í9áÛmcPÒ'“YÖ´?ÚÃÆbÓ^ñ‘¢x§EÑo¢Ó­|âÇüörø‰âïÚ·Ä øáûP~Ï>ý·>øà‡í;ð³à®¹ð&OüKð‡ÃOêß üwçüaýŸþ.øÿÁúþ‘àýWû1ï|ã¿ Yê‹cjÚ¾~.5dÔüúZX 1©ÈñÔcŽ—µÒK1«S R¦ž>œ},› †ÆVÓË¥žb14°p|”.¥j’–âêÎ0k %ƒŠ¡iû:§ŒÊ©c*a꺲ÄcñŒ7Īx˜åxz8¼~9J–’—‰à±¾#ñ/ÇßÙàOìÇû)Œ7¶‡ì+wûqü:ñwÄŽ–?4¿xetøõ½;ÂÿtÛ/…ÿ5;nô‰!¶»×¼ž8Õ¬|K¦é±x*ÿAm[Åz7ÌŸ àâk¿‰ ¿`/ÚTýˆõÏþÏŸ¶×íG¢~źŠ5_ÚÚÇÄo‡?u;½oI¿Ôü-ðßAøo{¤üIø¥ëúShcÇÞ%ø‡ð{âMõÎâ{ؾŤXøSPñÇéGÃ?ø%ìïð«â÷ìŸñ£ÃÞ3øÑyâŸØïö/_Ø_ᕆµâ/ÜhïÂEÓ,´‘â/ÚØü:ÓµOâ/Ùì!s«øUðdž|æ‘¿áòÊÆžá_ø ¯ìáÙ·öCý—4ψÿ´”ÿÿbßÚòÛöÒø[¬_xÃᄾ1×þ)Zø“Ä>(@ñþ¡oðzÛEÕ<ußÂú_‡|?á_8­#_,ñÍq?«‡úœ3ŠžÛÚVÉ–q”¹î±Ê‰Œ ûe.ixiWNMrâ?µ0ÔÜkG,ULG%Y峌ZY—ԨЄýßfñ/0þßÓNÚ<}B£„y>©ý™ŒÄß éG°¿2|Kÿ‚ûüPð¿à _maOxƒö{ÿ‚nþØ÷¿²·ÇoÿÃY>“ñ?ÄÚ<_¼#ðþÛâGÂ…ò~Í÷º¿©[ÂN5¯xÅß¼ ma hÖ:Ž|W=þ·/…¼Aÿ‚¯Ù~ʶÏü{ö“øçñã_ÄÏÙsàÃø'_о ü´ñŽ£¯é÷Ç?†ÖöÖ_ÂïxŸÄðxÀ÷^=ñ7ˆ´KßêKi–÷ ·:Πu[‹8¢Ÿ¬ýÿàˆŸþ5x»þ àÿÛ‹Æ_´ÂïÙoöžÿ‚™øÓö‹ð÷ìóðÇâìÝÃ_Úá%¯Œt/øC\ø—â_xÇß´G„ôŸj-–™¬x?AøÃðsZ]3O¶ô-']DÖÛõÅ¿ðF_سâŒnÏ|EÒ|ã} þ á?~øÏðÛSñ>—£øºwìé¢[èÿ ï>øoÃ>3ðŽ©¤Ëe¦ëS]j~2ñ,o«i–Ÿd·²Ó>Ó¦\y¸o ºŽ&¼í˜â¸_ MrF C˜d|+_5Ž"XT˨ãçšÒÎ?³ ð­eU•ZY9Ò©O…÷1/-Ž?6ÁÅNXñ.:œ>®S—q½ÙD°U£%­N9v!âá ×S°5Ib1øý„¿àµ~ý¯?kù¿cøWöwƒâ­û7i_´§‚|wû þÙ^ý¶þO¥Gâ)<9ã…¼E9ÕÃáªB5•ES£Nu (¢¹¢Š(¢Š(¬«oøúÕ¿ëþ/ý5鵫YVßñõ«×ü_úkÓkÿÿü˜kÉ|Oÿ!ËïûvÿÒ;zõªò_ÿÈrûþÝ¿ôŽÞ¹@èþÿÉ-økÿbƒõÓk¿®á?ü’߆¿ö x7ÿQÝ6»úô(¢Š(¢Šü\ÿ‚£ÁHh/Ø{öƒÿ‚tü(ø5û:Íñ«Ãÿµ·í/ÂÿËø ¼C©i‘XEq‚>Ýø»ö†ø1¤h?o<é[k_-ÂtÒŠÃyâk]X5•vŸ¿à°¿~ ø“ão‚tßÙÓö«øÕãÙOàn‹ñÿöÆð—Á½à£û(ø7_ð¯ü&ºn‘ñ7Uñïíð÷ÂÞ5ñ¤¾·Õõwð×ìõâ³¥žƒª\ùæÜéÒê‹ÿ ÿ‚ëÿ¶‰ÿcŸŠ¾5iþ.~Å_´=—íðëTñ—›ß|O{…w¤^øcƾÑ>)|ñ5Í­ÌÿÙW–º¦‡ñ;C–Î+MBÒ[+çÔ­®ôŸ‹þ1Á ü+ñö²øûgÙê±/þ+þÐðƒûAøCöÍÿ‚wèÿµÿÁ{߈Ÿ<=¡xgOø¡û?xWRý£~xûà5Ƴ¥i76^%ðΩñSâÍŽ¹kq¦}¾þkíÇP~\ÅS†.ž!Fryîq_ V²U[Ëß ärÉiU…ØoøM\AO;ÃchR©‡Ì¤á–:50Ôq¹®q «ì–.5’œè,“%§õzöPyŒ8§1ŽwÏ:Щ(c%Õ0ðUã Ø5)âuˆ­‚Àe5=ÇâÇü'öøwð;Äeø­àÙÓö—ø«üuøûbjþÐÿ᛾&iú/‚¡øsðÖËSµñ…ÏÅ_ |e¼ðì¬4/‡¿þø:ÿÄzäGÃÎ¥â+‹.ïäïÚ/þ oñóÃSÁ+ü]ð#ö øéeðëþ ñ½|!{áOú'À_ühñ/ÃËÝNÖ<9Â}Mý²ô?xâŒ,¯Æ¹áÛß×ÚgƒF€‹6·.wua ï£~ÑÿðD=WöËðì÷û<þÓµNœcïÙÿà½÷…¬fßÙ—öwÓ?eŸø·ãô¾›Â^øñ«]ø3â¶¿á}ÿ uKÛï|&øᯇÚ_ƒ¼9ª +ë6Ñ—Y²×z¿ˆðJ/ÚWâÇÂø'ŇğÛÇÃ><ý§ÿàt‹_¿hOþËzö§á‹ZV…áAá›ã‡Â›_Ú“NñG‰µâ=/Ãv:´q7‰õ˽=o®¼òÿöeø…û;é·¾"ýŒ¾"x³Fð¿‡m.5TýŽÃcñ8Ü¿„Ö*8ìvOˆó<2Î)añ)`±¹= 7Ô¨N†:œø‹ˆ8~¦„M,D©ÆÝoözr­‰ž©ø<=IÊ…§K ±T18‰á«TÆK €¡ŠÀâkÒ†a—Ï 4èzïǯŽÚ§ü"Z±ñ[ð?Á½âN‹iâ è2¤ÓGðkâ}¦›m¯ym«XÚø û[C®[üVñ÷?nOø'÷í%ðSá?Ã}CÆÿüSû/hÚ·…+—Rðî'†o®|c§øOÃè_ÜjzÖ©ªÜüWÕŒ¸Ë5— Ñ¥[#Ëp$ɫ•<&1–GÃøÌ¯Ÿb0tó}cÄù¦šæ4ëP£[ ‹ÌëÖ†kS ƒ¡‡è¼!‰àú¼1RV†Ï*b±0¸*ؾ"ŽGS’}G‡ÂãøvX<¾¾/¥˜*˜¼e3ÅæqU³<‹F40xÍMWþ àßxS⇋~*üý¢¾Ûü=ø ãoÚ[Ãú?Ž´„WZïÆ„cÓ߯ÚÏÃ{?üdñµ¶­øpø‡Áqj¾ øµ{ð·ÆRøïÃ)q¢EÿâôÞý³íüGâgÀìÿñßá§Žo>øããoÂ-#âL`_Ž ð%΃§ë7^ ÿ„Cã_Šäð¶©m}ã/¬ÞøÚ~ø–|]d×Zu£i,ÿ„säýþ M§Ù|?øïà®ÿc‡kñwösø™û>i¾4ýœ?àžþøñ Þˆ¶zVž|añ3ÅZGÅÿÜü@¸Òmô•¹—Â^ƒàǃµ½_QÔ5ý%ÓÂöžû³Yýœ`Ö¾=üøÙsâÂ-¾|ø¿ð>ãÂ#Blø–‹×ÁíZ_ }u¸ÛF:$ Ði+¤jM¨Ÿ} jºqÒDZ—Í{<Ö¾EÔ¯…«<»FÓž u¡‹žŠaƒÄW¯Bƒ¥,MC¤x«á®—¤x›Añ¦‹ñW\ðU¾ã? ßøŸÄÓ¢ñE]¿àš:§ˆf¿…?³wÅOˆ¿~/ø{ödÖ¼¨~ÌrxÿöV>(𶟦x7Áþ&øwk£~Ò? ¼SñÇÄ~øûý£à\X^j>à-Ο¯ÛÛø·Ã+ k6ÚséÝ¿Âïø'Å·Ãù~_G¬~Ͼ ¹ø;ûKøƒöˆ¹ðÏìÏû'ø{öoø_â¬~ÏÞ0ø…¬¼£üHñ–©§jq§ŠÛƯ§~Þî¼)­]ê? þ1xâîñgû3j6 µš¿Æk¯X|RÒ<¢Ýx[âwˆ¾ ÞC«ü/Ôìþ!ÿÂg'Ƈžð·Ûî¼iâï ]èšõ–™ÓjµÔ^ðE޽ã¯Ùóãï€>"ø“âT ¾üñ_/¾+üTñß…ÿá5µ·ð­á^(ø)}£Ÿ ÛkºÖ¥â]gã‡áï [xSÅ1x³RÐnôymßÌüIû j7~6ø¡ñgÁÿÂß5ÿÚ“ÃÿµGÂoj“Ä^øyâm+örðÇìÑ­ø;ÆÞ‹Ç: ÇÅø¿Àšw‹#ÖFâO†ºåšø¶ êúN©áë}ný¿?b¯þÓ_ 4O þÓ>>ø ñ{â7>.Añká¥Þ«û+Gyû³š:´8—™eù­\62­,¿‡¥ <_áq2ËpØÙÔÇÇŠëF9”°xîX`ñ®§Å?¶–Ÿgû9|gø±¥|<ñ?ƒþ,|+ñ ¿ [à?Åùü/¤øª×ö‚ñ*x^ÛáÃ_jßø§âŠ¿´ˆo~!þË?4‰:ˆì¾%|dø¿¯øÞÖ?ø+@Ó~jš=Þ¥©iZ¶‹áŸhÖéý•¨è:õRþØ–>„ëB,&žQƒÄû:ПԦ£•c3LÖ4gr¨ÊyþS*˜ê““Ê1*­ZT+ÖŸtcá4i¼ Lv&¥³øfòÆÒÊó:Tªe1¡–Táêxºµêæ8zqËž;ˆ)9e˜Šª›Àà«ç8¬Â•jsíuÏø(¯|¤üB?þþÑ? ¼yðÛ_ýŸtká½¥|ñÄ=OHý¦þ$IðŸáOŒ¼3'Âü®øPñµŽ¿¥êÚ}¯Ž‡táÍBYü"âÿÃK¯o/íõðÿCÓ>//ÅŸ„ÿþø÷àõ‡Â½KRøCãË/…^'øƒã+oŽ~%Õ¼ ðe~OðOâÏÅ¿x‚÷âGÄM Vð¥ÜøëJÕ4ŸY¬þ.³ð߇/tízó'ãŸì+ÿ £âߎ>)ÂÒÿ„kþ4ý‰Sû þíŸìßøc¯Ú7Å´´ÿá/Ò¾Ùÿ þ_øD±ýŸkÿØ¿·³â´ÿcA{ãWì9iñ“âWÆ_‰’|OÔ¼+«üEðì¿¢x/û+Ã6÷W?~"þÊü}ñÃáçÄ înõ±kã*óÆ~,ÑbÖü>™¡ Ã÷öqx–;~Í [fJ‡<§UÔxìn¥:1ÁJ¼2º8jrÃcðÞÖT°ÕsYõln&r£ çøÕûzk~ýšlˆø)ã¯~ѲÿÁûï‰×?¾5†ÚÊ鮇­êñþ¡uð«ão‰< âo†Z߇/|Wm7H×tÏ%‡fð]§‚m&á¼-ÿð×~|ýþ|,ø¿ào |Aý˜ÿhŸŠ¿´Ã_]|ó¾G/Åcã¡Õ>ß| ð—ÅËgàýÂ?µx~ßÂß¼4úm÷‡4 ZÕ!ÒÖïÂóî^~Áþ0“Ä>3ø­¦|sÑ4¯Žú§í/á/Ú—Á-á&£qðçÂÞ8Ò¿fO þËþ0ðlj>Iñi5ßxƾ±ñàÓ¬þ'ø?ÄžévÖž+¼ºðĺ¿ˆ6ÿ…ÕÌ›X©SJ^ÁÓY{”(ԫ±®²¨V­ËNP ¸’qžpëº8Š4%N8ª5§‡Çvb…r«[ †Ä`ã‚Áá8Ÿ –bêáx’8ìÛC³ÜO bx‚PÂT…§Ã58~…l–– =†9¦Téãiàh˨Õ?à ÿ´½#ÁÿÂøñ¨üTñÇ-sön¹ø¥é_ .¾,x/ã&ð»ÄŸ­¼-ãIÛâÔ_ l4ÿøÃöšÞƒãm+ânµàtïxo\Ô¼Q¦xeµÍsCô~Ö±øïáïÅxoö~øó{ñà¿Ä(>üNýžü)ø\~ñúW„|TfŽê?²|ñ&š¿üqáïˆKዾ ¼Ô´;©´MÇRñõ¬þ O/ð÷ì1ªCão†_|iñvÏÄ¿´/ÚŸ[ýª>+ëú7ÃËÏ øSâˆog/~ÌÞðoƒ[ 5üGÕõ ¼)vúµõÝQÒ½/Hý~%xQýªüSð“â÷„ü7ãÚSã/…¾*iÚÏ~ê^:Ñ>Yhÿ >|'Ö´!áÝ3â·fñv­¨hÿ oum ÄW懦è:οbu_ø³NÐnl–_™e8¼ÇKVµ<*Í+R¯S2Êaê¿ÿhƒ_^‡á­µxCû%|yðû]Ò|Aà?‹Ÿ '×฼ðý—Å_ƒ^?Ò|/ñ[á^£â:Ö]cÃúgÄOøgP×43¹¥[^iV·³{M|åðŸöeðgÃ/Ü|LÖ¼SñãWÆÍCAŸÃ—Ư>&ƒÄž0MòãJ¸Õ4Oø_ÃÚW„¾üеÓ'±Ô>½ñ‡ƒ¼'ñ ž#ð/<3 xÓÁ^0Ñu/x¯Â>*Ò,5ÿ ø—ÃúŬ¶:®‰®èš¤Zv«¥jVSMk}a}m=­Õ¼¯Ñ:1SóŸÃÙëâ?ÁŸh‰ðïöŽñî¿ð~§ÿ Á_Ú-Sãçˆ4Xe±½ŸLÿhOø»Høß Ísâ»ùõ¯'ÇßþÓÚ[èi¾ø[¤ü Ð4Ë1Úpþ‚q<÷‰§Ä°ÂU—PÅÖÌð\;RšÁâa]TÄpþ 1Îñ|Gñ7Ä 3Sø)ð×âÛëZG‰õÿÛKÇ7ÃÛ‹9~$E£‹Møuñ{Àž øÏ¤ø¾ãömøßã½7áÅŸÃOw^ðö«â¨SÀVZ/ÄüJЮ5ÏhºÇ޼#gñ{á§Ãi¼Yá=SÔth/šk'²ü'øÃ?~Ô^/¹ñ1ñ·í-ñcLø›q£ ´sá(,> |1øA/‡†¢šÎ úñºáËkßÚék¡4Û_Ùk§ÈtÑ©ß|ÙðÏöñ—„GÀÏø×ã¶—ã¿¿²…®µìÓà›…:‡„~!h—Rü>ñ/Âß|dø›ÿ _ÄZ'Åi~|-ñ‰|1£Aá…ÿíµ[Ëø5ïÅ©ÞYE~UŠ£šC/£‡Â}iâ*d¸?m?oFªY­l¾,å×Åbq”ñ”«Ñ¯i“G/›Ë–1âjbeK 0Äþ­[ÀÙž'4Åãç€ÃJ†[“ÓÊ©`rŠÙe:˜ª|?‰Äc].S–ÐÁU¯>,XL>e[8¦©aÖÇG,ujÓËå…æ?d/ÛçÃÞ3ý›>øŸâÞ·¯ø£ÄÞý‘|ñçö±øãg ø_Iø]ð›UÖ~è~?“NñýÞ™s [ÛxóÆ:õ×t߇¿ <#â-G@ð«éïŠth^1ø{qâ¿GÕà Þ ðw…>(x·â¯ÀoÚ+àý¿Ã߀¾6ý¥¼?£øëGøEu®ü`øGðæ==üm¬ü7³ðÆOÚ߇ˆ|«àÏ‹W¿ |ae/Žü2—$_ñ<:/‹üÿ‚UxSàÁÁû9øsâ¥Ë|øû8Ü| ý§þÚø2]+Eø«ã'ð_ü!ÏûA|1x|kqÿ 7⟊-n.ÿáh ø›á߈¶ö~žÿJÓ|U£ê>.ñ;£ÿÁ)´û/‡ÿüßìaðí~.þÎ?gÍ7ÆŸ³‡üßÀÿþ![ÃñÏJÓÏŒ>&x«Hø¿â[ŸˆM¾’·2øKÁ|ðv·«ê:†£¤¢Úx^ÓÃ=ªÙÜñµåO Jª`óyÓte†XJYƒ–s, 8Ó›¥‰©‡U)dqÀÔK ¥‚­ŽþÒÃáñxªK"÷ëPðWc«K7¯G*Ägø:„rÌIW—ÔÅϰtV-ÄC›;úÎ_,»3¡O#Y*ÅG9§™c*}ðÇö»Ñ|}ñB×á?о ühøâ/ü:ñÅ¿†÷¿àøS“ñCáÏ„µŸ è¾'ñ'‡?á\üWø¬øZ]_ø*óQðÇŽá·!±ñ=«/†ÞçHñE®ƒâ¿²¯íŸão¥|Kð·„t/øãáö³ûBþÉ烓U{¿ˆ³×‡þ!x‡áî¡{â‹ík[¸µÕ¼oö¾üN¸>Òô=Lð¯ÇhdêWú]ö·¨÷?´ìq¯|gñ‡üQᯌ³ü3Õô/Ù{ãŸìË¡iàøH5¬¾:jåÕüq¤]ŸhI¥kžÒ>ßÙèVs[jvãWñ–·sq$“F×¹+?ø&×Âoø·à‡¾ xëãGµŸ‚RêþÒô߈?hïÚÁwŸ |Qà}GÀþ(ø]£øã7ÆßxsÀ¶W–íágHÖüe¦\èÚ¯‚<9 –Zž‡ Æ6x՜ҫJx¬M<= ÓÕZôaWS˜çxl·Zš£GMåx:\9™Õ7Š¡S5ÁÇ UHÒ‡ÍàêxoS"¯õÉÔÁgYÎ]F£Ãá2üdžáÌÃ'§_,5,v3ë*\QZ8,,«R¥ž<ž>S©—ag†Tî|%ÿ‚Šøâ´_µ¹¾þÑ? >~Óº·À¿Š?t¯ƒ¶^ñö¯Ã]_â¼Þ ‹BðÆüMðψÁÞñ}冡ã_‡ÞðV¹/…¯G‡ü]«[k>ºñ,ÿÿà¡þø¿/À-Joÿ´¿‡µöÿŸ~)é¿´ßxßW_‡:¯ÅI¼&ú?„>3xÓâw…u”ðw†ü_kªx×áç‡<­ _Ÿx³W¶Ö<sâeðïì+ýð‹ö øWÿ KíðÄO¥¿öïü!Gü,ïìßÙÛâ?À<eÿÂ_7ü!~ü,øK3ý£âÏ/û#û }¿ûfÊ ~Ã0xoágìðÂçâYÕm¿aë­kPx5¬Åh4¯Ùëâ/ÀYmÅ’x¶áü o#ø€Þ(ó’ÿÅÍmý•ýŠ«)¾Å—}jxØUÌV¿µ… v ŽVëÆ”!ÁV•o®âñn8Õ¥õE:^Δ#B¬Õ(Úž&Nª©¾9øY(c¾¨ªS•|o*„³éËŒÁ®9þÄžb"¡V¶jð<õß®J®›Îs^Jyj„ÞKÑü)ý¹þüWñ7í:Ûá·Åïxã—öðý~4øîÃáÖŸðÓãüš•âQ€­t/‰^"ø›áûÁšFµãÛ|[øqðÎãÅ^ѵ-ODŽñíÅ´ž{û&~Ù>;ü:ø­âßþÉm¯üñ'ö‚ð§‡&ðž¯û9Xè¿"øUñ¿Æ ´/xfß]ý©5Z×âe¦‹ ÁŒ5oü/¿ñ&™â ¿ ø±´+/nüýˆ¼eðûSýžü7ã_Ž:_Ä¿² ·×³O€ì~ê øƒ¥]Càoü)ð]ׯOŠ?ðµ(¯Âß¿ôÚ/ÃÚ?Á¿ŠŸ¼yñoÁ:M¯ÁßÁã¿ øâ7ÆÙ>:x·ÀŸ¼o¦|{Ò´ï‹ßè^ øEâoü*ñ ÷„5‰)4×ÚÆ¡Å|É{Іa4²üÖWy>¬«ÎYKËêæNŒ±Ô)æo6t] Ù}8ÑÃSÆ*ê¥g_\D|4K‚ÀⲨGœpµU™ã°œaЧ‚ʨfýž?lïxwàÄ'ì§ðZ?‹2üøßkð·R7š‰ôo]xÇsk~9ø·áïˆ|s©xÆ‘øƒJÐ~-Y|A³ƒÁ> ´OA©ßxZ§OÛSAмMàSãdž><~ÌÈß³ÏÇÿ¾!ðoàýõÿ·€~ \|ŸÅ_|I«ü"ñ߯¿Ûêšl^;†‡z…¼in5=2çÆƒÆþŸY¶ð<ƒÉ¾Á.<7áþØþÖ5¿^Ò¿l_€¾øâ/~Éÿ²æ“û/xÁkáÛ?:cxëEðb|Nø©ýµâRÃâÕŸÛ®5ýnîI.ü#læ]úÏCлÿ~Â2øÓ6‹'í9ñ«Â^9K_Ù›öý–µØ>|×~ &µàŸÚü C¯Ú?Š~6üm›Fñg…!øa{›•–ÿG×n¼Ei2hú ÖzóO5UjÔP«숺Tê}N®9Œ2Î#J<­†¯[<ÂY+¹Ô¡–T…Z•h¼$©Fx>ú¿ñá‹¥†2ŒòŠy¦:®37ÂeÜAO;­Ì87„\hdø|Æ8Ü <&Šéqm ,3…[2Ã'–Õ†?†«‰ÇTèµø(w€ü%àï‰~-ø±ðKö€ø-sðÿà/‹¿i}Á¿ôÏ„SxÇâ×ÁÿZÛÜx·^økgà?Œ~8ÒXðûê~´Ö¼ñ[ø}ãMãÅ~mg@Óíof¹µôß…Ÿµ¶•ñâ­‡Âüø×ðSÅ)ø}¯|Uøc?Å«_…i§|Uø}ámoÈüAáˆþ|Vø‘®xfçEŸÇ>º¿ð¯Åá¿’ÏÅ…<5%Þ“â‹MçŸþÁ?þ9x;ân“ûAþÒñ¯ŒµïÙsâ·ì­ð¯Å¾ø«|;Òü៌öº^?ñß¼'©|qñðøñ^¹ðO&º¹Òµß†ž¶·ðýݶ‹ám]nâîÛê›ßÙïퟴ7ÁO_ð—yð§¾|Yø3ÿ§öÿøH¿áhkßõÏøI?·¶—û#ûþ/Ù±ÿ±õ?í?øH<ÿíM?û+ÉÔºðkë᥉háãT*Ó«"«(òñJÁÕÄË í"ñV¡Ân·ÔÝ,±¬ÆQ¡ <½–[ó¹Œ|>Y|)a§BY®'ŸTÇb2÷Äo.˱˜<³"Äpí ‹ûV•,V#›f2Î0Xú™Ö®'(×P– O-Ìñ>ûCþÑÿ~þØ¿³×Ã_xâ?Åÿ ü@ýŸÿhÿë>i Sľ#ñwøgÃw…´xÕî“Vøá}'Y}F>;/ø¡ü/¦?Ugûw|:ñ/ƒ>ë >|]ø­ñâÚxøè³÷„ì¾h¼?qð[‡Âí5xƒ\ø&<]ðÎ_Õ>!ÛA®xWð_޼;{àm,\xJI|IáCRÓ¯8kK8§†ä¡F½Yƾ+ŸßËãˆp­žcka ½j•iJ„2êÔ–9f4zXhÑ¥–GÚáž·§ÿˆgŠËxN¾/ ƒÇQÂJŽkS—gÕ¥±‡Öoˆ(PŽ]KNx×Â4ðµrt±Ï/­šÃŒ„èàá„ú_Û‹Á…þ_xá_ÆOо-¿ÄHt€´ø]¢ü\ðÔÿ5×ðÆèüq/ÄߊŸ~xz?„>>|>ñmñøŸw¦ê^0¾Ó´ÿ^øÂÛP´¾—Áîà¦ÓG‡âæµáïÚWÁš_„þ þÛ?¼[ðjïÿµ+û|LðwߊÐx†÷Dñ—Šî.>!èþ"¸ŸNøamàoŠéðëÄz>­âKß]I{…gÓ¸oˆßõÙDý˜|QðãW°ðOÄχÖ_~>·û?Á6¾-|býœ#ðGÆ_èŸ|Sá;¿Ù;öJñæ™ñᵺx—ÁþøÝü{â\Ká­rˆz·ŠüEâåÖ£ó?…_ðMÏ|_ýš_‰¿5†Þ1ø—ð‡þ AðúóKÖ~)×´Ý3ööøùgñWÃ^6ñ†×ÆÚ[xkÄ^ðÖ¤]kß fžK«][Äw~½ñ>“yá©äÔ”q9…lf2+º˜|&jêC“,1–WVY >ϧö’ÁTÆa0ÔE¾þØ/þ%Eð·Å_>:|ñ»ðÛÄ¿þÉñ;Iøm{Ň>Õ¼5¤xŸ^ðv™ðŸâ‡ÅhúŽ/¼sqàŸ‰~øñh™­éz†›usi7ë<¼2§—f˧ǵsX4§Ãï~Ô_µïíaû~ÊŸ¯¾,è>Ö~|9×~'ü øZß´мsá¿ÙÏSøpþ%Óô_ŒÚ?Æ¡hºoŽ4é§¹¿Ó.4z_Øéž¡ðgöÝý¹~1~Ñ¿·Ÿì­Ýü*»ý£?c/ŒŸ°ˆô¿Œ_þÏð£ÂßfoŽ^/øcâoKyð×ãïÅÖ~ñ_…~ÿÂˈêVŸµùõÝ:çN“ÁzEŸŒ,ì–ûíø)wüãMÿ‚†|'øOá;?‰­ðcâ—ìÿûD|)ý¦þ |Q“ÁñKðÇÄo…š´·6ðxÀ°xÃáõ߉ü;®è·ú¶‘aaã ß[Ü\Ùjjýžö7¼ÿìGÿôñìÑûFþÙŸ¶Æ^øëûGþÚZïÃ$´šñ~ÜÞñ÷ˆ|¿Â¿ŒþøgñzßÄò|øõâ-?á øUñÒçÃÖ?x«Ã’üsñ^—ð6?†Ÿ¾音ÿÇ?èÐxG“â?ˆþ=èZn¹âoè>2ð׉õ¿„ÿ!×ü;¡}ªÛ]›BñŸiâ/`ð§ì3†þ~À .~%VÛöºÑf¸ÕƒZÀüVƒJýž¾"ü–ÜY'‹nÀ¦ò?ˆ â9/ü\ÖßÙ_ت²›á¬Yp¿ÿa‹>ÖdÍZý£|âÿ±Wîu¿‚ž±ø «èŸuZ|#ø™ðcÂ>øŸñ^û㿉4Okð4ØÓÅ^øSà M^ã@¼’û¡õ»Wðþ5!‰ŽeJ«‰«€¡œa:ÑŽ4ñYm<^¾&¶b›¥‰…©}b† ƒÃÉâa ñÌ#ª?]úåWÂú/=ÄàžT©Ã,øÓ@Ót„ÿ4ÿ‚×zÄqø¿Æ)ðßKø‹ãH¼#%•ä7°|0>'× ðƒü~—²X^èþ-ø‡ðÿã?ƒ¬cµº´Õ~x€^Å=‰ÃöWþ¯pÏfÙ? ÒÂTǬ×?â,ë™®#ÃÕK‚Ym~'ÈpÙ¶p²è`VNŽ_–æTláŠÅa±t–' çÕ+c”g/eG±x*ØJ3Å*ü;–a±TcG•*xjY¼s ø,*¥‡ÅKžUká}œçð÷ísûUüMÙ#ãGíWûü{ý—u]7ökøcñÏÇ_|-ñO࿾6ßjÞ,øOàñ¿ü* Z?þÓ³¿ˆ?g߈º#éך7Ä üEðÏ‹¼aá»ífÂÛXð_‡u-÷NÖ?ÿhOø)÷ü¯Á¿ðMÿø&·íå­üoøሿloÚ·ö,Ò kŸ>\]|RøÝûWjîõË#E±ðýÇÃO†>"&£a$^¸»¼ÖbÓbþ‚ý‚¿àœŸ±ü4wöOü;ûã_ìÅñ‡þwü*·ÿÂÚÿ†q±×ì¿áÿ„/þŸü ð™ny¿Úÿð–xÏþï²ìþÌ×<ýðüÎqO!¡ÄØïõj¾o[†)çü_,«žGóìÈfØêÜq D0êx|Nž8*t}®„±Ø(Ó–*Ââqü¾Ÿ] ަWB8ÈQXùd¾"ÐÄGPŸÖñ]÷¹«Â†69­lÚ+C‰§…¯UÆbþ©G/•? ý´?à²þ»ýŽÿà¢WÿuÿÚ—ö ý¢¿`ÏþÏþ ø¿.¿û?þËß´GÅÏŸ+ð…ǃõïü3ºý¢õŸ€_ü3ãÏꞈ÷º·ÅÍ#Uðõ¹Õ5ˆ´†Õ4í*×Qû=?ଟ 5oÚoÆÿ±OÀÏÿ´gíûD|ø]ðóâÆý3à쟲×Ãû_[x÷NÓïô»mHþÓ?´ßìòž#Ö«xw[ñ|+·ñï†Õn>Ú§ÆO Á?u‡ý½t |4‹Ãp^èÚgízkû-â}zÇJÖ´==|Cð_ð‡ü=­ÚY\x#Ä:†g¬\y˜yFp>ÖÒUêdøŒÒ‚’ŒèÖ­ÂÙ-ÕPÄN‰}S/âæµ[‡•f§‡Ì0¾Þ8ì^¸Ÿc)Ô§FtÔib³ªxLJ¡S‘àªf9F#/u°ñ­B¥Z•p4óN&¶&®_oo,yW:Ÿ±ß¿i‚ÿ ð¬?<[&…â¿Ç~|ð¯@Ð|Eñ3ãgÄôX,îüKgð×à¯Â+Ç?¾'ÜøBÂö-[Æ#áÇ„üU…´î¼I­ÍeáÛ;­V/ ø…ñÇâ—ˆü/û/øµðì[ø“À> _ xxAâgSÑuï‹>MoMÑxÖÒÓâ7ˆ|3á‹{ÛM'Oø± ø×@ñ¿Á¯ÐéÖú׊åðí·Çï…ì¼­x×Åþ/øqiàïksx9_‚_þ8ÉñïÄŸi-GÁ~.ñ'Ã_†–ß>øëÁ^—áÞ‡âÝƚ݇ÄÏ‹>9ÒþÜ|Rø¿¨øF=rãKøAðÓS·ñ‹¿µu_|ñ?‹4m Ã~ ñ‡ôù¿cÊ0þár(ç8|^d¸<Ã0ÍrÞ$úÕ<^e›Æ8Ìaø_"§†þÀÆðÅ,Ï6Èñ¼EO;â<Ó‰36Q­†áì«&Âf+5ñj$øÿ í9ðŸöÿ„§ìŸð«þüføQÿoö'Ú?·?ánxŸá‰?·ÿá!þ׃û3þÿøU?bþËþÃÔ?µ¿·¾Ñý£¦ÿeùÎ?b/øë\ý¡´?ürÒüð+öÀ»Ó/?i_‡Z¿ÂËÿxïT‘¼ᯄ¾5Oƒìþ)ø?Lø]Ä/…¾ðï†5Ñâ†dÓ/­ïuÿ I£]^¥½¯à.–7 †ÃG ±+ÎYŒ«ûZñÅÅÖ¥šc¿±áŒ–7§K+žS:_]–U?í)ÖŽ .>Óëuðÿ³á³> ÎqJâ9e¸*2__–Y‘G(rÍ«ñ†fáʰϘÑá´«d°Ä'‘SÌ¡EbåU1´1<ÏÃÿÛBûMøñûMü+ñdþ(ø³âÿjŸ ü0ýþü8Ð|q⸾¯ìÝû:|Dñ÷‰æ½¹¼ð~‘ßk?õOøÏâÄGo§·‰-'Ã?þ<ø»áé^/_ϯèRü%Ñ>ü2øQâÙÓâǺ×Åï‡ZÜ>»ñχ¯¢ñ€¼Aðÿ⥣øÃ—›´Ûxß•Óÿà–þðÏÇ~&x?AýG‡µŽS|zÔµŸˆ°Ïþ%þÕ^&Ö¾ ‰Þ,Ò|'ûQêßôèô&ÿÅjPx[UñÁÿxÛÀÕdÒ|5âØ®4_ê~ŠÎ#S$¥Zƒ–Áaó9¶ÚGG’P©^µJŽuq*ÂYÍl\èEbw S§´q´òßì|v"9®_ýbÇg˜'VQ†Ãúžÿð.±yi©·ÀŸÚ'IøK/í«þÌzÇÍgJø;gðËDø»§|gÕ>Øi7ºB|hŸã£ ø‹âMž“¤é>3ðÏÂÂv‘ø£J“ĺLJæÒ¼imáLÿˆ?¶G¼+ûZè¿´ø'Sý™<7㯅¿~4xû:­×޼+ûBüwðÿˆüEðãL‚â-fËÃ:?„4†ÿ…=áoŦkZþ±âoÚ Á‘éߨ–ºùÖ¶ì+ŸÙöO?ð´¿Ö~Øgö±ÿ„§þŽ™ý±Gíeÿöü%üôÿ„þ¯íqÿCWü#Ÿó-×›ëÿðJÏ…þ5øsñoGñ¯Å¯7¾1øÃÇŸ¼Gñ'Â_¿h¯ø×â—ˆ|O?‰|âûOÙ§Gøß7Àëø¾ýƒÀºO†ôøkZ‹XÓ¾x~O^j:‰¸¾1%B–_S‘bjá±TñØúj½ =Lee¼?,NQB‚ÃÆ8¬f'Š(a15±x:Ø<²­z¸š6ÄW(KÂXã3iU¯_ƒÄcó®Êã‡Ë³\Îx|¢¾dÿ±øâ·×ñX7O‡Ê£RŒ-7Z¯·«ƒ©G‡£Rž-žñþ ࿇šïíjß?hÏx/öUñ%¶…ûBüYð¶‘ðz?|6Ó¦øuàŠ—>-x|[ñ£Âž>ñÆ…¥x3Æñj:Æ›ðÇÀ¾7ñ¶œú¯ þPð{x¦ÿÁE| àm[ãЇàOíãOþ˺ý–“ñûâÿ„´¯ƒ«ðóáÞ‘yðßÀß$ñÅŸ<+ãßxMðOŽ`Õ5m?á‡|oã]<èZ´SxDCÁíâ™u¿ØsUñ7ÂÛÃá¶½ñzÖ}söå†þMgŶ?¤²²ð«ªþÎ~ê7¶~—Ç—²øŽÖKÏMãK{ !Ô¯þ¿۟ ?oO…¿ð´¾Ëÿ ºšŠnÿÂçÿ±þÐýœ¾~ÏùþÌÿ„¾øM<Ÿø@?á-Çö‡„üÏíoì§Ø?¶ozù3(F¥ë*³¥’aqPåßIa>µ–ÞP„©à©¸âykIBSU%Ë‹MQPǼ'sÊ–7ž0upx,ÑÆ\BÜp•Ÿý8^Γo†Xî<úµú£þÈÊý¦[Šç‚Î:_ˆß·wǾ(øƒ¦Åðïâ玼ðQ¼2Ÿ´ÇØ|;—áWÀcâ}Jñd'Ç'Å?|+ñÄQè~×ôøº_„>&Eá/ ëV:ˆÂQukm…gûZ|S¸ýº~ þÌZìÿãü.ðßÂ?€^<°ø©àÍCàý½¿‡®>+x‹âÆ™­ø¯Æ’øÇã׆õýWáôVþÓ¬4ü5×|u³¡øÒêÿF¿ÐõÞê|çÄØOÆ~%›ãŸƒüñãKð—À¯Úº§í+à_áMÿŠüw­IkðçÂß|jßþ'YüVðž™ð¦/ˆß |áß ë‘x£á¿ÅÙ4›è/uß O¤]^$¾»ª~;;Òi¿øh„ÿü%àÝÅŸ ~|ø³à/ü,Ö¼®øKáWŠ> x‹ÂºÃoiß¼ÿˆ¾&x“KÔµ/xO⾋w¶ƒvž·žÇQÌEæ †”£‹©F–:r«²Új´]šÆ¬*¸Õ©/ìUYZËåJœ3ÇJ¥ZøÈÒ©OçÂ\G'ÄBŒ²úù¾3„ÕrÌ)q+Ãà³Èã8+ëNXZp<êP‡`©<$«ðêÃG#¥ˆ•g_0ÄÔ±§~ÖÛübð_Á߉_³—Çï‚ÓüO×üaáO…^?ñä¿ø?¯xãã'ÁŽ¿tÍ#ö¸›àV‹ñ7á̳>­áïKí¥ìïàÿI¡x‹ãGÅßÁyqšn‹ñÇÄxA°0øëZø3âhu#à‹©cø)ÿ³…?~|fÕ|{ðÄzçÀ¿xÃÄËñFý”†¿j¿ŽVþ.ø[ñ/áÛþÒßµ³ñËÇ> ø«âÛ–ñæŸâýĶ^ð†“âè73?„,-ïô8|%èÒþÀÿ_ÂÞ0øIǯGðCTýªt?Ú·Áš| Ö¤øáÃûVèµ_‰ü%®üHÿ…æžño†5]v×Ä^ðô¶¿ |+­xoKÕôCSÔ|[s Ý[ø‚pK2úÆO,ZÄFœ}ÌÂ2©«EEg9,¥W:4°õkVþÌY´ðßÙøj4…<>3?i%Š÷ñ+ÂŒ%Xáp8ü³0¥V· âñ™œòž-Â,2Ãæo…â.IƒÆTÌêÆurÙð^:½,æy† ¼å˜Ë:Xš408oY‹öìøs7[JO‡×á"üb—ö|?´üÖ_mþ0ø¼þÙ?Ĩþ2àüMFøYOÁïøV³ü@)¢AãI"–+×ä4oø(¯u‹ËMM¾þÑ:OÂYh _öcÔ~>k:WÁÛ?†Z'ÅÝ;ã>©ðÃI½ÒãDÿµÄ_lô'IñŸ†~ëþ´ÅTž%ÖÿÂÒÿYûaŸÚÇþŸøB:göŵ—ü ?Øð—óÓþøJ¿µÇý _ðŽÌ·O/þÓ¨°2Ç:´yq˜W§(`£:˜iâ8]cbÞ®.£N–#‹e… ýj8|U µ±¨T©šùU©ø[MrR¯*ïœ`°0«Ä à¸^µ"\ïªÐ §ÅØYÓÈ*fx*±|<±¯”áñØiãhà=wÇ?µ×ÃO„>7Ö¼/ñßHñ¯Ào ZM§Çá¯t½Oýœüf—¶úr;Âèðïˆ|Kàß…WÉâ VÃÁš?‡?h‹ßƒ-ñ÷‹.#Ó¾øÇ6ΗÍõ"²²«+V•”‚¬¤d2‘AAÁŠù[Çÿ³çþ0øÃ__‰ß´ì~HÖqxoà§À¸õŸ€z†§l¶¶rü\øéáoêÑ,¡Ótm@Ðô«{]3GÑ´>ÚÞÇMÓ4ûk{;8!¶¶†(cD¥ñ †OÃóÉ15§Äu0´§Ä0/_‡)ÁàðР°õs¬Yœ`óøb)b¥Ÿà©G=áú¸ŒD1YyGl§ øÕŒx¼RœWÔ•Jª„ªªqÄ9ûNdé:*¶Â|˜Yâiàñô¡IRÅÐÄÔoW ¢Š+âÎТŠ(¢Š(¢Š(¬«oøúÕ¿ëþ/ý5鵫YVßñõ«×ü_úkÓkÿÿü˜kÉ|Oÿ!ËïûvÿÒ;zõªò_ÿÈrûþÝ¿ôŽÞ¹@èþÿÉ-økÿbƒõÓk¿®á?ü’߆¿ö x7ÿQÝ6»úô(¢Š+刿µ/…,'ìÓcâ/GUøgñwÂ:ŸÅ]jÊ ø2kûË›«½7è/øOKñç„|Mà­nëÄ6Z?‹4=OÃÚ焼Wâx¢ÚÃW³–ÆêøÓÁZ¾ƒâï kC3¾Ÿ¯xk[Òµ­.äGw§_ÚÝE«ñ÷ìãðãgì£/„~ xSøãÿÙNÊãÄÒÛ¾xgöqøÕð±µYµŸÝ]/‡þ|:ÓÿgOŽâïëw’Á¡|,ý’¯< BÞ"ñ¹ñÏÇž¯¨Þ}§äü+˜äwöý¦ÿkŒ?þ,|=ñ?ìÙû;ø#ß¾)i¿ >*ø«Bý®þ$øßYMGUø_àŠ¶Ú¯Ãÿ ê±g,|Wbš7Ä/éóÅâ?xtÔáÖDb[[;+S×&„|SàÍáwÆ›}uóuWøKãoˆ4Ø®uO1tÛk‹Ø‚Ÿ¼Mðûâ'í™âjZΉûGülÒ>"xJ- ïPŸUÒ¼7iû>üøKykâ(µ "ÆÒË[:÷ÃýnöÚ 2ç\°m"çJ¸–ù/&»Ó¬¾PøUûþÐz^û'üø‘qðZ×áì9mªŸ…| â¿j>4ê_ÁÏüøxþ>øu¬ü)ðÿ†þÙÛxÇú¾½ãˆ|1ñ?âÜþ ñu†˜ºtúNœ× _•b§›SËèÑ£*Õ±•²\j“xXJ»Ì1}™Â8š0˜, ²ªêuðøjØzÕs:µêapÕáS NoÕ«a81Äæ˜¨}W%£€Ër‰à°™ve‹x\F2|?‰ÆãgZŽy[8Ìs)â8’8,†®.Æa?³pØ·™Î•\.V>åû,þÚÞ ø¿ðköz×>%ø“ÂúÆ_‰ß²ßƒ¿ioˆ~ð¾â„ðWÃß k^µÔµ?ø«^¹oh¿ <#}¨¦¹mà¦ø›ã=:ïÅ‘xoÄñønïÄRøKÄÒé½>›ûzþ˺†þ&xºx¿Ã^øKð×QøËâËï|øíðÚKÿ„ºLWsj¾Ø|@øiáGãìc´V¹ñ?ÂKOéKÃê×a¼MáѪ| û?Á/~,|ý›¼Oû&^|Dð~³ð—ö‘ý–âøcûHêóë¾'Ö¾"ü7øó§ü Ó~Ÿˆ?¼U­ø@ê~ø‹Ãúv‹¡Z|/ø¨ü<á.›àÝ%¾ê1xwZxm5ø'wÇ|8ø÷á-gÂß¼1ãþÈŸg?‡¿ÔÜþÑ:,þøà=BçÁšf³â­7ÂÑüañLóÙx_M±ñZøVæçÅœflñ•Õ<&•)àózÔ),>*«XêÎe…õ:¿Tx:NŽMNÄâ0XœãŒ«‹ÁQÂâa_+Àûõ¸kÂ+‰ÉpØ\IŠÇeñÄb«`³%O3sr­œe´°Y~4©“G+Ãç˜Ê¹žM˜`*ãKþ~Ö~4øÎóá÷uß§‹ ðÕÇtÍ7Ç?¾2ü'ƒÆž ´Ôìt{Ïü0Õþ+xÁz/ÅŸYê¾…狾j>-ðå¬^$ðµÝƧŸŠ"ü`ðF¥ðòÿáޛ໠Ï|'ñ=÷ˆSÄ0ünø-§xÿÇß o>*évV¿‡-ŒþêÓZøiuojà¿ü>ñUôÚt¾0‡E°äÿh¯Ù—ã׎> x#â/Áü;ð߈üû~Ñ¿³Þªø¯Uñ-¤ú/¾4ëßþ6Ó­´ k)¨é°øoâmb{{‹­2úûYO é1E ž©©ë:žøcþ åñà׊ÿfü)ý§þ%üDоøKÄ¿ÿúWÀ øbÓöwñ¯‚ìô-g@ð¾¯ðöhøoâÛïè¾)ðgŸi6þ:ÖWÈ«â'›ÑÁf9¦]G‚ÁæÌÙäxÜ®|N?í²ì§ “ãÎ|Y•,0 :®­yá9ñŸE|-ý¿eŒºŸôïxãÆÖßô ¯|2ñV¿ð;ã×>|I²°ðľ3Ô´ÿ‡¿þØŸ³×Å¿GðûÀ~2×5]nþ?Mám_QøeñWÂÿ>$CàÛµ²ñT¿¾,ø¯Á:'ÂÏè2–›Q„þ2ñšÁ§ÅqªtËk‹¸¼ƒöqÿ‚ü>øÿ௉Þ.“á¯ÇŸ Mð³ÆtgNƒösý§¼Sk«è ~+x᥮£árÛàN“eãŸø†×\Ô¾ø x‡á„´ücøµñƒáGÆâ·Ž´ŸˆÞ"Ò~/~ÐÚÆ|#ñ‡àN¥eðN}_Â>(ñg¸~;xÇüUán,>#øWáí¯ˆíì´ý'‹ë9Š÷ãj´å—æ¯)åX¬4qšRÊ^_±¸¬fZ¢ªfÒ­—VX¬N+©Oëã1™_´Óxy‹À`ó)UÄTÎ8YÑÇâx“NvM_1âÌwYâ)å_RÍ!_Íg†Ãá#šäõs*”«Btò|öŒýSâ?ü7à׆?gÚoãŸô¿ø¿^ý—üuãüñ¯Â¯ß~'âëF¾Õ|u_|PøO¥|Ið÷ƒ|c&Ÿmañ9¾êž µƒFñN£&£5¯ƒüOý—ØxKöÃø_ãOx!Çu†š·ð«âßÄmWÁÿg¯¼_>ð¶çá‘ñGíüañ—Høa¤ø[áÿ€íüwkm­K¯xPƒÇ ¯ÙkñF›aàŸ[_|Yàÿø'ŸÆM_·ÎãCÃÞ?µçì¹àÏ€þ³›ö«ý§m}SÁ>#ðÕŸíay®ëÿi¯ ø[Æ×ž¸?ü1©XøcÃöº^™c%·‰m-´Ëkçoø·ø›û~Ð?µ,Ú1øåÁσÐKûþÖ?²‰áGįüg–ÞëãÇü(¸ü'ãOüø'í¾žŸüS?ˆ¼7¨CdöLÚ¦›­ëk©ê7šUó?kUû(ÎÙDq4),-E¯¬³ˆç% Õ1T)N5±Ô²<;Ëñ¿WÄÂ8ÚuaW V†.¶¾®Cám¥Uñ'ɱpú“Fý¼¿eígÁßüz|mâßxcá/Ãk¯Œž1¹ñÿÁ_Ž õ)>ÙÛ_]Ü|Lðg‡~"|6ð¿ˆþ'x bÓçø¯áž“âíyä²´·½–ëRÓ¡»ì>~Ö~4øÎóá÷uß§‹ ðÕÇtÍ7Ç?¾2ü'ƒÆž ´Ôìt{Ïü0Õþ+xÁz/ÅŸYê¾…狾j>-ðå¬^$ðµÝƧŸŠ"øûià¡âoˆŸõà‡€u¿‡Ú …×Ã/Ãáÿø[Eø“&­â[«krçÚOö&¡ðƵGìóñÆ=KÃká?„¿³—Æÿ„>#ÓÞóT"½ñ/į|Öt+íÑtvÓnt;K_…ž!V¹¿Õ´Ûø./4d³Ó/㸾—NëÁÔÆU¯†uÝ5…œqJ´–¾´”cÅ2Áb"«bjK D07Vx\EâhÿjÖÃbzx?Ì2nÃåðT³t3ªø|ú­\4s̯5ÀdØœ³,ȱ™^¦3’Ñ£Ÿÿmâ1Y¶ì |¶Ž½(aý–*Yuz¹ñûö‹àí=ð?á?‰ôÛûþ üvñÞ ¾øYñcãÅ»Ï|4ñÀíÚW‚üðƒIñŠu*Mâ7ŠõCaà zæÆÃEƒ]ŸSдMZšçÒõÛöy²øiðçâÅŸŒµßxWâÜsÉðßMøqðÃâ¿Å/ˆþ-6Kq¯Á¦üøqà|^ž \[üA°ºð5½ïûû{3Ç6þÔ`–Õ<¿ö‚øQûFÏûOü ý£>xSàŸ¢øqðoã¿ÂŸxGâ÷Æ?ü’I~,x§àŸˆôwB×<ð ãÒê1é‹ð³Q´Ô´íCIÑYŽ©e5­ô¢)ã*kÿðMŸi¾øã\²ñÏÆ/‡×¿µ«ãÿ 蟴¯í1ûx;ĺ¯íyñoNøáãù|'ñ£ör#ø±¢i~ñ–•g¡ø[Ã~'ð׋ü?ã_ ‡¸ñ&¡x®ßJ×tÎ ¸¬Òžª§:”«â£V¥|:NŒjg˜Ùa!ìèÍÔÌ¡[+ö1Ž#ÒË ðòÅ»…Jrô°97‡˜ì·„êf™Ž'.ÆWÂNŽe ¯3ÉgWV>-¯?oC ò T1¸~ÀGcáƒÆa3Z¸Œ55O‰«Oï½göÅýŸ4o‡¿~&§ŠüMâo|[’ò‡z?ÿ„ÿþ(üJñ-ΓkuuâK8> |7ðо/Y_x'ì7vìuOØÝü:ÕíåÑ,i ðVƒ}¬Iãèâ”þ(ñö³¤Yx2 *ÓÃóøÃOØ{ãÇí!û6j.Óõ†þ¸ø·ð7þ Ëàm uíGÆše†¡}ûm~ÒÚgÄ/ƒ>8Òãÿ„/PÔÇÃ-[ž“IJj·ö¶þ&]Ä»´ðµü÷×öúaÃWŒÃÐxyÔÂa3Z•0þÆnX u<®¥\£ ˆ«o³Ì¡™TEéaðo ðÃISÄR£«ô9wø&_›æ™¶s€Ès.*«“PαXÜ–Ä䮯Q¯Z–]ý“˜û f ŽIÃ’«šQÆã²ÿ¬æõèá/Z–öcá§íð âÏŠ5oxSÄþ)Óõí+ÂWßa‹â/Â_Œ´ß|>ÒïìôÝSâï|\ðü?ñGÀZ]Ö§¢ÿix×ᾩ⯠iö¾!ðÍýÞ« ‰´ GŠÐ¿à¢ß°ŒµÍÂýºÿc/xÓÅZ®á¿x_Bý§~ ëšç‰ëï¨O®\Ã$W—:$i¡jö·:ØjøoöbøÙ¡ø‹AÖõ?ø(·í‘ã-7GÖ´½SQð‡‰<ÿùµðtûè.îü7¯ÜøCöð¯‹-ô]rÞ4ÍR ø£Ã~"†Æêy4M{GÔ–ÛQ·ýgƒ0ŠË³jœ_™Ã ™aÞ-epŽqœdô±nŽcœQÃÊ8\¿Ão!Šl)¯8c3\†<ø™ºuçJ¼ž_ø‡ÇAe8ŽX‰Ã–ÓÅc°XʘlË–ã•IÑ«ƒ«‰ö *ªn‹ÅSäéBŽ&ž£r¡õœ_æWÆßø+íOû~À?lßÚŸöXðÝçˆü7âïÙ+¾øp×þ5ý™ôÛÖøõð‹àޱñ"û^×!øÇÀŸ ±]~ëSšËM½:¬×ó>(ʳ6Ìxާä™~QK†Í0œ3‡Ž&ŽGOû*—a©ðü0ó“­ŽÂgê×þ%ø+OÒµMËÂÞ3Õ4›k½wC¶Ñu½[^Ö4˜´ûée·];UÖu=BËa·¼¼šxäcÇxCöÊýž•Ô,¢Ôl/tùÚD†þÒæÊfˆªÊ±]BðHѳ¤ˆ$ !(YCYdÆÏÙÓþ ÓñàŸˆ~ xOSÐtxöy²×ôïüXñíçûtü@Õõ£øUã…¾ÖtoØÇÆQ·ìÝð‡ÅÚ/‹ÛLñχüsãO øB¸ñfà_iVþ#Ò­¼%ðœM›cqyÞcŽÊòœ_‚ÇÏ7ÌpùV†6®R½ZØŒ.YŸ´pÃ`òèÊ• 4±µl}ÆEØiÊ¿Üp¾UÂXܧˆ+ñi™a3,Ép¸:™U*8Š˜ÍÔÆTÍ14«â)}~ŽYƒž,†'0…,mllhW§†©öçÂ?ÛÏö^øç®|>оxÓÆŸü-­MkáW‰uÿ‚üðëâl6þ^éŸ~)ü@øiᆾ4ñN›áË}OUÕüá¿j~/Ò ð÷‹SÐí'ð‡‰âÒ<ÅðPoêß?f„¶©«êWÍ=ìßHüM?àøkãøS¶ÞÕ~-§ƒõåøooñ'YÕ¼;à[¿e\§†Ou¯ øgÅzÖ™áì›IuËšÍúX‹c¥Í)Ž1û'ã¼>áîÆà¸W/Áq.iž`¨Ï˜Ï8Íó¬Û‡ªås¡‹öy-ÛÃ0xý¨µ‡ µ/ˆ_¶^ž¿R?Žÿ>Ùx›Løiñ.ÓÀ/Ã_|Fñ¾‘ðÛâ—Å j?øO4¿„ñïi^'×¾+üOñ7ƒþ[Oª[\É­èVÚΧÉó·üþ Ùâø'Ïìýãh~7øÛAø»ûb~ÒŸ¼gûA~×¼:÷×:'Ž~)øÃW¾¹‚ÃÚ¾ƒáeüá*u‡K‡PÐôŸ7\ÔüS­[i-¾¶šEèGÆ >:M±øeð•|Q«kéÚ¿Š~0j~0}À:öW†_i¾ð^’šÅÝcLÔSOHþÝ|Iø#e®Ù\^Jßü;=œßyy;!©•äÜ›dY&+,ÖžeŸq–7y>¤e„«<^UÍsq„Àäùlê{ VMÅæëOC/–a˜C ëÔU‰­EUÂУ˜ãëàJ«ˆ«–ÒÁÃXÌ={Z²ÅÔÃË?–¸¬5|Áå1“XHΧſ·¿í®~ξý<]ðŸâ·ìÁ è´Ÿíkð'àÔž"øÝ¢üvñÿ‡~"|?ø¯©x4ŸÚ—ìã ø® oŠ>)°¶³¼øyâïˆÒéßÒØÜ\øŸ_¶·¸°’_@Òÿि²7‰¾2xÃà?€|Wñ[âç~|EÓ>|E¾øû-~Õ_¾|<ø•©E¦Lþ ñÿÇoƒ¿|qð;Á:Ö‚šµ˜ñ­¿Š>"iKà VþIáé´V;/ÎOÚóþÕãoŠzoìÓ}ð_â?‚dñǃ¿à¥ÿnÚ óÆ–vŸ¾ë:gûÿk:´øAðà_Ã[Yxã\Õ¼]y%·‹>!Úxƒã/Ä . IøçûIüF>ð}þ›ã~=ÿ‚;þÒ³~×Z?ÆïÙÃáïüKNñG퉧þÐ_´÷ÅÙËþ %ûaüG¹ýª|¡ëúð÷ĿؗÄ?³ÂÿÙÝÇfÔ©Ó¦áý |_øåð‡à†­|[ñâ†~èÚ¦­‡<:5ÝASYñ§‹¯-/otŸü=ðÍªÜø—â/Ä_E§ÞCáO‡^ÒðfŸ2Ãã+]OÂÉãï„(ñÄÿˆ|$^0øm­x‹ÂvZÏŒ¯®þkº×….|?\oÄOÙ3Æ:?ÇÍsö¸ýÂË‚Áõ þÿÂüOŸð³aŽ9-&øuÿ þHõˆäÐC]qNøSàŸŠ´/ÛãWí w¨x~O|Gøðáf‡¦[]êOâ{_|,ñ¯Çø†óU²—I‡JƒF¼±øŸ E£\ZkW×·vzÂ_iÚt6öSê%Åûüz~ÎóÜü“ödÚöoÚÃþÄ>+ñD?MûE·íeÂßøTOð¦}¢?ŠÞ_„åø©ÿ ¨ÜÍðåDøu·"Åá4å£S+¥9Ô¯ F3ujØXT,:ÏèᩨÔÂÏ K ìòŠÌãV¾¼q¬ø'Àžñ–µ{¬xOöyøáã߇x¿VÒôßøL/ü; éžð÷†‡~#øŽçAøw§xÃĺ6•%þƒ{âÏ ø~ëÓ¼!ûe~Ï;ñÙøyá¯x†çY¸ƒÅsø{]Ô¾ü\ð÷Ã/ÿ Iñm·ÂŒ¾"ð&•ð‡ã£¡Cííö•ð»Ç/Ô—MÒuíR;I4ïëwVþÎ?°?Ưٟ⇉þ)xWÅþñCüwø©ñúßöŒðoŠ|@øíñgâßÁÿ|ñ…ïõ_Á^9ømcñS³ñwÁHô}7àÿÄ={ÅÞ$ñ'ü$Þñn•/Œ|mÌþΟðNŸˆüCðSÂzžƒ ø›À³Í–¿§xâLjo?ۧ⯨ůü-ðÆ³£~Æ>2¿fï„>(¾Ñ|^Úgˆ.|?ãŸxWÃúÇ‹4ïø3J·ñ•má.csÕ„ÀÊX:PÄÿeÔxœ<èâkUy… gOëj}UÉÉGZ¤çNž>¦>¦]†xLfS‹xg7È|-«˜ñ–+ŸcžlËÃTrêù> QÔÆq©Ò­…Ìç‡ÅPËð•¨d™V ©šæ8Ì·$ЧOS&ÊþÜøGûyþËßõχÚÃoxÃSÿ…µ£É­|*ñ.¿ðCã¿€~|M†ßÃâëÝ3áïÅ?ˆ *µñ­ŒÖéWž:žgpæ­Âc*PÄV§†„(b°¸ª˜*T3Yâ*c*SÀa*føª˜<¹TÅUÌ0YZœÞWŠä«’xgí5„Ï!ã2ìV)§œã±Ø¼V4¥šq].:–3#ɰ˜*q­ ŸƒÝhgX%Y7çU¨Ny†_‚Äàþ¿Ñ¿oßÙc_ñmŸƒôŸxÂæ{ωú·ÁOøKàwÇ«_„úÅíÆÚ¯Ã›¯†šïÆÛφVÿ<7ãk¯é2xsCð爯œç Ü_ˆáÜ´Î2ú¼¹%?íïcÆ5ù8rÖ0U>¯‘ß,§õZŸ¾ÄÛ1_Z¡õ©âý±?g«Š§àÜ2Öæñ`ñ”¿ ιÃ?Š’|$ÿ…—ƒêü1ÿ…øž ?ÿáfÃrZMðëþ7ü&‘ëÉ >†ºâ6œ<ëá?íË࿉Ÿhï€ó|<ø¿¡ëŸ¾$ÞxÚ|øûâ_xºËJøU࿉:¦±w㛃¶ß<«µÇ‰ïô? ø.ûÆšž½ã›7CñOƒ†³¦øãÃP\xT_±¿Ç¡a'ìï=ÏÁÙ?fGý¯fý¬?álCâ¿CñàDß´[~ÖPü-ÿ…Dÿ gðÚ#ø­åøN_ŠŸðºÌßQäO‡Pkr,Qz,?¿jüPý´%øE¯|$ðׄÿj½Boˆ¾øÕªø—_Ô>(| ø«oûø'Åßôý;T{ V—áÞ…âÉt_[ðö—¨A£â=ÓRñ_Ùëþ àÚGáÿì­ã»øI> j¿µO ØÝxâ‡ìýûB5¯Šõ¿üñ×Å < ðâ#ðÁ:úh–žÔ|C/Æ=+LñÇý[BðÝÎoac­øÛÂÚŸ–þÍŸ±‡ÇŸ~Ò/ÆÏ‹é:‘aû9|^ø-­Ø?íËûY~Ùþ"×¼MñÆ_ñ.»ñ[áÖ™û4|iøoâ <®üðŽŸðûÆ·:ŸŽ<'¬Màõñ§Žô+kñOÜÜiZm®½µùŸ±£Rµ:5q5©`¦°´©biaãWÄy¾R8ÊþÊxzXŒ™dxèaó,'¶¨«T©0†0ÁøœÃL>=§„Ìq~ÞŽXœ'd8¬^´¸[‰¹²×…ÀPÆe™ßÖ8 “ÐUrŒDq˜9Ž­ e Ñ«_ixöÍý>'x¾Ox3ƺޡ©Kiâ»ÿkšÃŠþøyñÏÀ·gñ}ÇÁÿŠþ(ð>ð¿ãT^!î5&øIãy:|7žN¶žê>áíçû/|s×>h_ ¼iã OþÖ&µð«ÄºÿÁŽþøuñ6?‹¯tχ¿þ |4ð¿Ã_x§Mðå¾§ªêþ ðß‹5?éx{ʼn©èv“øCÄñi2ü*ýÿh=/Gý“þüH¸ø-kð‹ö¶ÕO¿ˆ>ñ_‹5?‰u /àçþü<|:Ö~øÃlí¼ ãý_^ñÄ>øŸñnxºÃL]:}'Nk†®³áßìiñ?Â? ?à—ÔµïO¬~Äš¿…ïþ+\Øêž!“Mñ:'ì½ñSàÚü>š []j²Éâ¯i:…ºøŽÏÂjþ·Ônäxµm´›½°uqÕ¥)U”8¬ª*²Ëë`jã0¸ÊØŠ8ì{ÂÖÇâ+eï/ä§9à±>Ö¬¡8ÖM Ñó³ ‡ÃŒ43HaóœÆ¶&~e[,äÎ2ÜM xÌ6]ÅØÌ¶™ÐÈÔsy¼ò¾°ÃÕË«åµxж[‹“Ç`+r}‡ðÿöŒø3ñ;Ç>0ø]á_GÅ/É©Iâ…¾.мMðçâuއ¦êã@ÿ„êÓáßÄ=ÂÞ3ÖþjúÆl<+ñoBÑ5/†>3™$ÿ„GźÚE#¯¶×ç÷Å_Ùoâígâ >Ûö”Ö>øá/ïˆëã…¾ ø%¦GãŒZŽ&«¥è~>Ô?i¿‰> ÑüGðO[ñ†5› ÚwìÇðóá‡Ç„¾!†+ÿþØú­­Íå´Ÿ¢Ñ#RÅQU»¼®B€ ¼’3É#>g‘™Ü噉'ôn.ʸW-†Q.ͪâñ¸œ,¥åO8¡‘âiéӇa²üŸœUÆNXšÕhe¹mLWQÃC:Îjέj_Žaêâ§_ ´’ÃÂmPÄr:§¿8J’¡:µªTTy=ìdÖž'ž2ÃaåC–½GQEñghQEQEQEQEVU·ü}jßõÿþšôÚÕ¬«oøúÕ¿ëþ/ý5鵉~L µä¾'ÿå÷ý»é½zÕy/‰ÿä9}ÿnßúGo\ t ÿä–ü5ÿ±Á¿úŽéµß×ðŸþIoÃ_û<ÿ¨î›]ýzQE⿾:xSàúøoEšÝñÏÁï |\øÉsáÈìµ[|.Ò>3üLøSá¯Oào ]ÉãD¾+´}'Ã67W˜žî]>ÆûÑ­:îô§O[]ß—ƒ›¥Xï~ þÚÚÿƯ‰ž2øg§þƵG‚®>xîÏáÏÅ_xÛ[ýáøqâ}CÁø‰g¶¾ ý­|gâ½zÒ xÃÂ÷Âïáÿ…¼gsk1YL#»²Õ¡ÓýûGý£>x³Å>øã7ÂO|Qø_a«^øóᇄ¾%ø;_ñ÷ƒÎ0³½‹ÅÞÑõmCÄ^û>¤ðé—O¬éV¿e¾ž+iPNéxßìùðâƒ>)þÞzÿ‰ô§ðîñ³ö„мkðÏZSÒ/äÖ|/mû2| øwq¯%®“©Üßégãx“M[ n-#T‘´±±Óo4û럋~ ~Ο´%¯‡b‚ZÿÀÍGágü0öãHügñßþ/…ú§‚þ>þ øïá šO« üHÕ~*›/Œž)ñ†“ñ‹Ç’|gðÈ´ÝO°Eukâ pÙ\ÅùV+™aòú*’¯[_%Áã$僫R²Ì1¹}c(Óž ðxHäx«Öx,u˜ÜÅÖú N¥ EJ«VÉx72Äæ•èâò¬›—e¹=\6 œ^Ž+_‡ñ9Î5ÉfÙŽ7˜T­œR£Ã •×¢ò¹chcñöŽoè7ìçûOø/ãÇÂ?ÙÇÇÚß…þøëöø9£|cð¯Â ÿi:·‹G¹Ðt kıø~‹_ë1Ó|Þ%Ò,õßiÞ´µ´mCN—PµÓN£m t>ýª?fi5Ï~Ñß¼_¢ü¶’÷âö¯á‹ÿ|A¥ü+³‰5g–ïâF¡¤ø†îÓÀöÑ&ƒ®<“øžm.$MVfp4ëÃã_ìÉû~ÖŸ ÿf_þΞ0Ò¾ÝâßÚköÐ~MûFÏâ_¯ÿdïˆ~ø;'€ôÿÙ÷ÆøwͰkŸôMGP“YøI®ü°ñ6¡mãWân¯ñKIÖ5ÏŠ>-“Äß²Wí3ñ'áGÇÿê>ý¯õ§ìñûöhømcñ÷Æ¿ðLíᦣ«xþËÀ°høgkû%x3Á%ÖôYµ$Ú‹~9]ü3Òü¢ÛùVþ·¿ñ¿‰ ðÿF+2Æ,mztrʰ¤ðy¾&…?e^­8â0ÒÎ^S T¤§—`p·¦±0ÌžkõÜ¿<>³Ï~·x_:ÇP¡Ç95 ®Yþ †ÅC:ÀB42œV;/L~ ŒUjc°Ž/2ÀG빞]Ëèäqâ ÈÃg\¾‡íOÃÚàÆMwÅÞøCñËà÷ÅOxámØêÚ—ÃOØGö–ø'áË{?øº>‡ñSÇ> ý›á&ƒymªkÚ; irxÄ~ ½¸Ò,ï´Ý'IðµÕµª¾³¨x{KÕ¼Çáçìkû]~Ïž3ý—u}?âÁž øið³Å²ßŽô¯‡ŸüKðKÇ÷ÿ |aáø5«‰6ñÄÏÚ«ã‘ñ#Zð·Åxk\Ô-4í Ã>#’/üFÖ´Yo%Ôï¼;©çÆæXJ´<\e*T3Jx™áè% F)æ9Þ_’ÔÃRUëb)Ó”ò̯Sr£G-Ï~½ MJXE9|Þ†ø+‘WÇKˆ°˜ Ç5˨ã2L»™*ØÜ²¾WN¾+=Áfo€§„úÎcNކD³ äê­ls¡Fž>¾¤êþˆøö­ý—>'x²_ü5ý¤þ|Bñ̇ÆSø3Àß¾ø³ÅøBçOÓ5kËáÝÄZ†±†çÒµ½S‡\{1¥Ë§êúeê]5µý¤’ÉàÚ£öaø­ãðóáwíðâOLJí¼Z| à‹ÿ¼cãá[Û/S³ñ1ðχ¼C¨ëCÃ÷zn¹¢j6Úר¿³g±Ö4»¸®^ßP´’oΟ‡Ÿ²OÆ ~Î_ðIÃðÞÏDñGìÇsmqñÇHÓµßÛ¯‚$Ôcߎ? ¼K/Û4ý{û3IJj¿¼o£éº«øBï_}RïXŸ]¸7:\:Ž«¯…ß²WÆoüÿ‚Bø ?[xSÄß³§§\|s·Òµ¿Dß›Pý¾7|7ñ>¢—:N¾¶~'žóâoô{=Oþ«ÝzãV½Õf×$k6-CU·ï­SF®c–&8 v GÙBt¿´ãŒ•e,V¬ëJ•<6 {¬Vn½5j’œ¨F¤}–øîàJPÇK Äò“ú†o[ªf™EogŠÊºKTñ1Ο ä¿PÂáÕ Ô¿Öü¹S­˜ºxE›~•xOãÿÀx÷Åÿ ¼ ñ³á'>(|>ûWü'¿ ü'ñ#Á¾#ñï‚>Ã{™}ÿ ƒô}fóÄ>û¥<:}×öÎeö{Ù¢´›dò$gÀ> ÁE?cŽ~øâ ü~øM¢Áð“WøgñKñgÅ_…švµàß|5ñö«ðöÿâG‰¬´ïêéá߆~$ÔtÈ5¯øÃ]¸Ólu ëžÔf[ õ4²åÙÓö}øû£ÇûüñOÀýGá=·ì'7ˆ¥ñßÇ¿øL>jþ øóøIã_„÷:g­;Áÿµ‹2Y|añ/‹´¿Œžëøðóã?í=¯|MÔ¬þèZ·Æ /ÙüsÒ~øãZÁú?Ç_xàô?tK#ü]_ÙÞjþ+Ëwámþ/H5]æ}SL´ðýá×4m*çPЭ5v±¸ÕV¬ NÊ#Œ§‡–E¼TrÎ#ÄJ1P†&<Õ±x ¯ý›B•lv®;Ë<\Z†3¾¯ð ,],­ñF[f˜êXÞ"eÙŽ_€Àbx7„sœ¾4²ê4²ì^u<y™ñU,Ë<-øœ’¦–ÐÅbhahþ“xOö¤ý™<{áïø»À¿´_ÀxOáDÜüRñ?„þ.ü?ñ‡¾ÛZÛÞÝÜÜxÿZÑüCy¦ø6 {M3Qºž_\éÑÃo§ÞÍ#,v“´zß ÿho€?5ßx_áÇ/ƒßËàMZךÏÅ[ïëMqñ*é£ð—‡-"Ö®_íóðOƺwí}û,|Fм#i¦ü2øcû#|yøAâGM½ðîŸgáý{Å-ý™õ?xJ B NïN–ÃáçŠæ²“GÒï4 #û"ºº°š÷KŽó¯[^¾5Ta†œqQ­Uáq8z“•(ñOÕñ ž"iàáˆþÄÉê¼-o¬T§þ°QÃ}bs¡‡­˜|îcÃ<'†ËáR–wf˜¼>}ˆXžd™¥,’®K–dYŽŽÆåÔþ©œÖÏç˜cðyv+,¯…¡O‡ö˜¬v1ÀSê~6~Øÿ ¿g¯ÿ ~ü_×| ð×À¾<øMñcâv¥ñ›âGįü>ð—„î~xËà߃4ß _7‰à±Ñî'ñ÷ÅØ>Ãqâ.KK½-:ßLÕ¦ÖM?×üWû@üðÃmã/Ž~6ü"ðgÂ[èWžø­â¿‰> ðïÃmzÓÅ‹¨xfëEñί­YøcT·ñƒ-î…=Ž©=øy7ícñ~×â§…toÜþÙ^¼ýžõ­á'† ¼øUâiôÉ<â3kªÜßü=Öï|1&­á-w†¶a£†ºÃV­R5ñP©R eZ”#ý¹¡ƒ‹ÂÇØ¬|q9Õù1:Ô©`)S¥ŠÌ=­%‡ÄÚ{jÞ›Ãþ7Öu»/ ë1xƒJGÔôI4íNå5m=öÀÜ[)q–_µWÁ-pxwžøßû5ø‡à¾¯ð÷âwÄ ß‰Ö_´„§ ¤|/Ö|7¤x“^ðíŽe©xSÄŸ|+>±kñ;DzüAÑ-~k1øoH¿ÒuWñ4×Z燀~üTýž5Ùâ-ŸÂŒß®|'¥þÚšV£û?x›âgì†?hÝ_ý ¾,h?í>-XÛéž3ýŸÿe™Û@Òtm{Ã)ðÇÂÍ~uøm¡üYÓü'áxoOÖ5dø£Ã_³7íûDþÏ5ñ_€>6¡Ä_ð[Ÿ‡šM›øËÀPÃ7h¿ÚçJÖ>øv×RÔ|I§éú¶âÛ? øŽkØI/‚ –Ÿ¥uâ m;WÑ®u yŽ)â«Ò…Ü0YÎ*žÒÅFT«`2ú•pXJØÉÑsÇâ'†•:¹}8ûo†ÃV„ñs«„^¾Uá×b#‡«â¬%^)Y \î¦s’ÃO‰ŸÒ¡Œ–W§ˆÁÕ….ÀcpøÌ^2ynaÙà ôpª¾'úøoûC|øÉ®ø»Âÿ~9|ø©âo\-§Žü;ðßâg‚üq®ø*íï/tä¶ñv‘áoTÔ<7pÚ†›¨Ø¬:ͽ”ya{jÏk:Gës¼‘Ã3ß2E#رyÒ*^k‚±ùŒyŒ ¦w€kàígà'_ö¨ý›cœaiòÕËqie¯‡À师ËR´jC4UhÔ >ÒŒñ 0Ø%”â²*SÌ(æYm,v#‰ÇáeŠÊ± ¤ðõ08ÜMXxU«Z¥ ˜¨Åa°•pøZô)Ô…Irâkb[ÿÁj¾x/öo´ý¡þ?üñÇ€Œ>"~Ì_þ ü0øiªÇñcÆ¿~(~Ô?³ßÂÏ>ð7ƒµè?|¥êz:üEÔü+©k^0ñ?‡|%ð}Ρyâ½.û[Ó<:;ßÿÁ\¾üH—ö†ð/†¾|[ð'íû+þв¯À¯Ž?³¯ÇCáß„¼Qá(?k/‰ß þøâ=ŸŽþ ø¿ö‡øW⟠-·o5¸lü+ãg^¸ŸÂ×Zf³§xfÏ\ðö»¨rßð[oÙsö“ý¬gOƒ~øð÷Âß<-áÚà×ÄÚ7àuÜß ü7ñCâ¯ÀokŽ|\°†ñumÇÚ?~ø×N±µÔcðŸÄÝ Q“û#Ä^uÿý”j¯µ7ü_ãÄO|Fø!û0~ÑÞ8ø7®|ø3ûI|bð_íûVŸø á…|ã_ˆÿ>2x/â‡Ç¡yá}i4Ë_øK@ñoÇ߉¾-Hü?>¡¨Eᵓíž.æŽu™æYÝ> Ãå<‡ÅS¯†àiq&qRœ°¹Nª×ÁLjñqY½UÄ•qœSB8¬4ñ¸šÛ§G ”á²9æþ,tU .XgíjTú‹ÄKž5«Iâ±ùîMR¥N0¥, “ã#íÖ–kâå‰Í§ŠÂ䔿[f¯‹Ú‡ÇÿÙûàׯýWÁw?µŠÿ|)ãÛÏÝêsëW>›ÄÚM¶¨Úº½Î‰á¹õ6°û@„_Ë hïtª&:}¶ÿ)oxö†øâ߈ž,øCá_Ž_¼MñgÀ6wú޾øâg‚õ¯ˆž Óô«›-RûÅž Óu»ŸørÏM¼Õ4ËKûcL³‚ÎçQ±‚áã–îÝ$õmBÞ[Ë ÛH.d²šêÒæÞÈ·y¶’Ï ÅÌ{$‰üÈ„©¶XÛr ²!ÃÂßÙ—öBý£~ë³GÃO‰°~מ,³ý˜­üwŸã{ÅŸðNÍ?ö]¿ÕµO„?¼}âo¿ÃχÚ_í³âØ>"^øÁ/…>,Ãáû«}sV›Å_|uâÍwÁ:V­â¿„âlâ2ÎóFIÔËò¼\ó|Ã,ÊhÏšRËèJ­j¸§ûZ£ž"k-¥,>VÇR©ŒÎS±p« eziÂü=‘æùOc3^!Áex̯ ˜ 'GˆÌ&ðyŽ%Ï N¾t³ ?¶ñið7€~/ü>ñŒG…olt½NÏÄÇÃ>ñ£­Ýéºæ‰¨Ûk_bþÍžÇXÒîâ¹{}BÒI¼wÇß·—ÀŸ ~п¿f_üAøKñ7âßÄÿ‹šÿÂïøÃüsñàí·‡¾|Dø•yâ|;Ò›]ñ0‚;ïéÞ¹Óõ{ Ggwâ›+ÉuC4iZ—Êß d¯ŒÞøÿ„ð~¶ðŸ‰ÿfON¹øå•®x2&øtú‡ì…ñ»á¿‰õ(î´}lüO=ßÄßhöš™ðUî½qªÞê“k’5Æ¡ªÛñÿþ~Òz,ðMŸ‚š¿ìÃâ¿ é±oÅSPø¿ñ¾ëÇŸî>üJß³×ǯ†7Ÿ¼¤h?|Cñw[ÿ…ã¿éÞ2׿á?ø{àÁã{«hww+â+•1Tó*XG(J…,ã „©Zž*xüÅàe‰ÄÑÄÆUpØ. Z­:õqUyñRæ–_(Ά)á>¹p§Ðyî&–wC1¡…áž(­€Ââx&ÁÖ§œap~ à²|Uáìjæó¯˜ðß æ8,/¤±!ÄÙ} ƒÇZô–¾7¶Ðmôû©tC«k:xßþ Qÿ w<_â¿øUßðF+¿øIüQ¯ø‡í^7ÿ‚5ÂmãKŸí­VïRûG‹ügÿ Ë Â]â‰¾Óækþ'þÂÑ·õV»Õ²tïµýŽÖÏëÚ¿ƒ<®øƒ@ð‰¾'k^Ñf¼Ó>|?ŸÀúOм_wiò´ Ïñ/Æ¿üa¨^°òì‹|yá­÷[¶Œy§ö~#Áø[Ã3‹Ãäå?¸ƒ?ÂP•Öy7ð¤¼<Ä`'C]S˪â'„âçžC_ã>E€Yg¶ \u7Å)ÔÄV•L4°¯ lftqßZ¡%W F»úÎÑœ(ý~Œ£¬ÕmàùÔf۷ıüÃö~ý½þ~Ð?þx{ã…|û8|iø¡ð?Çâð/Š5ü'Ðt/x‹\Ñ|ºÞ±â« ëKñ‘Óô¯é> øi} î•âOøSµkCÅü"ÿ‚¦|?ø‡ûE|*ý•þ$þ͵wì§ñ—ã÷Áï|lø¡þÒ^ø7§Ù|Yð·…­’ÿÄZNŸwðgã‡Æ«¿ø×BÒœêÚß‚þ/ißüI¤Z¡µ¾Ó¢ÖeµÒ®>ÿ‚üý±¿c~ݾ ý£b?.¾3~Ø_´Ÿí“ðÛXÿ…™ûø·Dñ†ü}iàOü$vð/íEâgFøÁ«¾‹©Ë·[Ñtï„Ú|6¤ê,åšÚ¼ãö)øû|übÿ‚¢j?ðPÿø)oìaû@|>ñæ¢xŸà§ì‰à|Qý‰üaû.þÈ?5«=Fm_Å^:ñ?†¿k›ßŽ?¾,øê‹\Õ4¥iº–µªêè÷z߃ôÿƒß˜ááFxü¢åXjü)”fy¤kÕå†6ÄpµhâðñãMO2—WÂS«…“£C/ɰ–#¡O—Vzâ¹á‚ÌêÐ7_ Ÿb0¸{:Õ'ŽÀÓâ,,©Õö0r•,xVŽgV¦%óÕÅæ8œ³„¯KKCúÃû+ÿÁB¼+ñ¿à߉¾7ükÐ<û,ø'Ãÿð >"ñ÷ÅÍ.oj|øð_ã…b|k⟠ü7Ñmõ+ wã%Ã+{8÷ö÷ˆt¸f±–½fÏï¯øŸÃ^ ð߈§­ëþ ×u[‹M/FÑ4}6ÖçPÕ5]FêÚÇO±·žîîxmâ’Eå~,xƒ]ðÏ€µÝKß |IñÃU’;m./†žÔ¾i:‡ˆ ÖnàÒ¯îÿâ§Œ<àØt6ÒîmOÄŸlÖæÔdЭ5ô-ĺÓXhâoíÿ¼ŸâÏì•ûB|"øµðûâ*üøË¢|;Ñ´ïø'ÿücâO„´?ü1Ô|/ãŸx†ÏÅ üoûhx÷á?ÀK;Ï꾟ÅSi ¾þÇÿuÍ3ž;·ø•ð‡ã÷Ĉ<ã7ô#Ãpf{“ñ/dL7‡ò£ŒÃaøoƒgŸ>,£™TŽ&¡ŠÀCÚb%Æ9ehÿ¶uK;ÍòÜG æUëG!žuÃu01¯ŒŠu3¢«[ Z*xº‘ƒ§[F5k)â*TÖ_U¿ÜÓ–š–cJœ%ŒÂásU^8Z«ß ÿm_ØÛ㮕ã½wàíkû2ücÑ>èÉâ?‰ÚÏ¿? >!i_|=-¾§w½ã½CÂ>*ÕíÅíôNeœÇatÑ\øWûc~È¿<7ã¯üýª?gŒ~ø_b5?‰ž*øWñÃá—Ä/ ü;ÓZÇPÔ×QñÖ¹á/êúg„lN›¤jº€»×î´ûsc¦jbO³Ù\Éóñ3þ åÿ£ý¬aÏø(ì‡ãŸ‹t¯wþýž´/ØÀ_µå÷ì§þÓÚîðzÿAñgŽüñ—â/ìO­x³áŽ­áïÚé±øÓÆ;ñÞ¯â?kºâ/h~ ЯüM&»ô çìAûfþÑ_µÇÇÚÍ¿eÏ~ÆÞ°ÿ‚=ø³öðÿÁüJýž5Ï~п|Mcã ÝQ¾üZøŸà á—ÃÉ.ôøoij£ƒÍ1X*UqÃ帜fRœáŒ©*\=›føYb©ÁOSͰ^y&YŠÇc°¼[Ì+â«`êe±ÌºðÔÕJÙmUZT>±Âañ•©ÊUpÔÕl߇2üL0õeu¡G —fùž{ý­˜áp8JÔ2z¹r¡O±U0Ÿ»Zí×ûø®úûLð·í‘û*ø—RÓ>^üjÔ´ýö…øG¬ßiÿôÝ95GâÕõ¦âû™í>iúL‘ê—¾<¸Ž? ÚéΗ³ê±Û2Ê{_þÔ_³?‹~ j´g…hŸ^&ýžôKMjÿYøïáÿ‹žÖ~ i>¹–ÏÄWºŸÅ ;Ä>°´Ð/ š×Z¹»×"‡J¹†X/ž cuË_ÁŸø$í;ámSþ ¯OþÊÞ ³Ñ`Í?ãžµûcÚ¿ˆ~ÞÙü0ñï‹,tOøOÄ7VV~0ºOˆž#¼ø‘¥Áâ˜|Aðâ^iþ*±¶ñ=åõž¡ €ñOþÁÿÖÿe¿Ú³Ã:7ƒ¤ð‹tŸø.ÏŒà¢ÿ þØüMøo~=~ÏúxQáè¼ ¨kcâ—Á¯ øÿR˜ÙêÞ ð×í¡é~ƒWÐí!ø‘¢[é ­Ç|¨ÑSÆÃë)B†a™àiÕT•Tðø/ጎŽiNœkFXÚ¼‹ˆ3û…£*K†1ò¡‹–V®SÏNnX| iAƦ#,Áæ5hÉÊ3…lVAÄxùe5’§9`±tsl‡—â*ÔŽ'êÑâ\º0²­‡ƒÌÿ°ÿ‚¿´7ÀÚOÃþ7ý>8üøûà½+\¸ðÆ©âï‚¿<ñOÃo‰-,týNïÃ×úÿµ½wJ³×-tÝ[JÔ.4›‹¸ïá±Ôôû¹-ÖÞöÚI:¯|Løqá?øÀ)øà xïâŒþ!¶øeà¯x¯AѼ[ñçÂZRë¾+·ð'†õûmgÅÓøgDeÖ|C‡ìµ 4])—PÔ–ÚЉâ×ì û|Eðí ûxüwñƒÿø#ñCö¸øgðEñ‡Ç¿Ú›ÇßðK½gÅ:÷Ž<¦øÓÂ:ˆ~üý‡|/ãOƒºˆ>øQô ›Åßô}RÓÅwz°³›Á—a®êzß§xsHø‘ÿððŸÄÄ?³oÿŠþ'ñ~.—íðŸÆZþ¥ñ?âçÄî¯ì~ xöœÐÿj_‰ß¿i:ÏÄøCàWÁ|!ûEþب÷úŠ´¾ýŸ~ÂúWè|ÁYOàëÂÕ'Å5¨àðù7Õeµó,ÇN¾®!ñ}ˆË²ï«`sI`*`ò,·šñgÓ®ðL§-§í3Ü6u*N5kSŒoN•J8ª±t©ÃS ‡ÄÇR•9bg5J¦"XyÓÃN´e,-WZ¶ ¬žÖWµ÷‹./¾&Ýü<ý•þ1|vð?Ã߉Þ3øYÿ ‡ÁßþÏ–Æ}gᦑáÅø‡y¬éþ1|6z'5?|8±O j~>¹»×þøÂMn/ Çý…³·û8þ×úí ðÂßã}ïÀÿŒþ j¿tŸŠÞø¡ñß^ý4Ï x‡Àú¶˜ÚèÖR/†þ(ëþ·ÓtºÖ±/ÄÁÖÚuƒ“5ÇÚ`º··ôOƒ/>þξøE&¬|Wâ}ÀsÙx§ÅR[Zi—;ø‘¯[ÞklF&•Muˆ§ôÇÄOÛcá“ð_FøáðSÅ ÿijß¾ ü“Wø[ñSÃ!ðÕž±ñwâÿ€~ÞÜ¿‹<'Œ´¹5/EãË_]xq–­F;{}6[Íu(õ;wÖþ8üðÖŸñ#WñÆ…Ú•ðr{ _‹Úž·ñÂzVŸð®ëUÓ´ícK¶ø‘{}«Amàyõ-'WÒuK|O.—%æªi×¶ë%µí´²þHüýšißÚe~9üNð¿Ã/~οÅ/Á=t?ø ]ñ?ÀMW⎑ì×ûHÇñâ?í«üCøµðëº_‚¼E“á- ï^ñ¦¹­é tÛ]gÃ÷_mÑü%4¯ì›ûOØ| øKð£Jð§‹ü)âØïö›_ŠüBøâ_€³ø£öÉðÖ±á?‰6 ñsÃV¿´å×Äo XþÑãÄ~?Ó¼}ñƒNý§|?m¡ëŸ4ëþ+\>¥áŸèß(ó,Âl\倮ç Lý…HákW”°ÍðþT£‚‹ÃÕª¨,Ncœ<zÔ+â_ìº8ùÿgfx¼·ì—ð-l1⬫ Y­jXºUşO [ ÊóJ4qY…5_V–<«_„if¹NY^•ZõñœKŠÃSÊ2˜áq_ª/ûQþÌÑ|:Ð>/ÉûE| á/Šå× ð·Åø¹àøuâYü-eâOÄðè6o k2øsNð—Šõ z=;S¹}"ËÃ>!»Ô¼.¥%´w´çÀƒð#Æ´·…þ'x;âgÁoxcÅÞ+Ô|sð›ÄZ/ÄÍR±ðEµôÚý‡‡/ü¨j¶> ס¹Óî4˜4]6êkûoËÒ!}"Ã_™ŸÿdÿŒ:ŸŒ¿g¯x‹áïÇÖÓ¿à¡÷í'ñFOÚ{űΡñLÒ`ýŒüYðHø‰/†e=3Ãÿt%›â^²Òü?àkŸøÆmR3ñ;Ä7z~¥­khZeÚ³Æ~9ý¢¼à;ß|ñßööøkñöÿâ_Œ`Òü}àŸøU_g/€÷vÖšßÂßü^øiãÏ'ÄŸ_ ´¯k>Ä^¸›Âúo‰µ­~çû}ÛÄÝ19„èW<<éή‹ÂÓ…zØ|n!p¬eR´±50ô«QÁÏ=ͧR²£Ztxw;{Yâ0˜>gÁü K1ÃágÅxW‡¡‡YÞg–o€­‚yvˆóŒ·àž W‹Î¿±°\׉¡FUóbi{¦±ØeKô7áoíUð‹â_Á]#㮣¬¯Â? Þø—Pð&½¥üfÕ<)àŸxâN“㻯†:§Ã?ìñ.«áÍ/ÇVmÂ+¢YxSþÐ×&³³Ònu¾³óô¼)ûVþËž;ðn§ñÀÿ´ŸÀ/|=Ñ1|;ñƒtø†ïL°Ð<)©ø£Hñæ‰aâMrû[Ѭ´}îú-SS»ÕôË{+Y濵I-¾"~Çß¶å¿Ç†Þ+Ó~|tð?ÆÚ_ö,ý§Æ¯ðßÁšoÁèÚÿþ>|+OÚ;Â÷ÿ þ)üvø·®”Ô>|2Ð~)Í{iâÍOHñ–½yã›kmËÅš½‰»ÚëöIøÑñsãÇÆøoὟŠ~øúÛþ wn¦÷]ð<wˆãýÿl¯üMøÑ§¢kºõ¥ÄÑøGᎽaªºjºz§ˆío_Bð¸×5hît¨ôÃbqøšx Ï ,±yŽ+ÄR­N­ðSŽ/že˜ÔŸ"ü-ø÷ð[âWÃï›áã_øâ—¼càß/KMsS(ñ?‡uÝGDðùÓ´Y#Õ}iöM-ÓP¸òíf>wãoÛköfð§ìÕñOö³Ð~-ø âßÁ_„Zˆ5Ÿx£àç|ãÛëÿZAq7ƒô=jÏÅvÞ¹ñ®¥q{¦iZ?‡ïüI¦Íy«ëM‹KêìÿþÔß²‡ÆïŠ??i¯ø;ÁÚVµá_|1ÿ‚~ê~ÑõèzV‘ñ›_ý–ÿi¿Šß~$|!Ô þÓ7z\þ&ðN¡¢x_OÖ|a¦Yø6îïÅv¶wz°ÒìüA>”ïˆ_³×ÇoÚOÁßðQoÿ¬ÖgýWö ý”4ÙóáÇÂ?‰¾'øq¨x—[ñï„<)ñ‚ø¥ãëÿƒŸ>+|6Ñ#ñ4ß¼3ð÷KšËÅz÷ˆ`ð¿€mµ v->Ó4hùq8ìÂ8lc§IÇK™:PY~>³\,[ÃããìÔ©béæœ4pØlš_í*Ôñ•+K <;Ĭ»…8 XÌ·â*Ùus~–3<ï*Ž&ŽY›Ã‚ñ9ÎYQÓ¥ L±Ynˆx‚8œö–ŽS„±x\N 9†9a°f'íÏû‡ZÅ»¿ÚÛögÒþøYŸÃ?ŽõO? ,¼!{âË-: [Rð·‰åñwöÏŠ´>æ½S@µÔ§Ô¬mäIç·H$lŸŒÿ·ì³ðÏö|×¾"ü`ð•àoÚ_ÄwZÃo‰ÏñáÕÃ6Ó-¼®ü@:ÕþÍ?´¯ÂÙçö+Õï>øËâÄÙÃößý¥þ8øëá^—âßÙîÏ⇉~ü`×?kÍ@×t^|)ýž¦ñSØ|jðOŒ5ÏéÚ÷ÃýßN›^²Ñt½#SÓ,¼%'M|^'Ûâ¡F3§FŽa“Ò§‰©•âªÂ¦ÁáñÕiaèâªb1ݸŒC“xZ™e(âa‰ä©ŠŠË8?„²ð™¦k›eÑÄâ±9öpí;È+f1©ã\^O[†SG.Ê¡G?Ȳ¿ûB¤³³3Yö%–Ò©Kˆý>Ó¿i…QøoâÄO|YýŸ´?„¿õÃ'Ä­;ã—‡5 éžñ/ƒ¼âTøŸ«jZo†ü5ðËWÖOŒ¬.|?¡·‰|Ue®x;Vð_Œ-|D¿ð˜C¡éšW´×ìÝað÷ÿï¿h/‚_ |^5fðŸÄ뿊þ·ø{â…Ðt½w\×þ4›_O ëcFÑ|/âmcV:n¥r4í/úî¡yäÚi„Öÿ™Z§ìéûCÿÂÕñ×íŸõzÃIÿ‚€ü<ýªô—ž2øQŽ~"ø ?a_ü½Mæ_‰á]Äo…ÿïõéz_Ž<áßêÃË«íÅf½ð¾³«hhÿ²ÏÆß|aøAñ«Ä? _Â^Öÿà£^"ýªµß„"ñý_Uøà{oØÛÆtÄ?ðø×ÅÔ¼uã‹Z~‘ñX°øQ­øÀhúÿŽãÕ©¨ÝišîµfRÅckW§‡ö+τɥ*•¨bªG [þ¬Ç*ÕÔ0ø\Tèlæõ*áðÕ(,3áêÊ­XGV9DVá …‰—aœ!b3zÂçC\× æXèð•$êbñÐÌq8¬¤séÂy=Z™¤rL>9Í8\Wé%¿í9û6]ü,‹ã§í ð>ëàœú¥¶‡Æ+‹ŸádÚÝæ¿…-4x¾ ů·„¤Õ.¼Qsoá»m=5sw>¿<:+éß?i/ øËá—ÃÏ ø—á ­ßÄ ê³Çìÿð»Ä:õÑøñÂ~Ðt{xSÅ#Åv¾(Ôl|O{¢h׺…üWq{ iºÞìû-øÿà‰¼MâýWPðÁßø“A°Ò¼?ûþÏZ¯~Ç^»›Ç-“â¿Ã¯Œž4´ð¿Äôl§"ÈñÜ_ˆ3ò–IžP£ƒž,­_YÞ;€Êqx¬™eXÕüoâKjZ.ˆ,Må—Ã߆ÿ>.x¾oí FÓKƒû#á÷Ÿ xÓÇÞ 1ÜÞÃ-ðÐ|5©3NK½cRû&“§ßÞÛ^ñ¯Œ/¼#âk/‡Ú߇¼5ã›­S·ð‡ˆ|[á­CÆ^ÑMá_~ ŸöÁøñëǵzÜø¤ü9ý¨*øgðËáOïØÒêO†³èÞ ñÖ¥âÙ+ö+ÿ…Í«C„­|IûGøƒK»ñ¶³öœ?Âs쇉3íÜ6‘á*ÔÃdL62â,}Hàñ8Øã©åÜÛ xžÁQÁâ§Ä–KŒÎsl‡æ8ž«•ªøÚ­GW S‡¯‰Ã:ñúÍ<=xaª}^ªVO,69`ÝJJq¥‹–C4êb)8EB§ÒŸ ?o/ÙëãŽï>xßö‡¾ñn“â8|#â;}{ö0ý²¼¢ø/Ä·‡Šmôoˆ>.ñÏÀO øGáåíLJ5m\‚?뺛LÖtk¸Ù¡Õ´æ¹ú÷P½‹N°½Ô'Y K›Ù– ­+Ek Ï"Æ®ñ¡¤d gE,@gQ’>ý˜üãmã'ügSÔ<=¯xnþÓž×¾ëZéš_‰ô¸d¿ÙÛÃcÄ>½¿³[]{D´ñ>‰«è—:ž—öûµ}UÒäs{§ÝÛEùßû6| Õ4_öS´ðgìÿñ7á¯íkà/â ÁF~4ø£àǼÆ‹kŸ„~7Ñ"?‡´ïR‚÷¶6ÓXÏùV+2Çaòú2äÃÔÇbr\eâ)TU±Ù}ó§…À*xÉb©åZ¹½Z˜ºÂá*ag=oö‰SýZ·ðÞ7šUʳv”e¹F.ts N9ž"¾7‡ñ9î%b3- Š–Y†©ˆ¡K‡²ö°ùUÏ1¸%z”%‹¤£ûSð/ㆿh/ƒ? >9x2Ç]Ó<%ñsÀ^ø‰á½;ÄöÖ^"²Ñ<[¤ZëZm®¹i¥jzÖ™mªAkywÐXjú•¤w "A}sY[Õkù­ý“> ~Ö¾ ý›í<㯇>;³ý¬üYÿô±ð‡ì9ñ®/ø³GðoìÝ>ð[NÑuÏÙçÄzN­¦êmû1|k·ñ¥–âß|Mñö¡¤Cû@_êV“¤ëú 4O„þã×öñ[üý±ôÏ…¾Ôt­{ÅðOŸÚ À2øcðwþ _ûNþÆ#â—ÄÛë '®¾"xçâ¯Æ¿‰ºgí-ñÓI¿—Ç:Wƒ5¿…šwµ fßÅ¿5mSÇ×VšÏ…$×:19½Hc+Ñ¥—òSX<ßB5±j‰TË圸`áÞ"½Zk-ÂQ̱8Jxœ6¾g…«J¦;.©†Ìq~ýo ²*¹Ö7C°¸|ÏðyvK*Åæ¸à1Øì¾‚Ì1Y¶õ< œqØŒ_ˆÌê`jfyîK›døšYV#Šê ¼Ságíð_ã_Š~,x/áwŽlü[â_þ-|NÓí4ÍzÊ?øž+RÂãO·Ôum*ÃKñš¶…¯èÚ¯…¯u­"ÇÄÞñ†o/àñ¬i¶_™>4øJÿ±ïÇ? |Tý•ÿf JÃûOöý¥&ø¦üøU¨)øÅñûNñgìóqðFÃâþ­á½FñwÄÍK[Õ¾ M¦x¯âíÿŠ`Òõ?‰ž ½ÖJÿ„Æør> þسoÄoÙ¿Wñ×Àÿ†7Z­ð[Å¿²ÏLj~1|Høéãx_m{ãƒ>4|Dðf£û-ü·ð†•mñšO‰Pêzî™âØh·¿´«ý­i“nÀb0RƬ"†+ç0| “ã2*ù¥þ”§ŽË¨æ Æc2\§¨S¯Šâ,6i’UÌq¸ÚøŠxz*ŽM «^¦7ˆÂºÔéF¦"ž÷6Šþ|þþȃàïÁïø$·Ž¼û8jøé>‡aá/ڛƚGÂíKJø¹7„5سâõ¶£á?þ%þÆOÉá[/‰zgý'MðïÄ[ã¢øsÅ:7€t=ËL¾Ñü3ei{öpý‘¦ø5ðÃþ ã߇³Í×Ã_²Øè¾ý§¾ Xü0¿Ñ¾)Åá{ÿØÓâս߇?hÉ¢Ÿé´¿‡:užñ"êM Ã^&Ñ<¢èú~y£xfÆ×º¶#B®cMá!Ue¸ìW¯:“ÅUÇJ´iTÁBXjq­BŸ%m9Ô¤àêÍ(ÉRŒ«oðó ÃC:fëºX ãöÙ>Ml™q˯‡ÆJŸâž Ÿõ.?R­B„ë¬ó/rÃRvU¿«ÏþüSðÅÿê)øu®ÿÂC¡i^2ñç€/￳5'ÈñwÃ?ë~ñ¾“ö]sNÓ/%þÄño‡u'íðÛɦj_cû~‘{¦\ZÞÏøµû$|$¾Ð¼sûÅáO€_~~ÕޛŇþ Añ»Åß¼iàËOŒ–2ü1ñ†ã[OþÑ÷‚¬¼ûU^xûö„¾ðć7> ñÏÄ3áßhwšœWÞÓíg±Ÿžø?ð«áÏì÷ð#öÃð_‡ÿàŸ:‹hWøÃûAÛxÊÏ^ýŒ|_sà?ˆ¿³§ÄÚ¯YÕ¼'«ˆ/Â;þÓ>ðÂèìÿg?†>,ñOÄOiþ ᦃáŸx–“BâþÕª½çOV›ËóZô§‡Æ×t1˜œ ²Ÿa,/€ÃR¯—UXüLqXºñÂ<<?ˆ„(e˜¸KLG†ù]‹ÁÑÎñøÌÑg-„ÂBŽ[€¥ 9vs˜ñfUÇfØj™Ëx<,*äùa•æqÇTÁâp³ÿï€>x[\ñ¯Œõÿìí[WþÆðφôëWZÔÿ²ô+SZÔ~Åak=ÇØô­:ûP¸ÙåZZO3$m ž$º¸×ŸðÆþm: M3Ãþ'Õ½[Äï}‰¡“f6ŽÁ¬ƒ,ȳ:Ø\þ1ÏqRÊqøúY½u–a°ôóX×ú­m[W‰£—}Ë­ülð®ƒñ×áïìùy§ø‚OüJøoñ3ↅ©ÛZi¯á‹MáV½ðãÃÞ!³Õ¯eÕ¡Õ`Ö//~(hèÖöz-ý•Å­ž°÷Ú†-½”‡°×äWíËà¿…º¿í‘û.x«ö…øãߎßô¯Ùóö ð׈´Íö_øÇûTø"ëþ:ýšµé¾;ð†Ÿme7v¾ñ&µá¶ñŸ‡_G¶Õü;±§Ë»¤i—Vÿø¿ö|øÿ¦üý‘ô¿ˆ^Óîf¿ ÜþÔÒjþ0þÇŸ?o½'áæ‡ãŠ–z¿ìaá~Ë~$øgÇš­Ç¿€É©xGÕVïâ6‘ð[[ž×Ãú·†¬¥>3ðß\Þµ 3šÃáñi×ÅS­'ŽŽ–G<Æá0Ôó ΃†½|*u0äë,|¡ Φ…R–ÃÜ›5ËxOý½[&«œá&±QÄå5ññÅâ)ÓâÜMYäpÁbªc3\Eå™^+.£‚£,6;<Ê“¯RX¸B_»Ÿ¾| øû¥éZÇo‚ß ¾5hš¡&­¢hÿ¾ø?â>—£j’Û=œº–•§øÇFÖm4íB[I$µ’òÒn^ÙÞÄ̧¦ÓE¿„ï¼'ðûÂÿ/tÏYxVò;YðÜ> Ò>øÓÃCÒ¼?àìñ›âkIµ=:òwðÅ¿…üªx[MÓ<3©ÚëZ¿‡nö:ßáþð¦ÇCøûÙ~Ó? >$~Ñÿ±ß…´ŸÚ¯L½ømuûühÖ4ÿ øû[ø—¥_~ÌW:×ìDm?hÏŒÞø[ð÷àíÄ߇ß¿á`Zj³ü8ðíß"ñ}§ƒ|W«iVQ|E¥üñŸ‹¿f¿[|øãؼfø/'ßøOÁ µÛ;_êÞ/ý¯|-mðÓáVŸáÏ é k x›R°ðî­¥øOÀ60Á©ËÿÞ«§hÚlŸØ—q[Tqîž+:*rÂfxêªIÃV®Q•מœSX+a«âçL²Tñ8×<$¨×‹›xŒºî[á•,Ά]„Åqµì˜ñM~Áb1™V&ü2Ñaoß>|rð´ZÄ^?×ôC¨ßøW⟆´gÒ.5;}^Å©hzUަ‘ØÞê§à¡¿±çįØé¿o¿|aMgöLG‰5¸¾)Ÿ|MÓ'¼³ð§‹u/êÖúoÃÍcÁzÅ-SZ“ÆzM߆t?iÞ ºñ冱³ð¾—¬Kªibó[ö…áìïû/üZO |*×t½Pð ïƒ4Ï~Î_³×ĉ¾!½Ô®¼ ßXX|/ýž¾øÇÅ÷:n£é¾ðÄ¿…ßDð…´}6 ûÝúDMkøkÿCñçŒe_ø"OÂ?†¿¿c?Úÿ\øµû2ø–ûVøµð_ý‘>;xSâ-¦‘ñö¯ñÇ‹´ü(Ðþ)|0ðî‹ñã^øyá›ÛŠ×^ø1©xÓÅš)Ò4û3m¦x¶ûA°»ñ8‡ÃY–kÅøÞ˱yG€©Â_ؘ Ç ¶–e‡Ì0¹ìóeGF!„ÇàpY„±3Ä`ð™V ;ÃS̫‚§ŽŸ"£O%•5:ÒÆãs ÊvN¤ha°°­„­B4âœ/9`¨BPÄJ½z2¡‡ö¸™{8þ¹i¿ðTߨûÄ/í'7†üGñ>ëÇÿ²—Á_ãïů€Þ8ø ñ«ö}ý aøa¥h:¯ˆľøIûOxà—‰üI¤jÚL¶vž ±ƒþ[mNóI³Öuý)µ[Ÿê¿¼3û@øC^ñ—…t_x~Ïß¾+|&Ôôß[è–Ú²x›à÷Äü6ñD𯇵ÿi³izîtK¥ÔþÓu¥Kiq{e§]É5”Ï·ì+ðSÇ?டµßÆ|)øùûD~Ì¿¿b¯ |ñOímÿ ý™¼aû8üa×õígÄ–#Pý—þüñ/ÁŸÙoῊ¿gé¼-¥^ë<¾_ÙUu›ßùvž$øŸªØê6Úoˆÿ¥½Aм9i-‡‡´]'A°ŸQÕu‰ì´m:ÏK´›V×u+­g\Õ%¶±†dÔubú÷UÕoçQÔ¯.¯¯%šêâY_h×á¸ðf…\£0âóLV6®g,t¡€Áä´1xü¿–ÿeÔ¡J´±8¸áhf«Z…JºSÀÏ—UÂcqXÔ“–"µiÔ†1P–"nž/S%ËëòS÷§Z†kˆÅBU#5(Ñ£6/…Ìiâð˜mj(¢¾dÔ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+*Ûþ>µoúÿ‹ÿMzmjÖU·ü}jßõÿþšôÚÆ¿À¿Ä¿&Úò_ÿÈrûþÝ¿ôŽÞ½j¼—Äÿò¾ÿ·oý#·®P:?„ÿòK~ÿØàßýGtÚïë€øOÿ$·á¯ýˆ ÿÔwM®þ½ (¢€ (¢€ +òSþ UñâWƒ \ßþÐ~Ó>üPøµ©øÁz¤: ¿,m|?}ñNöÛ]ñ!×¼Ká/ëÉâ_"†h±XÚù~”'‰¥ˆ­ABu¥O“êÙv31«,Zt°ò«K烧J8§‰ÂÕ¥‹“¡N¥Öý3áÅjü9•ñF/4†,Ì)fx‰¼6«JŽ[ƒÏñ•iR¥O1£9ãÔx{ ¸LlrÚpúöYR–+N¦6XÞÚóÿ†¿üñÃú‡Š~k¿ðèZWŒ¼yà ûïìÍgIò<]ðÏÆ:߀:øûIß|=ý™¾|Hý©ôßø/âB^„6?µ¸ß´ï|ZÕþEãkÅÓXkðê}_켿SöÑÓöjÔ¿lífÉ?loÛIluÙ__ý‹|Wñ3UðbþÓ_†©x÷ÅðRÍCVѼI¤_F,.®µý;TÔ¾)kì¶ºŽ±¨^Y\ëW}aq#ŽkÃù ~ xšY§æ±Ëð.tjçÕ£F»ÉèÖ¥‹ªðÑ©NµL\e„ÅSpÃV¦ë.)ðýðŸ f™¾3Æf0§Ã”žã’×ÃЩâ 0öÚ²U±y¢Çðm ÂÓ§Fž¦±3­ŠÄºX×?´§ÁÙÃZg‹¾7x¾ãÁþÖn¯{¦i÷½Œ~9|øsmðêïâ?ÅŸ‡aø½âŸxáPø…ãOøˆþ:ñl-qáx"×ÅZŽ“uâø‚‘ô hðÞx‡Pò¥[m6GŠE_ƒ¾ üñ'í£øÇÂÿ¶w„?nxsGž;ïé¶®«ÿïÒìïÆ_ þ1|ñïü cþ ¯ªiW—˪ü4ø¥âŸ øÂÓãCÜéÐïxTø{ö«jV‡ÿðpÿˆ?b†Ÿ¶7üÓź÷ì»àOÚÀ_ðPïÙo\øÃâkí_áO†þ4ø?öeðξotkâv»usgã½ àfƒ{e{{cªø¶îÛÀzmå­ÝÔ7ÜC4‹÷\ap æ%¸ò9çWâ,¯)âî!ÉsŒ³8àj¸<ÿ2Ë©åØŽÄÑÂ`ñÕêåyn:ëÌçX|vè'‡Â8Öü¶5gˆÂâqxjŠk‘çXêô1”]*Õ3  ˜¼*>ÎSQÂb(ÓT')ÅשŽ:”a?h¿¨ÿ޵ìÍû1ØèŸí'ûDü ýžôß]ßXx[PøáñsÀ ì|K}¦CÆ¥e ]ø÷ľ³w§ÛÝ[O}o§Is5¤7K:F’ÆÍñ3ö·ýž~ê?ô¿|E‚ÂãâÆ“e¯ü=¸Ñ<9ãi^%е/ˆ_ >iúÕ¾¹àŸx‹E´Òo¼{ñÛá>‡i¨êZ…•ÂøÂ×VŠfÑ4íkRÓž?ø)½ßÃÏ„_·¿à§úíOû|Xø{ñ'þ ¹ñ+à7‡e¯Ú;ö—¾ð&µñ7À~7Ôåñ>“ñGö?´øwð£öœÕ>=ÜüPµ×?áºð—ƒ¾lñ„LÒt½^ÿ„¬.ƒõgüöÔ¼!ÿªý„¼ûl|-Ö×ã_ÂßøÿPÑ|ãùü_¡øá…ü{ûJxgö‹ðŸƒ¼Káiïô¦³×4}ká?ÁOÝh~&Ò_Uð~¡á‘àó …‹x‡JÔ|§Âõñõ±\} §Ãø L°¹Ž…å—ÐÏV&x¾0˨àp•3šU°51z™G›cªJ’£Gœâ²ÉªY–_JxÝ1³ F†Q¬±”ªTçOÆŠËrl},|©Ç—ÙagŠÇæ4hÕœkW«€£ša¥[‹t¨þÿQ_–<y៌þ9·ý޾3|lø‘ûO%Ɖÿ 'ögðæÿ CðI¼}7ÃëdßôxöC×bøy=ï‹|áO þÕÿ²¿ü,û—ºñ«|/ý¢µû(<-«?ðRÚ§ö‹ýšÿkŸ_þ7þÐÿÿkO ~Ï ü ÿ¥ý¿à²´§ìgû^üø¯â¸|)‰-ü-ð»öoѾø“öŸ猼a¨ÝÛêÞ:ð[üZñG‚µ¿jÚ?…|áo Máäêâ.­ÃØNÇâ1ôaC‹(*ÔpXü6/*â ½< ®‰Èñ4¥_’gXÌ\°Ü9Åul_ c¨Ðl×5ÈqЦ[J0õ–"y•(BU*åõ!M,<èU¥ZRÅÆJ5+Nµa1Ø<,ž/–WåÌ%É*y^4¥Ë‰—ö­E?ðVÛCÇž%øËÿðO†>8xÃþ ÉãOÙcö5øuñWáe·ÅOÛKöððŸÇOÚÃÆ¾-øVþ6ÒtïÙ—ö|øcûn|ý¼=?Ãñ¡xƒÁüU¨|1ý¥¯¯üg¦ÿoø«ÂÚš\ë°èßDø_ã_íû\þÛ_ðI|Hý¦hß x/ö‹ÿ‚"Ý~Ñ?<ð;ã?Ž~h~+êÓµ©üW}oð¿VðÝ׆5¨µÍB=RËÄîü!âÝ=4ë]ÇÄ6þ»Ö¼?«|]YΖx¹Ri®&2¦êR”}„8Žx‡ YU£:ÉU¯†à,ÖŽ'V4±X ¸¬¿ÚÓ©íjª= GÚBmFX|¾´¥ìêEª˜üÂð¥U)TøÛVŽ!Z…e†ÅR©<5XN4ÿ¯Ú+üú?gÿÚëö΋öÿ‚#þØ÷íŸûUx×ã/Äßø+†ÿc¿7‹>4xªïáÿfû?øóÁoðûâÂÍ2ãIø}ñSYÔ-4iõmOâÿÅxçã­æ³«Ï#üOnàm/ÂU¾=þØÿ­¼ÿ “Bÿ‚‚~ÓÖðP…ðV‹ï†ßðNOÙ¿Áß¶7Æ9|eªèw~èßð¯¾~Èú.t¿Œ_u}4k^O x¯á¯¾èqi“è¾Óü9y­ø’õ΄¡R8©âzΕ*XJUqºêpðö¾\`ªb±upÞ#åS«„¦ù¡[/Íhá猌0u±›C Rr>jTjC†Ë*TÄÕ… R¯aqUq¸Æå .[…ÆpeMcå)añ¸ V"Ž/O ýÊü;ý¬ÿgï‹>=~ÌñÿöÿÇ/ÙŽßáý×ÇÿÂ+ã]+þˆ>)h³x‹À’ÂK­xoNð‡‰·t{y¯6øCÄûé›>Ϭ®ŸtÉ}_ÃÅOŠ_·'¯Ú;þPø™û&hzôŸ¶.ðOþ qvÖÞðÜ8ñW†æÔ¾é6ŸuŸør=]‡YÕ¼1ák¿j[èm§Ãg&µgmÚ| ÞßðIŒ?üWûoøro‡·Ïì×ñƒàÄïØ5?~É:ü?öœÿ‚Ÿ|a‹â÷€uß_Û|Õ5ïßü)âÙyõM/â·„> |1“]ÐtËýY•­<®êžŠë†Ã,BÃÒUi¡”cëgÜŸ ‹nžSÆx5†¥5ŒÄâqøL6.Ž2† ^\”©b¥‚úÍl^d«}F¦51} á‡í‰û#|nñBøàÇíMû8ü]ñ£Ø^j©á†þxûÅ¥éþWÛõ%ðÿ…:üAð&©û<þÖ¾ý•?h_~Ó_µ?ø&gí'âOÚGTñÇïþÑü>øÛc¡xrßá$ZÏüyã)þ üDñæ“©ücÿ„ÏàLJ“Ã:V›má-2òãÀ^:m¤×‡WÎg†¡5Bx™ðúνÆïÍW$Ìóºtéåð©[^…Y]ljÔäªUÆbrúxz3Ž',»öL…ùvkÆŒŸ ŠÌ°ù6 q<ˆ«V®_ÙeYæ_•ãñ¸üÒ8,&!¯›ÑÌiÿª¸\N Ï3Ãã²ØÖ\-7Šþ”-.íïí-o­$ómo-à»¶—cÇæ[ÜF³C&É$Mñº¶És‡U`@±_ÏÖ«ñÇö‹±ø-ûOÿx§Âÿ·…wð~?|ŸâŠtO…? ¿bÍ[â_…t¹þ.~ÎòøÞ(›ÄþµøQªøÂûâOíi¥üñoÅïüPÓ¼e¥^xÞð/Â?y}·Åj?þ0X|+ý§üyðþ÷ö…ÿ‚shZ-ßìÓÿøñûzø£áÆ·ñ/ö§Ñ< ñbÚ_ÚoâÿÃ/ kZ>™ñÀÖÞ²o‚íâŸXè1Ùx‹]Ôô+DøŸ¶­Ô³jU3`(Òýö"XaèÔ¬•hË2Ìa¡õ…ì•(R¡í>¯­J¥_gœa³ ®*ÿQ­‹^n Â<σxÊ™¦ašå9MLE*tëáe,Ëý_ŠÆáÜq‹ˆÀb?ÖÌK <w•aq8ê8Ü<ê`pØßéV¹üBðĽ&ë_øsãøÿB±ÖõŸ ^ë^ ñ.‹â­&ÏÄ~¾—Kñu¨èW·övúÞ…©Á6¬éRÌ—Ú]ô2Ú_AÄoü_ø«ñ'Çß²OŽÿmo‚'|eø‰ñÛÅñþÒÿ´‡Ä/ÿ-ß¾5ý þ&kž&·Òd‡Áþñ^­áÍWâ&àOÙx/]ñA“Âö·^,Ön~wñGŠ>ý‚¼Uñ/ö|¹ñ§‹þ ZkzoÇÙ¯àͯÃ/‰ÿuŸÙËã—Æ-3ÃZÞ±ðöËàߎáŠëXð§‰n|Iáoˆ^0³µÖ|íWQÓ9ªgŠ”ëÊXj²¡G ŒJt¡RTêfø(æŒVãªB–ð¸<ªröxšÔñxª™ÖAì¨SX—ôåÞÏ3•,.:Ãýw3ÆðÊȩזŠÅåyî …³ N2¾M,Ây¤åÀñ†Z¦Y ÇB9Å4ëbœp¸jõ?¥z+ùóý±î|uû0il>ümý¢b—â‡üóöÙøÁâSÆ_´Æ/ˆz•Åß„ãà|¾ ø‘ðíümã=rÓàν¥Éñ#Æ'û;àÍŸ€<&ɨØBžŠ xZ-Òþ1Ÿ³gÄ9´oÙ›Ç_üñâ¿ü¯ö½ø¹oá‰_~'~ÐCÄ?´«ß2ü1ñ?üñGÅ>+ðç‚õ“©|Hñ]¯ü ß tOøÄÚÚv‹7ƒ.,ôO Xé]µqÕ0üî¶´(æÕ1§‰‹J®Wþ·óS¡*ôðð© ˃ñMWÄËK‚s‹Qż?‚ðÍfx^Äàsü$ëþ øñOÇZ>·ñøŸá_‚/üžÒ5h|á+½#O½—äßÙßâ§ìÃð{þ ‘ðÃÚgÄx³Æš®—ðáoÇK cþ ;ûCüðì¹ñkNð6·s¦ü|ø¹¤|VñŠaÏ[êÞ×|'‚<á ÛÄþ>½ðwäøo©-í¼š/;ÍÔ(Ö¯QàcN40ò¡ËŒ«Uâk<ï6ÈñrÃF† µLFðZÔ1§ŠŽe€úæ &ðÿ„ô›­cAðõ¶©â]gMдëÅ:͇|1¡Á{ª\ÚÛM¬xÄž›¡h:drµî¯¬ê:fŸÅíÜH[x›Mºñ>«á­¼@º®£hÚíÝÝÏ„¼UgቬµÛ½bÎÆ +Æ÷z4 ×u˜&Ðï_Yðê> ðå¤ú=ÿˆt½.ÇÄ:ƧüÓê>&»øÏûþÑâÄ}OÄ_ ¾ÿÁJÿeûÆý°>5|qÐ<ð/þÈ_¼g®Ø~×Úş¯‹ß¾øJ×âOÄÚ|Fñ£Lÿ,–ÏZðç‰SHøkàßéžçñã©¢ø‡öÓ¿fÚâGŽ?g½örý€u(~!øKã—Ž¿hùü#ð‹ÇŸµ§Çÿ þÔ<ñÅ5ø­_x«FøE¥xŠ]_âM¶½¬x—Ãzw‚ôë¸5oøAôc¤Zͳ¥Vk N8•¯†\\hÊž 3á\áqy›©OÙåØ:u±ð¸ŒÃŸ†Œ08ÚžêÂÕ‘èÔðŠpÃb ³,Oö†8yUyÔÁS†UEÖϸ#*Á©bðøœc«™ÔÃq,Mlª’äNYa3e:4¾½ýÑ_ÏÄ_‰÷Má?Œžý’ÿiŠ^9ý–¿áwÿÁ7<=àïŽþý£¼sñÇVÑ~*|NýªtOþП <ûFxÃÇŸ¼Qâß²“á¥÷‰|-}âxsÚ§õïI­¦«©xr°üiàÿ„´í¯ðÆŸ~+h³‡eO€¿õ¯|]ýªþ8jºßà ¯ëß´‡…¾&ø¯Fý£þ$|V¿øµð¿F›Ã|-}%Þñ?AÓ|¨h³øŸÃRxwVÔ5­FÿÒɪ¼ß€ÃƆ#ÙcsZ¹D>¥N9†:¦+ ‚¡˜Vx, *QX¸ÖÃTœ²Õ,N®=¼"tðÑŹPùÌßÃéå9Nk™Ï3”êå´pøß¨TË¥‡Ä<#Á¸GOÞ.¢Ág\Gå”1™\cЧ†Ä`sŠÇû\.8ÏÕš+óGöaøƒñÓXø¤è? µß‰ßc7ѵ9Sãí'à+_†~4Ò/aûrèZOˆ²\xWÇÿ´Ç‚£Óáð|~ñ7Œ?fKoø÷Â~!ñÅ“û}|fñF—Ãgôº¾¿Œ8SÁÙ´rœV?/ÇÕž–.ø9b)âpj­JÔÞ9Ë1Ø|&g‘çXYÑ”qÙFg„¡ŠÃóS©[ _ˆ­ùfm9Î0åösönpœ+á«5åS ЦÝ#ðþ¹y¦Ccâ» ©ï ü«œVÂeôkÔú¬ñXœ—›Ó øÇðïÁþk_ð‘øâ?…´Ox3_þÎÕ´íŸ xOƒTѵ/ì­zÃKÖ´ï¶XÜÃ?Øõ]:ÇP·ßå]ZÁ2¼kÜ×ó!û|bý t?Ù7Ãeý÷Š<-ûKhðN Yÿ‚q|Ò¼A}qðSãG‡túUÖ¥ã>Î+LøíûGÙxÞÂÂ|5ñ–‰zß<yà;‡š©¦x³Åÿ~#f/Ç/ˆ6Ÿ?l}cáí9ðêúçHÿ‚|þÐ^1ñ–‘ð«þ YûJþÚßü1ñ–—Á?¤Ó~)|øgÿ qâ=}sÆúfµàOk~:é6ºGÛGøIxtnŒVy†¥¯†§F­¡ƒÍñÔiÖ—&.t²Ég-Q•)S„iâ2Jô±ÔëË[ÅàpµhJÙ­L§ß­àŽ>yÖ;-Âf´=…<ÿ“aqRT1XzpÇc²úq8¼E,E õðþÏ3Ž ˜eyn7˜g™^{LO2ÄÿPUÈxoâ€|e«øÃ@ð‡Ž<â­{áü}¢xoĺ.¹«øÄWjh>0ÓtËÛ«Ï ëSi—VºŒZ^µ •ô–0]¤ o4r7äo<}ì9ñÏž&‹â7ÆïxÅÿ°Ïí)ñ³âg…þ*|lø­ñ’üSøUâÏÙæ?ÝxAø‹âßé?|CâMOâ‰ü+iáƒÚW‚<'®]x§HÑ ð›.‹á;mÆ?fÙ¾,þÌ~ êÿf¿?®?i?…>6øSûFüFñ¦¿û;\xÆßµî£¬øçö‰ðwŽt ‚´7Æ麇Š|Uâ¿ÚÂVº·Ž4\j°ëŸ <:ºØÕ4½7B»Ïœ¼ZQÄP~Î43O®N”q)QÅásï*Ë(QÄJ…*uÖk˜d5ðT£É E*ù–TëQ„*Ôqù¼‡0ÇdUóœ6oNQÆåÔs.£‹–.Äæ´0Tëâ¸UÀÖÌ+b\†•XÒËV`ñÅ`*VžÛÔ¥Gú¢¿Ÿ?€w>:ð/Áïø$·ÆØ~6þÑ>.ø‡ûQhvøéyñ'öƒøÅñ¾6Ò5سâ÷Äèd‹á§‹¼gª|2ðŸˆ4øÂ¥‡<àÿxÖò].ö_x‹\¹ñ?Œ.Á!¾5iÿ?h/üLý©lt_ |kÿ…¥û@|_ø“à߈~±û|Zø›iü0ñ—u…ÞÖ´ÿxÁ×ö¾1ðo„¼3ã+æÓ¯ßÄ~$Ö®÷LÔ ·½µžÿ¿d‹7ÚÿŽcWðŸÇω_?jïÍâÄÿ‚üñgÆ_øÎÛàåŒ |a¬xÖëÄ߳ƻã[ßþÊ·¾ý¡,|ðûáÅ¿‚üððø‹Ãúåæ™ —Šì.§¾ƒÏ¿g¯þÍ¿³wìñûeÛk^8ø±â_^øõûPè?þiß¶çÇ øÇá÷€ Ñ5K¶×¬eдkÄ~»âk8µ{ÿiº­‡õë7ù­°ñW‰þ8~Í_ðWŸƒ¾ñͯÅ?‡zWìcàü3Ñ> ~ÝŸ?oÝ xãÄší#eâ¨<ûGüMð¯‚>*kð\|&ðŽ›âƒº~¡âŸÛ^iº¦—S]øÓÆ~on×~.?‡î¼ü»ã¿‹þ<[¿üóööñÇ„ôÝ+öø‡û]iº×í à¶ý•Ç‚¬îâÄ¿Š'Xñg„.5ùí|3à]FöH¼>þ%Ôô½7A²Äú¥®¤ÖokUJ¥F–QÕFž" 8¬³ˆó —¥]P§Gÿ°½ mz´ù§Z,F êNx^ú¾Ô£‹¥”Ï3­O7žiŽÀÖ©‹ÃaðÙ&]AðoñvUW8ÍpØÌÆ9~.¥>'«†Åa)ÒÇaj<«2ž3<­_ú¯‹dØSáìeâ¯ÚÃÅÿ üEñ^ÔÿlOÚKÆµÄØ<{«øgT±Ð¾ xå M[Gð$^ð‡…®4Ï[‹tþÎÓüAsâ}j[í> »ü–ø›ñ›HÐ~þÓŸ±'íUñgãG4ïø'í ãÿÿni/ˆÿu߃?´6¥øa¾ êºgŒ|Wñ Å:ÇÀ_‹^(³¿ø½yâO„Þ—Âvš'ü!šF¤| á™´«+‹½~èZ¯ÁOÛoà/€¼9ñ+ã_м/ñ×öNøïñâv“ñkãoÅOŒ:v«ñá׎gH|9âï i|[â]áuÊÁñ7Æö·þøO¥øÁ7¶zµ¥›ø]m<;áxt^¼.Xœ]gNŠú΂«‹¥‰U©ºTëg¸º´pî4—Ö0X¬WÇJ½E†«*U²ªÒÃÂrÆPÂ|þeáõ\UN­LÏ b¥œg~Q˜e3˱ôêpžI—ã1ÒÏp³ÆU­’f1Êx³²ì#†;ëtêB´êPÂcðø¨~ƒj_ü¤|NðŸÁ½G]û?Äx?Æ~>ð·‡?³5™µ<'ðûTð~âý[û^ :]Ëû#Rñï„í¾Ã¨ê–š•ÿö¯¥ÙÞÛØêRÙú~5~ÝÚ×À=öïý‘Ÿö‘øóìùðÖûödý®¬¦ñ[þÑ:·ì¸úæ´¿?e+í+Âð|ZðÏ~xËN–ᬦÖNá?蚆·‰-–§ý§á¶Öô›ï—ü_ñöÒþ þÈñüMñ½¾“û7k—?µ4zſ߶ÇØ.óÅþðÅK=ö*—âŸíaðÏá狾+é>$ñïÀy5[iþ$À/ñ›U²·Ô¼gâ½KÄê¾ñ7 lò– íjªê¾*”çõ”°ô=–yË(GáNµ| |M4“¥ˆþÑĪЦðΦ•OGáuLÛ-á”q5¡-ÅMpþ#‹Ë°¹•J8~–„¯ˆÂÇ ˜fYU)ãæ±òŽ úñŸ„t/ø?Å~ñM½Ýç†|má­wÂ>#´Óõ}cÃ÷÷Z‰4»­W·²×¼;¥xƒD»ŸO½¸ŠÛWеM7XÓfd½Ó/ìïa‚â:V:‡†¼+¨ø[ᦑ£jº\CÂ׳xr×FðW‰›Á:7‡¼t=t‹iº$žð½ä1jÚl>𶯮izÞ»§Új·>Òµ+kÓ韇º?Åï?áÿìg¥~ÖµV“á/ÙSÄšOíVšŸíðÏö¸ø©à/øÛÇ^ø—¥h_³Ã]oöÛFý›~"ø÷Êø5/ÄKÓâá'‡àý¢|SðÎãÇïã=5ÍÅ÷Ç×ß~-iÿ³çŒ®ü û@|q»Ñt¯Ù3þ ¬x#Ä×ÿþ)øÄŽŸ¿jxgàoŠåñ‡ŠüQªø¿Zñ/ÿ\/À¾.×õmCÄú›yuŽ©Û®Ìý’â*îrÕRµLžuœRËãŒçÙvURµyâ²õUÐË3 l0”iáçRue‹ÁS¥[Úà SUz_‚Øìʾ …LÏ–µn#ÅpÎ,¾´r¸W¯WŠpÕ1\ÊR©:óUøÔÌòè`èU… ùR«ˆUã:xoêÒ¢žhíášâfÙ I4¯†m‘Ä…äm¨›j©8U,q€ À¯ÊßhZ÷ÁOÛàÏ€¼ñ+ã犴?Ž¿±ïí ñâ“ñ ão¾0˪üKøuãÙæ x»ÀšGÆø—Àß µ¥_‰¾4µ>ð™ào†w««XYê¾]#þ‡Eá¾ÿÃlÿÂÄðü$ÿðùøF¿á4ð·ü$?ð²?âOøWØÛ–?Úßðžÿ¡ÿ‹±ÿ_Ø>Ñÿ Oü*ÿø¸ŸØnÿ„+þ*_ìÊý3ƒ8\]—fÙ…n/à.žLñJ®Џ’YF+4ž1Î2ú´òÏ.ªó9äó—½O*o‚§8)Ô”aùá©dk)ÄPxÜ×e´³\è`Õdpî¤ðõa‹Âªøšxj¿[¡Š§‡pÄâcZ(×—²œç‡¥ö§„ÿoØóÅÿ ¼[ñÎÞð—ÁϯÃÇñ—Äß‹Sj<áÈþ,øÀß¾Mªxƒã&›àM>Úx?âWµ-&v˜Å%׈ì´9^-~;­.ßÑüûQþÌß¾ø‡ã×ïÚ+àW¾xF-~ügðWÅχþ*øOáˆ|)dšŸŠfñÄ] ÄþÑbðÖ›$z†¿&¥¬[&déw¨›hd?þÓ÷ßðNø%¿ìâ?Ž?üáÿüøG¬ü(ñv‹ J5oø£Åßþx à þh~ Ò<[®j~,ø—¤øsÀ¾Ѽ&§¨Çm¡Þørˆþ#Ö´OøGõ¿i¿Çߌ¬üuûKÿÁÿ๶‚~(~Ϻ¿ÆßÛƒâ¿ÀïړDZ×ìÃñÃáÏÆ¯þÎ?³/€þ$iÉsñ¶/†šîª4¿x³À–þ"ñ4ëÝ3Mž-3××Þ+:WŠï<[àü×âxVyçK‚¿¶©p®]C.–Åuòéæy}|e^ÂÎA<¢<%Eâø¯ˆ+,¾Œ?³xs"ÁׯNUs8E,IÔÈã-c™æ‘ÁNp†+FLâ¾*¦]‡œùoG‡È2¼=JÕ§OšgðÁ(aÞ5q_Üo†¿oÿØ{Çžø½ñCáíkû=|cðGÀ?_üBøÉ¬| ø¯àߎü;ðv¦kÄÚ߈ô_„š·ŒõëX§Óü?­Ï¦ZǦK¬¾—{m¤Zß]@ðtø[ñsáÿÆŸê^+øo­ÜkÚ‘ã?ü>Ôîn´ønæËÆ? ¼W«x#ƺ,ú_ŠtUY4Ohz¦–÷bÈØ__¶i—w¶[ÝKü´|ÕþþÞ_ð[Ù/ÿgßx;ã‡ì’?à‡zìóûO꿼ieªü<µ¸ø•ñX¶ð÷ÁÏx›áÅôVþñ¢øZ}Umü;aâ+oxf ;Y’ÎMãNž?ªŸ|8ðOÂýQÐ<áû_ é¿‹|gã­NÎÒ[¹Ö÷Å¿¼QªøÓÆZäòß\]\5Ö»â}oTÕnÍðÉtmìá¶³Š x½|F„ðü+z|M6«Ÿf´é¹Ï+ .Êó\Û#YRTå›K6Ì1YR̨¸ÖX 9~.•¼\áe&ž!×EÒs‹Êëã3œ)á³nÉ3èaéJ6’Ç`s Ú®«B•'´P¥^¤¨Òí¨¯çBÏã?ÇkÚ£ì~?øÇðsá‡ÇËOÛDøSAøqãø(7íá_k¿³´Ÿ—ÂðŸ‡à™ú'ÀŸüøƒ¥|Eøx𗆾.ÛxÄ7–úþ¶¿5ߊ^›ÁzƉáG¹ñÖ‹ð&Ú¥~6þÑ:ŸÅ­+þ ‡«üÓ£Öh?ŒZ‡Ã(~kðR½OàeÿÃ{ß‚Oã4ø;¯è)ðÛ]Õ´-'Qñ7õ¯xn9t¡á¯iøKÁpxsóœ³7Žk ¾®”U&xËDð‚4Ÿ²èZv§{öß‹¼G£i?n–Ú=7MûgÛõ{Ë 2Þêö@¯æ“ö€ñçßEx>5|}ñaý´ôø)ÁÏöe›ö‹øƒá3ÁŸ<9ûu|6ÑþêVÿ²'‡~"Ùü>Ö|¯|> øgñgÆß Õÿ 'þ&ßÚ¿Úaÿ‰ö]}熜5ÿxÈ­<Â1¡*˜Œ>;‹¸Ž9NW_òþÆaðpÇC Ч[:ÿ…Ú“Äáh)á©ÓÂ׎‰†ëX¯”ã~§Á¹vSVÚ˜Üv+0Î0İ*Ž·öwÔ£K‘§9U̲,C­ZxLòs£O2¡<5Z8,<=êßpiµGÀ}gãN½û=iþ8’_‹ž“Å‘kžŸÂ~6²°±—À¾øAã¿D|a}á»oÜI¢øKã×Âmfá-|G;K‹¢‚ÔOy¤x‚ßI¥ðWöÊýi=\ð¯ìéûUþÍß|Qá4k>$ðßÁ_Ž_ >)ëþÒ ìZhÕuÍÀÞ(×u'M:ŒðØ ëû{{S{4V¾oŸ"Fx/ ~Ïÿ´ Ýüyø¿áwEø…®ü+Öïþ7üCøïâéÞ;³µñGÂƒÞøµ¨|P»øE¯Cû?xS\»ð7À/†úï~ E£ü2°½ðeæ±àÉm4ýKQÔu?æƒö@ý¬¿g_ø)ü›áGíû8üKý•þ~Íß°ŸÀ߉߲Oìyð£ÄŸþü7ý l¯x‡ÃZ­•Çü ÿ³õÿü-~Îþ Ñ_øJ}cÀ’^Å¢é¶7ú„®õ=oÇÚÂÝ8Š— Sϰ9G Ï9ÅÓÀðË­Åñ¸œ³Äx {õüwÔËèÐúÇ æÙÖ‡òŽÂâ)K:ÇÿicñUeeò¦þ"·µYL³:PTÛÅ`)R§”0®O˜et§ƒJS´±<¦¾s›cñ2©JŽŽQMÔ£RÙO ýiø§ãïÀ¯|Kð'Á|jøKàÿŒ_¡¾¹øeðŸÅ?üáÿ‰­ôĸ“R¸ð'5mfÓÅ>/‡OŽÒíï¥ðþ•¨Gh–· ;F°ÈW™øUûQü øÛãOü=øeãKø»áäz¤Þ-Òåð‡Ž4´èt_о j’ÚêÞ&ðÖ£kQÙüPø7ñ+Â’I¡jš´þ—RŒ¾©hÚ–£ü^üiýž¿n?‚_ðZßø#çÅÏڟ³GÄ_Ú÷ãßÇÿÚkÄ:ÿÄ~ÓŸõø“Â'ÃÝKðç¯øÅ?²7…¯>|-øàJèü5ð†ˆ¿5ˆ~6Ö|_âø·CÖ¼W©x˜cZ¯À/Ùƒàï†~6øÿS†×àöƒãO øêãã7ÅañoÆÿ o´ kß~*ümñ¦¸ÿ-¼q ë íl¼}ñâãñ?…üOá9ü#7ˆ$:.§£iz&…m¤é¸nÌ8oW=UâŒ~v²~¥Ã4òìfYJ¦‚Žk׌tó Çõ\},>[…˱¬f4gíªR¡Vœc¦:.†.¦ Í*ŸVɱøzµ©Î4«`±YŽs‚ÇTµ¡>zÔrºX¬±%hÇìq¼µiN+é_WÒ´ +S×uÝOOÑ4=O½ÕõgW½¶Ót­#JÓm¥¼Ôu=OQ¼–; >Âή¯on¦ŠÚÖÚ)gžXâ˜s¾$ü:ø¿à¯üIøKãï|QøuâËI5 øûá׊t?x+Ķ]Oe-ï‡üUá«ýOBÖm#½µº´’çN¿¹….­§·gÃ"/ã—Š¦øíñ›à×Çÿ„ 5O¿´_ì}âÏÙÓ㟦|aø«¡x£à_ÆX|D¾ñ+x7Âÿ~/x ]øuñÃö“ðÍëZøMðŽ³ª~ζ/ÅOx£ÄŸn?ooŽ:äMð³Ä?ÎÀߎ~:øÿûþǺ¿ì-ñ³Åš¯Œ?ásü#ðüÆ þÖ¼K®þÊß³î¡ãŒrxšmNÇGÔ~8kÿðOŸ ë6vzañÄŸ‚¿ ü âo i2Mã›#YÖ­a•ù¸«†±<%Ÿf™7—c*a0üWW Âή¯on¦ŠÚÖÚ)gžXâ˜^øÕá àßüJ_Úþ ïà/~ÈöÞøGñ[àSþÄ¿ðUßÚwöäý¡?dŠz—†¼[àñ£xcö½ñŸ„þøÿâLŸŸ²¯ì|Ÿ~$~Í>ø¯û;ø‡à6¿ªè¿¼/ð—àŸÆ+{oŠß´ŸÄm]oî~6i7:޹ðËZ[ß ÛÚ[6Ÿ©øOá¿ÇãñUpù~}ŠÃRu+äü3>"…±oÛÔŽW›b唿a*ŠY®”Ö•|¥e,‹Úñ õ0Ø,}'©J•7ŒËðõªÆ4qy¾+­Y7MP†/‘ц>ØŠtç¨ç˜zPÅ×§F“ÎU ¡®lÇ+Äã´o‡_~|_ðW‡þ$ü%ñ÷‚¾(ü:ñe¤š‡…|}ðëÅ:¼â[®§²–÷Ãþ*ðÕþ§¡k6‘ÞÚÝZIs§_Ü—VÓÛ³‰a‘´¯åïþ ýñ ÿÁ¾KûøË@øáûWø{áí¤?~ x»ö£ñ¯Äû_„^)>>ñòiÚ\?|[ñzO|ñþŸˆ|=ðwLÔ¿eß |cñŸa¦øËâ—Ã{+û¿Š>û—Ã_´6à_ |Sñ÷‰¾5ütø‰ÿ¶ø_ý…áïÙWãè¾ý™t­+ž:ño„¼áŸ|'ý—t‘ð§Æ¿í¿h_è>ÑjÝ?^ý¯ï¬íµOÀö_¶gÅX1Ÿö\“œˈášÕÊ3 6.X<îŽC„Ë0”êãójøœel.›fðñŽ "áÖÆP§>+Îñ™~µßö~^|5 ˜Ë—eØÌ]5„©Œ¡‡«ˆUUJtrùTön­,ÂRŒ§…ÅSN¼V_ⱊ½ Rpö<ظýÕ¯þÞ¿±?ƒµ ­'ÇßµwÀ†Z½¦­âhÿþ*x?áV¯qàÏëÞñ%|EÕ|3¨xƒÃú<-âo ¯Št;mGÃ7Úׇµ« ;W»ŸK½X}sá'ÇÏ_´½W\øñ§á7Æ­A¿J×5„Ÿ¼ñKѵI­Öò7UÔ<¬ë6šuü¶Ž—QÙÞM Ãۺα˜˜1ø{ö»øK£üÿ‚F~Ò_´+«½FÃáçìUñ[ÃO¬ê3Ksªx‹S²øe­sÅÅÔï$÷zߊ5¹5ëW“HòÝêºåÌŒ^S[Ÿ¶‡‹ï|'ðËö\‹Ä~>ñGÂ_ÙëÄŸü! þÔ<'âýká炾·Â¿êž“Yø¿á­cþ%ø?á/ücÓ>xKÄÿô?ø^÷LÓµÖÒßÄÚ=¦±s,¿“ñ|:â(døµŠáüi…Ãdx¬Î1Àbkà3\Û€Ë1™¶#ÚNŽ“„¥‰Ç*9Ô^Þ¤pØz•hB†'õ Ÿ‡rÌó‡øgC œ`³Œ÷ÅXzô«c0˜ÕBŸ d¹}_ ‚ÊpÙu*Ù†s™PÏY–e°ÍéÛáhQ†*PÌ£õ?·¼eñOÀüAðÏÂÞ.ײ5ߌ>2»ðÛìÍfÿþ/Xø;Å>?ºÒ~Õ¦i×¶zG•á/ø—Vû~»q¦iý›öï_S¼Ó쮽¿š¯Šþ:jŸoÿemFßöˆÐ¼)ÿø£¢~ÂÞ8ø±ñ7\ñ¾™ñÁÇþ ûñžÿX¿—ã‰>²ð®—á;ÏŠš.ŒÿðŸhý—ÄÏŽ÷rü5ý—$ðoÆÍsYýµ´øæß´ÿÄÚ»öÚøÕû x×Ãßµv‹¨x éÿ¾7üsøEà¿xÃörñ~“}¬|P¸µýšt7àÿÂÕ¿ðý—†|7:hO…üâŸçôc‡­^T(Áåu!,Sžš£›åy6c‡ŒêS§ŠŒç†yŒð˜ÜFÚᣙbr|¯ ñŒuJ´~º¯ƒø™ÔáÊ8<ÅU«›`qõq´×Õ%ˆÃb°9¯«ÖÃb1Yu,§‹Ë¸w…Àdù¶:ž#ŸPâ,ÆÒŽM‰…莹¯øÏÁÿ<|Fýˆ~|Fý¢¼qâ߇~!ýž¿nÍwPÔÿf¿Ú·ãÅ¿†¾%hŸ hÏžø)sûAøkLø ñCâÖ§àOêè2üh±µðý÷Å;Ûmwć^ñ/„¼¯'‰y-#â¿ÄOŠß?g¿Ùšëá¿ÅÚúÏÂÿµOíSâß‹~²ñÃO|DÔ¿g?Øçö ñ÷~XøÛÅ´WÅ߆ñEÌÿ¬~[Ük~3ñ¾µãoiŸ üY¨ÞAâbßÄÚ܌ʴhÒ–zØ÷ˆYt&«b*Êž8yN;‰Â`©×®á—ÓUslU ±5?³°xꎥ%‡u%Å }…h}o9£:8,ζ<äŽ/¥‡ÁÐÿ]g˜<Ï5Åáð_YÆÇ3,69”rü<1ÙžG‡z’Ä⣃þƒì/ìu[-SK½´Ô´ÍJÒÚÿNÔl.a¼±¿±¼….-/l®íÞK{«K«y#žÚæ $†xdIbvFV6ëùßð‹~ k>ýŒcoê?´?ÀOáOí¿ãoÙ×Çþ O‹-à¿‹¾ ý››öWý þ)|Óƒ{âÏYÔìí&²ÒîµÍÞúx%Ôì’¿ګã—ìçkkðËáÂO‹jš"|Ôü[ð»ã—Äø,_í]û4øâ·ˆüYâm/|ø£ðßÄŸñ÷Ž¿à‘ÿ´oí…ñ§Å­>'ÿÁ<üTž!ø³/í#ñö^ð׈þ8x’ßöRñΗá»á§Ä?„ÞƒÄ>;7Þ9Ö_Àñ›+_ˆV¾X¯4rÓÀ:5·‡´Ãæ‘Åb+R§õxÒÂfx|¿ZµzÔ)Çë˜N$žR\,TñrÇpûÀÇgB½|n†R¥GÈa<+¯,&«ahc°yýl69>®o^¾W”bóœ 0ùm ûVpÄápueާŒ–]ŠÁT³¡CKÚâhÿ@žñ6›âÍ>ãSÒí¼Akmk¬ëÚ‘ø—Â^*ð^ ×¾Öot-B{}'Æ:6…ªÝè׺|óè>"´²›Ãþ)Ñä²ñ†5M_Ãú–©Ýtüõø_ãÚ´? ,¿jßÚ/âGÂßÙWSøýÿ9Ó¼]ñfëö‚øð"ÆãâïÚÇSðÏìïð«Å¿´†<{àox¶? Ûâdžð=·|9 x–húÛj¶ÞÓ´Të>Mñ;ö€ø±û|6ø«ñkö†¶ø_â_‚·Ïˆti<#ñ—â¯Á_|høWðßö‘øáïÙoâ_¼QðÃÅÞñåçˆõ_„¾…âtñM®»áÿøŽ-P—Z–ãFñ‡ŠtpÂæ’ÆUÂaèQ£:øÌ3ÄSƒÅÓŒ¨*9\ó*ðÌiF5+`+V…9U˰ü˜™ã0 c¹éÑthÇø],L®'7tp9~eĸZõiàeŒ”ðù~*§/ìê²­¥šbãÄÃ0§%–ÐÀUÌòEV²xú°Á~ôQ_? ¾"øóö7Ò&ý¡?iÏ |AàÚ¯öŸøGð/Çþ ø¡ã½Oã÷‹õ¿„Ÿþ4øáOƒt_[ÁãÝ[öÇøeðûÃPÁmð£â?ÃÚ þ(]øy³ñG‹ïì,å¹µðç‡î¼kâ/øFßXÖ&,tù¼Kâè±ÜÍj:½¨’á?3> xšoÛúÿ_Ò~>üJøwàÿ ˜fø›ÿâÒþë:T÷š¿ƒ¥ý¯í?l¿„>øë©é·úŸ†t‹χ¿f_Ù ;mB4¸ øÿàh¼?âÝKë2Ž Î3®â.)ÃTËðÙ7 S¥~/SY}Ë,˧†É2Üë0À<Út«að¾kÀpÛÆSú–+;ÂâªÑ¥QƦl*ÆT¯K _ 5*a¨SÄWŒ/YÐ¥[‚ÃUÄF“r¡‡Äc°qÄÔ^Î5à”çOõf£–X ŠIç’8a†7–i¥uŽ(¢KÉ$’9 q ,îÄ*¨,ÄM~6þÅ¿²gì§à¯Ú;öÿñ‡„¿eÙëHñGÁ¿ÚŸÃ¶ß uO|øq¤k¿lßöEýžõùt‡z¦™áxõZßë~ ×õ)m|4ö1MªkúÅûA%Þ©{%ÆwÁïÚ ãî±á?Ø«ãŠ~8j?-¿nÍÇQxïà'ü!ÿ ´ü„üñïÅ‹OáV£àÿ‡:?Řì¾x—Â:_Á¿/Æ?ˆ?WPÔüWמזÆÞOͱÅL>]eL*UjeY~f£ Eá¨,ß N¾WFµJÒÂbjTÄb%W VX\%j_c ˜šô+¥úV'ÃØOŒ§”gK„Ëð9v2½LÓ/–SŒÄOøÞ+Äa°8l+=ÃNX<“/ÅWuq¸üÅW¥,6Z®œj~ÅøcÅñ·‡t?ø3ÄZ‹¼%âm.Ë\ðߊ<1«XkÞñ‰©ÛÇw¦ë·¥\]éš¶—¨ZËÍ–¡asqiwo$sA4‘º±Ü¯æ÷öý®þ0迱Úõ„WÞÕc¿ø'7€üqð»öJÕ¼;£ÉâŸÚ/Lÿ…1mªèŸ´g‰|OŸ®ê— µOxoWðï ü"ñ&•©ho£x’ûãN£ŠüS |=øké#ý¥?nO†Ÿ?hˆŽ«ñÞÏN—öøáñßÀ~=ý¡ÿáÛ7§Ã?þé^Õ<'¬~Ͼý’~ øÛSñŸÂ=ZËÆ××¾!ü?ñ/6‹ðÊÕ¼y¨Kã^=W¦¾q…†#N uj0¸ìjĪTU/a„žt¨Ò­RUã >7¨á1•Z8—OX<ÁWÂPõñ^ çpÏqY-,놨WYý‹-¡™fÏ Ìkb'”ÕŒ°Ô#…šÅà –g™^gŒ¯ƒuðÕ°Õ䲚¹•xªýú¢¿(n¾8üNý•þ6èPüký¡¼añŸáGŒc_Úö›ñ´>:ðwÁŸ ÁðÏ]ø ¬|»–Óálß þx ZOë:/ÅØM¡|MÖþ)x’/ì_ µ¯ŒZú~ãÄŸ#þÄÿ¡øUñÓÃwz¾‰ñóÂ6ýº>øûÆ¿->-þΟ´ŸÂ è?¶†¯|Wñ—LÒ|/㟠|áÏ„Þ&ñ·Ã=3K𖳩[Ùø;ösð Z^‚4V’îÓmW½µ­a*帬ã B“Ã{Kb©æ5ø4¡F¾ ¶%a±Ê©ã©áéæ2­…ñðžæ˜Ü“áqQÇac€ÂæYN'€ÌjåÙ¦B¾#;ln/­”¼ƒ†­ˆÅ¬v1ÄÎ0£„•GˆÁÏý Q_†Ÿ>9þÔúWÃ_ø&ŸÆÿþÒþ0ø¯sûhhvºÄ߇:ÿ߀¾øuá«ÝKöOø™ñ§MñÃÖð üGÓ|Siâ†ÚRjñx£â/‹ü«A¯x±4ïxvÞãÞµû>ürý©t¿Á1þ7|Bý¢ügñ¢ÛGMÓt‰ÿ µÏ‡Ÿ¼-ðûH»ÔÿeO‰?tï|:—áç üMÒ¼X¾&øm¥[j‰â/ˆž0𖩈¼V4¯øz ÙøOª¶9aç…|6&Ÿöf+ ‚ÇK÷#CŒu–’T«Ô©YÕö)©P…XEV¤§(ÉUT´ÆxY›a#—öçb>«‚̱´£B¦wŽN¸Áæ40‘aáN¾ýGÏñòÀЫl'°¯Qb§ûƒE~:þο´ÇÝb/ØãŠ>8ê_í¿nÙ|EŽþü2Ò<ððÆ¿.u?…Z„>é#²ø;â_é üFMCSñ\\Ýø{^[y|ÛöK¹½ø û%þÑ_üsûTþÒi7¿µwíkð«Ã¾ð¿‚¿fmo_ð÷Å_þÛþ=ðƒï¾é“~Άê÷â¯ÄoêÚNœÖõ|!Ò5?Þê7¾ðgƒ¬ »ðæ_Ú\µ*Ó©ƒÄFt0¸úÕé®Zž+S&…<a…ÆÖŽ&¶:YÞ –¦ ¦&…\MjUKUZ1‰ðÏ„¡[Úç9]Loößä˜ .œ×†e[:Çq–U]Ò©±bhWÊó. Ì(ÖÃâp4㊠å‰Âb*5„£ýÓ®~çž³ñ>“à›Ïx~ÓÆzö¬ø‡Bðγ¦Áâ}k@ðåÖcâsIÐ%¹MWQÑôßèzΧgi5–—u®hö÷ÓÁ.§d“ÿ>Ÿ¾)þÐþ7ý—à¯?~-ëß´-„ ?cüOðÅïí¥~ÅñâÂˆÞøð<[á­bïö<ü »øuªéÿ¬_Ikï è4»OøÆ{V fð6»¦ýñƒã·íû Iá;@øÃãoÚ7OÓàŸÿ¶í+›ñ_¿#¼ñ'þÃû:ÉðÓLšëà_Â?„ò xzÛÅ~*ˆYèö–Ú¦µi¯Þ>¹«ê—6:Ö?Ú´ã:ît+S£‡ËÖa:“–_ÙÜE˜UÂTU10–FŸb}êðxj•#R…Jø~W]zñ s­`2Ê9ÞEÎ3,~aÂ`ð˜¬ZÁâ(Ñá>âÌ¿3ÂgÙõ°8Œ.+ Æ8*5hâ>¡:U¨¥NµZ5«b0_´”WáßÇŸÿ´—ìÓðûâͯ‡?iý{ö…Õ|GÿéøûûUøgâWˆüðBÞ_‚ÿ~Yø./kžÓþ|'ð‡„õo…Ÿfñæ«uáMâ—µ¿´|6ºH¼_â+Yµ«dúᯊþ9|7ý®~|"ñ×ÇßüsðŸÇÏÙ«ãÆ NÃÇ> ø5áx>xÛᇌ¾éöv %øSð×À:Ô~ Õôÿ‹ºí•æ‰ñ7\ø¡â;x´? Koã?¶[ø‚ëÄ8|[Äbhá¾­ˆ¥*¯NS«,3§B¾\KO‡­ìq5gícW…s:?º…ZJ¤ðªu §YÐð1¡•QÎ!œdx¬67 œcrºT^sOša2 OÍkУŒÉ°¿SXl6qJp¥œK,Äâ–<%ôªeõ1ß 7>-𭟉ôŸÞx›Ãöž3×´}gÄ:„nu6ëZ‡.´{ëšN-ÊjºŽ Þø‡@³Öu;;I¬´»­sG·¾ž u;$Ÿ ¯ËoÚgÁÞ/ñ×üKöNðÿƒ~.x¿àôß²í…s}ãŸh?5ïÛéÖ¿?dy[NГâׂ¾$øÁ¯îÅœzö·àHteÔl´¸´ZòËÄO̶Ÿ¶íiãß~Ê¿<=Æ/êßîkëMsã§ìɧþǺgÅ/ŠºOì³ñrÏág€ßã?†.åø³âû é^)ÔîtÍ:êóáw…4?¾¡¯xs–¦j¨Ð£9àñ•kV©ŽXhQªñÁçXÌ®u(§ˆ‹Š¥KEhb=…JŽ5ყ‰”iÂ}øO ñ9¦_‘ãòüë%£ ËFb³|]l¶DçC‹±Ð«‰ÄUÁýRX:™f„ðØŒN&8‡N\=?mI¿×ŸŒ øçâ/‹ÿg_øßÿµ—ˆ> |Wð¥ŸìÃ㋞#“ögø¥á†^ ðmä6?íû0xcâ7¼7ã(~!ülѼ)§kqx_Å>ñGƒü!eá+k˜ì>0Õ?n_ڿüe¨éßoü]­xKökÿ‚Åø«Hñþ¯à_‚Óê~ ñWìûFøCá¿À/j–Þøqáÿ\ßøsÂW÷±ÞØh^Ò<#⛋ùoµßêGdÖ¹¬v–+R8|D\&k…gR…_­ÐÉ2ùÕÆÃ ˜ÉUËåí0ÔèN†# Ž6½ uªAЩ†ÌW½—xiÅ9Å SθjtW,ž–^¼#,­^5Ãåù¶+5Àðþ' ›å±«ÃóWøQñ7á÷Äý+Nm!5 OáçŒü9ã]>Áõÿi>.Ð’ò÷Ãz–§mjÚß…5ý ÄúBÏ*KÃÚÖ“­Y‰´ÝFÎæoA¯ÉOŠŸ±‡ü»öQýŽ>"Z~ÔzÂ\~ÈÞ?>#üd?5;XðgŠ-?f/…ß ¾ü+Ñ|oá­úfŸã?RO…_.äøcaáÛäøñì~´ðγi¯Zø*çò/þ ugût|2ý“ÿà¥ßµßìWûë^ðímñëIñßüöñF»à„/€þßÁ/†5ŸW? ¼mã‡ß~x3ÅVWºĘ~èž$ð¼ÿÂvÚo†n¬¼ ­øâçƒÄt¸vž}Ä”xCœf¼9”à𘜷˜a0ø|~7‹Ÿàèe¸ÊJ­ 6Ç㸎¶N«¤²~­™ã*a°óÆO.æ*ŽU>j*ŽgºukÍááEGšãqغQQ¯W‡Êá„Êa•(FTçžàiÆ2ÅÕÁàñ¿Ö‰¼Oá¿xs]ñ‡Œ¼C¡øKÂ^Ò5x›Å>&Õ¬4xsAÒ-%¿Õµ½w[Õn-4Í#HÒì`ž÷QÔµ «{++He¸¹š(cwü#ãü@Òf×¼âÿ øßC·Õõ¿ϬøG_Ò|I¤Á¯xgU»Ð¼I¢M¨è×w¶qêþÖì/´moMy–÷JÕl®ôëømîíæ…?Š_ø#÷À}w[ÿ‚ŸÿÁmÿd¯~ýªåŸãÏìËðSÂ?´/ÄÏŒž+ýšõ?‹z'Šþ&ü-×Ǿ4ñ¬Ÿþ2|`ð&™«üMÖüiâü%ðÿÂDø³àχšDG†üQkák-ÓL¹þË>üðÀÿ kÞðQÕŸMñÄŠ5I5›ØïîäñWÅßxƒâ?ŠÌRÃmi:rkþ$¿‹J³H3g¦Çko,×SÇ-ÔÛRÂð̸,ͧ™c§Åù¦-W¥–ahS­Ãôò(¼N¦&¥HÐÅb13Çá*}]K …r¸N®FÒ¬åM|5:u#<&a ˜b`¨Ö†‘e¹¾´éÆU!Oísá18jU±t èέ ezr§9zµøyáŸÚsöÔñßÅ]OâáŽúW|)ûfê_³öµà«Ëÿø'Þ…û'Áð³CøàŸõ KÄÚ·Ž>&hŸ·-¯ÆMOÂ÷°üLðµ…¶¦x§Ç:‡ü-ῆž ð/ˆí5×Ñþ9þÔö ­ÿjM[ö—ñ†¹ÿÕÿf¿øQoðçà.ðŸWøC©~ßZŸìËko®ê– ?áqÉãoø#VŽçCñG‡þ*øoK“Pðç…äñ…|E2x¶ëÆ?ÍaŽ]:XLm(æU°Ô©}f(Ê•&ðÿ„ô›­cAðõ¶©â]gMдëÅ:͇|1¡Á{ª\ÚÛM¬xÄž›¡h:drµî¯¬ê:fŸÅíÜIÐWóûûEø§â¯Ç„pümñ¯Ç¿ø[ÃúüûàŸÁ] ö\Ð|;ðvÃá;›ð‡öüð/Ã-oëÞ%øU©üxÖ¼â  ‹—øwâ·„ü:–º¶aká94 7Q}{é￵íà‹þ8ð§ƒþ-ÿÂ?á½Qµ·Ò´øq¿ü'ö û éVRGÿ ëàgÆ¿ ü'ø¾ây¥þÖðf…§iö^gö%ÔOªiwÓK÷~pžgâU\e «ŸW ¥‰‚žOÅA*¸ eü9ŽÃ×t8 âì]%ˆŽN¤+ÖÃÒÁ**”jbiâ«R¡Wæx»†ãÂ9~¶+‡ÆcªæÙæO˜ÐÂJtè`1Ù-L- øO¬æ4²úXšôqÄÒ­WÝá59ñ.§ânÇÁ¾%ø¦X꿾~Ìÿ 'ñWþø‹QñNâ]OR»û-®‘øû|:ø#ñ;þ 9á‰_ðI¯‚~ø;ÿðý‰gÏþÎ?µíð»L øCûbüdÔ –øGÔôµ‰i½{ávª4ßkŸõ·ñ-ÍΣ§Ýø—Tñe妷ð—YñãâL às¬S‘æ9–*~©ŽâŒng‚xy>y–`sºùÝ?c‰†G#Žc„Èr\·¥C_2Ï–® l-:XÏ’«)Ç+žgFŸ¶ŠÄeÔ!AÎÝIfyŽ[„ÃáèW„ëRÅc¾¥ˆÍs_«ÑN ’cjºÐÂB¶7ýu×øKâ÷Âoëºÿ…ü ñCáß|MáO´ÂSáß x×Ã^$×|5ö?x—ÁWÛúF©Þê7Ù|eàÏxJãûFÞÛÈñ7…$꿱~Úÿ®>2x¼O øÃà‡Ç«ŠßVðÇìóâ{H5OiÓü,ð~¹áŸYÜhóßø7^ñLš·‚¿«?‡ÿ±gÃß„úÏÆ?ü2ñ·Ä¿øïã&ãmóÇ}Ï€uM[ÁÆßþ=þÑRê~Ñð‡ÂK¯¶¯o¬øSöˆ½ÔíõoÙ©¼sáxô-~$Mð‡ö‚â¿‹¼_¤êw¿±WƒöZ·ŽôYøËû`Yhß³¦•ûCþË^Ñ?l øšù-¼?âß„>*Ö¾!ü.·Òc¹Ô,oüaªk?³·€¿h¯‹>)ðÕ–­¦KávOŸ>4köž*½°>)Ñ|%à-?Æÿ<êcü7â|åœX,^sÃ.«“Ó†:†ÚÅ\U¢¥jyãÊq¹-\ÒxÕ¤x‡Ã𭆹¡ê¶¾cÅö;VÓ..¬/ óc’?:ÚâXüÈÝ7nVóVøŸñ[ý˜<]㟠þÙ~ý§ümûUxƒÃ?³§Á?þÍøm¡üøSã뚯ÃSÆ¿í4¯|Qøy¨|5Ñ®uߊ?ßâoíñV+;Ï…:ýç„ü7ðïM[߯˜ÿÁCÿbØóAø ðÓW‡ö`ø¨ø«Mý ?`O…­ã½sàÿýgÇú¯€¬?h WÃï/ü77ˆµ"ïáÕ´~ Ôtûûù¬¯ü.dÐnmäÒ]¬Ï'ð…^Áalv2̱Ü_ÃÒ£K;ÊhÒ†åx\ãŠÂqC•çtg…ÍóÜ&WJ|¯ âò~!¤¥R8|5Z¿G·‰x‡-É1™†/-£™BË„Ëð¹­XÏŒ§„ÀNXJ¹¾WþɈt3ˆÕ¯íý­F]:ÃUöõ*aj+ʼs¤|$ñ—Œ¾xWÇWÞ¿ñdž5Ûߌ¿ <}â–Óõ»­KÁ:|Þ¾ñ­¯„-µk9¼_£ø7þ-šÍ&«¥ë~ð׊5Ÿø„Ácâ» j–_|@ðÜ ¾3~αgìÍ©h±7¯ˆÞ ý ~-j:ïìûð·à®ƒ¬ê%øk¨ü.µµø{à_xëáw>éW^&‹â>»ã¿_\ü9Ö|Q¨i^uÒnôxÛUÔ[ó'âOí™ñ“Ã?fŽ“h–ž1ñ†þÁE¾ê߆.ï>èþþÖ?³Ã ßÛGÇÞ ð¼ºWˆuŸ†¶žð ø½®øOá]­Êkw7‘éºEÿƒ<qªøëÁŸÒâJ™^+ZŒñx’§›Áb°Øªz“Ž-ÇPÇÃ^8Ê3ÃáåŽK+ÄÖÍ[BX E\Ã첩K¾ë‡ü/Æñ#¢°9†¶8Âæð4*Æ­ }Hb0\PòÊyžÓÄ`Õ,⟠æÔkàòì~oZ6XB¦+†£ˆþ—¨¯Åï‹¿¿jËŸ‹zìåðÆ?µ/Ä3Ÿ²ßÃÏŒVŸgM+þ Å'Ž>3ø—â‰|uáóâ_鿵F¡ðçáU×ÃmÛÂzù°ýž¼ ì·ž2°OxǶ·>ƒÄ·<ñ'ö³ý¤>)kžÕ?hþÍøwöý“~?kø áïÙŸâ%¬?þ*Ýü}µñÌ:_Ĉ¾ý ¼5â‡x+HKXt ý[ûJ#BÔü3ã}2ÎÇ⬪géÓÇUú–>PÀâq¸y^•/²ú9Ý\^#±8ŠÚ…'chÍ· Э<,jQ„k©Ç–>cÖûB·ð• =<¿.Ìñqy–;‹Ë°yÎ;!ÁdÕ1Ù~_•ã3 /4ÿX°8¬ÑkÏŠ>"ýœ¾~Ñ?×ÁŸ<à+¯~Î…ß„~ü;øŸy¢iz?Ž®¾)ügð—%‡G(øCá'¶:Íæ—ö›_¤~þÒÿ?koþÃþðoÆ¿~Ζ?ÿeÏÚ?Å¿-|øeâý¾<øQãO‡ñN¯á‹ûÇñÌZÃ¥ðn­>·â'Ð|á{‰<+wàýÿ„´/íñÓUýŸgÝSã߈~jzÿˆ¿oÝÅ´ƒ¼ðuþ*|K¸ýÿh+ƒðÞ—¥xûáwþh~%ñ·„µ«ˆ¿[GøTܾ ÕÀºGtK‹«[5 Ê5iá*QÂâjý~|N*X:o†Ââja±ã*øºTé*N›¨©bgCZ2…,5Ø©ÇñÆø[›à>²±9ÏÁà1Øüd£S:¨ò÷—®0u15Ô2I{|5hð>w*?Ùÿ]Ĩ¼#Äaè*Õ=íeøãßüVý¥´Oø&6¿®|gñ¯ÃŸX~Þ¿´W¾0|-ðïÂhÄ~ü*ý®¼áz.—ñGáOÄ_ZßüKðßÃÇÕl4ëûÁ2Ùø÷IJhºMÄ–ÞÔ¼1Õþܴ߯Oƒú/ǯþÏ?l/êÿ±ÿ4ø°úƒ¿àŸ±~Ì:gÄ}ÁZÄHtŽ|1ð«ö€ñ=ßü!¯økYøì©®\[è–ž*´ÒükáŸBÞ·Šy­*ö‹ˆ•9ãhá©T¥ì+FxZÙV[𼯢§ZU0ØL43L%[ÄS§*518K)¼D£G¢‡„ù®/8ɸ d‘Î3,>a,] l³ &,Æ`xß7àjXJ¹”08Œ xfYžY—b!Z½lJÂN…*ŸS©ýÁ–X ŠIç’8a†7–i¥uŽ(¢KÉ$’9 q ,îÄ*¨,ÄMcøcÅñ·‡t?ø3ÄZ‹¼%âm.Ë\ðߊ<1«XkÞñ‰©ÛÇw¦ë·¥\]éš¶—¨ZËÍ–¡asqiwo$sA4‘º±ü§‡Á~6Ôà¨_´Ÿ‹ô?üo¢þÇ_²_Œåð/‡4_×^ñ¦™oã¯Ú–Ëþ}ro|ñw“Âvš®}©Ï x¿Ã^*¯Š5Û[É¥Áá­+þMðö„ý¤iŸü,ÓüEûTj¿³Þ¥á¯ø''ìûûXx›â†üð>æÿâïÄŠ«ñÛÆž ñ½—į…¾/ð–™ð›á»ü=Ònüø¥xÕ¿fŸø·â¦ƒáW—Mñ –¯®x⾓¯É¬\^éß í~üxðÌVÚþ¿o‰ü%ñn;kÍõÜ5”ÕâLñä0­ ³õÕ—Ò­Ãfxêxœ]Lf{—á¨áp¼9€Ï³jõ1x샅ÃÓ†Zê:˜¼ ªB)bªa~Š8?2áL|N3–ã«`ÞU ×b§*ù}\ç#Âñž#Ž¡€Ê*ÆYf"¥Z¸œgŠÁQ– ªbT^x¯Ô*+ç?ÙsãGŽþ<|-·ñ×Ä?‚Þ#ø!®¾¯¦Ç ë£Æpéþ ±µKi"ñ7…l>+ü6øñ¿NÐ$šâ}KoŒßþ x½õÝZ»Ò<%¬øçÁž?ñ—Ñ”³¼›0áìÛ1ÈójT°ùžU‹­Ì0ôqx<|0ø¼<œ+áÞ+/Äb°ujP¨¥J²£^¢§V¥7œcñØ|EUxŠs£U9S›„áÏ'hƤc' Zð•¹gÁÊŒ™EW–lQEQEQE•mÿZ·ýÅÿ¦½6µk*Ûþ>µoúÿ‹ÿMzmc_à_â_“íy/‰ÿä9}ÿnßúGo^µ^Kâù_Û·þ‘Û×(Âù%¿ ì@ðoþ£ºmwõÀ|'ÿ’[ð×þÄÿê;¦×^€WÂ??k?ë5ÏÙötð_ƒ/þ8èžOø‹Äÿ-Ò—Bñ]ÇŸÄÚ"®â|?{§É­iJº~¤×6€B>/ñ%ÏŠ~"~Ñÿ ¼â¿x[Å·¿²ÁÇý¡>1ÜøÁZÏ…|!â?to|7ø+{ øXñ_n|;¡XèÚíâ÷ðuïŽüi®xn[߆·wž!»¸‹OÖõ–´oÛÇöžÒe/ÙcãŸÄEøUyãÛm¾iŸ ´ƒß³íñnÛà„ÚßÂü[ñïŠ2Õ4mMÓ5ëöÚ6—áÛ}sÄ×¶VÐ\ëÚÅ¿‡ô=B‡SÕe»½‹FÑô½29ÖËO´‚Âÿ³çÀ?xçÆ_üðCá„>%üFKؾ!|Cð¿Ã_h9ñÜz•äz†£Œ¼[¤è¶šÿŠþþ(¯¯S[Ô/–êò(îgLŠãó¡?lŸÚÎ÷àskÖ µÕñ.ûE¿Âün»ýƒlûm |)Ÿáü4ŸŽýƒõm[CýªüG¥Üx“PÒþjú6‡ñW´Ð|eo®üR_øMm½?à/í{ñâ/ÅoÙ¯áÆ§â„~?Ñþ+üý­ÞÓ¾ üÒ.~Þé? ~iwŸôMOÃ_nôïø^ÊçáW‡5­6ÃGÖt†óÛiqKàmVÒ4­/JÔô¯ >—c¦é¶7PKkgo|†¿d/Ù7ÁŸðŸÂû/þÎþÿ…­£ê^ø£ÿ×ÁO†ºü,Ÿë3Kq¬h^>þËðͯü&:>«q<óêZgˆ¿´l¯¦šYn •äv?—^øÛñãßíeð£Æ×ÇÂ~ñ®‡ðKþ ð·ÃÚV‹®\èÿ¿k?ß ¼ ®jº4Þ,ƒVÕ/›Lð–ªxš?Åz®¦ÚÑåðݽŬV?AþÀ÷¶‡àŸü_ªü{ø3â5ø#ðKÅ^ñW~|V×n­l.ü9¤ê~%°øË¬\þÔ·ž ø©ãOXHÖKñ'F½ø{‘­Í7Š/üâ¸sá™:2Šx\ï©R8\ 1iÔYÆ>x\;Ís¼²¤ñÂÑÅfq†"†I,va6çJ£¡(â+Q‚­ÛÄ7Ä\+“c±uø¦¿Ö°ØÚ9f7#£‹ÌiWÄæ8<ï‰Ôhaq1›ÊëÓÂf™.;‡Äãñx qÅc*b`©Ôr­[ô#Å_þxêk+|1ø{ã3C½ðÆ›?мá¿ͧøkRÔü=­ê>²—WÓoÓC¿Ö|%áM^÷I£°ºÔü3áëùíäºÑtÙmºøCÂ~0‹JƒÅ¾ðïŠaÐõ«høEÓu¸´i‹:iºþ•§mtš~µ§¥ÕÊXê¶‚ëE¸`ž14¾[ø ûYÿÂÑø­ñ öwñç€ì¼ñãá“¥êtÿ‡<;ñçážu‹]+R³²‡â7…í4xV›L×ô[#¿´·ÁÿÙÓǾ>|M­ü&ðwÄOø3Äž4±û¾ƒˆø[4á¬Ãû/ˆ2ú8|]L._™Ñq¯Ì°˜Ì>ÍrìØåõñ™~a…®ñ[¡‹Áâ«ÒúεQb!UGòì6iSN †/¡‚ž# S–&„ðUPÄÐXzÊL,§•Z~Λ© EÉJ‹~oð—á]ž‘à/Ú|3ø}k ü*1…ú%¿ƒ<9‘ðÜÁáÝKÁði±i«eàó„µ_ÂñC§y~Õu-1¦_]ZÊû… 4Í7áö¦ü8ðŸ£ü$–Þo…:Uƒü=i¦ü2šÓÃú„­%ø}c¯ƒ%µð®¯«xfÞOE¦´>Õ52ºuíÍ´½íãYsJV\Ó© ³—ÚZnôêIï*”Þ°›nPzÅ£®XütÓRÆbäœjÁ©b+4á_ë*¼ZsiƲÆãX½*}oΟ·«Ïäžøð#À>>ñwÅo|øIொ?>Ô|yñ'Â_<áÏxØß_E©ÞŸxÇGѬüEâO¶jPC¨]lê7¿h¾†+¹wÏH1î¿fÙ¦÷^ø“â›ßÙãàe߉þ2è—^øÁâ;¯„¾¸×¾+xrù-£½ðÿÄ^_¾¡ãñ,¬ÒëJñEÆ©ap––Ë-»ˆ" îtV …TéÒXl:¥F•jiª4Õ:T11œqi×–*ñ©R5©Å(UŒæ¦¤¥+ô,ë8Uªbm™¬EjxjUk¬~)V«K:3ÁÓ©WÚóΞxl<ðДœhN…RPt ãã?gÙãàî•®h_þ|øY¡ø›KƒCñ&ðãáwü¥x‡D¶¸×®í´}sNð·¥ÚjÚ]½×Š|OsŸ ŤW#צŽ“WÔá>þÍß³¿Á³¦„?> ü*:,$¶ÑÏÃ…¾ð1Òm¼c6qâû}0øcBÒÍ„*ŸÂ~ŸÄ‘ZùQë“xk@“S[§Ñ´æ¶öŠ+EFŒgÆ•8Î43PŠœpÉr¬hR„câ¿f¯ÙËö‚“A›ã×À‚¥ð²j1øb_‹ß ¼ ñ*OG¬5“jÑè/ã=Zm!5FÓtæÔSO6ëzÖFäJm`1íxëàoÁOŠ>°øYñ3à÷Â߈Ÿ t¯ììχ>:ø}á/xNÿ„~ßìšØZ\]ørßCÒ<3 Þ^/ØÝWÖÔTÓÁa©b1X¨S~ßËõ™Ê¥ZŠ¢…á”U9ÎTéÅÐ$¡JŒù§)©J¥IKÑ©ÅÜIS+Áä¯6ÄÇ.Àãêæ˜jT•*–cYãLm\etñ¸œKXüd#[ˆ­8SÄT¥MÆ›Q\Ûø3Áòø‹Dñ|žðÜž,ðÖ‡«xcÞ(} KxÃZýÆw®ø{DÖšÔêZV‡­]xsÃ×:¶“as†£q¡hÓ^[Í&—bÐt”Q]_ç9ÛÓœªMúΤçRoyNR“¼¤ÛùéNsTã9ÊQ¥N”e'%N𔤩ÓMµ)NrP¢¥);^M¿*øÅð'à‡íáðûö€ø7ð«ãŸ€†©e®|bøyቾޚ· §kÃ^5Ñõ½ûRÁ.®’ËPûÚíVæá`š14¸¿ß²ì—û1^ø‡Rý›?eßÙÛözÔ|]k§Øø®ÿàwÁ?†¿ ¯|Oe¤Ës>—gâ¯xg@ŸZµÓg½¼›O·Ô¤¹ŠÎ[»™-Ò7žV¢h¥©Js¦•9ÕmÔ”$ª9RTdç(ÙÍÊŒcI¹7zQT߸’&¼Œ#Sß>^HÏÞŒ9j:±äRº-VêÆÉZ£s^ólóO|ø;ሞ;ø¿á?„ÿ <1ñgâ•¶…gñ7⇇¼ á}â'Ä[? Ú  ÚøïÆÚn•mâ_[xvÄ = jz„ZE úz[Â6W¥ÑE5îÂÖ¥JpZBœ9¥.HEióJRåŠKšRv»lr”§'yͧ9½e7Fœ\¤õ“8Bšm¶¡Å{±Ixžµû4þÎ^$ø§¥ürñÀ‚zÿÆÍM6]ãµð«Àš¯Å="]o¤I¥üA¾Ðgñm„šU»4kÚjñ5Œ,bµ1!+]gü*_…🠳ø}ÿ©ñü,CáŸøC<9ÿùøÿ ü,OøNN‹ý›ýš|cÿ ÂLm¿¶¿á1ÿŠŸíßÛéÕèVT¨Ñ¢š£J•ëTĵJœi§ˆ«VzµÚ‚W­Rµ5ªU~üêÒ§RRs„Z﫚æ•ã†lËZ8:xjXHÕÆb*G KÑÂSÃ)Ôj…<,q8ˆá¡K–4#^²¤¢ªÏ›Áu¯Ù[ö`ñ'Ä{ÏŒ^"ýœ>ëÿu ŸÞ_üSÖ¾ü=Õ>#ß^xN} ç·Wž8¾ðìþ&¹¹ðÍÏ…ü5qáùæÕ]èRéÏm&“`ÖþõETéÓ£gJœ)Sç•NJqŒ!í'nyòÅ(óÏ–<Ò·4¹UÛ²3ÅcñØØáãÆâñqÂѧ†Âlj­ˆŽFœ)RÃáÕYÍQ£J•*t©Ò§ËN銌"–V» è~)Ñ5 ø›FÒ¼Gá¿iz†‡âëºuž¯¢kº&­i-†©£ëN¡ ņ§¥êV3Ïg¨i÷¶óÚ^ZM-½Ì2C#£|—ðçþ Ñÿøø=ãmâWÂ?ØKö6ø[ñÂwS_x[Çÿf‚^ñ·†¯n,îtùï4xgÀúf»£]Maywc5Æm,–wW6Îí ò£}“ET…Om¡ZÐ^Ö –¥©JS¤½¢´­NSœ ¯îJrq³“o’^ý?e?~“ç½){ÔÿyƧ¸ïÞFŒô÷£©]E%óÃ_Øö0ø3ñûãÁÿÙöaøQñoS]mu/Š_ ~ü)ð/ÄmA|K?Ú|F·Þ7ð¿„ô¿]®¿sþ‘­‹NAªÏûÛá<Ÿ5{ï‹|#áOx_Äñ߆<=ã_ø³GÔ<=â¯ø·EÓ|Gáhµ´–Z¦‡â X¶¼ÒµR³š[MCLÔm.l¯-¥’ ˜$‰ÙCEk‡«W,,ð•jagtž xyÊ„°n„ý­…•'‡tj~ò“¢àéÏß…¥¨=gR£Ö¥Yºµj=gR£I:•%ñNmF)ÎMɨ¥{$sqx7ÂxB?‡ÐøWÃpø §ƒbðDZ—„"ð„zXÑ#ð¬~KQ¢§†ÓFHM l†–ºX j-в¾ü/øiðgÁ:ÃOƒßü ð£áDžḶðÏÃÿ†¾Ð< àŸÛÞ^ÜêWph^𾟥èZD7ZååýÄZ}…ºO{usu*´óË#÷4TÎs©R½j“”ëbeâ*ÎNU1„«N¯6ܪÊÄb%Trq•zÒM:³rˆÓ„aJœaÓÃÆQ¡Å(QŒãN(¤•8ÊiFJ *Q¥N.êKçËÿÙ{àÅïǽö’ƒÁú6ñKK·Ô[ZÖ´øWGºø…®¿…ãð'„¼Yñ/\³ðü~/ñ¯ˆ>x÷ÆžøbÚ·‰¤Ò<+Έ~;´M"î{íëDö?øK¾4Ó Ò xj=bÆ;ˆlµdмY¥êúZêVpÝÝÅk~¶¢êÞ;«ˆâ•ijiÿ ¾é¾Ô´Ÿø/LÔ| áKÏøPÓü-¡Ù^ø7Àúöö‡ƒ|)umaþð¥ÿü#ûg‡t‰,ô‹¯øG´?>Íÿ²l>ÏÚQ^B£F2«5J’wW’§*Òáã*²Jõpõ*P‹›mQ©:KÜœ¢ú¾¿Žú½,/×qU ñ†ë5¾¯EâãâÝ*<þΛÅFŽ#’+ÛF1U9”R_;xö@ý’üaàoü0ñwì»û;x§á¯ÃÙ¯î<ðóÄþë~ð<ú¬’MªOàÿ j~ºÐ<56¥,²Ë&‹§Ù=ä’H÷ #;êÚ?Çž¿¸Õtø3CÕ.ü)áßÝêZ?…ô=2þëÀÞ:©ðŸƒ./,¬`¸›Âž:î¶|;áÙ$mE:Æ«ý›gmý¡wçvtRŽ„e^Q¡F2ÄÊ2ÄÊ4ै”(K Wj7«(a¥,<]G'•jmÅí_7ͱT• Ni˜â(FxŠ‘£_‰­J51xªxìTÕ:•eðö½¦7[ÐüáÍ'WÓÏÄßZxÃâA±Ô¬4Û{ÛCñŶ>(ñ¹·š?øJüEgi­ëßoÔíáºN_Å¿³ìïãïKð×Ç~ ø×áÌþ+Õ|?ñ‡¾[ÛAckoÃýXðõæ›àØ`µÓ4Ûhbðí¶š‘A§ØÂбÚ@±û½¾¯‡å”}…Y׆*qöPåž*œÕJx™.[J¼*%8Vw©¥(ÉI\Tsœßõ_«æ¹•¨Ó•±Çb©}NŒ£ˆ„©ay*Çêôå ^*2§K’.8œDZjµE.j?x>k>/‡Âž‹Åž"дŸ øƒÅèZZx‹]ðÎq¬Ýè^Öu¥µ–©¡h·~"ñÖ“¤^Üϧé·î³5¼2jw­?'§|ø+¤jŸ µ½'àÿÂí/Zø3áÝSÂõ};áÿ„ìµO…>Öôû-'ZðÇÃmBÛIŠïÀ¾Õô­7NÓ5MÂóizn¡§ØYYÝÛKmkqúÛ…ÄâpS©Wˆ¯„©V†' V¦­L<êáq”q8|^¤éJ U f2†&Œ›§^Ž/N¬e õc> µjW¦èש:Ôœ°’tªÎU)¹`8àdá7(¹`£FŒp«áÕ*j‹‚„lQEEPEPEPEPYVßñõ«×ü_úkÓkV²­¿ãëVÿ¯ø¿ôצÖ5þþ%ù0.×’øŸþC—ßöíÿ¤võëUä¾'ÿå÷ý»é½rÑü'ÿ’[ð×þÄÿê;¦×\Âù%¿ ì@ðoþ£ºmwõèW”ü_øð‡ã|%ñáç†~ hÚ^­ˆü:uÝ=_Yð_‹¬í/l´Ÿ|=ñ5«[x—á×Ä_Ũ^MáOˆ¾Õü=ã _Ëý§áIÔ£Šî?V¢»2üÇ0Êq¸lË*Çc2ÌÇQVÂcòüU|7 Z)¥W ŠÃNzm*”ªFI6“Ô;®Ž2‹óŒ¢ã(¾ñ”[Œ“ÑÅ´î›>uø û<é¿ôˆzE׊¼Aãû4ÔµÝK_ñV«âoÄ á=?Ãú'ÃφþÔ¼Qã/øÓÇ*¿ðwÂÏ xKú÷Žñu·‰~!ê²iúŸŠî´Û+S~ËŸeø#à¯ÙÚ?ÝØ|)øk¤øOGøu¦hÞ3ñÞ…â¯Gà[Xl|!ªx/â~â{Š>ñNg¶Óüg¢xÎÇÅÑC-Ú6¶âöóÏúŠyîc‹â\v;2ϪG3Æfo õú¸š4q1ÀSöXT£ p ©`©^žŒiF– Æ„)¦ÓéÁcq¹jQ˱˜¬c–cN,Ml-:X×*òŽ&…:§ (ýkO ìcMahU– ©Pµ5òTŸ±À<kà°Ÿ`‚×Ç—?—ÆVµgíUcñŽëÆžÀ·7ÚŸÇ«/|nÖ4Ù|oeáÖðΫñ÷ÃJÒôkeÑ•4]'ìmÕ?a¯Ù«Rð¯ÃÏ [øOƾ‡á\þ0¹ð_Šþüqøïð·â­¥ÇÄkèµo‰ë_~üKð¯ÅÿÍñ'^·´ñ7Äyø3ᯉ~øN×â÷‡>x¢ëEšèß´ßí5a¥ørÃ@ÔQÓü-ðãìÿãºøMàfm;Tøsð¾ãÂ×|<á×<9¨økþ%5õ}Ý€«W+Åà3 ²¥L»•¸K,Æà',/.•µoúÿ‹ÿMzmc_à_â_“íy/‰ÿä9}ÿnßúGo^µ^Kâù_Û·þ‘Û×(ÿÙuima-addons-2.3.1/SimpleServer/src/docbook/images/simpleServerUserGuide/new-web-project1.jpg0000644000175000017500000016146211625126446032017 0ustar drazzibdrazzibÿØÿàJFIFÿÛCÿÛCÿÀ9‡"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þ€|mñ?áí¦Û|[ý¡ô|jÒ> \Eãƒ?õ KÄø_ð·áÌRêñ|9Õ|AàÏ ø¾ïA×þ/ë>Õn¯¼iâíVû]¼·¹×µ¯xzþÛÂú6¤ù/öwìQÿFEðÓþýx¿ÿšŠðýSÁ~-ñ7ì¥ðÞËÂz‰xoö„ø¿â†¿³§†¼Mã߉?ì?áe|Oð֢ɬü>ø‰ãÇkmâ¯ÅàË ÝO]¶ðMïˆ¢Ò µûM¬—ê÷Ñéó_Iôm¿Š¾]ÂCö_ˆîáÓü9«ø¯ìþ/ðäßðŒé^1µþÔüCåêmý‹§øªÄ‹Ï^ê_f¶×-H¸Ó%º„‡«§WV ¥:ø¹Ã–”›XüGº«R…z|é×Nœ§EûE¨Ë‘ݤ¯nyÊt§*u#N+Òq’JóÂâ>©_•ÚÓ,LTƒ•75e'Ì™¯ýûÑ‘|4ÿ¿^/ÿæ¢ìïØ£þŒ‹á§ýúñÿ5>œ|3¬x‡Ä~Ò5ÿ êž+ðrhòx»Ã:v¯¦_x‡ÂÑø†ÖkÝüG¢Û]Ë©hi®Y[Ïw£¶§mjº¬\Yâ‰Ý9"ý·¼[§Oãø·à'†ô¯ÙÿÁµþ±ûx‡â‰ñŠã[ø‰£xžÙü=о êß õ…>ðúxQñN³áÛ=et_‹ZÿŠô]VmBÛÃzõ®™tä\ ±pÑ­Œu«Â5)Åcq<²ƒÆåùtdêûoe øƒãÄo‚ÿ¼Cñ£ÂþÖü+áoüdøy4Þ­¬éº-Ýæ…à?6³§é_"ÓouÛ : sÁÉ{§kkÓ¯l3oªYy½¯Š¾ |ð'Œü/ðãÆÿ~ø7âŽÙ|à?xïÂ~ñŸ‹ÚöõôÛ5ð¿…õ}^Ï\ñ]ê1¾Ÿl4›³=ê=¬[çSÞ¢ÂRªèζ'Ú,Lð|±ÌªÍOI¥R…9C(U«Y7r“q÷•âîsº(ÖJÔÞž+štåMÇ S—’µHÔ„'Nœšåæ©ZJP•¤¤£Óg~Åôd_ ?ï׋ÿù¨£û;ö(ÿ£"øiÿ~¼_ÿÍExìóûO|ý¨|AñO¿õûßhÿ¹Ó·N_//êúrßÙß±GýÃOûõâÿþj(þÎýŠ?èȾ߯ÿóQ]Oü"?óëýðhÿ„Bçþ}cÿ¾ êº~óÓþcq?Ýÿ§Þ¿{ó±í÷:véËååý_N[û;ö(ÿ£"øiÿ~¼_ÿÍEÙß±GýÃOûõâÿþj+©ÿ„Bçþ}cÿ¾ ðˆ\ÿϬ÷Á¡}WOÞcºÌn'û¿ôû×ï~v=£þçNÝ9|¼¿«éËg~Åôd_ ?ï׋ÿù¨£û;ö(ÿ£"øiÿ~¼_ÿÍEu?ðˆ\ÿϬ÷Á¥ÿ„Bãþ}Sþýÿõé_­z˜Þ›ã±?ݾõ½~ÿ[5QôQ{tOn_//êúr¿Ùß±GýÃOûõâÿþj(þÎýŠ?èȾ߯ÿóQ]Wü"óêŸ÷ïÿ¯Gü"óêŸ÷ïÿ¯BxM?{éÿ1ØîÿÓÿ_½ùØç—hôèºrùyWÓ•þÎýŠ?èȾ߯ÿóQGöwìQÿFEðÓþýx¿ÿšŠê¿á¸ÿŸTÿ¿ýz?á¸ÿŸTÿ¿ýzÂiûÜoOùŽÄwþŸúýïÎÇ<»G§EÓ—ËËú¾œ¯öwìQÿFEðÓþýx¿ÿšŠ?³¿bú2/†Ÿ÷ëÅÿüÔWUÿ…Çüú§ýûÿëÑÿ…Çüú§ýûÿëОOÞãzÌv#û¿ôÿ×ï~v9åÚ=:.œ¾^_Õô峿bú2/†Ÿ÷ëÅÿüÔT‘i?±\ò$QþÄ? ˹Àܾ,K<’I⥎(ÑAy%‘Ò8£V’GTVaÓÂ!qÿ>©ÿ~ÿúõÐxCòé¾4ð=ëÛÄ‹oã¯1g…]oéüé dt%ðÈêÈêJ²H¨œð±§9F¦1Ê0n)ã±6rQ‹IÚµìÚw¶º¿;òíN_%ÛþúZ‹ö{ø!5jšF¥u®þ× "ס·±ø±¤ÜØk:ƒm´qcyo¤É{w®i:Ñ×U%8὜¥UêóxŒÚ½ iûHSpŒªâ!ÓÖÎnrRv£&ð‹”œï(¥ ¨%윛´a.m$­uek;YêsàÙºÊÞ{ËÏø%ïŒ---a’âæêçö|ý¥à·¶·… “O<òé‰0ųÉ,Œ¨ˆ¥™‚‚kή|OûÁ§èz”?±Ã­Zζ¾µðÞñÅ:LjnµÅëÛhz†õ­W\Õ§·²³¼¼½†ÃN¸’ÆÒÎòêñ`‚ÖâHý{àí)ÿÓ?h ü,ý±¼5ðBðo¾ ücøà_àýªZãÄÿ¼qû?xsTÓoµ ;ö‘øã¥.œºWÆë{«›;Ý7CÔ$ºþÌžÂöâÚ=B ø/ã.­u់× 1Âú§‹mÈáŠ8bqíáGdB±Ä†ˆ*Å$h˜D@€(ðø—9­ðöm›BšÄbp4ðË šâ«ajUÄW¥BõgB»ç…7Rp¥V2›Œ¨óÒ“sè^ðm?ñ†ø?«‚ÂgÌ%ˆÄáhSúÔ)e¹^/4:>ÙΔ*bc‚xxV:± êªîŽ!Sö5>°ÿ²Qø&OŽH`û2þÖ# ‚<;‚ ‚8 äqYšÆ­ûøfÆ]cÅ_ðNkÂÚ¢´Ú†»âŸ€Ÿ´Ï…´:Ò2\Þjž ×´{H±µ^{ÍGR»·±±·I.®æŠÞ)mYÙüqÖ>øâì×âþÕV:®©£xkâÇÂýáÅ—Æ¿¿¼SzÖ>‹ÃPhš€<9âÙŸÅz„¶Ú&‡ã^Mâß„­¾5øµñ#ÅŸåø­â?Ù—Ïh+í_á5埂¼GñÒëâ§Å´µ’çãG†|'aáx¾ü!ñm³¼V_~ë±xGÃÿ¼_¨è¶W7:_ÄÏ|FÖ5D×¼G§Á«xoÂ_PñÂþIWÄž3ÃaÞ6¾#x% 5Ju¡ŒÎ”q‹(%GQæÓö•é¥Uâ"éÿ³ªU}¬T¹c?Þ²ø7;âZ1O5âxf‹šá³Lú§ö†CK)§Ï,vs‡žA x,:rÀÓʱ2¬éf¯0¼êÓ•j˜±<#ûJ|"ýô/Œ ?ádh³¦åèfØ/oü{¥è°x’]ZãÁþ=øoãéÖ Õ§øƒ¬[§Ž4Ý7Yµðωt_ëú¾£¤jþ&±ðÖ¡¡•ù£ãý{Oø'&Ÿ|bÛ ÏÁÙþBà`1—Ä 2Ã?1!܃Ž9änÅû®+Ëó*4ñs…e*´éJÞÚó\ô¡VÕ*$¥ZQu}¬×<¢¢¥±ü¥™aç–æY†\ªªËŽÅàý²§ìÕ_ªâ*PöªŸ=Ofª{>gÏ>KòóÊÜÏêߎZF»àŸø%ƒþ-ø}|F—þøGû+kíÿ—ŠüOà/ßé–ž-øE¹¤XxãÁrÁâ¿®·¢GG½ñ&*jz5…õÍý³· _õ¿Ù£ö’ºñ?Æ?þÓý–¼Uã­3âíñ—à?`ø‹â †!¶×ÓHñÆà/¥‡£ø©â¿ÞEkñ6ÃáÜZ®¹­xƒÄ¾.ÕtjšÆßJþ™ÿe?Ú'â]§Â_„_þ~ÎúÇÅ[߆³ì±â/j–>)ø}áøm­¾)ü'±Öô9 xßǾ{§º½Ñ¼KnaÓá¹6i¦¡»òêÈÜ}?ÿ “ö´ÿ£"ñ'þ߀üúë:YšÁÒqX7O3§ŠÅT¥˜Ã8˨_Œ¡‡¦°u²ìf Ç÷X§YÊ•Dꤢ”‡B½*T\:Žns—µŒ¹' p•7 Q©%(9))&›²Úçó û|@ð7‰ÿk¿Ù_öIø «xŸâWÃo…ŸÆøËöƒ—Åß4[OŽþ2ñïÀ+­_X¸ñÁMCHÓ<1£/€¼AžðΡ«jþ/»Ð4mFÑ,u›½RãUÔn~ñøíÿàøñ»öìñ—ˆ5¿ ë:ÁþÃ^øm៌Ú÷‡ßYðÇÿü{×þ(xG^ðöš÷ókúOŠ< p¾ñ·‡5ûÍ-ãR´‹O‹RººŽúÆ?ØŸø\Ÿµ§ý‰?ðæüÿç×Iÿ ö´ÿ£"ñ/þï€cù|k¯;ˆ¥ˆ¯—UÁa– `p¸êuóü%zøœnc€ÍòÜNbñ4^ ¦¼(g­…Xog,./ ‡­®1•1W«N­´!IÂzX u½¤%Íà3œw(U£ì'N¾#/£‡ÄЭF­*¸:˜ŠN*U#:_Ê_€ÿà—ßðPOžý”üQ¬hÿðŠàø»ðJµ×|;¡ü9—\‹Â¿µ¿héªYø/–ðúÆÛ@Õ<;¥C˜¿Ñïü.?ÚÓþŒ‹Ä¿øs¾óë£þíiÿFEâ_ü9ß?ùõצáJ;QÅýj—&a£\ñÍã[NkÓŒ0µ%Ÿæ³†/g†x…,hB¦3juq5oQ}n8…^ U©Jµ|"•Nj¾Ò¯¶ÂÔË0•wQרðÑž*®"¬êTŸæOü—ö"øçðoá‡Ä}Söš–Ó]ý ~&|_ñW‰~!ø–ÐC-§ˆl<7o¦ü7øoªéïî¥Z~£ð»Á~ ÕΞ/%“MÕõMfÚí!Ôì)ó7ìÝÿžø“âþЗ¿´ž½ñ[CørŸðPO‹¿´À)}ðžoƒß4ë¿ÂKð›âf»©øOÂ×?5g‚ìYx–?ø—âð݇ˆ´=ëÄ¿á¿ÓÝÿsÿáqþÖŸôd^%ÿÃðÿŸ]ð¸ÿkOú2/ÿáÎø ÿÏ®·Ž#M[–U°ù] ª…ñø T°øŒ‹‡ÄƯ¼^®Aƒ–´Ô½WøËiûI|=ñ·ü3ð¿^Ó¼csâ_øLþhž)ø‰ ë:^¿ǵÍY<ýÿð‡ö4øíû*|tøë᛿ٗŵÿÚ\ýu¿|sÔ¼WðÍàð~…ðÃá¿‚~j>ý¡­õýF/Úëÿ®¼qãê_ þüFмI«x¢Õ¦¾ðV¢|C¨h?·ZwÅÚ—H°µÓ4ÏØc_²°²…-ím`ø™ðb†$ £þa,IË;¹i$‘šI™ßø\µ§ý‰ðç|ÿç×^Í|eYc±øº¡Nüni^¼*fx •+`ó,ïžÇVn­£GŒÆ×ú¬°ñ¡V:µàêIâ1©äÐÃ*x\&­ITžÃÒ© u)Æ•|W—e/Fšrýæ+ –aÖ&ž&Xš5$¡8Ó„ðØ)a¿&a_ÙcãGÀ¯Œ?¶oÃ_‰|kcá_Š?µ/ÅÏÚ;áÆ«[Ÿ‡Ú¯ÂÿøWâtžÔ,|#åé>;Ô~#è^6Ѥ]JÏU¶ñ/ÃÝÃ’6‹s6â;Ñ}£Ç¨þÿ”—þ}þýÿõ««ÿ…ÇûZÑ‘x—ÿwÀOþ}tÂãý­?èȼKÿ‡;à'ÿ>ºæ…l\0Ø 2žÇ—eùd*<ÇÏV†[…¡ÃT­Ë^4ý·ÕhR…IS…8NPu9#9M!˜œn&Nnxì~71©MòSÄfª˜ÜLi{ŠQ¢ñ5ªÔ§ ʤ©©¸{GÁG”ÿ…)/üú/ýûÿëQÿ R_ùô_û÷ÿÖ®¯þíiÿFEâ_ü9ß?ùõÑÿ ö´ÿ£"ñ/þüúèöøÏçÃtÿ™Žû¿õë÷ù;O³‡÷º˹t·÷º¿”ÿ…)/üú/ýûÿëR“›þ}GýðŸÔgóæºÏø\µ§ý‰ðç|ÿç×Kÿ “ö´ÿ£"ñ'þ߀üúèöØÏçÃtß0Àÿwþ¢[ÿÀ¶ƒ¥ ,Ÿþ%Û´|¿®œ—ü)9¿çÔßÿ…ð¤æÿŸQÿ|GþÖÿÂäý­?èȼIÿ‡7àÿ>º?ár~ÖŸôd^$ÿÛðÿŸ]/mŒþ|/Où˜`»ÿQו½Õì£Ùÿà3òþç—õenKþœßóê?ïˆÿÂøRsϨÿ¾#ÿ ëár~ÖŸôd^$ÿÛðÿŸ]ð¹?kOú2/áÍøÿÏ®mŒþ|/Où˜`»ÿQו½ÓÙG³ÿÀgåýÏ/êÊÜ—ü)9¿çÔßÿ…ð¤æÿŸQÿ|GþÖÿÂäý­?èȼIÿ‡7àÿ>º?ár~ÖŸôd^$ÿÛðÿŸ]Ûüø^Ÿó0Àÿwþ¢?¯+{§²gÿ€ÏËûž_Õ•¹/øRsϨÿ¾#ÿ ?áIÍÿ>£þøü+­ÿ…ÉûZÑ‘x“ÿoÀ?þ}tÂäý­?èȼIÿ‡7àÿ>º=¶3ùð½?æaþïýD^V÷OeÏÿŸ—÷<¿«+r_ð¤æÿŸQÿ|Gþ“›þ}GýñøW[ÿ “ö´ÿ£"ñ'þ߀üúèÿ…ÉûZÑ‘x“ÿoÀ?þ}t{lgóázÌÃýßúˆþ¼­îžÊ=Ÿþ?/îyVVä¿áIÍÿ>£þøü(ÿ…'7üúûâ?ð®·þ'íiÿFEâOü9¿ÿùõÑÿ “ö´ÿ£"ñ'þ߀üúèöØÏçÂôÿ™†û¿õýy[Ý=”{?ü~_Üòþ¬­É“›þ}GýðŸÐgòæ—þ¤¿óè¿÷ïÿ­]gü.OÚÓþŒ‹ÄŸøs~ÿóë£þ'íiÿFEâOü9¿ÿùõЫbÿŸ Óþcð?Ýÿ¨•ýv¶‚¥ÏÿŸ—÷WoëKrð¥%ÿŸEÿ¿ýj?áJKÿ>‹ÿ~ÿúÕÖÂäý­?èȼIÿ‡7àÿ>º?ár~ÖŸôd^$ÿÛðÿŸ]?m‹ÿŸ˜^Ÿóòÿ¨ŸOǶ‡²‡itûòþï—ü6–äÿáJKÿ>‹ÿ~ÿúÔ”—þ}þýÿõ«¬ÿ…ÉûZÑ‘x“ÿoÀ?þ}tÂäý­?èȼIÿ‡7àÿ>º=¶/þ~azÌ~Ëþ¢}?ÚÊ¥ÓìOËû¾_ðÚ[“ÿ…)/üú/ýûÿëQÿ R_ùô_û÷ÿÖ®³þ'íiÿFEâOü9¿ÿùõÑÿ “ö´ÿ£"ñ'þ߀üúèöØ¿ùù…éÿ1ø/ú‰ôü{h{(v—O±?/îùÃinOþ¤¿óè¿÷ïÿ­\g~¿…4 ˜1¦x¯À3 ‚»üwá¸3œùëÆ½þ'íiÿFEâOü9¿ÿùõ×/ã?~Ó¾;ðΫá=wö!ñxÓ5híÖi,>+|³¿¶šÎîßP²¼±»_,Ö×–WÖ–×v³…cðFûN1N±<Ðçž“š<ÖÇàoËxóY}g{/êÚ”m¥ïm=Éï§÷|¿­-æþ0»ø­wÿí÷à Kጚ]î€ókxÇXðô¥—ˆ¢ñˆ,ÞÚ+{ º‚Éô;] ò$›L¹/5ÝÄé¨Ë©kfÏø·Å¶ºL6þ?‹ÃöÞ+‚çR‹PO ÞØj:–é©Þ.ueu¦øƒÄ¶möÝi×—0G­ßIiw=Å¥Á·¹‚kX<ÏþÇíÿFÕû@ÿáãý’ÿù¬£þÇíÿFÕû@ÿáãý’ÿù¬®Ä°½kѶºýcÍ«M]¼t£¢mií®Í3ÞÓÜ}>̼¿»åÝÚÞˆóÏŒÓ}—SðWÄ>EûFÜéqÿá’üu(Lú`ýÜóߎkÀîþÅ^µ’ßIýŒ?e¿„~"Òµ_|^ý©~øëC×4Oü-ñf—}aªxJÖ3­µÝ¥ÕÕ½Òºý™ã¿ƒ?~!ü!_ƒºÿìgñq4È|]kãë?éÿ¿gKXxÊÏO—H¶×í5I¾(Üé)q4º:ÚI¡K¥ÿe»X³b1óü;óâ—ý¯Û#ÿÿìgÿÉ5éa1J Š…´gRœ=üx΄¥NQzfÜ]Ó÷^Êû˜¸Õ„§ËOž3q›iÊ-?u5g+Ý}÷8[¿|PñÅσ>:ñGÁÝoá–ƒðßáÏíCá-SVñÅÿÙ?LJUÕþ5x›ö?Ö<#§hÚÀ/Ú/ã/ŠT[ÙüñÝλ«kº‡ iæOÙÅ«^j:Ìvpü—û]“£ø{öjñy¯Š<_ûzH²@—쟴…#8Ç2\qÉ{økîïøwßÅ/ú#¶GþÿØËÿ’kÑ>1þÅÞ"øÓð_áOÁ-kö(øÑá}#à´úíÇ€þÓ_¿dø7Å¿æÑþ(þÖŸ´=UøÑñKÅ>Õ“ÁÿüÚ®—âßÙWá­E¤jw:EÞ§£iñü`øjÖWßõ;Oñ=®¡em§|"ðgìçóÿí «~Ï0êžñ§ìËs/„<ñEÕõO~Î:–›©[Ãû4øöÂÿL‚O ü5ñ¬ÿ‚`ÈÙã¿û2¯ø&7þ©_ˆÕû_ŸðLù3ñWí)¡þÆ?î>=h²?f˜¼=á÷ý€nOÚâ_íÍãˆ^Ó¾$xëQ³ø§û2\Aðsö%·×|)©iö íþ-xOâ‰Ö5Ù/¼Oukiá„þȱüîð·üëÇß²_ükþ …ªxáF­ üdýº?iø%ÂýÃâ7ÁߌŸÛàŠÿf?øãâ&¡ã/€?×LøÑñâ„4ï<1¡|ð>©á/x‡ÅÒÏs&·ceáÍCMÔ&ŽUqxœ/2Š¥€ÁbèU’TaŠ©œgÜ?‘äTc<[ÃR¡ ÎYôqUg^´14(S£ž`òú˜Ê\œoEeË0ö´ÜUJ>Ú0“­N… T*b3𲩇jµ'“B*• =UšÖUèdõ1µ0µãïVŠþ\µø-íÏáí+Áßµ¯Ù›MðÇíñ¿öÿøsûþÎ_´¯ÆïÙcö°ý•f?‰? ü{§Oâûÿ û7|{×¼9ñê oÁÚ}à}CáJ|bŽ=cÆ6~%°øƒðÝã?à£8ÿ‚£ü7ý³à? ®?kÏžÕþ.~Öÿü'¥ðkà—íà?„<+gð‹Áz΋íðÿm+ë¯iºˆdñ¥Œ>_Œré׈¾ñ•§‰ô+éõo CÉ9ÔËãË“0Íòl–•I©QqÆçXnÆÒÃÎe ô±T0|S”VÄa±4ðò§:Õ¨T•9á1ŸWÕÔ¦¡Ž~Ò«€Ë3¼ÚµIM¬KW>ÃTÄûZnt'†Åc8k7¡†©‡«^­JxeŠ… a±:˜ŸêBŠø‹ö¿øïâŸÙWö:×~-xããçìßð«ÇÞÓ~Úø£ãOÅ…5‚’ëW^"ð퇎®ü)û?xâ½×ÅÿøƒÄš;x™>üðÏÅísÆ:ÿŒî¼-áøKµÇ–ëQºø£þ yÿ#øËû[~Ó·gì³ñ¯E𶣪þÉ—õÿüXðßì×ûHþÆwÞ>ðgÆÿÞëãNñ—ì¹ûVøƒÅÿ¾øÂúÖ‹¨Gi¬ßx¢óDñ¾©é𾋦ÙiðÛjž Þ…'‰­¡Bpªð4qç8ó(V¥…–V•.hÆqq†c†­x˜aêU£í¥JxzÑ…ÔN–ª‹’Îqö´V'KB¤¡{U¥SZN|,± •gzþÊ‹WûiE/¶—ü·ö¹ý—þ1þÜ?³‡‡>~Ïþ0øçð_â×ÁÝöiðŒÚ/n.þ#þÉ:ÿìéñsö–øÃã/hÖ_¬µoxûÁþøñÂZF¥á3áÿ[xÏTð|!ðÚiW­sò/í=ÿ$ñ'íSñ³öPø×¥|ýš>$|ðü_àwìcû|Nñ.ûEG¯øv=áN“wñƒã{ËàÚ3áׂ>(kZŒµ‹MÀƒQÐu†ãJѵXu Ä7·0kvùåЫšÕÁRÀÓugŠÄä4êÒrŒ+PÃç™Ï d°©i?bñ4ñ¼Q ¾• ÕðØj¹ÖOžå8Œ~yNcˆÂ,rž_¯NTåõlÒ¶U£CS.˸ƒ2W©Ô«O [ OñðøŠßÙY†[˜a0x匡B§öƒE:¿à¡_·—Ä_?·<ðº¿àžÞ ý?bO†^5ð׋m?~Îÿ?gŸ…¯í{cá«ûØ>hº®¥ûlüxÒüGðඦÚLŸ´-ï´Mj+Ö›ÁÓRçRÒüd|CÁŸð\Ú>(~Ô? ç—áÇm ÁÿðJŠðQOÙãã}—ìIûgþºNµ®ü6]u-|+â_ƒ?µ?Ä¿x³âÏ¿BÞ×t‹ ,ø9ÿïñ^·ð¯öð§‰ÿ੾/ýœ¼û7kºB|uñΓðºÒ÷¾!ñ¿íIñ;ãÃ{ïü;ŸTtm>|&ðÆ)/"yu›¯ˆ?®®a±Ðî=Çþ óµñu–³ÿ޳ñþ¹áÏxâ×þ ûNÁâïx?ºŸ¼)®xŽ-À©¬j¾ðnµãˆz¿…tKëñ=Λ j~<ñö“i$VW^%Öf…ïçœñYÞs§ ät3¬rÎ5e<~[àŠ5ð^Î椣ƒãœ·:õœ%‘ú’Ãβż'´¦ð8,m9J¤qõ²ob”mM`ó¬bðø§UËÞšÄp–;ì)B¤dý¦"UéÒŽëßÑmQ\¥Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W ñ â_¾hpx“âˆ-ü9¢ÜêPi÷·×÷bmJæÞîê HàÓm/.žG¶±»Ÿ"‹¼Œì rÝQ_/Ãh~ÌŸôTì?ðŸñ‡ÿ3ÔÃh~ÌŸôTì?ðŸñ‡ÿ3Ôõ ó ¶_ìÑ4‹_,¤‘ÈTDðïŒY˜ž€áÒMv×?´GÁ‹-x‚ÿÇšn›£½Å½”Úž¯¦¥Þ¡y¸Xé–ßiÖóê¶ êbÓ´«®5B|[ÙÛO3,g*Õ¨á©TÄb+R¡BŒ%R­jÕ!J•*qW”êT›Œ!¤Ü¥)(¥«iN¤ãNœ%9ͨ‹”å&ì£Å7&Þ‰$Û{ÑPOs ²î•±Ÿº£—o¢ÿS…ȯ‡4Œ?¼'ã{߉Ÿ×YѾ|Mµ”éZ^­£^ÛËð*ËH»º³ð&¿ãXô˜µOéŸô;mG^ø‹}⳿Ã\øwÃÚ”–z}¶­©Ãõ<Ú”Z†Ÿi«i–Ú½†§k õ†«§ÜÃaycuMm{gwm$¶÷V׺Km4I‘²HŒÈË»Ìá¼û-âU]ágR\=yÓžC,;›ú¦>4\œÖ 0 áˆÂÖqMÆSÃÕ,] E =9Ž –º~ÕBp©N3UiKž’©Ê\;šJ>Þ„ïJ¬²iT„§FtêNæ­âI!;|#ž6Ž]A~‹ž»SŒ|ÀŸ8¼»¸»•¤¸•äbr7BçœOzòORIæ®ÌI$±$–$’I$œœ’y9õ¬§ûÇðþB¿CÂaéQK’+™ÇY5ï;Û®­/+úŸ=Z¤ê'ÌݴӦ뢲üßø)Çü|~×ÿöe?²ïþ·$ôQÿ8ÿÚÿþ̧ö]ÿÖ䞊ú|ðêÿ×Èê6º}²à˜ò6xïþÌ«þ ÿªWâ5{Äÿø%/ì)ñ“Æ_|eñá7Œ5˜þ3øï¿~3|7°ý¡¿i_ þÏŸ|{àÔðšhž&ø±û1xOâþ‡û9üJÔþo ¾½ÿ ¯ÂÝrßų薷+‡Z§’oÿ‚`ÈÙã¿û2¯ø&7þ©_ˆÕû_žæ‘ŠÌå]F*µ:XB²IU„!¿ºø\-wÒu°Ô*5ÏFœ£éP©R4¹c9Æ2’”£IFRƒŸ$šM'(sK•µxóJÖ»¿ÂŸÿà›±÷Ä¿ˆž"ø±sà?ü3ø‰ãO xÁ~>ñGì×ûEþÒŸ²Mïį øJÎãMðž™ñFÙoâïÁë‰ßðŠé3h^¼ñõ¯ˆ¯ôðþ“ug¢Å Œ|&¡ÿ„ÿ‚t꺗ÅvÿönÓ§ñ'Æ[àWˆüiâÁñã ^1°ñgìÏá¹íO«ãù1n”œ½Ž/’»ŒkZcœ¯QSœ¯V•:# »Ô§JTiÐÃME¾hS– J $¢èá©Ó¦Ý:1Œ=|Aÿ²ý‰¼ið÷ÄŸ >"|=ø—ñ_Eñ7|ñOücý¨j¿Œ_<1ã¿…—\ü<ñ_Ã?þ6x·ãwÂ-kÂR]êI¤^|,ø…àç‚ÛZñ›y–ž!Ö࿇ÄÿðJ¿Ø›ÆÞðσücào‹~+“Á¡ý¢<#ñÄ_µ§íy­|~ðÇÆKoé¾·ñ¦ƒûLj?®?h}*khº&eñ>Cg¢h†=gÒ4Ù­D+Ãþ%ðç‹4÷Õ¼-¯èž%Ò¢Ôõ½MOÃú­Ž³§Ç¬økY¿ðïˆô‡½Ó§¹¶MO@ñ—©èZ݃H.´­gN¿Ó/â‚öÒâÕµœ­­IáªÔ•µL%\ |%I½å<-|³-­†œ¯*5rü JN3ÂaÝ2ö„a{SŒqT¡±céâ©ãiF? Ž2Ž+ T¶"ž'ªq­UKçÿ±—ìçûJ~Ïv_²çÇŸk>iÑøÙXx»â_ÅMGÇÐj ï´ÍKÁÞ)ÿá6ã[øïL¾Òmn®¾ Éñ üq®K.¤uÿjƒYÖöìëûþÌ?²¯Äo‹> x?ÆÖ¾;é¾Ò~0|Gøñ×ãçÇo|@²øga¥xxƒÄ¿¾'|HÕçºÐtÝJîÂ-B¸u ËCoo©]^Ecd¶ÿ`ן|Qøµð«àw‚5‰¿¾&|>ø?ðßæÄxƒâÅøsáÿ‚4#ªjºN˜5x³RÒ40ê:­í–™b/oà7z…Ý­•¿™sqný«£ûÂÞ"ƒÀš¢êþ+ñ‹ëºŸ…îüM›ªÜévºÌ—m…ØÁàOÀ_€¿³&“û=Üif/Œ­ûAü ð®“ñ“ãæ—©xã!Ô5ÝU|uk㛊Vÿ5­JCÄšÅÕ­§‰¼S­i6qµÓáM;M[O¹þüfø?ñóÁ6¾|Wøkñ§áΫu¨Øé~?øK㯠üFðN¥{¤^K§êÖv*ð~©¬èW—Zeü3Xê6ö÷òKey ¶×)ѺJ©T•$੪jQ÷(QÇ×ΰ­ÆÉ8ÒÍ1˜œÛtÔ1øªøúvÄW©VkÚ{Y{Ni%R«öœÜòU^–KYó]µQå˜j9MW~g€ÃÒÀKýž”iGò÷áÏü³þ óð§áOˆþø/á—Åè>ø³Â>9ð>¿ðÄ?¶?í§ãŸ7ºÄ„¿>/)ðcÇ?´'ˆþXë××Úæ¿§ø»Oðµ§‹|;âÇ‹Æ>×4ZÚëêxKþ ûx7Uñ¹cð›â¿­øŸöfñ_ìoªk¿j/ÚÃâÖ©ìÅãDk¿ô]Câ—ÇÝøg‹0h_ðˤê~¤ƒÂz†‰’#~—V7ˆ¼Gáïè:ÇŠ¼[¯hÞð¿‡tÛÍgÄ$ñ©c¢h:‘§À÷Wú®±¬jsÚéúf›cm——×·ZÛAË4©³;Õ•YÔýäñi`«Ê~ü«`åG†–¬¥wS ,>kšP–nTËIÁÈK¥:”§Nte:u)âÞ:”©JPœ1үļe9A©G,NY–WxˆµY×Ëð5yý¦*x£þ »ûø¿özøû-êÿ 5 oƒ³«à{ö{Óü5ñ[ã7‚¼{ð{_øugu§x7Ä>ø×à߈zƽÄ5…õå’ë¶Ÿ—V¾µ¹ž Nòö)O¡þËß±—ìåûi_tÙÛÀÚ·ƒ-þ2üOÖþ3üQ»×¾$|Rø£®ø×â‰,tÝ;_ñžµâ_‹^5ñψ¥Õµ‹}"Áµ'U†Öîò9µ­ÛP¼½º¸úYYU•ƒ+ÊÊAVR2HÈ ‚ àŽEpâ×¶> ñ3áóxË_øuà ,ðT——ñׂ4mGž'ðäú”vðêIc$ú®¯¥ê:n£­ºßè~%Ó5Ýõ ·–çM’âÞÞh}ê/xí1æëþo®4&<þV­]â_\ÈÑ]êo*WýÅ29~êÙzp}zûcÍÎ8AãrìN1¥—cpU#[ ZN¬'ÉRJsQ•%ËRUNµ*±”jQ«Õ§(Ô„$ºpc‰$Fg}ŸŒà2ˆpçåô©â¿´1x굨ý{NU1”pQ•%C/ÃÍί³£OG <|£?Ú8èVÌq Jtðô~ÿšK6˧8S–…Jr¡NPÕ’j¦"´R5IU©R8x·Qá¨5‡§îÆUgÅjW–öòÈ&™w+à¨ùŸ¸ÁUÉ{ñï\¬úÔ*ß»ŠI3݈ŒpO¾0>•¦áî%aÓy‘çõ®~Nßô¯éŒ6 0r»nœn¯d´Žškå¹ðu*ɹ%d¯§WkÝjÿÈüjÿ‚”ݵãþØR²Ûû~Ëè$ð?n)N9ù±ÓµSþ ;÷?l?û3Ùƒÿ[¨¯W”}ºJÉVŠKþå°çu/áÃü(û‡þ ÿ#gŽÿìÊ¿à˜ßú¥~#Wì~>Á0?älñßý™WüÿT¯Äjýƒ¯Îó_÷êŸõë ÿ¨”B—ðãóÿÒ™øñðsÇZGÀmCãÏìïñoöqý¡õ¯¿¿ko‹¬<à¿ÙKâÅ?…4߉?á#øñ‹Xý¡þ|5Ô>x&„Ÿaø{à=KNøÕãÿ|Iøj~ÛØéznµ¢Ùü1ñŒ¾øÕð‹ö³ð¿ìßûØ]ülý¶ü+á¯|Õý„¿joÙÏö®øSáË}'Jø» ðÏ„foÙ«Oñ°Ô¯~/|1ÿ…£âox¹¿¦Ú+ÍŠå‚z{eC(ÁÆqu)QŽ&Ác°XZ0£J¥9Ò›x¼6aûŠôpX|×'ɱ8<—ÑÁ.ʼnšÅâ1 EC_9ÆÊ’Œ%(ãsʲ­‹©•cV.7Rµ <'JX¨á18ºU±µ«×x˜ÿ5#Õ?l˿ګölÕôïþÔ†¿ðãı‡‚üK¨ØþÎðSíáÿíEð—Ä–Ÿ í~:~О7Ñßã·ƒÿàž?³5ÄñxÿÇšO‹þ|Rø ñ“öð Ço<[¨x³Ãzšø{Sø{àÞ1ø=ñ×áî…aðÇÀþ)ý¾¾ü2ÓÿiÛªÿãæ¹ÿ Ÿþ ûUÉ?Äoüs—ŲλðîÙ ö°øñÊ÷á‹> êþ7ñÇŠþøëÇŸ³e׎µK‹Ú_‘üv»ðv¡£ÿZVµ*J¤Rq¥Ì±ù¦=ÔTý•IÏ3†]fÞXhR£F¾ ¾yO „†C‰ñk4Ëpyn C&XQ~Ƥj¤”£ƒË°j1»¥y~;ÁFP¥ˆx˜*µaKSQTÆÏ,ÂPÁ×ÅWÄÊ®a?ÈÏÛPøÏiû þÏÞÄ|w⟄¾ø½ûHøàÇíù៉¾‹Oð÷‰oþ0ꟲì%ñáGíªÓøóÆ^Ò¼®ü Ñ~+ø|;¼øƒý¥ñ7XÔtë>×<¿F½øé¦ÿÁ/þêß|?ñïâÄ…µ7Á½SÅIÀßÚÅŸ5Ÿ„ÿ¿o]m Æs|–÷ã¿í!¯IÁ èÞ*t×õï‹õ/Dº÷Šü]ã=v}SÄšî£ÄÔXšøºj”jÔâ<§ˆé¯eÓúÆQŠÃâðôqh*¥V„©·‚†]J8zÒ¥?5:)b¨ÁÓÀÒŸ7&+Ååu)Î.­,l+Ó¯:r­,Dé· ”y#ˆ–1SžHJ2¯x¯Ã?ˆšÿŠ ‹öÄÿ‚ƒüðÇÅŸ‚ ¦á)ª*£¥JJ•,ÂŽ2½8,F`³ŒÅâªÊž"­*ŸÊ×ÇÝSöð×¾=þÐ,øLl_k¾"ÒkŸ†ž!øKàŸ†ŸðS?x{ÂZ.ð'⽿ÀÏ‹¾9|Uø×©þºŸˆ¾!øëÀ?*è÷Ú-¶·¬ëÓx†ú?Ûšßá÷Å»é5Ÿx;Å'Àï‡~6Ð< oeðÒÛúC¢¯ Uaㆽ3ž&©“Ó|‰B”jãðxéשºµpîQÃâp®½Yý[1ÆPužP¡g:““”Ü'ž=ÁÉ·:¯ ð´=´Ó¶xU=Z2”u¯†§Š©ãjb1U¿-?e)`›ö—ø°~4Ûp~Ô‘ø·âüOÿ D?¶ô±ø-Œ#_ƒÇápŽ8ÿàž²kgá'ü âm(7Ç™|_ÿ ãx²GñYñ‰¯>&ü,øŸá‹´>¯aðsâ©àoØóâ%ïí‘ðçÁ õ/jµo¾9øAñ¯â߃~ÙØXéñøŸâµÆ§à?ÚŸÀšÏ†ô5ýdÙürð´·²^ø©ôƒû­ErÆ5)Ç:],N/ŽUÂhSÄÑž„Ìㄪ¥Kë¸<Ç‚ÍèÔ““Yµ¥'G_-N8Š”«áq8Ú8º´§Rj\§W [ Ο³ž®U‹Ì²P¯Fµ 9&9á#JUðø|\?—ßÿ lo x‡öxðìßhOÙÓÂOû<øâ‡âO‚ÿ±ßü+ö¥Ò ý±¾!üNøñö—Ô> øSþ óûDüЭ/íµÿü>Ô ð×í¹ðƒâ÷ÀŸé cáM2)`øÕ£x‹Ý¿cÿ üDÑ¿i¯‡vžƒöáмa£~Ô¿·V¥û]i¿¼3û_øöI»ý¼[ãÿÚ'Ä_ ®>xâöƒáÿÙ+Ä~2Ö>$k?|AáO~ÎVº×ÄÝCÂ×¾2¿ñ—Š/ü=?‰e›ú ¢»©â#JЧFœ(Çœâ)S‹”§Iæ³N†"³­Yª4RÁb§'ÁBõy+[ë_Hü"µñ6›®~ÍZ?í]ñGþ %ñ—áÝŸÃÿ¯ìóñ à¿À¯ø*Çìée©|O~!Çâ½#ö¶øeàŸøçöŠÒ­<'à%ø áOk_ðPø³Á^:ðv‹ã_ê¾!Öõ_|HÕ¯?o|ð“áWÂËŸ^|1øeðûáÍßÄ¿jßþ#ÝxÁžð…ÏĈzòÀºï|m?‡ôÝ>_øÓZ[keÕ¼S®µþ¹¨­¼òúaa}ºëbUlMLO±¡B5ó9L&”ia°î9Ulº8 $eí<.Xñ–MV “Ãû*s«†šT¨á¸;aéá£6ãC,¾uJµeLkˉTåyâseÒÏ©U«ˆ†; R8ÖƒÃÇWóGþ •ð×KøEàmöŽð猴ŸÚ—öŒ¿ñm—Ç~Ò~+ðõöŸâ_Ž?|QðëÄ_üMñÃ^ñ7€uïø§áƳáŸêš§À}n÷Ã÷~"Õ/¥ø†aø |MoéuW5Û$ÔS§CE¨'w¡Bìi¹IÒ£î~æƒOaK’´©ÉÏ-%­\MD­õŒf7Ë«äúæ.¶)ÁÉ·*’ƒ­É*²÷ªÉ:³JSiQE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ù ö¾ÓXÒþØ(ܲüs²yW ü'ø·0ØH‘·ÕE}{^ ñ¾Î;ë¿„ :8µÒþ+BòQ’¬ãáwÄûQ;¬HìÏw à2d_âÃÄÒÃNŒêÍBõ+–‘½8Ê«¼¾Úäï&–„U¦ëR«I+ûJsƒ_ã\Ÿ‹’ZŸØíýßÐØíýßÐt?ð•ø?þ‚£ÿúÿ"Qÿ _ƒÿè*?ð_¨ÿò%{_ë6þƒ0ý?åý?/ïzþ;ý¯˜\0ôýÔúË¿ðyù?¹œ÷ö;wôãWôý(Ç>â¿ÂGNy#Ó?–FzVªx£ÂRºÇ¤]ØáUtíD’}€´üû¦µÖóMó!ޤ¸ßå£Î„j·3ƪƒ¼©bp™9Á™q^Ž ¼§‹¢Ô¢©Å*°wIBœ#¤ž²œ”b·ri-^»áxeƽ9*r¼=ûrkhF2nÚ»%9id“»Iw‘ƦÉO*V»O+hêÁ^&•c!ƒŒªÎÌ­{ƒK…¬]IcdÖÒܦy%#-»I$aÉE`X6â‡røÃò£FføŸÅö³Ó›Z–Ö{½G[·Ó-’=Á<ëØ®YXFU¶˜âŽhü¶–f# drJ¯šêž'·¾™æ’N§å]à 3œsÜþ|þÁÙUlã7\AŒŒ¨á0ÉÇJ£”*ʬÔ\ý¬9åÈÒ³^ã÷]æã Gé1Õ õ:6œæÛ©4£(µÔ]7ËZIë}níd®KžsŸó÷kNßô«©A9Ägqô'··µW“·ãÒ¿s£%-íú1$ÓÕ[Eø%sñþ ;÷?l?û3Ùƒÿ[¨£þ ;÷?l?û3Ùƒÿ[¨®Ü.øúýýFÞ•/áCü(û‡þ ÿ#gŽÿìÊ¿à˜ßú¥~#Wì~>Á0?älñßý™WüÿT¯Äjýƒ¯Î³_÷êŸõë ÿ¨”B—ðãóÿÒ˜QEçQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|ýñëâ’ü5Óü/y‚¼KãØnüR¶ Òü'£lëf‰7†¼K:k[I-¬L±ëvÚ.9[”‘-õ)\+…hÛè¯3tß?ÔŸåYÕÃÒÅS•Ðç§5f“å”_IÆVn2‹Ö-jšº“‹æWº×N¶ÖÞŽÝt>1Ð~0|4ñC'ƒþ*øZWÆb×ü ¬Ù¤lO!¤µû\\»|W¦Á7Ãù`ûBjwEÜc“NÕÒlúc%šI‘ôÆ}ñ^ß(ñüXü9⳦Æêß—?ýjó_ àæ×³Åc)'¥œ°õÛg<;—]“}Ûë\ŸòÿäÏôKúò<XøÉà? ¬žO‡üm«:.Å7„ï. ¸^R6# ‘‚ÝrkÆu_ÛÒÁ ž‡ðWã”ÊR÷#Á%šB¹!®u?9‹2—w*¡ÙÉØ¸Ë}‹sßüÿv±n;¼kªŸåU' Õªb«Ö„eU­:s•8·eM{.H)8E¾Xëe{Ù[f5 ¹y=Ù5'6“i{­«;¸ó;z¾ìüßñ×Ço|Dºð͆—ð¯âÝ…Úx¯G¼–çÄ>K=&ÂÆÚ×ZK»¦¸†þwŽf’îÒ4 jûÕX¼‹±½³Â¾ñ^§wzÓ¾›a¼†$ÌGÀÎ äŒWÓ7?èkë úQ__”å42úN*•jAÔ•Wírrj ûÉ/wEek­®qb³ N/–”#-¹·kE¶‰-÷µïÔåáÓ­ôøÄp©,FåØñÎNqœôZNßô­‹žÿçûµ'oÇúWÓQI$’Ir­¾G‘&äîÝÛI·ê‘ø¿ÿûŸ¶ý™ìÁÿ­ÀÔQÿûŸ¶ý™ìÁÿ­ÀÔWn|Gý~þ£aÏJ—ð¡þzŸìƒ¡øsZñe÷ü$ðwŠ>ÍûÁ9>Éÿ gƒü3â¿°ùß|[öìÿøHô­Oìiò¡ûWØüµ}žÛíoÙ òþõÿ„áÇýƒ¿øgþó)_~Æò6jöe_ðNýR¾0¯¼õsDðõœz‡ˆ5/C°›RÑth¯µBÓL³—Xñ&±aáßéQÜÞÍ/©kÞ Õ4Í E±W7Z¦±¨Øi–1O{yoŸƒž1Æ1rœ©ác¨óJRxj)E$›m»$–­èŽúm*I¶’JM¶ì’M¶Ûz$–ìÏÿ„áÇýƒ¿øgþó)Gü ß?è”|ÿÃ?ðËÿ™Jźø­ðºÇþc{ñ'À6cÁ^)ðß¼dn¼cáÛøD¼mãáÁáø›ÎÔSûÅ>*>0ðð߇õ_²jÚáñO‡?³-.¿¶ôϵuZ¹¢xŸEÒ|Iá½cKñ‡uý6ÇYеíP´Õ´]kGÔí£¼Óu]'T°šâÇQÓu 9¡º±¾³žk[»icž dŠEs¡xó¨Þ»÷ÔoßSU¨ûÉ[÷´Z«O_~›U#x´Íœes'¹Å]5ySåU¾îpS[Çš<ÖæWÏÿ„áÇýƒ¿øgþó)Gü ß?è”|ÿÃ?ðËÿ™Jé+ñ<)á=sÀžñ«ýŸ­|Kñÿ„üeöJëûo_Ó<'â/_X}¢ÊÎæÓMòÿáŸøeÿÌ¥t”QeÙ}Èoþo‡ôJ>ÿáŸøeÿÌ¥ðƒ|8ÿ¢Qðwÿ ÿÃ/þe+¤¢‹.Ëî@sðƒ|8ÿ¢Qðwÿ ÿÃ/þe(ÿ„áÇýƒ¿øgþó)]%Yv_r›ÿ„áÇýƒ¿øgþó)Gü ß?è”|ÿÃ?ðËÿ™Jé(¢Ë²ûßü ß?è”|ÿÃ?ðËÿ™J?áøqÿD£àïþÿ†_üÊWIE]—Ü€æÿáøqÿD£àïþÿ†_üÊQÿ7Ãú%ðÏü2ÿæRºJ(²ì¾ä7ÿ7Ãú%ðÏü2ÿæRøA¾Ñ(ø;ÿ†á—ÿ2•ÒQE—e÷ 9¿øA¾Ñ(ø;ÿ†á—ÿ2” ðãþ‰GÁßü3ÿ ¿ù”®’Š,»/¹Íÿ ðãþ‰GÁßü3ÿ ¿ù”£þo‡ôJ>ÿáŸøeÿÌ¥t”QeÙ}Èoþo‡ôJ>ÿáŸøeÿÌ¥ðƒ|8ÿ¢Qðwÿ ÿÃ/þe+¤¢‹.Ëî@sðƒ|8ÿ¢Qðwÿ ÿÃ/þe(ÿ„áÇýƒ¿øgþó)]%Yv_r›ÿ„áÇýƒ¿øgþó)Gü ß?è”|ÿÃ?ðËÿ™Jé(¢Ë²ûßü ß?è”|ÿÃ?ðËÿ™J?áøqÿD£àïþÿ†_üÊWIE]—Ü€æÿáøqÿD£àïþÿ†_üÊQÿ7Ãú%ðÏü2ÿæRºJ(²ì¾ä7ÿ7Ãú%ðÏü2ÿæRøA¾Ñ(ø;ÿ†á—ÿ2•ÒQE—e÷ 9¿øA¾Ñ(ø;ÿ†á—ÿ2” ðãþ‰GÁßü3ÿ ¿ù”®’Š,»/¹Íÿ ðãþ‰GÁßü3ÿ ¿ù”£þo‡ôJ>ÿáŸøeÿÌ¥t”QeÙ}Èoþo‡ôJ>ÿáŸøeÿÌ¥ðƒ|8ÿ¢Qðwÿ ÿÃ/þe+¤¢‹.Ëî@~:~ßZV‰£éÿ¶E¶ƒáï xjÎOØïöcžK xoBð¾Ÿ-Ë~ÛQF÷siþÓôÛ)¯$Š(a’òXêH ·åh­áHÊ»ÿ ÿ_ÛþÌßöbÿÖÝZ+îòo÷5þ(ê=ЧÇ/SÝÿcù5?û2¯ø'þ©_Wеgƒ5¿þÏ?ô é©«øãJðü^<øs§Iš.¾(|.Õtï‰ TiÚ¼‹"xÿÂ^–`Ó/î •{Kin£…OÏŸ±‡üšŸý™WüƒÿT¯Œ+ëÿ‹~øWñ3ÀÏ>5|=ðÅo†þ%»ðõ†¹ð÷Ç>°øáŸß/‰t{Ÿ ÙÞøRѼCiâ¸<[…}£[¶{5¶·k§_Ú$wvOÈæ^Óë=ŒÝ*¾Ãìª$Û§Sê´y&’qmÂV’JI»Zës· 8RtjT‚«NHÎtÜêRU! œÒƒ©JP«MN)ÅΜáR óBQ’M~Oxcá¯Ä­gâO«ùþüFÐ4/ÚQOÚËâ͵÷ÃÝGKƒá÷Š>xƒâïÄŸx[ân«4:‘ð×ʼnõ/ˆÿ³_…´ j3Yk–¿|*Ô>þÒÞýœ|[ðá„·ú_ì‹ñÄþ¼øU‡ìþA}ñ£]ñ•Þ¡á‰^"Òþ%ø·Y·Ô? ßí;Ïú>*áø­ÿÌmÚwŸô&|TÿÃ;ñ[ÿ˜ÚÚ¼•iÎN´ð5°oÎsŒjá°xh¨TS„ãB°q¥*IûZ”+baõ˜VÄâq• Š„ai8bhâ9œh4ù*æ«ÆT*Ò«…—ÖkãÖ&q a£‰Àåíaž†ÂÒü‚ý‘ÿá2ÿí*áø­ÿÌmÚwŸô&|TÿÃ;ñ[ÿ˜ÚžÍü ™­EdÿiÞЙñSÿ ïÅoþchþÓ¼ÿ¡3â§þߊßüÆÐðþhÿàKüÍj+'ûNóþ„ÏŠŸøg~+óGöçý Ÿ?ðÎüVÿæ6€ç‡óGÿ_ækQY?ÚwŸô&|TÿÃ;ñ[ÿ˜Ú?´ï?èLø©ÿ†wâ·ÿ1´*áø­ÿÌmÏæþ¿ÌÖ¢²´ï?èLø©ÿ†wâ·ÿ1´iÞЙñSÿ ïÅoþchx4ð%þfµ“ý§yÿBgÅOü3¿¿ù£ûNóþ„ÏŠŸøg~+ó@sÃù£ÿ/ó5¨¬Ÿí;Ïú>*áø­ÿÌmÚwŸô&|TÿÃ;ñ[ÿ˜ÚžÍü ™­EdÿiÞЙñSÿ ïÅoþchþÓ¼ÿ¡3â§þߊßüÆÐðþhÿàKüÍj+'ûNóþ„ÏŠŸøg~+óGöçý Ÿ?ðÎüVÿæ6€ç‡óGÿ_ækQY?ÚwŸô&|TÿÃ;ñ[ÿ˜Ú?´ï?èLø©ÿ†wâ·ÿ1´*áø­ÿÌmÏæþ¿ÌÖ¢²´ï?èLø©ÿ†wâ·ÿ1´iÞЙñSÿ ïÅoþchx4ð%þfµ“ý§yÿBgÅOü3¿¿ù£ûNóþ„ÏŠŸøg~+ó@sÃù£ÿ/ó5¨¬Ÿí;Ïú>*áø­ÿÌmYÓu=cNÓõm:o´iú¥•®£cqåËŸg{w6³yS¤SÅæÁ*?—4qÊ›¶Èˆà¨¥´“ôiþGäwü'þ=loû3Ù‹ÿ[uh£þ ÿ¿¶7ý™¿ìÅÿ­º´WÝdßîküPÿÔzOŽ^§»þÆò6jöe_ðNýR¾0¯¼u?øüðgý•Oƒ¿úµ¼_~Æò6jöe_ðNýR¾0¯¼u?øüðgý•Oƒ¿úµ¼_%˜½Kþ½a¿õ‰¼‚ÿÃ?ÎG×þ'ø¥¤øOÆÚ?ƒõ=3_•5_ ëþ(}_Jð犵ë{(ô;Í2ØÛOáíVY¢¼¹žk©ï­Å”–ö6³@Ókšgšj¿>èóéö·:ÕõÝÖ¯e£_évº†?xŸÂ> Ðd°Ò¼Má9u(tŸ6£Á‘¬Ÿ±ß\Ü_ÎÚŠ%õÕÇÌsâTy\¥Ï6¥ÈŸîþ¸à¢Ò«ÊO ˆ¡:sr£É-U§Ru(ÔŸ[6äÔšŠ§¤owíVÎíòÝCÛP© E*²œñXog(Æc^?~ý“N¾[Ô.m5 y.äžËÂ~0¾MÒ-JóGšëÆcÐ'>··Õ4ÝRÂæ +{#YŠv´HZå|fø™©xØhPÈ5ok—ztZ´žñ¿Ä3F°ÒôMG[¾½ºÐ< Õu‰Å”6–0êv3¤WWšæÛ­?BÔâ}?ìçN{Ïøoâ]jþ ÇñL¿>Yø÷N¼Õµkž+½Ôü'f|W ßx=fÔ|IªÛÕ¼AlÚl:4SïôëGQ÷¯xDxŠÿÂ7ÂýlG…uMOR­Ÿž·£Qð®½á‘n­ö˜>Ȱmý´>Ëâ×ì¾ZyßhŠj}nxYµÃª7BM©BM/iÏ *¨¿zð“§/z)·¸ºQ¬ÕܨºURœ’RS•&©ÉÆÓ\Ñ©.gN QKž¤/)xχÿh/>M u­)µøÆÓÃzv¡àíÆÚ½µ½œÿ 4NKh|?}ªN“ê:¤–&¡aáÙíôgmRöÖÑuw^ùþ9|1Š ›©õÝBÖÒ°½½å焼egg­ÛêZ¥ž‹c}áK»¯Ãoã.çSÔtÛhõ_ K¬é¿ñ3Ó&k¥·Ôl¥ŸÐþ_øsHÐ,ô¯ZG@ñ6•¯Cy¨x^[­>îÖ×á‡Ã OLºÓm¼KcvûN¶¹Ôì¯íõˆN›}=¼sZêvö²¥æ7…f»? Gaeg/ÃKkM#Pð½Í†¹¡ü ²ðïÄ-BËÂþ+Ñ|Goeâ¿Xx±­uùu4Xm5;¸<7£­Ö¢aÖž×|Ê}[Ä:ôà£A¼,gYÅ9E<>8™¸F¤\:δýاVJqŒ!JU"ÔÕ6ï'QAµÚ‹Ÿ·Ä»^JM^Š µ—,¢ùªMÕ…?Zñ¿Ä½;Á~Ñ|[&“¯ê6:Ö·áM&+8<;âŸí«x|O©ÙÙ}¦çÃöÞ¾ñ µÝ½ËÏýy¤ZßÜßLJ¶ßS¼·…›ÅïM{saîºÓ[AªJ%ÿ„'ÇÂúãDµžóXÑô}Pøpiºï‰t¸­/’ÿš-Ýÿ‰mnôÝRÂm%/´½BÚÛgǾºñ‡‡Æ—§êÑhš¦³áßiz•Κu‹85/ kº~½d—úZ_éS_Ø\O§¥½å½¾©¦Ü½¼®mï­¥ òO üŸÂ^&Ô¼M¤Éð’]JòûÄÚݧˆ5‚ñÏãÍ?]ñnYò.GF*ÞÕürömÆÕ:oüsðn‹£Úk:AÔ¼Ymq¨ø ÚCáí Å:¼PØøþòÕtË´›Dðö°./ÓJ¹]^=$þÖ¸Ž}&ÖH-e×´w»ö+yÒæÞ ˜ÖeŽâ§n-î-.%E‘{[¨¡º¶˜+-½Ì1\Bᣚ(äVAóþ›ð&ã@ð¶¯áoøÁm­®üMáésê~‹P6>:Ò5?_ñ§ ž¯¤.¥¡ø³WÓ ¿ŸÃÖm¢¾‹5æ«‘«Á¦Ë¥éú7Ðëp¶ð-Ô°Ít°Ä·3[ÀöÖòÜQ4°[Iqw%¼2Hâ‚K«—‰ Æ÷2™j\üµ}ªJ^Ö‚‹æ„iÊ…%:Q£*ª–"5¹jÔ£‡HJ8ûG‡ÂD­xrëF¤Ú³””ÛŒÜnÕ7:rŠ•8ʬa8Î ­HÂ5ñQEb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ üÒøkÿ$ëÀ?ö%xWÿLVú[_š_ äxþį ÿéŠÂºpûOÖ”ÉÃ/Îå·ü'þ=loû3Ù‹ÿ[uh£þ ÿ¿¶7ý™¿ìÅÿ­º´Wè97ûšÿ?õÉSã—©îÿ±‡üšŸý™WüƒÿT¯Œ+î_ÍáËmâïÅzµ¾…¢Y]é7ók7:üÞM2úÇW±»Ñ¯#×íïôË.î j=ìn ¿¶›í¢Þ8Ü»ª7Ã_±‡üšŸý™WüƒÿT¯Œ+íßõð7ý–€?ú¼>×Ëâ`ªf4éɵŸQ„œZRJt0ñn-¦“IèÚi>ŒÒStð•j$›…*ÓJJñn*rJI4ÚmY««®¨â¿ái|+ÿ£‰»ÿÄ›ñÿ‹c>¥©Þ}–Æ ›ÛŸ³Y[O7Ùìí®.¦ÙåÛÁ,¬‘·…Þü]×ü5yâø»à×ů x.ÇútÚö±©êß 5 ;ÂzO†æñ©âßé¾øýâ[›Ë;m/QŽææ×ÁþŸÆ°èïnÍâé?áÑ´N×ÃJܸLC»¶¸Ú1»²Ò*X5ÌîÒåÚæMùϲÄu«…ÿÂ:ž[ÿµé×WúÂÒøWÿGwÿ‰7âÿþxÔÂÒøWÿGwÿ‰7âÿþxÕúwâh¾ ð׈|aâ[ßìßøSCÕ¼I¯ê&ÞîìXhº…Æ©ªÞ›K.¯®¾Ëck<ÿg³¶¸»›ËòíàšfHÛç8h¿éZ†™q㟅ΉáMd¸ŠãÁÿð|Mñ¿…|ë õ-;þ„x{ãOÅhßÃþ*Ôî<5ðÓÅ·Þ:Ó<3â+[MBÔn¼Q&¹ª|5ñ¶—§h>‡^ñ%Χ¢94ƒ{¨é0_ú˜|Û(ÅácŽÂµ‰ÁJœëG‡Ìðµ°²£O›ÚUŽ"žT]:|“çš›Œ9eÌ×+9ç—f”ëË RŒa‰„èÓžyn"5ãSV <%IâUHνlE 4bãÍR­z4à¥:Rø‹þ—¿ú8›¿üI¿ÿóÆ£þ—¿ú8›¿üI¿ÿóƯÐÿ ü\øyãêÞðψF­âÀ?¾(jv0izÔv–þø©{ã=?ÀzÊkWl:ÔšõÏÃïì{MJ}sK¶Ó­¯µ7N²Öt;J¾‹ñgÚïÆˆ-,µ¸üUðãÀß > kš…͵Šx~ëFø©«|HѼ=m¥]E©M¨Ï©ÙÝ|/×äÖa¼Ò¬mmíï4v±½Ôd¸½‹OìZ4ç:u0XÊu)¹)¦&œ%Ë5(Ë¥)FI«ÆI¦®™ÉÖ”=¤kà¥L=Nxáe(ºx¸Ð©†¨šÆ4ሧ‰ÃÕ£%xÔ¥^•X9Sœe/ÏøZ_ ÿèânÿñ&ü_ÿÏøZ_ ÿèânÿñ&ü_ÿÏ¿Uè¨úÖþ±?øYKÿ˜½¥­{,OüüÂáOþkõþ–¿•ð´¾ÿÑÄÝÿâMø¿ÿž5ð´¾ÿÑÄÝÿâMø¿ÿž5~«ÑGÖ°Ÿô ‰ÿÂÊ_üÅëý-Oe‰ÿŸ˜Oü#©ÿÍ~¿Ò×ò£þ—¿ú8›¿üI¿ÿóÆ£þ—¿ú8›¿üI¿ÿóƯÕz(úÖþ±?øYKÿ˜½¥©ì±?óó ÿ„u?ù¯×úZþTÂÒøWÿGwÿ‰7âÿþxÔÂÒøWÿGwÿ‰7âÿþxÕú¯EZÂÐ6'ÿ )ó¯ôµ=–'þ~a?ðާÿ5úÿK_ÊøZ_ ÿèânÿñ&ü_ÿÏøZ_ ÿèânÿñ&ü_ÿÏ¿Uè£ëXOúÄÿáe/þbõþ–§²ÄÿÏÌ'þÔÿæ¿_ékùQÿ Ká_ýMßþ$ß‹ÿùãQÿ Ká_ýMßþ$ß‹ÿùãWê½}k ÿ@ØŸü,¥ÿÌ^¿ÒÔöXŸùù„ÿÂ:Ÿü×ëý-*?ái|+ÿ£‰»ÿÄ›ñÿµ„ÿ lOþRÿæ/_éj{,OüüÂáOþkõþ–¿•ð´¾ÿÑÄÝÿâMø¿ÿž5ð´¾ÿÑÄÝÿâMø¿ÿž5~«ÑGÖ°Ÿô ‰ÿÂÊ_üÅëý-Oe‰ÿŸ˜Oü#©ÿÍ~¿Ò×ò£þ—¿ú8›¿üI¿ÿóÆ£þ—¿ú8›¿üI¿ÿóƯÕz(úÖþ±?øYKÿ˜½¥©ì±?óó ÿ„u?ù¯×úZþTÂÒøWÿGwÿ‰7âÿþxÔÂÒøWÿGwÿ‰7âÿþxÕú¯EZÂÐ6'ÿ )ó¯ôµ=–'þ~a?ðާÿ5úÿK_ÊøZ_ ÿèânÿñ&ü_ÿÏøZ_ ÿèânÿñ&ü_ÿÏ¿Uè£ëXOúÄÿáe/þbõþ–§²ÄÿÏÌ'þÔÿæ¿_ékùQÿ Ká_ýMßþ$ß‹ÿùãQÿ Ká_ýMßþ$ß‹ÿùãWê½}k ÿ@ØŸü,¥ÿÌ^¿ÒÔöXŸùù„ÿÂ:Ÿü×ëý-*?ái|+ÿ£‰»ÿÄ›ñÿµ„ÿ lOþRÿæ/_éj{,OüüÂáOþkõþ–¿•ð´¾ÿÑÄÝÿâMø¿ÿž5ð´¾ÿÑÄÝÿâMø¿ÿž5}çûCëúÏ…>ü^ñ7‡u ô{Ãÿñsâgì·û4xWL×~7ühñWÃï ÿÂQá†öž&ñÏíñ^É5?kú„z“i=Üž:C-̯Ö³¯êmZw‡¼9¦x‹Æ~$¹Ñü)áí{XÓj5ð_êØ«wIík·|²Õ[}ÝíoxöXŸùù„{ÌNëþ¢ßŸáæxü-/…ôq7ø“~/ÿç^“ G£Ã¡h°øv[iü?“¦Ç¡Íewý¡g6œ+¦Kiç\}¶ÚK!Áwö‰þÓI¼éwïoTñÔZeá]{Á^+øg­é¾ ZÉ×Å?ˆZþ—¨è¾.ø»àŸøKÖ4?x£YÑõ; íÅšŒKÕ‹Éi}ö-JÊ[{ë+iÓçƒ_òGþÿÙ6ð7þ¢ú]k(Ò V§Nµ' ÔéJ5jF£—=:“ºQ£K——‘Zî\ÜÍZ<·™NUa^ª:2ö”jTR¥JTœ}œ¨ÆÏš­^e/k³ËÊ·¾Ÿ™_ðPŸøõý±¿ìÍÿf/ýmÕ¢ø(OüzþØßöfÿ³þ¶êÑ_e“¹¯ñCÿQèSã—©îÿ±‡üšŸý™WüƒÿT¯Œ+íßõð7ý–€?ú¼>×Ä_±‡üšŸý™WüƒÿT¯Œ+íßõð7ý–€?ú¼>×ÍUÿ‘­ñåÿúk:ßî8ûÄé>àø·á=GÇ¿ ~&øGšÊÛVñ§ÃßxOK¸Ô¤ž:ßQñ†õ-ÆmBk[k˘¬¢¹¼ŠK©-í.§HF†ÚyÄß“> ý•üiâψ>=Öô_~Õ:7|moãKBÏÇ¿ðPÿ¾9ø3áuøÉ§ø¿Ã2ëZÇìש~Ø;øE¦øÆ]KÄ3øcÃ~ø/}£xCûᇆ,uo èvúwíEsÖÓß7Šõ«Y$»:d>ðÄö‘‚F²Ši¦67^+ÑmuHÝ ð׊Ým%Ó&»ŠþVÒía‚Åîg¸ñ/ƒ-ã—Æä¾ ø]ãÌN[;Í2j˜ 5l<£—à :xšs«Ðu#^œ­:Rö–wjJkHò·/¶áž0©Ã´1e–á±ê½xÖ§V­ZÔkaäáucN¥>kF¬iÓMÆ0šQ”\åN¤ ~|þʵuñ²üa±—ãOÃ_G©jº›xKÇ<øã½ñÅ×^ÀW$ø‹ðçâ·ˆî¥Ò¼5á}ÃNÒü9'Š|1iãßk~ðæ±§\x{á烼5?Å“öøñ?âíû|%Õ›JÖuÞ$³¹ñw‚<]ðÊûFÑ|?ªjËiñrmeõJÑun¿@ëåŒÿ´V½ð¿ÇúG€4/‡xÇQÖ|#ÿ ^œË'Å‹­R;}Z÷LÖ¬ô;á—ÁO‹’cÃb=ë[½×çðå²/Š48tïí)d¼ž¾U•ðï†\7§ˆ¯Ž¯‚Ë1/[ŠÂãsЏ¼^+ W ŠxŒ ŒOŒÁT¯«ƒŽêUÒ’–"«­SÎÌóÏŠóLíN\^aiR…zT…*±­…•,V*¤$ñx<\hã°¸©Ôu¨c(Q¯AR†•:_?`_ÚkâìÅ…5¿xKÃxoO·ñ_ô½oâ—†ü;{7…¯¼Sá_ÛÙxv?‹ð¦5‹ jÂ÷ÅŽ«¬ë¾"ðÔ²ñ‚§ø(þ!_‰ž$Õ‡Ãÿ‚Ž~ÕÞ*ø©~Ͼ0Òþ=_~Î|EàO‰^1ñïŒ<]£ø3žû_‡>#~Ë—> мwñÏà?‰t?j%Ò|MãOM¢ë>xøé0ñt>ðŒ¼c£ZüBýŸ=þã|—ˆ±xÜ6U˜UÅcpXÌ›2Ì^kÇe¸ÉâhåÏKˆŽ7 ÄÒÅb±T1x¬Õž2£œÖ嫇Äá°òáÍ2üÇ G ëP¥B„¨b°x`þ§ŒÂÓ£,ÚY½:0 Þ7‹ÃájX|5,e,f ——×!˜biÔÄŸ­öñÉ ¼K1¸–(bŽIÙv´ò"*¼Ì»›i‘r»›±¸ã556Ÿ ÿkÿŽ¿ü3 ø×á¯íýâoŒ> óôëXü[á ö4ño†|Os዆šý½Î½àÙõt§ŸZ»øuã_à]éri×¾*à/†¤Ñ¾ /Áî×Oøïû]Yf}§öÀø·«ýƒû í_Úe¿¶ÿ²?áVÿhiÿe~Íúg•ÿ Gü+ÿnÿcd}Ÿþ—Å/øFáþÈø)ÿ ì%–b›¼½šrJ{¸¦¦”ã$”å”d¥.W8èÕü*u(œ)Órp§N7”ªI{?rÒœå)Îqqqœ§)MÊ2ænWoú¢¿ž?ã¿íueý™öŸÛâÞ¯öì/µh|9ý”"þÛþÈÿ…[ý¡ý§ý•û7éžWü%ð¯üYý»ýý‘öø^_¿áÿ„wû#à§ü)üËÚCö¢ð†’º÷Šmo‰è~²Òµ/ë>)ðGì£é3iÞ‹á|úÕÿ‰uÙÓE³Ó,µè~x¾oÝióhXEñ¿â¤ž“Ãi£ü?§û3Þ—þÿùêÏÊú*Ñm$¤ÛÑ+]ÝÛMüÿKÿE4WóѦüxý®m–ÓþØ?µ…± ¹7ÿ¿eƸ4‘ð´ßHé?³~˜")üXuâÿdˆÇ/Š_ðŒÿÂ;ý“ðSþÿ%§~Öß­ƒÄÿ··‹uƒ¬øŽh‚ÿÃß±¼gǾ.ðRø!¼YákQ¤þÏzgöˆï—à×Äöñž‡áo°jz2üRøÚt[_ ü"?ßöf&é^ÛQK™ÝÊRQI.][””RZ¹4•ÛWJ´r\Î*.M¥t£J¤¤Úvå8Îr{(BR~êlþ‘(¯çSÂÿ´§í=ªÚÙ_i¶ÏÄoÙhúœz&§yoà¯Ùú×SÖ| ªü9Ð|a¤kWýl¢´ÔîõÏ…Þ<Ѽka¤¾w¢j¿þ/iÚ4^¼ðÿÁ¨~ çxö§ý¥ü[¤Xk¾ý´~-ø¯JÒµ»Ÿ_Ýj ¿eý7ûgYøqâ?xKÆvzœþ̺ÌÚþ øIãý?]¸Ñ!Òm_þOÅ+¿Ï£Ùiß.~Ù˜žôö¿ÄöÓ_‡oykþjíÕŒ[RR‹ŒÝ)&¬ãR<ÜÔä›Òqä©x?y{9éî³ú<¢¿˜Ý;ööø…gñCKø#qÿ,¿Æ‹¢-×ÂAÿaèþ(km£hß ¼E©.§à 'àF™â¸‰¼?ðóÅÚî¼4]'H6Ú7ÇŠšŸ†¿á²Ñþ Ïð{×4ÿŽÿµÕ—ögÚl‹z¿Ø?°¾Õý¡ðçöP‹ûoû#þoö‡öŸöWìߦy_ð”¿ñgöïö7öGÙÿáy|Rÿ„gþß삟ð§ÒËq„*EÒp¨œ¡56á8©8· (µ$¤¥âÚRŒ–èhÆNRŒÒ‹q’´’’¼[‹wJJí;Y¤Ú¾—þ…¨¯ç[Hý¤jõxü>m‰ö½á»jzö‰uàÙû^çMi~Ao¨xMÑ¿gM6óN±ñìÿ þ!Cww§C¢A4¿¾1Çá 4'ðßÁÑðkOOøïû]Yf}§öÀø·«ýƒû í_Úe¿¶ÿ²?áVÿhiÿe~Íúg•ÿ Gü+ÿnÿcd}Ÿþ—Å/øFáþÈø)ÿ }ÿfb{ÒÿÀŸÿ#Ó_¹ü×¶†ÞõÕ®­µÒjúõM5Ýj´jÿеüëxcö‘ý¨u;M;PÒ¿m‰1°Óo­tËÛè|û#^Úk—ƒµ/†ú?Š4ýZçÿ³¥”0_jZ¿Ãi^0´ÑßHŸHÔ¾3|\±Ñ#ðÅÖðf/ƒŸµß²§‰ü_ãoÙ{önñŸÄCWÕ¼{â¼Oã}W_Ó¥Ò5íOÅúÿÃÏê¾%Ô5½&…ßçÒõ{ÍfîöçRÓ¦ø-ð‚[+É&¶“áw€#á='ž¾®AÔq÷ïËÊÛÙ'­Òþenþ…ƤfÚWººwèÓ³O]Óºk£M÷EW1aEPEPEPEPEPEPEPEPEPþÕòm¿ì”øãÿQûêüOý§¿b?†ÿ´íañ â¿ÇÝwÄß¼#¥è¾0ø{ðçà—‰î"µøuðÎëÄZ޽¦x÷Æ‹A]'P¹ñ/‰4¶ÑN—¬ê3Íâ? k–ëÖ~!¼¸Ñ¾Áð«÷çâ–©àíoLÔìí57SŠ×NÔtëûho,oôûëû[KÛÛK”–ÞêÒîÚimîmçâš9‘ˆ?1é?³ÏÃ)ŠÇ,~?•QBƒ'Æ_Œ! 0 ÊÞ=2Èä ³ÈìîrÎÌÄ“é`eJœ'R´=¤´ŠIû˕ݦÒi]Y;«ëd♕FÛŒbìÚzù6—ªùzu?=ÿdƒZ§ìïðŸÃÿn>*øë⾃á/‰_âð^£ãöÒeÕ¼1àvý­> xÒçL°³–÷Lðw‡¾Ç¤ÛÝêS];Ü-äz·…¼†< áO¥¾ ÉøSÿdÛÀßú‹éuõ%—ìýð·BÔ4zÏLñ5Õþâ_jë¿>%øŸJKë}nÀÙÝÜh>$ñ~­¡_O§Üõ 2Ký:å´ÍZÖÃYÓͶ«§X^[|·ðkþHÿŸû&ÞÿÔ_K®¹Õ§S YÒŒ£ˆÂ¥n’¡‰ŠWæ•×»»}mÐÖKG™¦Þªÿ¯¸?%ÜüÊÿ‚„ÿǯíÿfoû1ën­ÁBã×öÆÿ³7ý˜¿õ·VŠúÜ›ýÍŠú@U>9zžïûÈÙ©ÿÙ•Á8?õJøÂ¾Ýñ__Ùhøÿ«Ãáí|EûÈÙ©ÿÙ•Á8?õJøÂ¾Ýñ__Ùhøÿ«Ãáí|Õ_ùÐÿ_ÿ¦°ã­þãˆÿ°|Gþ‘3ôй;;}¾:ñ×Ù¶yÞð]¿Û>ÃåùÿfÖ<{'Ù¿´¿á´û_Ù>׿ý‡þMû;í¿hÿ„_ÂÚÚÞ7ë+ˆ°DF´K/G}G¯|Ld¹¹ÔmoäñmեёⲲÖô»?XMg?…¯õ-ORñ…¾•óÞâ/rðÚ~GjÚ^Ÿª;zäüioöÎ?³}¯o‹<qå}‡ûGgÙÓö_ÛlþÓþÀÕ¾Ýö?²yð›ø£û7û;ìž ÿ„CãMû_ðÇÇÿ­xº‰/í¯¾YZj×6–¯©ÞøZ„žŠÂòößI²±ÓÒ{߯Ä+¹Î›¥éúX¸šê+ 4…£¯½ëæÏŒ^1ý4mbÃRø£|9ñÇÄ?ÝY&‰£]Yü?Ö<}á¹gXuèo-îÛ™óFÒåQæ‡2œjۋᆢ¾µ©ïÇ«=Â^-ø}«ê¶:«·ÃßéŒxÊü;âWñ®¼9áý_CÐüC.‡>™s¥·‹tø­´ÛoxOÁZÎÎÁ]ø¢û\¹ø¥|Nñ®›ð÷á?~!kþ‹UøåÿüøãM#GÒ¼ðsâ7Ò +m#TÔ¥ð–™ñwÃZ¦µaáYu)>|joËã/ÿ ú÷Ãߨ/â'Ä/|`‡öY¸ñkÛWÆ7~ÐüC⟠ø-lµŸ è:;Þø?ᎧâÏ„~>ñÐ}sÃ>4¸ðv—±â;?…ö~'ñ®¦S³Ñ|-âÿ©þ;þÊ¿ ¿jýsáʼn-Ð$ð'†¼Eiàÿü.ƒà槉üñ3Åß¼{âcâ¿ü/ø‰®'†¼a§|Ðü;y¼Eá½/ZðωõMneºñχ¾xßáÏ™ÎøbyÆ? ‘ã#ŠÍ°K‡âçë˜l»ûK‹£C%¡C$©‰ËðøÙ®U•â²:øzœLþ±†Uêå.ž —VUùòÌ—<˲ú3¬LñqÅe«-¥,4«ÐË*Ñ…|Ò¯öŽ^®2v;0Ãf´ëf¯õüE*XÙV¯†–Žù)ñŽ­®ÄŸ´_íyðëCñÿÃxvÇàgÄ8t¯øgļCñ£Vø!©øÖïãv£¯ü>ñÒøÅ* xrããƒá¹µOøÃ:ý•¤þÐ< â‹Þ'YøAûAÞø[ãŠðoŠ<5¦þΟtmwÂZlj¬ü«xÎþêMq¥âÏ뎿 ¼âm'ÂÐÚø*êÓOÿ‚`x>Ëû3í?µíK«ýƒû í_Úöa‹ûoû#þoö‡öŸöWìǦy_ð”¿ñgöïö7öGÙÿáy|Rÿ„gþß삟ð§Í?þ àû/ìÏ´þÔ_µ.¯öì/µhÙ†/í¿ìøU¿ÚÚÙ_³™åÂQÿ ÿÅŸÛ¿ØßÙgÿ…åñKþŸøG²> Ÿ(cð´cJðr,¶Y|²Š%S†ÅT«‡SIÐsTkQ”}¬Û¥ŒÄÓSTe 1‰Sœ§&Ýá,Tñnœ›•GAP¥íd’ö¿WQ£:r’¿´¡óæÄεz¿ÏßÀ9"“ã_ÏÄ¡ûNŽ©âˆ‘·öô´ì_³øjž#Qðèø"'ì‚ú™ø}ÿ—›&Ÿ»â«ø‡þ¶×ݵÿøHÍxçü ã Çß5O‡.¾ð¿ìéãŸÚ;áLÞð]æ½}ã«ÿ‰Þ)øyñ3â†þ[ZZÙ®·ãÙ¯<+ñÛº–¤Å«j?gø£¡<º€º×[N¯éŸOÿ‚`x>Ëû3í?µíK«ýƒû í_Úöa‹ûoû#þoö‡öŸöWìǦy_ð”¿ñgöïö7öGÙÿáy|Rÿ„gþß삟ð§ñ-àœ¿ 4¯xsÂíƒûEj,ŸGƒÄV¾ÕµOÙJÛÄ^-ðÿ‚ï> iÞ,×$Ñ4ßÙ¯JÔ§ÑïõßXøËSðí¶›e£^~Ѿ;µÑgð¼ñüO„¹ÇE,$iT« N *yª0œ}µÓÅÑÇ,4å8KƒÄà¨fê«rk†­^MP«Z“¯fÜkªU0õ±4kÔ§*’V¥…ž™{’¡[‹Ædð¥VJTòì_Õ£NU©P®¿“Ÿ‰Þý£|?¬| Ñ¥øñ{àç‡Ï x¿KÖ¾þΟµïÇ]:?Ú3Åþ7ñ—Œ¾5Ýø»Aý‘¾0ü2Ò­îáÕõßÝÅ¢þÓ¿>!ü,Ö4õ»¶ÐlQâø—¦êþ©û;h1Ó~6ø>ßÂQ~ÔWˆtߎ¿µ=ïí eñEý¢<'û?\|ñ‹¾0ë›ÀZGÄ=+HýŸõŸê>3Ô¾êú»ðj OÆ×šψîüI®]ékRIýFéÿðLÙf}§ö¢ý©u°a}«û@~Ì1mÿd­þÐþÓþÊý˜ôÏ+þøWþ,þÝþÆþÈû?ü//Š_ðŒÿÂ;ý‘ðSþù§ÿÁ0<eý™öŸÚ‹ö¥ÕþÁý…ö¯íû0Åý·ý‘ÿ ·ûCûOû+öcÓ<¯øJ?á_ø³ûwûû#ìÿð¼¾)Â3ÿïöGÁOøSýó,%)%NœáJ5³Ôà¢å:^œeƵZ•gjT¢°•^øœìå*ÕkMjukÂÓpS•,9J1Œ)ß „ž¤ãJœ`£*®oM¹Iáó9UÆÅÔ”ãN?ÎC|ø½ñâíuÏi~ø+í'à/‹G…-þkðüOñ—‰>ü3ø!â/ êþøÃ¨|D>¶ðTÞ9𖙬Yè¿/u«ØôOøzÓÆúuÅõËiÞ+­x7Æžø?û5ŸŠº×íã®øcÄ¿)ðæ›â_ßêúþ·ãKûéSÀŸðH‚_ æÔîx˜x³]‰¬õIÆÏ‰£BºÐF‹ðGþï_§ÿÁ0<eý™öŸÚ‹ö¥ÕþÁý…ö¯íû0Åý·ý‘ÿ ·ûCûOû+öcÓ<¯øJ?á_ø³ûwûû#ìÿð¼¾)Â3ÿïöGÁOøSûË3ÃN¼ëû5IUÆÓÇK JŒc‡¢Ö¦8:u$£CëJyeHÆ”¨Nœ*N”׳£KB§±…%jXGƒ…T½ZŠ5cRXªÜšÊ¾=)SÍa:•cŠÃJ8eR.Œq??b/Xü<ðÅO ¶“ñ—Fñ&Ÿñ×ã׈-¾*êß5í"êÓZø¡ãMsÁÚÇÃoâ~«­øSUðÞ»àÝKDÖo¯þjw:EƳ}u'‹Ì~9:ÜIýAþÃzöGìQûi_ٟ؟ٟ²×ìý§ÿcaÂ/ý‘ö/„Þ¶þÌÿ„gþoÀßøG~Áå}—û þ§Áÿì+û?þoÃÿ³ÿÂ'¤|×§ÿÁ0<eý™öŸÚ‹ö¥ÕþÁý…ö¯íû0Åý·ý‘ÿ ·ûCûOû+öcÓ<¯øJ?á_ø³ûwûû#ìÿð¼¾)Â3ÿïöGÁOøSÿwüø_¡|øAð§à·…®no|3ð‡á·¾ørò÷Jð†…yw¡xÂú_…4‹›½á÷†<à-æ}?I·–}+Á ð„4é]í<5áF†ËJ´ó±˜šuéáaM5ì(Ó¤Ò‡$?wF•%ìáÏ?gO÷oÙÒæ—²‡->yòó=¡ *¸Š²²öøŒN#•6ù^#R»‹oY8ûNW9>j9ËY3Òh¢Šà5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<—ãωo<ðcâoŒtëk+ÍGÂ> ÖüQ§ÚjIs&sáû7Õì࿎ÎêÆîK)®lâŽé-om.‘a¹‚B²¯’jZ>³àØÚo‰õ{Ý6Ú(®õŸ ôÿí˜!„\]}‘~ÝÅh.¥g—ȤHCyq±HõÚŧ‡¾ üR×ïô{/Xè~×õ›ßêI šn½i¥ØK}s¢ê qowØê°Àö‹-­Ìmoq x%RQ¾c°ý­á´µM_ǺDºš[@š–ÍCö„–~±*Þf¸ý¦VöXÀ“Ë’íšåÓkNÆRäöa¥I'í§(ÂúB0sSz_E(ò[K½çÌ“øQNêÑMÿ3i[U¦Í»ú~dgâw‹³£%Š|U<:W¾ÛjšoˆÏÃýOI×tŸ|Zð7ÛÛ9SÃß ü­i×zzøÍ,·Ó¾*|*Òõ îïã<¯åx»â‡<§jö0ø§ã—Žü1.¥á¯x‡Fñ%ˆÖ¼)©GúJÜésèþ ƒH×4Î à×ü‘ÿ…?öM¼ ÿ¨¾—]íÑ–´¨&©ýc ®ÓO™QÅs.Vßu+ßU$¾ÎœÞ÷×(ó;¿«bšÖú:¸;kø|¯wsó+þ ÿ¿¶7ý™¿ìÅÿ­º´Qÿ ÿ_ÛþÌßöbÿÖÝZ+ëòo÷5þ(ê=Tøåê{¿ìaÿ#f§ÿfUÿàÿÕ+ã ûwÅ}| ÿe£àþ¯‡µñìaÿ#f§ÿfUÿàÿÕ+ã ûoÆI¨?D¾Òô‹ÝzçAøƒð¯Å’èúlúU¾£§x?âo„|U¬Ca.¹©húOÛ²t{×µŽÿT±‚yÒ8 Ìm"šùªÍ,Òƒ“ŒRž¹JJ1ŠTp÷r”šŒb–®M¤–­¤:ɼ t”¤ÞºQŒ\¥&á;(Æ)ÊRoE¦ÛÑ&ÙúI\ÆïxŽ×í;üŸ ø.ãìnó<´ë=í?Ù¿ð”]ý“ídò¾Ýÿ^ý£ö/³ÿÂQâÿìÏìŸx/ü5ÿ¢ñ£ÿ¾ÿó묘iã×uU¾ |h{KÝ'EÓà°ûgÂ3ök2ó_¹º¼Ù7í>ˆ¿n‹V³‡vŸ iš£ÿgãXÖ5ËDÐì¼=â<!¸ÿ»é+¿öÌÜ­Ïþí~=´XªZû¸Wýâû¯úqýkÙŸ^VNµ§ÜjvpÛZÞ}†XõmPi·j‰¾ßI×tíVòÏ:>±¡ÝŸí K)ì6Í{>–ÿiÙ®hþ!ÑPÐ5?›ÿá¨Gý¿øð?ÿŸ]ðÔ#þˆ_Æü øÿÏ®›ÀWi§õ{5gþÙ„ÙÿÜ?ϳЧü¸Ÿü#ÅùÓë^Ì÷«{?/Ù¾Õâ? ͳì?lû?‚õ‹o?Ëÿ„_ûKìÞgnþÉö¿²xÓì>oÛ³¿·ü/öí?øD5oøMÿ8?hoŒþ ø}ãírx×À_ïtÛ­+Ãþ>Ö|7áoiž1ñ‹gøcáÏi~:Ô‡´&¡á‹m=-|¡xjÚûSÖ¬-íÅ÷Kž—õ/ü5ÿ¢ñ£ÿ¾ÿó믇?j߃_³ÿí{¦ê¿>~ÓÖì–ÎÝgÀ ýô‹¿Zi×\i¶¾!·×~$ø—K¿}5£x´ýR=:Û\³·˜ÛÛê±Åod¶»ÐÀb1t©æµ2\El%Ha3<42Üß길Εz•âó< ,n¬é*ºQÆa«FYÕ¡UV¥¿;XŒu,-(Õ¤³ Ìhbif˜9VËeNµ,JÂb°xiU¡Ž êÓÅá¢èU­‡T1jΤ>0?<ûH|×~4xŸÃöéâ Çñ;áÝäéceo§x¯Lð,>ø¥¡Ûêº|Ö÷–×¾—ÄZ‡‚üi7„c™ôÍ/Ç>ÖôË[±àøßÀúçë÷üSIø¯~È_4_Š_|û>øRÔ>CâoŠ?ü=}⿃ÚnÅ?Þ?†>9ørÏÅÿ!Öþ|Hkeøkñ«HÖ~ øÃz¯Ãø§Lñ‹ô î÷QƒÅ|á/ÙoÀ_<ðÃOý†¼A¯ø_Àö÷颸köoñưou›„½ñ³}¬øŸâÎ¥w¬ø†þ4½ÖoZT7RÇoG •­·ÓßðÔ#þˆ_Æü øÿÏ®¶Îr¬ƒˆÅf&E–åžo˜VÆg˜¸<²|ÊjІSOˆÃbá‰ÄÔÀ`iJ…)â+MQ©Rs^ÝÏ:ýy|Ç'ÃeøLVišfTrŠ:yl±1S©B­FXšê2Áý^3ÅbÒÄÕTðð¦ß¸©Ó¥ téþøoÅ-¼+ûx¿á?Œþ ~Å?³ÏÃø(÷ÄCñsöÖþjß±WÇS]ý<[k¤|Bø_©üPø%↟ l>+øÎY>ë¿<'q-†ñË[ø‰à-â¯Äï‹w>ø¥?\þØßj_†·×ÃØ¿iY>!|-ø“ûþÓ?<áOüXý˜ÿhÚönÖ~xƒÁ"?ƒ_|ð?ö ø=á_‚ÿn<ñ"o |Eø)ãˆ_µ÷ÄMçIH´_‰±¤Oâ¯F¿ðÔ#þˆ_Æü øÿÏ®øjÿD/ãGþ|ÿç×\òÃb¥^5eõzŽ__5qÔ9=½^£”SÆ?eŠ¢¨ºú4³jLpxL§ UK-§í±»©bpÔ–4èâiª8¬²´§ 63Ûʆ_Ä8Ìæ¦jaêéÂbã–â«â£‹ÄbeN®+'x¥üC7Âvñ¿‰t„ZGƒ¼ ¯hš„u=&o¿ÿorûáº~Ï|¨_x—Ä3Ðþ&~ÆÚ/Œl.¢>ûö±ðV‘sð¯Å÷Søem´Æ]Sã¯Â„z5¶¯¡xgQKo\^i–:N6­sÕŸðÔ#þˆ_Æü øÿÏ®øjÿD/ãGþ|ÿç×S< êS¡F­-XS£—àëÊxÌ'µÅ`èåË)ÌéÎJº§‡«™eÕ1X;á(áðPÃÖK0ËóZÏ[8|[ªr¡4Xøvƒ±_ƒÿgψº§Ä-oàŸÅÏxÍ7Ž<à¿x7¾#ð­ïŒh¿µ/ˆµOüñÇÿø+çìµðÂé~þÚþø]ûS~ο´§ì]ûHj>9šÇűˆô/ƒ¾$ø‡ãØËàOìñâ߉ÑxŠïÄs_ü>ø[û&øsÆ×ÿ-< i§kÃÅx“ÄúïôIÿ B?è…ühÿÀ¯ÿüúèÿ†¡ôBþ4àWÀÿþ}u4ð¸ô¢ëb!ˆ«”c‰©ŽÃ¼Mfu„Ç,߇­hÞøaðãàç€>êß<[¯é_ <'c¦¯†4={Søjÿ©_ðÔ#þˆ_Æü øÿÏ®øjÿD/ãGþ|ÿç×[cpõñ+6XzX<søÁû.xއ_³Þ“à='þ„ þ3x_RðF™àÏÚáG>!øvüQÔ-ì4ý(øßìùÿý´¼Oà_‹ž8øûc~ÉÒ^?ïêßþøWãÇÂÏŠ´GüÿQ×þ4ü7ðWůˆwŸ²¬_°oìÛã ýœü ⿊:ŸŽ|9ûZüNý­o|âü?ÅÞ'ñO‡tˆZ—?f¾%x£á‡Åÿü/ñgÄ?Ùßö‰×ï~x˜øÏÁ:"|Kðž‹àâÈeÓîôøÏá†ûJé_ þ'ê¾Õ4;_ðçÄï x¾_‡~(³‡Å^oxŒPûü5ÿ¢ñ£ÿ¾ÿóëªú½V±öXGíñØœBÃTÅa=…:Sɲ|²šö¸LFªöõ°8ŒF*ha+ÑS£S˜PÌ'0¨ã‹¥¨b¡•¹ÖX<[©à³ Ó‰¥ xºäÖ&Ž+ ZuêU–¦.¦+ _(žKƒË2ê™> ñoýgöÕýü}áÏø*W‹?h‡Þ/ø-ûYx Á‡‰?`ÝsÀÿ´—Ä+‹?õkŸmãoƒÿ³_„ü¬x¥ô¨u±àïƒ×ž ø>•ðíöw†=âeÞ¿û¹_,ÿÃPú!?ð+àÿ>º?á¨Gý¿øð?ÿŸ]e%xá0¸D¨rá'Ž”&ñ˜')G˜b3:‘—ïS\˜¬n!AEÆš¤éÞ—Ö~µŠÅCÄSuê×kÍZž3Õ1¼ªXj1ÃBQN“QRÃÓ §tê:°©/iì>¯†Â}ME|³ÿ B?è…ühÿÀ¯ÿüúèÿ†¡ôBþ4àWÀÿþ}uQÄÔ?þa?ùŸçÙ•õª_ˉÿÂ<_ÿ(óüû3êj+åŸøjÿD/ãGþ|ÿç×Gü5ÿ¢ñ£ÿ¾ÿóë£ê8ú‡ÿÂÌ'ÿ/óüû0úÕ/åÄÿá/ÿ”yþ}™õ5òÏü5ÿ¢ñ£ÿ¾ÿóë£þ„Ñ øÑÿ_ÿùõÑõGýCÿáfÿ—ùþ}˜}j—òâðÿÊ<ÿ>ÌúšŠùgþ„Ñ øÑÿ_ÿùõÑÿ B?è…ühÿÀ¯ÿüúèúŽ#þ¡ÿð³ ÿËüÿ>Ì>µKùq?øG‹ÿåŸf}ME|³ÿ B?è…ühÿÀ¯ÿüúèÿ†¡ôBþ4àWÀÿþ}t}GÿPÿøY„ÿåþŸfZ¥ü¸Ÿü#Åÿò?ϳ>¦¢¾Yÿ†¡ôBþ4àWÀÿþ}tÃPú!?ð+àÿ>º>£ˆÿ¨ü,Âòÿ?ϳ­Rþ\OþâÿùGŸçÙŸSQ_,ÿÃPú!?ð+àÿ>º?á¨Gý¿øð?ÿŸ]QÄÔ?þa?ùŸçÙ‡Ö©.'ÿñü£ÏóìÏ©¨¯–á¨Gý¿øð?ÿŸ]ðÔ#þˆ_Æü øÿÏ®¨â?êÿ 0Ÿü¿ÏóìÃëT¿—ÿ„x¿þQçùögÔÔWË?ðÔ#þˆ_Æü øÿÏ®øjÿD/ãGþ|ÿç×GÔqõÿ…˜Oþ_çùöaõª_ˉÿÂ<_ÿ(óüû3êj+åŸøjÿD/ãGþ|ÿç×Gü5ÿ¢ñ£ÿ¾ÿóë£ê8ú‡ÿÂÌ'ÿ/óüû0úÕ/åÄÿá/ÿ”yþ}™õ5òÏü5ÿ¢ñ£ÿ¾ÿóë£þ„Ñ øÑÿ_ÿùõÑõGýCÿáfÿ—ùþ}˜}j—òâðÿÊ<ÿ>Ìê¿jù6¿ŽßöJ|qÿ¨ýõ~~Ûßà¡ÿhÿüjý—õ¿h/x¸OðZý˜¼\Ú}–“ðßÅpëšî—ðçâ߯t¿øG®[ÃÑx«_†‹ãXÖ«/‡%»:ÿ‰¡ð>“á_~Ï¿­Ÿ~6X|Hð‹¼ª|øça¦xËÃú§†õË ¯?n¶±Õíd²»–ÈÜ|gšÝ.ÖÞi ´“Ã<1ͲI`¢•oáø…«_^꺦…â›­OR»¸Ô5˜þ|7¶K‹ëÉžæît·öß1À’ÜI$‹ d¤A‚/Ê¢»pxK)ªó£NúÂQÅa\”¯UªÉZÉ©)+4öÒê'Š»Ë C×T𘴚Óþœ¦ž·Mj¬ý#öPÑþ:x/àç‡üûBülÖ¾;üMºø¯ðoÆþ-ñv¥o¦ZéZf»â¯ÚÓàγáEc¢è·Ÿð‚øjóT½³ðÊë0››k7k-Mðo‚í¼-ðóÁþóðkþHÿŸû&ÞÿÔ_K®3ÃÑx£MÖt‹­WÂÿ®´KOxO]Õ´Ý á÷Â}UÕG‚¼_ xûEÓíõ_ö¾ñU¦™ž)ð®.§0Ðon.´˜oôÛY,'¾R³ô_†zF£áï†ÿô ^ßìš¶‡à i¥§ÇÙu7A°²½·óíežÚ"æ bó­æš 6ï†Y#esÓˆ*t*Bœé5*øwµ:’j+FNJ”´n7”·rJ÷ºQJr«Š§>J©GˆR”èU¥çS (Å:‚m¨ÊÉ^ܯ±ùqÿ ÿ_ÛþÌßöbÿÖÝZ(ÿ‚„ÿǯíÿfoû1ën­õ7ûšÿ?õU>9zžïûÈÙ©ÿÙ•Á8?õJøÂ¿Aëóãö0ÿ‘³Sÿ³*ÿ‚pê•ñ…~ƒ×ÉfïRÿ¯XoýE¢tÒþ~úS (¢¸Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Èø(OüzþØßöfÿ³þ¶êÑGü'þ=loû3Ù‹ÿ[uh¯ºÉ¿Ü×ø¡ÿ¨ô*Ÿ½OwýŒ?älÔÿìÊ¿àœú¥|a_ õùñûÈÙ©ÿÙ•Á8?õJøÂ¿Aëä³÷©׬7þ¢Ñ:i??ý)…Q\FEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPäü'þ=loû3Ù‹ÿ[uh£þ ÿ¿¶7ý™¿ìÅÿ­º´WÝdßîküPÿÔzOŽ^§»þÆò6jöe_ðNýR¾0¯ÐzüøýŒ?älÔÿìÊ¿àœú¥|a_ õòY‡ûÔ¿ëÖÿQh4¿‡Ÿþ”Š(®#@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(òþ ÿ¿¶7ý™¿ìÅÿ­º´Qÿ ÿ_ÛþÌßöbÿÖÝZ+î²o÷5þ(ê=ЧÇ/SÙdI´ÿ_mÐüc¬ùß±Wü“?ð‰øÆž5û7—ðWÅ¿òÿ„C@×?³<íÿè¿Ú?eûo•söO?ì—>OÞ¿ð’IÿBGÆ/ü1_?ù‚¯‡?cù5?û2¯ø'þ©_Wè=|Žc­KUü,7Oú…£ætÒþ~úS9¿øI$ÿ¡#ãþ¯üÁQÿ $Ÿô$|bÿÃñ£ÿ˜*é(®-{¯¹ÿ™¡ÍÿÂI'ý ¿ðÅ|hÿæ øI$ÿ¡#ãþ¯üÁWIE÷_sÿ09¿øI$ÿ¡#ãþ¯üÁQÿ $Ÿô$|bÿÃñ£ÿ˜*é(£^ëîæ7ÿ $Ÿô$|bÿÃñ£ÿ˜*?á$“þ„Œ_øb¾4ó]%kÝ}ÏüÀæÿá$“þ„Œ_øb¾4óGü$’Бñ‹ÿ WÆþ`«¤¢{¯¹ÿ˜ßü$’Бñ‹ÿ WÆþ`¨ÿ„’Oú>1áŠøÑÿÌt”Q¯u÷?ó›ÿ„’Oú>1áŠøÑÿÌð’IÿBGÆ/ü1_?ù‚®’Š5î¾çþ`sð’IÿBGÆ/ü1_?ù‚£þI?èHøÅÿ†+ãGÿ0UÒQF½×ÜÿÌoþI?èHøÅÿ†+ãGÿ0TÂI'ý ¿ðÅ|hÿæ ºJ(׺ûŸùÍÿÂI'ý ¿ðÅ|hÿæ øI$ÿ¡#ãþ¯üÁWIE÷_sÿ09¿øI$ÿ¡#ãþ¯üÁQÿ $Ÿô$|bÿÃñ£ÿ˜*é(£^ëîæ7ÿ $Ÿô$|bÿÃñ£ÿ˜*?á$“þ„Œ_øb¾4ó]%kÝ}ÏüÀæÿá$“þ„Œ_øb¾4óGü$’Бñ‹ÿ WÆþ`«¤¢{¯¹ÿ˜ßü$’Бñ‹ÿ WÆþ`¨ÿ„’Oú>1áŠøÑÿÌt”Q¯u÷?ó›ÿ„’Oú>1áŠøÑÿÌð’IÿBGÆ/ü1_?ù‚®’Š5î¾çþ`sð’IÿBGÆ/ü1_?ù‚£þI?èHøÅÿ†+ãGÿ0UÒQF½×ÜÿÌoþI?èHøÅÿ†+ãGÿ0TÂI'ý ¿ðÅ|hÿæ ºJ(׺ûŸùÍÿÂI'ý ¿ðÅ|hÿæ øI$ÿ¡#ãþ¯üÁWIE÷_sÿ09¿øI$ÿ¡#ãþ¯üÁQÿ $Ÿô$|bÿÃñ£ÿ˜*é(£^ëîæ7ÿ $Ÿô$|bÿÃñ£ÿ˜*?á$“þ„Œ_øb¾4ó]%kÝ}ÏüÀæÿá$“þ„Œ_øb¾4óGü$’Бñ‹ÿ WÆþ`«¤¢{¯¹ÿ˜ßü$’Бñ‹ÿ WÆþ`¨ÿ„’Oú>1áŠøÑÿÌt”Q¯u÷?ó›ÿ„’Oú>1áŠøÑÿÌð’IÿBGÆ/ü1_?ù‚®’Š5î¾çþ`~:~ßW­§þÙ6•â] ¯ìwû1ÅöoøOÄþÔ/íµyðéž,Ò4]F{6ßåÇ ¬–RÏżw=­Ìqwþ ÿ¿¶7ý™¿ìÅÿ­º´WÝäßîküPÿÔzOŽ^§»þÆò6jöe_ðNýR¾0¯ÐzüøýŒ?älÔÿìÊ¿àœú¥|a_ õòY‡ûÔ¿ëÖÿQh4¿‡Ÿþ”Ï9ñŸŽï4M[Dð_ƒü77޾%øª B÷@ðŒŒ:-®¤›tÖ|aã?Ü[Þ[x?Àú$·–6ú–»5Ž¥}qa£xwCñ½}g¤ÏòZþÕzø¼6ÿµïìµmâxÖiá´ø%ñ¦ûÁK¨ù¾Jé û@·Äí;ÃÒY–Ìã!ðÎ-EÈÓËüµõÂý/Cñ‹ÿk›é²jo­ë^ø-y½íö“¨?ÂQðKÁþ+·²´ÕtË«-[MŠÿÅ¿¾(Ôt›Û+¸îàóm®b¼Ó¡šÍŸÚ—ÃÚ<óx[þ qû(ü)ðæ›{â-?âwþ xºíµ ïh°x‡ût]Yê÷+>¹u¬LÖpC¨j’\]Ü'‡u<1ei%¾¥qs¤õà)ajVxj‘šš§J½Zïêê•4©FµzõeˆT£B3„aJ•8V«7&± ž4áæc+bak G—ÚT¥N’uyêVOgJ”'åVQœ¥Rs”)Å%ì¥9~œx?Çz†©®jþñdžÿáø™áû=_PðÈÕãñ‰®økQ‘áÓ|oð÷Å‘XéQøËÁW×QͧEô\ÑõHLñG†ü?{5Œ7ž‘^ãϧ€¬ÿc Úò[Ïx3Å«ðv jð!ÔñŠõ{ÍCY±>ðõÿ€uûXô´ÙuMJ}z?˦ÀºÖˆ‰5Œ/&žãU·´†ÞK«mJõê×KÚ>~IÔtÔ#)¨SÄÔÂÎIB2SŒkR’r¦çG¼ÞÎQ“›ù$¹ãMI¾Tç*Ä(êÕ¤éM>Y(Ë›šæ‘ÿw?çÃÂ?øTk?üÅÑÿw?çÃÂ?øTk?üÅÕ¿…?çñŒz†™q§©êzN»ã[]sUŠßGIðëéþ2Ötý ÂúÅÜi/ˆWC‚Òg³Òíµ9-¬#µÔuË»Q¬è÷·³ÕG^QŒÕOvqR‹å¦îžÍ4šiŒ£iAÊŒ™{JqjÒ„œ$ši¦­ÑÙê¬ììÕÚ’Œ“Œ|7þïχ„ð¨Öù‹¯œþ2ü\×þÿÂáÁQx·â¯Ä‰¶_ < àÇ׆‘£ê~-ºðƯãÛ«GÄÇL¾¾²ðî‘ðûþ#ñŽ¡u¥x_Ä$º´Ñ¤Ò<;á-{ÄÚv—s÷õ~aþÓSý›ö´ýƒ¤Î7Á@4ˆ?ð+ö#øïkÇÎÇã^çÅcó|6jŽ"¬é'콯Õðõq¤êSQ©T•%NnŒÔ%.IB|²^no‰«…˫֡%N²–”*rÆnŸÖ1T0Ò¨¡5(JPYN q”Ôyã(^.Çö¯üKþoömÿÄ•ý£?úhþÕÿ‚‰Ñ­þÍ¿ø’¿´gÿ@-~©Âwaÿ?0ÿß?ý•ðØÏÌ?÷Ïÿe_EõÌ»þ‰»§üÍóß/ú˜ÿWõ¿›ýŸšÿÑQ˜ôÿ™~Cýßú—y?½üÿ+µà¢_ôk³oþ$¯íÿÐ Gö¯üKþoömÿÄ•ý£?úk™ð—üëâÒ|QañÃß ô_ÍûXi~ø[¨iÚg‰ ðÇfémÈ¿e/êÒÙÞø¾òþ‹? íR;ŸÝCª ›Ï|9ñM·‡aÓuÝCÂ:dÿ ໲GÆóñU>èþ;øuðÇáíçÆ+MáÏ‹f/‰þ4øƒðDñ>áÿ|BðÿÃ_†_´Œ~&xø2ÃÅŠõ†Ÿ¼ðgㆩ¤]\è~ø[âˆZFµà:(f^&ŒkQáL¶prÅBVÎ3Çìå€Ááq¸õRk2tâ°0­^ž*~Ñ•l·8\Ò§•ãjSÕå9Ú©:kˆóYJž+ƒ÷r̹×Åã+à°P…7–*¯ëµ0Þ× ziωÂUj?Y¤¥¶Ú§ü\“·ö^ýšBö ûH~ÑÌGäØ-Açý‘Ç=i?µ?à£?ôkÿ³Gþ$íÿÐ]g‹¿à§W:¯ˆ¿fkïÙßàŸŽ¾<|"øåû@ø«á:üLðÿÀõðÿŽ<áïƒ~3ñÄŸ>jÞ1ý¡¾®©àËoø~â×þ}WI¸Å>ðÄÏè>!‡\øU®xÓìOŒ_´n±ð–×Bñ%—ÂüVðAžþ/^|+‹Oñ'¼§A7°xº…“Üéþ$ø—á{[+me5ÍáL¾2øÍ&«ÿÆ•àƒß¤×uYü,åËa*œ%—Ò‹œ å[7Ïè*~Ò–²gW1‚¡F4ñÝ\Eg « Õ!<=xÓÎ~mRq§KŠ3 Ò–â`¨à8~·´„jâhºt½ž]/mˆ•LxSÂÒö˜ŠÒtcFIסŸÿjÁFè×ÿfüHÿÚ;ÿ 2íOø(ÏýÿìÑÿ‰ûGôWéïÚá¿Å¯éž;øuâí#Å^Õ¤Ô­mõ=?ÍGµÕ4MNóBñ‡µ­6ñ-µ_ø«Â¾!ÓuO ø¿ÂZýŽ™â_ø£IÕü3â]+J×t­CO¶í¿á;°ÿŸ˜ïŸþÊ®xœ 9J8? ÂN3„ólþ2Œ“IÆQ–bœdž5tÚOÎaƒÌç8qV>q{J8”]šNÎ9sOU$ìôw]ÿ%õ‹ßµ'à ÿê?´'ìÿðÃÁß<_ñÀ¿ dñwÃoŒŸ¼q©è*ø¯[x7À“jžø‘û9| ³¹Ñ5¯ê¾ð¥Ä¾ñ.»â-:çÄ6š°ðÅî…§kº–—õÅåɵ„:B÷3Kqgeko ךäPnMws m!F¬\«mÚ|×þ ?â[}Wà‡ÁÈà–93ûyÿÁ>à`£ëk?†7*'9û ¢šô‹¿õúýÞ ÿÔ¿C®Lê–8 a…ÀSËg‰Ž>L5,F+Fø9QtëFxÊÕë)ÔUšœUOghC– \òŸVSS±xü+S0XhàªÓÄV£…¡Wýª5ùé¸àèТáA8?gí/9óNQäQèWÁþ=eRtÿ ! ­â_r’2U¶x5×rô;Y—#åb0JÿÂãÏùððþÏÿ1uîTWÆ}j¿üüÿÉaÿÈžçÉ~?çý]ù[ÃáñçüøxGÿ gÿ˜º?áñçüøxGÿ gÿ˜ºÕø·ã]{ÁÑx>=k[Y¼Gâi´k»Éü âï‰ZÚÁáÍwZgá?êšV½}<—T<ÐÏ$6vÒÏuqŽ"éËéß®lo,t]VÃÄ1×µH´¨´Ûü4Ôþ^\ßj_ðž^)—Hø•ãtÔ4»ìÿO:ÑÓm¢–8õ$Ô®ì5ˆ£Ò3úý[Í{GxNì¡ 9NqŒãB”Ü¥ÍÆ.*S“Q‚•ÕÛVQm+8sݾT ¥(¹9IÆ6Nri¾X¦Ý’ÓOþïχ„ð¨Öù‹£þïχ„ð¨Öù‹¬ÃûAèÏí'ÄϨÝxBÒ¼.ö^Òu¥ñN©ªøãJ»Ñ®uíkÇ^–ò+¿êV±[µõ…´×6ñE¢êÞ&¹Öl­-O|b¾msÄ6ú÷…¼k/Ž|7áë JãKðí§ƒßÅðlÚ_‡üAöÕ¾·q~úþµ<7“éZoˆíôéïcŽ÷R‚Ê8š"ú³©ìãVòmÅ>H8J~Û F4ã5JsÅÐqiòZqRœg:qš—¹)+%6šjJ•j9Ê:I(ªT“JIÂ¥¢ã Êð‡xóþ|<#ÿ…F³ÿÌ]ð‡xóþ|<#ÿ…F³ÿÌ]{•§Ö«ÿÏÏü–üˆ|—ãþÕß•¾|Õ´OhZu汩iºšv›—šÓ5ýFîö+u2]\Ckuá:ͼ*ó¼°¸ f*š‹©‡ÂâkÁJî.thʤT’i´åRi´Ýš=/LðïüG]Ó¬µ›ÙçöPÐ,µKh¯­4o~×ô?i¶÷$†ÓÅ7…ÿc?xJÖ¢FQ}§é^0ñ ­¤Û ]NwG"÷ü ÿðQÏú"±þ&oÇ_þ€zý¾ñ¥•­íå«ÜD¯muq)^CC3ÆÀüÝAR Uÿ„îÃþ~aÿ¾û*ôÕG$šÉ2Ë;4ž#9½šÿ™·§ßæqý_·ÎsÕ®ýŽLµÒúeé¶Þ½Ñùñÿ?üsþˆ‡ìEÿ‰›ñ×ÿ øAÿࣟôD?b/üLߎ¿ýõé´GíñzÛâOÂÙçöq¿øWáωÿ<9ñâ.¯ñ;ã/ƒ|oñÀ? ~ü)½ð&•­]¯Ã_øËá^¡ñÅÞ,ñ7Äo x_AðôÿþZèÚe߈üy6«âCá¼ ⯠øåÿ;Ñ?a à΃ûj]ø3Äž0ø‡yâKM[â‡Áï~Ïÿ~›Ŷzdöð;ö‘ý®tïÚÄpxg^ðþ±âüÓi_i·¿nÓt»½rþûö©N£¨ðéd™d^7õL6#9åÆTZØz’£UfΔiÑÅá«àêʽJ-biU§5N¤¢êá±4c)Ë7Ì:XYbñ,•ýZ”SšöÐþÌU\¥BÄþêHCáR´éýcªõmàoø(ùÆÏ‚?°úõÎïÛ+ã»çÓý‚Óó×>ØåŸðƒÁH¿è‰þÿø˜ÿ?úªOø+Áصˇño¯þ¦½ñûÂ6´7Œ<1ðìü*Ö¼cû6Iño‰^Òt_ üSñ7Æéd:Âø“ÂÞ#ºø=gàiÚTZf“♼Y¨XønãÎ~3Ágþ~Î^ðn±ûB|øÑð'ů|G/Ã>+Á?þø£Æð†Ÿá›¿øÿNñ?Ž?mý àöŸ§iw¾2ðÖŠ<â/Š'ÆýWP¿¼ºÐþꚇÐÿ„îÃþ~aÿ¾û*ë« Ô}Š­‘eÔªVÁàqŽ”ñÔjÑŽ?‡ÆÓ¡^6÷1a‰…,D”a^3„'R*3—<)Õ¨¥(gYŒ¡µ©)ª97,ýYQu!|­?g789(ÉÁ§(ÆO•~sê~ÿ‚‹hZeþ³}û=~É> ¶Ò­.5 ÀßµÏÅÍWƤ±4ÒXxgHñ'ì_á S×.=6ÇUñ_‡ì®îš(&Õ,Ãùþømã½ â—ÿ|Nð´ÒÜø_â?‚ü/ãß ÜÏÙ§¹ðïŒ4;èw3[ù³ yn4½FÖi L"whIJÞßrXøÒÊêöÎÕ."g¹º·T/%¦™#P>n¤°¿)¿a?ù1ߨ»þÍ#ökÿÕ/àšŠ´¡S[ðT0uhb°”b°Õq•!Vž.Ž6¤UŒÅbÚ•9`áì)SV«SÚ*žã…Pz8ú8iã+âéb0xºïëðQ•*˜ZØqöo†Ã'‘ÅÏÚ*ŠzÓƒ¦à¹ùþ*ÿ‚„ÿǯíÿfoû1ën­ÁBã×öÆÿ³7ý˜¿õ·VŠú|›ýÍŠú@é©ñËÔ÷ØÃþFÍOþÌ«þ ÁÿªWÆú_Ÿ±‡üšŸý™WüƒÿT¯Œ+ô¾K0ÿz—ýzÃê-¦—ðãóÿÒ™ä#³ñ§€¼v>/|;ÑÆk¨èZ…¾'|3S²Ñõh:%xsľ ¿ÕfµÐaø…á9unÊ×O×ï´mÅúµ.“ªø“D›EÐ/mü|Hðüß´¼_GÅßÚ!<7áüß²£~Î_&·‹Å©æß6²šÄ ç‚ôwMâ+9“I¡h%ø….„%±ëª+(VŠR禥)Q•5ȧ*R²ä›©N´}Ô”aRœiÖ„RŠ«È£•L;”“…NDªF¯#RqU¿4y*Sk™»Ê3s§){Ο3“~I¤ÚøÇâ/->*xû@—Àúw†ô½[AøaðÆïPÒ5­[CZžßþxçSÑ'Ôt!ãYØØèšF…á½[ZÒ|á„ÕaOkš5ËmÖ袱œ¹š´cÅ(ÂMFM»FîRz·&å)JRnR““mí(&®äÛæ”åniɤ®ì’Ù$’IF)E$’AET–z'ÂéᓾBJ5®¿â么02@Óx³[¹„J™Ü†[y¢ž=ÀoŠDuÊkÑ+æ;½E¿˜Ü_hú]åÃS=ÞŸiq1UU2Í ¹ 8P[p0*·ü"þÿ¡wBÿÁFŸÿÈõçK'&Ôã«ogÕO?»þ¯ôôú~æÚÞòÞ{K¸!º´º†[k›k˜’{{›yÑ¢š á•Z9¡š6håŠEd‘‘Ô© ó:ƒ4 Á¨éú#êZ-ôhhúk­D!%†Eðå¥çÚA°’·‚=Mš Ø%”/¥hÖ\j2ßx7ü"þÿ¡wBÿÁFŸÿÈôÂ/áŸút/üiÿüQ,»™MJPj¤9û¯ß¦ïxI­\nÛåz_[_Q¦×-›\²S÷d­ïG]–mY´¹^£?Ãÿük:èú7DÒ´ýÚô?t½{]ð=ž‰}¤ëºoü#Ú~ξ ðî·5Îµá ®¡7Œ'ÕÝlôå’37úU–£éÖÿ-¬î$Õì|ãû/ÜjºŽ©wãßÁSkW‹«éz—©iw¾ ºð©Ò®WÃZ-â[ÅḦ²½²FÓ®--ÞKgàáðÏý ºþ 4ÿþG£þ ÿл¡à£Oÿäz•–´Ûö­ÉóÞW”eûÉÆ¥Wxr¾zÓ„e^~T«JqI%u¦ÖN-'Ò凳‚IéjqrT£nZnRtÔäÏ]ð¿Ã¢jÚF«®­ÔË® me—Jû?‰ßYÖïüAÆ»Eº=Ö‡ªj)¢\é¿Ù“Áey-ä—ö¢8ãôŠùkþ ÿл¡à£Oÿäz?áðÏý ºþ 4ÿþG«X $¢§ÅsZ1¢¹¥)ÊÉY$å);$’¾‰!Y]»»·vÞ­»%vÛ»vV»w²KÓêZüý¶|]áï|rý~%x›X²Ñ< àOÛ÷Âç‹üS{.Í#AÑ£ý–>-xf[»Û”.½©Xè°D²ÜßkwÖZEœ7…Üò}›ÿ¿†è]пðQ§ÿò=&±áO x‹Ã÷þñ…|1âO ê–­cªxWÄ^Ñõï êV/*NÖz‡‡õ{+Í"öÕ¦&k{›9b2¢ÈSz‚=œ†¤2ŒÛ ¯ bhQ”Õj¦¨Õ©Fµ9Qª©Õœ*Â:“tå*u"¦£Íœ®xü# J¤iU¨©J•Js§´+RÄSöŒ£)S•JJ3Q”eÈÛ‹½‘òïü6Áú(š/þÝÿò=ðØ_è¢h¿øwÿÈõÑÿÃþÄôe±çþ"×Àþ`(ÿ†!ýˆÿèÊÿcÏüE¯€ÿüïëôŸí¯ èIÆßø~Èÿúòüû³Âöaüü3ÿ‚ó_/ú{ëøyŸŒß5ÍÄ6^ð&‘ðïö`ñ‚~~Ô^$ý£þxÏ[ÿ‚|cð/u]OPø×â/ŒØø×Ã~ÿ‚px³ÃVÞñ5î¸mi·§íÿ5 [øÂ_ ®5ßñCð³ÀVú¦Ÿ"øSÀ´ïÙçOøèa_ÙÜü5µñ/~+xÏÇzG„µ[­WCñf—ñÃÃÞ<Ñ>þÿ†!ýˆÿèÊÿcÏüE¯€ÿüïèÿ†!ýˆÿèÊÿcÏüE¯€ÿüïëy§†TÕh¬“œ1e^½)g¹£^¬°¸|=zK‡U Ó¼=û&x_Ã^ðÃoÚÇ? ¼?ð“ãeïÆ‚ÚWµ?.“ðr=kÂúç„|MðÀzŠ>øŸÃéð_^Ò|_㔇Áþ%Ò|Ià‘ã »/†> ð6ᯇÚgƒ}×â×Å_Ùsã…¦ üIø“u­xOšúãZøkgã AðÄ&¼‚+5Ó~)éé×_üškêúf£ð»ÅºŽ©ðŸÅöZõðñï¼Yq§xfã@ú~Ä¿±*ŒØ«ö9Àõý•¾±õä·ÃÒOâ}ºRÿÃ~Ä¿ôe_±Çþ"¯À/þw•¬³Ÿ *$ªdœmU)RŸïsü’¯¿F äÝN“rŒ0ÔgvÛx…<\¯Š«V´â¸Æœ”éÔášrTªP^Ξk5kbkÔ¥ƪŒa*¸Ü[qŠK–³¦’¦£ðÚ7íSû<øsGÒ¼=áïøOAÐ46ÇFÐô=—£èÚ>—kŽ™¥iZe”Zv›§YAœÚÚZý¼QÅ Òÿ†Âø#ÿEEÿÀ»¿þG®Ÿþ›ö%ÿ£*ýŽ?ñ~ó¼£þ›ö%ÿ£*ýŽ?ñ~󼪖yá¼å)Ï&ãyÎRr”¥Ÿär”¥'yJR|>Ü¥'«m¶ÛmÝ·x†‹¡Â…áF1„!K4Œc¤”cU(Æ)5’I$’±óíûB|0ø­àß‚_<ã=+^ñž«ûxþÁºæ—áËIî%Ôu=Â?´&¯x¦îÆ9a.?°t‹wÖµx]®¢ÑìõWÈk +Q¸µý%Ô%ޤÜLë6þ(ð}Äò¹ÚÁŠôi¦šF<,qD$Žp¨ŠÌÄMywÿÙ×ösøAâ%ñ‡ÂOÙÏözøWâèínì¡ñ_Ã_ |âh-/ ’ÚöÚÛ_ð¯„tZÚ «yd‚xà¼e‰Þ7XŠõ÷D‘9dŽEdtu ŽŒ ²:°*ÊÊHe ‚ kå8Ÿ4Ê3(á0¹1Á`0”q jc0ØÜ]Jø¹EÕ“ž£QT©ªqör›|îSwŠ^žQÇáªã1y•\ñX·†ƒ†ᇧK Šx‰Î¬§7Vnw´RQQ¾§Ñ*ÊꮌXVRYXd2‘AA ƒ‘K_-Â/áŸút/üiÿüGü"þÿ¡wBÿÁFŸÿÈõñQŸüüÜÏsO?»þ¯ôôöhÚÝü¾Ö<9¦iZ¾³á}~}VÖÇ[ñ=ß…4ÆŽóÃÚæ…s,÷Öñ­ÝÓÇ«û‹ì,äo´É©¢Úý†ûIð%ö¯â‹ˆ2±´Ð¼S§ÝX%ž™áŸÍâ}k-+FñF—gquuªøÂZŒwSk¢æÎ($…M–“sñyf|×þ ÿл¡à£Oÿäz?áðÏý ºþ 4ÿþG¨þΗ77´Ž’SK•[%-¹®’KWm6 ÓOiG’ZonnW®©I·ëë§w7ÀýËÖ“MñW‹ôfñ Ü cì¿ðˆêV×ö7š¯u{Ý"÷Jñ/„uÝÿJ»¹ñÖ©ÖÚ†™vâ=+Ê–9ພ÷SEø;áM@ÓgÖbÓÄ~ñ4H÷V,7ž ·ðŶ“k›«§Ë„ôï¶Aå™x–sÙÄÖÑÚù‡ü"þÿ¡wBÿÁFŸÿÈôÂ/áŸút/üiÿüD2ßg'8J1“ö^õ¤ÚTj½$›o–0­NTchóÇ™¦Ûl“çø›jÖMÔ‡³›i4›”…Þ¼©E4¬—Ô´WË_ð‹øgþ…Ý ÿÿ#Ñÿ¿†è]пðQ§ÿò=_Ôgÿ?#÷0ÓÏîÿƒëý==Ïâ,ÑCà/dHľ×m¢ÞÁ|Ë‹­2êÞÚ—–yäH¢EË;ºª‚M~~~Ýúuþ¯û~×ÚN—iq¨jzŸìËñÓOÓ¬-"yî¯o¯>øšÞÖÒÚÃ<³ÜO$qCÏ#ª¨$ŠúVø~ÚXç·Ð´{yáq$SC¦YE,N§*ñÈ+£©ä2° ô5²#© 2 ©p@<‚+Ñ˲ìURå«*Œ>"0Ö*N…EQEËV”š³i;-lö9ñt/ ‰Â98,N½4®à«ÒtÜ”n“qæºWWµ´<³VøÅájÚ¯ˆü/«Ã¯xk^Ôõ c@Öôˉ.4í_FÔo&»Óu+‘vËi{g,7î¸ Šp:Vü,k_[ûîþ&¹-Oö5ýõ½F÷WÖÿcïÙ7YÕõ+‰.õWWýš~êzž¡w3nšêûP¾ð,÷w—2±-,÷I,ŒK;’sTáˆb?ú2¿Øóÿkà?ÿ;úúˆcòhÂrÌŒbšúžZ¤—Åý£m·ä÷åWhóùs^¸<¶_ÞþÒÅC›ûÜŸÙS徯—ž|º.iny¿Ç‡ÞøÓà_X|Bø£ðcâŸÃ+yüñƒá÷„¡ñ·‡´¿ZYØxÓÂ×WįüJøkâßxÂÓMÒZðÏŽþø§IXÐ|3â½ßJñ‡…|5â 'çþÆ~ñä:ðñíCûTË©|CøZÿ>7ø†ÏÙù|Gñ×ÁÐø‡â‰´;_êó~Î“Üø=<-¨|MñU¾ƒ¤ü ?|.šLÖZF§áýON²ŠÜý­ÿ CûÿÑ•þÇŸø‹_ÿùßÑÿ CûÿÑ•þÇŸø‹_ÿùßÑnIBjy•áWÛA<%ÉÓ©NpPy«‡°­µ%_ ãõ|EI{jôªUQš©K8œye„ËÜ}”hòÿjâÒä†%bé»,¡~òŽ#š®·ñ¨JU”ãV¢—€ë?³‡Áxß ¼G7uÏxwÇ¿~ 6™y¬YÀÚÝ÷í ¦|aÒ8ëÎ1žý;þ›ö%ÿ£*ýŽ?ñ~ó¼¤ñy©*¼ÙœjN4âç -*rµ%VåpÍbâÕ*øŠ”m)á±8¬4ܰøšôêy´T"°9cTÕe,Ë>UˆmÖŠæÉŸ»RmU”~oK]%[Bt¹¿…6…ð¡¼wwmâ¯xÏ\ø•â½+Æþ2ñŒdðâjZ¯‰ôχ>øi6¤–ž ð§ƒô ím+áö“«ê6zv‹k`šõþ¯&•k¦hòiÚ6›ëð±­}n?ï¹ÿøšâ?ቿb_ú2¯ØãÿWàÿ;Ê?ቿb_ú2¯ØãÿWàÿ;ÊÕæY3P\ØõThaéF9~§C FžJœ!™F0§F*t©Â)F0‚ŠV3Œ3H¦– /w”§)K6ÆNrœäç9ÎsÊe9Îs”¥)ÊNR“r“m¶z6•ñ‹ÃÕ4Ïx£UCðׇõ -oÄ:Ö¡4ÑØi•sö«©Þɱ¶ZXXA=ÕËí;a‰Î1^oûiš†‹û~ÇšF­es§jš_ì§û9Øj:}äOÝ•í§Á¿Áuiud†âÞdx¦‰Ô–ººžöâ[«© ³ÌÛ¤…ˆ@ QUT*¢"ª"¨UP çfì%ZƒUå•hV«)xOâìuûéZˆ>øW@ÕtÅ¿ð/ÁK£¯AuqâOxQ_cx¯NŠ tßíMÄ:…µÄ–׆7úkþ¯Äú2¯Û#ÿ‡üöëø×¢±«’S­79Ô‹“Œ"ß³¨®©Â4ãt± _–*öJîîÈq«(¤–ËÓ½ßO_ö¿ÙGü/_‰ôe_¶Gþ?ùíÑÿ ×âGýWí‘ÿ„Ãþ{uükÑYÿ«ô?ž?ø.¯ÿ4ÛOËðÿ/_éký”Âõø‘ÿFUûdáðãÿžÝð½~$Ñ•~Ùø@|8ÿç·_ƽ«ô?ž?ø.¯ÿ4‡¶Ÿ—áþ^¿Ò×û(ÿ…ëñ#þŒ«öÈÿÂáÇÿ=º?ázüHÿ£*ý²?ð€øqÿÏn¿z(ÿWè<ð]_þim?/Ãü½¥¯öQÿ ×âGýWí‘ÿ„Ãþ{tÂõø‘ÿFUûdáðãÿžÝôQþ¯Ðþxÿ຿üÒÚ~_‡ùzÿK_ì£þ¯Äú2¯Û#ÿ‡üöèÿ…ëñ#þŒ«öÈÿÂáÇÿ=ºþ5è£ý_¡üñÿÁuù¤=´ü¿òõþ–¿ÙGü/_‰ôe_¶Gþ?ùíÑÿ ×âGýWí‘ÿ„Ãþ{uükÑGú¿Cùãÿ‚êÿóH{iù~åëý-²ø^¿?èÊ¿lü >óÛ£þ¯Äú2¯Û#ÿ‡üöëø×¢õ~‡óÇÿÕÿæöÓòü?Ë×úZÿeð½~$Ñ•~Ùø@|8ÿç·Gü/_‰ôe_¶Gþ?ùí×ñ¯Eêýçþ «ÿÍ!í§åø—¯ôµþÊ?ázüHÿ£*ý²?ð€øqÿÏnø^¿?èÊ¿lü >óÛ¯ã^Š?ÕúÏüWÿšCÛOËðÿ/_éký”Âõø‘ÿFUûdáðãÿžÝð½~$Ñ•~Ùø@|8ÿç·_ƽ«ô?ž?ø.¯ÿ4‡¶Ÿ—áþ^¿Ò×û(ÿ…ëñ#þŒ«öÈÿÂáÇÿ=º?ázüHÿ£*ý²?ð€øqÿÏn¿z(ÿWè<ð]_þim?/Ãü½¥¯öQÿ ×âGýWí‘ÿ„Ãþ{tÂõø‘ÿFUûdáðãÿžÝôQþ¯Ðþxÿ຿üÒÚ~_‡ùzÿK_ì£þ¯Äú2¯Û#ÿ‡üöèÿ…ëñ#þŒ«öÈÿÂáÇÿ=ºþ5è£ý_¡üñÿÁuù¤=´ü¿òõþ–¿ÙGü/_‰ôe_¶Gþ?ùíÑÿ ×âGýWí‘ÿ„Ãþ{uükÑGú¿Cùãÿ‚êÿóH{iù~åëý-²ø^¿?èÊ¿lü >óÛ£þ¯Äú2¯Û#ÿ‡üöëø×¢õ~‡óÇÿÕÿæöÓòü?Ë×úZÿeð½~$Ñ•~Ùø@|8ÿç·Gü/_‰ôe_¶Gþ?ùí×ñ¯Eêýçþ «ÿÍ!í§åø—¯ôµþÊ?ázüHÿ£*ý²?ð€øqÿÏnø^¿?èÊ¿lü >óÛ¯ã^Š?ÕúÏüWÿšCÛOËðÿ/_éký”Âõø‘ÿFUûdáðãÿžÝð½~$Ñ•~Ùø@|8ÿç·_ƽ«ô?ž?ø.¯ÿ4‡¶Ÿ—áþ^¿Ò×û(ÿ…ëñ#þŒ«öÈÿÂáÇÿ=º?ázüHÿ£*ý²?ð€øqÿÏn¿z(ÿWè<ð]_þim?/Ãü½¥¯öQÿ ×âGýWí‘ÿ„Ãþ{tÂõø‘ÿFUûdáðãÿžÝôQþ¯Ðþxÿ຿üÒÚ~_‡ùzÿK_ì£þ¯Äú2¯Û#ÿ‡üöèÿ…ëñ#þŒ«öÈÿÂáÇÿ=ºþ5è£ý_¡üñÿÁuù¤=´ü¿òõþ–¿ÙGü/_‰ôe_¶Gþ?ùíÑÿ ×âGýWí‘ÿ„Ãþ{uükÑGú¿Cùãÿ‚êÿóH{iù~åëý-²ø^¿?èÊ¿lü >óÛ£þ¯Äú2¯Û#ÿ‡üöëø×¢õ~‡óÇÿÕÿæöÓòü?Ë×úZÿE?¶Œ_|Wð·öÂø§â?‚þxRëönýžþéó|Tðæ“£M©ø‡Aý¯ü5â;ø¬äðÿˆ|O¦ù_Ù¾'°{t¹Ôm¯® E¢²0Y¼ìWó­EzØL7Õi:JJK™8Ú.*)S§M/zu~åÛæëk+kœŸ3¿W¿©ÿÙuima-addons-2.3.1/SimpleServer/src/docbook/images/simpleServerUserGuide/sample-project-info-page.jpg0000644000175000017500000026636111625126446033522 0ustar drazzibdrazzibÿØÿàJFIFÿÛCÿÛCÿÀb."ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þ¤<à ë^Òu=OIûMõÏÛüùþÝ©C¿ÉÔ¯-âýݽäP®Øb>H×vÝÍ–,ǰÿ…[àOúåOYÿå… äDпî'ÿ§B½> ø‹\ðåLjtgdòî4yt *9t˜/¼YhúΜºÅè›[–ÞÂÇAêO¤L÷6—ÚýàƒQ°º³Ñ °›Å]-Ò„!)¨+¨­TnÛ·[°³{+žaÿ ·ÀŸôÿÊž³ÿË ?áVøþ€_ùSÖùa^…yg®éFѵß_h_Ý>ÊâçRðÅüwÿc»Ô˜A×õ‹¨¬tûë‘5ż6mZ&¹[™m¡ŸÄž!Ñü#áÝ{Å~!¼váTñ¹¨.n…Ž¢ØÏ©jw†Úʛˑmem<þE¥¼÷3lòà†YY•JØZ4jâjÔ¡KBJµëÕ•:thÒ¥:µjÕ›Œ)Ó§çRs’Œ"œ¤ÒM— s«8R§ Ô©RQ…:p‹œêNmF„"œ¥)É¥Å7&ÒI¶s?ð«| ÿ@/ü©ë?ü°£þo?èÿ•=gÿ–O^²øùâ5Ò<9£|ø©ðâ]WÆ^°×b¥SVÓ¨§C Œ¡Œ¯J•8Ñ—Öj}Vu¨Æ„åW’6¬ê§N¬ªR…%“çÿáVøþ€_ùSÖùaGü*ßÐ ÿ*zÏÿ,+Ð+ñgUÿ‚™ø¯G“LT¼ðvŸwªøgÂ+þβø9«ëÐiÖž5ð¦ã ;NþÚ¸ý¤<3&­5†Ÿ®ZÙÝj?ðèñÝÝC4ðéöмqC<â,§‡–æ>Ò?[u•JŒj_Ø{/iÌÜ¢£omNÊíÊîËF}¿†¾ñÇ‹5ól7åÔóÙ%,|œëJœéÒÇN½:Œ!J¬ç<5E9r¨Áò);Î)þ³­ð'ý¿ò§¬ÿòÂøU¾ÿ þTõŸþXW–þ̵¿ž ñ½¯.Œ×Z/‰4m2Ú÷DÑï|?k¨é~#ø_ðçâ~™qq¡_x—ÆéwöÖbÒ¯ ĺµ¼óiÆö âK¡kÒUê`1x\ÇC†W¡‰‡´§ÏMBv»‹R‹½œe›‹µã)E¦þ/ˆ² Ë…³¼Ç‡óŠP£™ex‡†ÅÓ§5R©É ‹–i+©Bp’æŒd¯Ë8ÆIÅyÿü*ßÐ ÿ*zÏÿ,(ÿ…[àOúåOYÿå…y?ÅØZßø£NñwŽuï…ÞÔ¾êß Gðÿ‹ü]ŽÍÇŒ¼ k«kwÞðî—∶wúþ´¿.~éz” áÔñøçÅÖ:×ü& .|/é? ¾!Û|Cѵi£¾Ñ5kï ëÚ©­øZi.<)â¾ð¿†üi¢ø‹ÃRÏ5Äé¥xƒÂ~/ðî³ýŸ5Ö ú%õíψ"Ó#ñ©ð¹G‰|3›ñ¦kÀ´•zÎ[õ•bpó£õ¹åóQÌiÓ§Rœ*ÒxxUÂâðõjÅaó¿‡Ç`+W£)8tbøc2Âd¸löQU0X‡KštÔ¥ QÄB3ÃËÛ$èUçnt*ÂIUÂâiTÃâ)Óš5sÁÿ ü?ý”—¾Ö¯.uÍI´Mðö›ãÏë–¢š^§­Ëog¢øZ-gVŸÈÒtmSP¸™,Œö¶SË<±ªŒÒÿ„cÀ¿ôJ¾4á•ý¢ù¯_Òä°þÏßöR|Oÿª#ã5Tø¡ÿøiðöšøð{ãv¥¨hð§Â?€¿ôøCàÿƯ‰—>?¼[ñÃÞ+ñOÆ_ü1𿎼7ð›á&†¿<9å|Iø“iðÿÀÚÅÖ¿&¿ãIáDM'ô©ýR—Õ!:3©[ÝÆ5©Ru*ºõ©B…o VU*Ê4[Œ#)JM»FÑ>IË%Ž«ѧC*^ÖS¡R§%:ŸS‡µ©5ˆ§AUÅÂ2”¢£Ù¹t~WÿÇè•|hÿÃ+ûDÿóGü#ÿ¢Uñ£ÿ ¯íÿÌmYø‡ÿ]ømðëQý 4½GàÇí«\|ýª¾ ~Íš¤þýÿj¿é^)±ø·?Âk{øW\ð‡ìåâ-ÄÚ¯‡Ÿâ.®úoÃ_øÃ\ñ¶ƒá;½'R¶´ø±ài®½ïáïü[öIø¡ãÝá¿…g«xsáE­>+xkâ×Ák>øùû7þÒŸ¬u¿ü@ý¡<ðWƾ.øg{ñ{À 4ÿ‹:G‡ÿá*Ãã/…Úß|#£jÚ¿ƒoõ©®´¯hPk˜TÅ`©¸Eà±2œñU0q„+Ó”ý½ ]<2 äž?gÒø'ýaAÂH# S‡´xœ$i{ý¬ðõ#MÒÅżÔÞ3•ÇÓ† §lUIFäÒ|ü#ÿ¢Uñ£ÿ ¯íÿÌmðŒxþ‰WÆü2¿´Oÿ1µ½û>ÁUfŸˆ|#ñ⇎o|ã(gφ¿|{ß~?xSÁ^&ÁàÝSOÙ¿WñW®,?i4ø™ão|;Ñôo€&øÉ¯Kã/ø/Àá¯ü[â­ÇVõ Gþ aûi~ðÿŒ.|cñRdñ£ãý5ü¦þ˵^³ñ›Áÿðª¦Ñbø‘«|Vø£ü¾øáðcÂÞ_øFïľ2ø¹ð÷Á>Ò´ÏøVºÖ£ÓXþϾ~ÏíãO|øø<ã¯|_O„Z'Ãù|=ãk¯ƒú_‚/uwâ/Å­7Âk øoÅ,“OðìZ?Å-cPÓ~x§MÖ"ð_ÿÁXt‡¿´Æ?…þ;ðÃ{oüÐ>:x“Åzg„?h¼[ûcx3¿þk_u_‹ciþxzo†ß~"iž¹´øGñjßã_Œ#ñÏþ <¾ÑâøŸ s¾¥:i`±5©ârê¹®T*Æ··ÁÐÀ`sJΊ¥€›©Š§Ì°5倊xôñTi}[Û7LÞž1¬åS£VQÆÐËœ)á*Î[Äâ'„¡J0Ž1ÎQ«ˆ¥:q­èü2u' OoþÿÑ*øÑÿ†Wö‰ÿæ6øF< ÿD«ãGþ_Ú'ÿ˜ÚÎñ·ü‡âçÁÿüF´øñð àÁß‹¾ºø®|Wûcêv?²‡>ü|OˆvÞø—ñ¿ö¥Öf=Yø5kg⯄~?øoªÛ?À_xz‰7Ÿ ¼3áÿë±xþëTð¦BÿÁRük­|1Óþ*øösðgŠ|9ðëàm·í+ûTÝËûE\iú_ƒ~\üHøŸà ;âì·â;úÿ‡ÿj­Æ:WÀÏ‹ß~j¾'Ô?fïx¿ávàÝk¾ºø„šW‡·ŒhN¤éCVR§‹¡«(ã0îN#,Æ”k×XGB…'…„œñjCF¿.µXc%ÍRÇJœjÂtêBxuЦéàqJ2Åa°teJñRIbñÌ0áTÌ#ÁÖÀÃGB¥^£þÿÑ*øÑÿ†Wö‰ÿæ6øF< ÿD«ãGþ_Ú'ÿ˜Ú÷Œ?·'€þ ü|?¼g¨Ý·‚ô¿† Ö/4¯|#øÑñ¿ã?>(|]×üu'Ã/|3øyðOÃ9ñŠF™ð÷à‡ÆøûGðÿ'ø‹Ä¾#½ñŸ‚GÅ#àþÎþ:þÑþ4øð~ãöyýŸ>2ÝüR›À¿ø}eàω^.øC®øÏãŠ<ð¿Äžø!ð°ü@øãíCøÁñƒUð?¿ÙxÆž$ð¯Œu¯ øS_Ö´ù§S WÙû,"¯¶© 4½zsöµjÒ¥ˆ§JŸ. óÔ©B½Єo)R­J¤S„ã)\©c ê©Ô£B ­u,hº4ÝzØoiU.ðï‹©Y,fèâ}–"»£V+Ý)ªX\Däª(òû6¤ÔœT¼»þÿÑ*øÑÿ†Wö‰ÿæ6øF< ÿD«ãGþ_Ú'ÿ˜Úú.Ûþ û'ßë¿ ¼5¥x×ǺæµñBßÃ7e—‡¿gßÚ+Ä?ð‚ÂcãSᇆ­~?ÜèŸ /í?eýOVø‘ x—À0i´ÇÂR?xOƸ³‡Xð‰lô¿#ðÿü:ÏâÇìÏñâ×Âÿø·Áÿ´O׿³‚|?ñ“á'Ço xgZø›­~Ñ3~Ïõ«I|iðóáF¡ñÃWÚŒÚ_‹|qiðöêö¨×üâOi:߆µ‹û]°î¤i,%Õ•o«F’­VxŸ­ÐÀ}^– Ô¯bpø?cʯֱ0üžÚ¬!,ä±0¿>' ½‹›–ªä†#_0£Vic£J® ‰ÆSª×$ðÔgV2pß!ÿÇè•|hÿÃ+ûDÿóGü#ÿ¢Uñ£ÿ ¯íÿÌm~°®àª‚ØŠ©U-ŽJ©f* É Yˆ=JÔ{|ýUÿš_üÅëøvÕ¨âÚMÖë¥tðµ.¶ÑÛÕÖ»6»7m'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*ñoŽz‡Ø<3¢î(b¼ñ<6sÇ"«Å4m x†àG"9 ÀKo€áãV*íËha3v=jrÄTäSöô§Ëî¹6¡õHs;EÙsE6ÕÚÕ˜bjb°Ô*×upòTãÍËõj±¾©Zÿ[vß{;|µøþÿÑ*øÑÿ†Wö‰ÿæ6šžøh5#K¾ð?Äç^½ŸMÒ%ñgÃïŒÞÓ¯õ}+R×%°‡XñVƒ£é?mþÉÑõKøí^õ'ž “r4ekɵOÚ;à-ÿÃ_ü^Ò¼}à-Káσõ]{Hñ‹tói¦éÚ—‡ïÿ³ïtÿô8fº»¾¾º’ÇþË[(.§ñ®±áûÿ G­Øx‡DºÔ=Ã:Æ™®éŸõm þÃQеo‹ÞÖt›ÝæÞïFÔ,õO€ß´DöÚ®™=”’ØÝ[jVBÎhoíd’+ÛU¶‘&–%‰‡Þfœ…Ër|^jñ•*<=>hÐtiSrr’§9^o‘NWv‡¾£()EûËçðÜE‰¯ŒÃá],2UjÓ„¥QµJÖN¥¹œåwj-¦ã$­/Bÿ…[àOúåOYÿå…ð«| ÿ@/ü©ë?ü°¯@¯Í„¶ç‹¯<à|Sðׇ)ÑçX5 x·J·Ô,޹á/Øi^%Ц¸K]gJ±ºÝî+ÒŠ¥8©ÁS”d“Œ£Ë(É=SM]4ÖÍ;3Õ£ZŽ"”+ЫN½±S§ZŒãV•H=¥ r„âúJ-§ÑŸ)|Lñßì±ðoW³Ð~'x‹Lðv©¨i‘ë6ú¤þ01ÝéòÜÞÙ¬ð]Ú ›).4û¤šÙn Õº¬RÏ pÜÛI7“ÏûXÿÁ=íŽ.~3øÜñþ¿Yñl8ddU @ÜBýâüÄÿ‚×\øŽ_Œß4o hzLjµk߆7òG¥èš}þ­{8>0¹³‰>ǧÛÜÜ,s]][Â^(÷Ìΰô~:~ʹߌŸôŸ…¿¼+ñ‹Àž »¹Ô­u߉BÊ iörYÌmöZiøCY°’Äà ȚŒ÷Šî’¨†ÉÝ¥¾þµáŸü9Çð/qFwšqlqù®W<ÂÊ'•Ô§F4êbT§F•L—YStèG–œ«U¨å-%$ÔWâÑâ¿ón&â § Áð•,³(Ì+à©csŒm7J£„iÏG9¥NµV­*’¥†§N›|–riÕ̶üª{ˆlí>8xPÔ.]b³ÒôÍgÅúž¯¨\HÛ!´Ó4>;KS½¸¬6¶V·7wSÉðË4±Æþåñ_ÂÚ†¿°?±,~Åößí_´ÿ¥^\ù¿fþÎòãîâ}›<ùÕìÝ¿çݵvÿŸ?cÿ‰³í}àmD]wâ‡Â}âwÃoè_(Óoì[WÖEŠè–ZÕ•”r[ÞAg¨›x®"Û]ÝDñÈ¿ÙßÇOù•¿î7ÿ¸ŠüׯO¸O°<%Žá\~qŽÃñ ÖµwœOëPx'•:4ãK —`'B¥±õ"ÕI9F *Ÿ,”ýÏø£‹s¼Ûв~-ÀexNA™ÐYn…U´gœB´ªK˜cãV eÔ]IÒqæ«íTœ ¡è äDпî'ÿ§BºÛ‹ÿi–1izÔëe%Λoi,FÁ®¼7dº…¡Ô"µMQ&´¸ÒK[ÄÓíZ ›s •…µÆ•%¥¾ƒ“ðÃúõ÷ÃßÝYhš½å´¿ÚÞUÍ®›{q›5ÍJ7òæŠöHmcµÕ”á”éðŠx§þ…­ÿúÿ#Wâ§J­8F¢MG’KU£ŸÜíi'£WM©&Ö©Ùíýžë¡Ê¼ZÔ–­«kú¦³Ã^YÛßA¡ÛÃozÖ·V?kS¤èúdòH¶W×¶Â9æ–ÛmËÈÖæxíæ‡;ÄþÑ|eá¯øCÄ–_Ú^ñV‡«xo^Ó¾Ñwgöý\°¸Ó5K/µØOk}kö«©àûE•ͽÜg›o<3*H½ßü"ž)ÿ¡k_ÿÁ>£ÿÈÔÂ)âŸúµÿüê?üDèaªQ«†©FL=hN•j! Ñ«J¬\*S«JIÂ¥:n„¢ã8·&›EB¤éÎiÎtêS”gN¤$ã8N J„âÔ£(É'E§“M4|Éã=;ö„ðÍ…‡‰ü)ñÏã?ÄýSJñ—ÃûýWÀºì³§EâÏ'<9ÿ G†ùþü:6×÷o*Uñφe]Q,üRv+ú/‡´O]ê’xçâíž©ã»ÛôÛK=2{›¯ |;ðÝåÍ­ìÞð3ÞÚØ\ÜÛ\ÝXéמ5ñµö›¦x‡âv¿¦iÚ¦«§xw¾øuðëáç«Â)âŸúµÿüê?üGü"ž)ÿ¡k_ÿÁ>£ÿÈÕðù_†¼#“g눰JðÅSÁRÂa°•±µñY~¬+b*ÔÌpø|TëN9–"ㆫ‰j‘† FZXyÏSíâx3Åà?³ê¼4iº³©R½ % 6&­9”¤ðð¥M᩺N¤`©FrZŠ­J”ýœ)àWòÙ­Á4~>ø…ô[ÍkáÇ{mjÃÁü1¬¯‡õ?ÙwYðýίàÏxw¦£ êZ¿íqá ZçDÕo´;OIþÕðÆ‡©C§ÝÛÛßéÖ÷qLµýYÂ)âŸúµÿüê?üGü"ž)ÿ¡k_ÿÁ>£ÿÈÕìñ åü}ôÅq7€©ä/ÄÔ2Ü.a[:Àã1Î|®¦2­xXá³ :j­Ll¥^UaZoØÑT¥E*ª¯çÇìðÇ_>øËÃÞ:ð¶½àùu/èW¾ÑüU©ø7Sñ3øß~ |6—SÖáñ<1§Ë«ø›À~#Ôl4»/ëSZh×gÛn#¼’kx~¡ø™ jÞ—£ÜØé’x’ëo®êž ‡V—@¸ñ¦ž<=¯èÃLÒõä¾Ó¢Ñ M¤?‹¯  ð^+ϱôý3MÒ`’×JÓìtËYoµ=N[m>ÒÞÊ u-oR»ÖuBHm£Š7¾Õµ‹ûíWS»e7ú•íÝõÔ’Ý\Í+õ¿ðŠx§þ…­ÿúÿ#Qÿ§ŠèZ×ÿðO¨ÿò5xÜÁ4x%YSͱYî!âq¥™céÐ¥Z4j*4èàðôés{=:XzUkÅÕ¨ñy•LncQƦ2T©ùYþw,óõ˜á£‚¢¡Ç NµJÑsR©9Ö©9ò©ÍάéÒµ8*Hað±RTyçÊé?òXgïû)>'ÿÕñš»?Œÿ²ü-éÿki¿áaÂ=ÿ Kû5ø+öyÛÿŸö·ü ¿ð‡¿ÆÇÿ„¿?ð“iŸð“ÿhÿÂáÇü#øð÷Ù?áÏöÝ×ö¾4ÎcYøwã]FóÃZ¶“ÿ ׄµß ksëú¹ hmÕå½åׇ?Òî5ß\é¿<»×ÞAû3~Äÿµ7Ûþêÿ´ïÅÏ…1ø?à‡í3ûT~о|4ø¬xGÆÐ|DøŸãÚAð‡Ž~ |YÔ?iߌžñwî~ümñw‹´†ºÃ?xƒIÔõÿéž.ñ†¡?‚üC¦x«éÏì¯Ú'þŠïÆü > ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üäkxeJ’¡ Çq„aN<øûÑpÂá°4ªÐ—Õ¹¨âpø< …ÅÒqÄá)à0+ V“Áa*xŠ®Í`ëÂ-¾~G‚ƒ«J¦†¯…¬ã‰N®KŠXÌ4ù¨âÞ'ñª±ØÕ‰án~þÔ¾ñG†|,OÚ/ö«ø“slž#šßÀÞ+´Ð~Ý%Â/ G³W¿ð߀4Ⱦ/Ëe¥ø“RKñ¾ó7þ ­ão Åð‡Ç? ¾=h¿þ4üøwû7xÁš§Œ~KñsÀx¯áƒ¿h¯|E¿øá?âO½ÇšÅ-ö—ñœéeá?|(×ü+âÍAñ%¿Š5}*]SÂWŸDe~Ñ?ôW~4áðgÿœÙ_´Oýßø@|ÿç#BÂA:²úîNµjUåR±'ÓÌó\×–ŸÕð4£N„êæÒÂÖÃB+ [-Ëò¬º¥)a04©;ž*¬äÚÀÖ„'J­”T°µ(U§[”`š*غ±¼%”¼m)Ötñùžoˆ„’ÅR§CÆ~þÀ¿g}WAñÀ¿ÚWáÖ“¯øßJ¾·ý¬.>#þÎ^'ñÆŸñoÄ:ÿÆßŠÿüMâÿ‚–žý¥>ßþÏ:­Ç>=üa²Ð,|C«ü{д/ê^³¼ÒõíOÁºž±ã˜þÁÇ‚|g¤xßPøµðßĺ=·„tÝ_Æÿ c£ðãâ߯Ôðíð/ãÔ~;ý©þ/k´?Äüøßâ –—âo‰ÚÍæƒc«øÿYñmŸ‚´Û¨ï´Íwô û+ö‰ÿ¢»ñ£ÿƒ?üähþÊý¢è®ühÿÂàÏÿ9Ÿ©Á׎)ãð޼*b*F£úëiâeˆ”ág„qö4Ö/O ‡³¡‚¡%‡ÁS¡B*p™âkÕ…ju0ØÉÇW_ÏW )b18g SÅb&ñnuñsœULN.¬§‰ÆUç«‹«^¥IÊ~Cã/ø'ÿˆ¾þÍžÐþ;Ká~Ë¿³·„þøÆ«ðÒÏZ²½ø‰ðïâGìÓñ[ÀŸuï ßxÊ8®ü'Š?fÍ.ÃÆ  Ö­õ?ø_ÅÚ¾¡üMðn·§éÞ%-ñþ Uñ_â5½×Š5ÚCൗÇüNøñCâ×ÇþË<ñÂ> ñ¿ƒ¾|(ÒõO؋Ǿý²ü#ñ³ö;ñðoெü â{Ù¾3üoðçÅ“¬?ÄÏx‡ÂW×>›ìì¯Ú'þŠïÆü > ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üäk¦Õ•iWY¦5g_0ÄÊQúÜS¯šæÍsœ‘Á¨'‹Ì!GU(¨¹`ð1ŠTð(Pt±Uèœ)aq4Õ%J1”'„GNŽYmU*¬R©Z…,êB ³U©W,]Yל6Ÿ²ÿÇ¿ xßãÆ»ð·ö£Ò¼᯿¾ ü`{mWà>‘ãOˆÕü ¦|ðOÅï Ëã=Oâ—ƒõÏ|høYðx^ÉÂ#Æ üMã?øÓJñ¯ˆc³ðç†toŸ<[ÿ¼¿ø›â¿xâ—Ç Ä߳ޥâ¯Ú›Æ¾ð–ðJ þÓzV§û_x7Ç~ ø«àßþÕgâ^³aâo„¶ö¿ð–‹ñ¯á¦³ðgöÀµ³Œ—:/޾x‡âïÅŸ‹—þý–ü-¤ümðï†ÿe];F›öøÙà[x«Ný¥4Ý+Á^!ðœ~#Ó„«àç a1ª±õèTÇS§‰P±UãOÙC ЧaC *˜ZU#G ‰–3Ö§‹hgb&§–Ê3SËcGK,=,.¾yøû|Pý |/ñ‹PÕ[à·ÃøÏö·Õ>&ø]¾;|Ÿö‰Ó|7ð÷áGÃ뀟|[ðæ_„ÿ´ÀOˆ¿~-C£h–¾|aø]ñϾêÞ'»·•4O]êO‡q´oø%þ›¡|YÒu_ÚsÅž4Ô¾*þÏÿ~ßøÃÇ~Ô|[ã3wñ?áì¡ð²ãǾ'ñ>±ñ"çZñηa/ìÂÞ$Ô[¾Zñ=ÇŽžcÄçRÐ.µÿý?ý•ûDÿÑ]øÑÿ„ÁŸþr4e~Ñ?ôW~4áðgÿœFõ )ás %: ZbêKOû6†U^½uS(OŒÂÐŒ±˜¥Ö¯‰•\K’­QÍ•qUªû8ˈ>*®'‡„°‘¡SÌjæTp¸h,Uã„ÁÖª©a(Ô•WO FŽs© jÿ3øïö3ý­´Û#PøÑû3ücøCàM/âO†¾;ê¾7ñ¯Æ€ׯm'Â7Þ0ðßìUà/ xBðo…j_€¾ ¼×õ8?g½ÆÖþ>¹¸Ö|/¦ÁþÖ<"×séZ¶£âZßü³áމà 7Ázßìíñ|-¼¿Ò¼áŸÛ›ö6ð¿í™ð®?êÿ¿fÿ„„z×&ø©ðkU?-õ٧Þ+Ñ>(ø;ÆÞÒìl ÿó‘¢–4pØl-Gøa¥üw°?Ìš&¡£xžóPðì7¿êÿðEˆõ}_áï¼_ãÙ;ö𸋤ø?‡ß5ø('ìEâÛ¯I:NŸñOâÄý>ë?kH¾<ü³ÑÅx-t´í׃´‡6 47žšû^ûóû+ö‰ÿ¢»ñ£ÿƒ?üähþÊý¢è®ühÿÂàÏÿ9¸Ò”q?[Že†Uÿ´'š&þ¸é¬}HU„ëªè+ýb½_d©ª+Z®)SXš’«)Ž"´pŸQް®œi8{L/3Œ#…„«}oÛJ¬)àð´áYÔu£O q¨ ”]‰c¹áý˜¼SðFøi¥øºŠÿ>7ü6ø¦þ†ú†ÿ|AûBx“öŒøs®§¥ñLiâ _‡.Õ´>óMÿ„§DOéZEí¼··×%µ²ùãüáÇÄ/ü-ñß…´?ØÓÆçÀŸ~~ÏÚ¶‡ûw~žý·mäð·ÂcÄz¿†üOð×ZoŒ? ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üäj!‡öuéâ!˜a#V–2–a–/•c)ak`¡ˆ•'ƒt§Qa«Ê”¹á%QRÃJjSÁàåDXŠª•Z1Áâ#NµØzªÁÂs£_‡ÇÊ›©R©ËO‡…|5¦žu1‹èÇŽ#«ð·ìgðro€Ú·ìïñÓÀÿ ?i‡×ÅO‹u üVøUáoxæ÷âGƯ|eÒl®|ãøLt+›Þx¾-+LÕ§W–âãH[¶µÒ%¹[OŒ¿hOø%4uoÁg=CáÿÇ?~Ñÿ > |{ýŒôÚ áO„~$x_à.•û4ø‹Ã?ðmçÆx{âOÁO᎓mªøÁÞÒ~|@økñ6?Ùü]ñ…ìaðú‹û+ö‰ÿ¢»ñ£ÿƒ?üähþÊý¢è®ühÿÂàÏÿ9Íàiº“«õì*WMÖåxØF¿²­ƒÄSXŠpÂÆž"0¯ÁÔP¯‘æÂÒѨ¤êž*µ$ã tœ1Ó’ÀÎTá‹U–&4e Yx>ÏÄ û~Äž-ý“¼s¨é~ø½âßÃ…Þ<øoû_Ⱦ ýžþ*jºþ™'ÅÏÙ×ãW†¿iÏ…~3ñM–½ñûMñN½¥ÜøWÕ<û'|dð?ů„^ Õ<[£|Fý<ûFþÒÿµ¶“«Ûx6ÇÁ&ð'ˆ<{wãWÁ¿ |w©Kñ7Äs|V»o~Ð_üSá/xKá§Ã#EðÏÂýHñ°¼ñ<–:¿=Gû+ö‰ÿ¢»ñ£ÿƒ?üähþÊý¢è®ühÿÂàÏÿ9ÚTÜ\ó,Ôq•óÆk(ÈÅaqòÅÓ‹Á¿cˆ¥ŽÁáqxj´}œðµhµ‡•:Uñë̫Ԝ9àñ3„¨SÃIJ¦šxzx ~X¨TœqŠuhOšcib(Ô”ébÝUS õiPœ>䢾þÊý¢è®ühÿÂàÏÿ9?²¿hŸú+¿?ð€ø3ÿÎF³úœ?è;÷c?ù“ú³òºöõèÿa?ù«ú³ò¿Ü”WÃÙ_´Oýßø@|ÿç#GöWíÿEwãGþùÈÑõ8ÐvîÆó'õgåsÛÕÿ +¿ÖûRò£¿ñåŸÄ²´ijxQAbøÑá éÏÁÚPgñÛÓ›áß xcAñeÞ§âøûâ&·©èÚfe¯'€ô?x‹_øyáýQ‚{é¼-ñ ž-ñ©¥ëº<–zÿÀ WC¼´Ôçþ„áñOý Zÿþ õþF£þOÿе¯ÿàŸQÿäjüG3Érü⦠xïmR8•*Ó£OV…³©Çý¦g^äN4ç/fÛ|ðšv=.%ଋ‹qU|ò\T2Ÿ®{ *©xzß]xGWë SúÃåx*^ÏØW¡£¨ª{HÉ(üçðCö{øiû?hWšG€týJMCZ]-üUâïê÷ž ñw‹/4›G·¶¸ÕuKÆiöÜ\ꚥ„¼/cáïø{T×¼Asá_ h)­jÏíµ¿ÿ§ŠèZ×ÿðO¨ÿò5ðŠx§þ…­ÿúÿ#W©N¨Ó*Q§Jœ,)ÓQ„#Ò1’^IEƒÁ`òì- CƒÃÃ’† JhRÜš§JšŒ#Í)Jri^S”¥&å&ßò%ÿj²ÙüuýŸà…‚MÂRúÞVýxüe¨¬Wp±eTš)’A¶0Ùùe?ƒ:,÷zïˆ\×>4üdÐ-.µ9¯oü?áµÕ/îKþ•<:6µ7‹,-t—½ºY`´»:-Ïö:Ì·rYjqÇ>Ÿ?÷µûYÿÁ-~þÚ3ð÷þ4hŸåÔ|-á› è–^¸‹CÓlí!Õµ}^kÜÉáKýRKûéµv·½jm§=µ†Ÿäéð\Å=ÍÏÍð@ßÙ*ÆO*ÓEøÿ±ªJPx†ÒIU²Æî²xØ«´RyÞË"îm„/öŸx¿áV‚øO&ϱ¹Î4Érê8lWÔ²Ú“„ç ³œ¨ÊªŸ%z2N/Xé%î´õ_„Ï$ñW$âž$Ìx{•㲌Û2Äâ¨àóJwò¤ ûöÓu1ü'¥a{§É"ëw¶³Ú<ˆ¥ÑgŽ6e –PFAÍ~oôñ‚8ãÁ¸~ «Ž©—ý`y‹Ç`å„“že,áç)?m:Šu\TTmusY}†ù'a3þ8â:t'˜q5Lš½:”1j°u0µ³Ú¸˜BŽû<5K0ÃÆ$£[¨ÝÆRvþË¿òB¼ ÿs7þ¦ ¯~¯ý—ä…xþæoýL¾Ñµ? xF÷ãÁÛ­7KÔôÖ¿´Ô\Ýxòk«íBöêkóâ;ÍFâîãÅÑjúý¯ŠßYµñ¹¡èì$ŽÏáÖ¡ö•«XÍ£.­¡ê–ZÖu©ÚxãÆž"¾·Óµ6k/WŠÂÃÅÚ5½Þ¡¤]ßi‰ªÿhé){&¡¤êVöß®x‡,+áz4ã_ V¬3<éF•XT¨“§Z3“Iɤ”šOÝmKU¥åñ\5R´³‰©BqƒÃÔN|¶„¾¢ží]-ÖñNúÙ~–~Ë¿òB¼ ÿs7þ¦ ¯ÿ‚üHý¯> ~Ë>6þÆ×ÿ®þ$|%ðˆüm7Ã¿ŽŸ ÒœáV›j¥*”êFâŸüÿþ ¹¯ÁMm>2~Ì¿´—…|û5ÁF>ÞøÚχ¾ñŽàhÚôÚDºÎ‘ðÿÆ^6›Ç6¾$ø_â"4‹? /¼|ºÙŠÎéþ™i«koVbO~Û~3Õ>;ÏûXüAý•üW øâçŒ>ü;²ýž>|[øS«ê6¾ ¸Ó•üqãMOâOí%ñ®Î y/g¶OhzL‘è gùø…â!~únüíÿÁÄ¿ðJ¯‹¾ø‡áOø-üFßRðGíqû9j–~;øù¢xMOâ„ü-e+ñWNÐmakkÞðü~ø½á[Ø.´ÿ‰¿ n¯bÕ-nŸÃú–™âïHÒà©ÉT¯—æò|L'MSU2ùЦãN|ELÏúØ¢¿Î«ö ¼ÿ‡xÁ#ÿà‰?ðRoÙ7Fÿ„ö×øŸñ{Á>#øññ»Gk·ø«ûU¯Æ¿ øÓãWÅ/~ÑÞ8ˆÉã?Žñߎü;¥É7‡¼}«xŠÓO!·Ñ-줶²x?Ñ íò&ý¨öÒ¼«¦}½ìíѤä[O´5´1’¬ò³hJ³9U$šô±ô]‡Í1ê.LŸ:ÍrLl£ãíòœ»*ÌëWÃÙºµhO›QPç£J¢«J¬]6¹%. 6'ëRË=6©çE çå8ûW‡¯Åà•,M(¹G^›¡JrJ­Z3öîkUú½i/ˆÿà¦_>7þËß°ßíûKþÏú—«OþÏß ¼gñ„é_¾x»â?„<]¢x ÃZ¶¿¨øçPûw‰µ7Sšòkaik$VÿÆÇ쉦øwþ /ÿºÿƒ‚à¢ßµ>„ßk('øË§|:ø·¯__I㟂ÞðgÁKÅ>øWð—Ä1K§ðëáãÙøÃZðOŒ¼áI´â€nfðOŽtý{ÓM§IèÖ¶/Ç?ØÃþ ëý—|_ûdÔô©üB²iØêÏc©Yr:ßÙù.}ŒÅáåʃ¡BxJØŒ%øáÿþý±eß~±‡ì‰âÏÙWÂÿÿh|ý§þ0üK×l½Å¿n|Cð3â×¼)©þÇÿ¼ã¾ñˆ§×Ç|]â?ø÷[·ñŠ4Ûψ:•Œg}ù¡û|IñOü¿þ àOØ‹þ ÷û0x‹Â_>5~Ø:ŸÄŸÙÿþ ‘ð’÷\±¹ý®>!jßSQð…hÍsFŠæÃãß½CZñ…¤:•â«›½Cöq½Ö~ZëŸ |ª@>&ø?Ж k?Âä<Ü•±¬~_ûèº8ª™Ž_œÐÁO/Áá¤Ý,F:¶K,Gáp5ñ˜ ø_Ä֚χ¼=ñ¿Ä2Eàiÿ-´K¯c]é©a©Åàí6ËC²ìÿàáߨOàßì‰ÿóøà†‡ªøóã`ý•~!ü)ðÿÁ?‹´F©á߈|áß|RŠÖ÷ÃzWŽ´ß øZ-Úw…µ_‡ú6ƒáÝDÒl¼áß xqìî Ðl¥OxøÃ‡òŒùÓ’Ž{Åe¸i4œð9æ{ɧV½h©ª8¬:8\ðÊ•J8‰cja©ã"ðr­[ÕXH¼ß2Éã[›“b3|i%MrQÅåy%Þ1ÃÞ§ûM DêÏë7F¥ÒuÖµ)ÂÿÙ$¦Q†ŽI„naŽY¤”)1¤“$S¼Q³á^E‚fIeŠBÏoø'_Äø)ÄŸ|a¿ÿ‚”~Ï_?ghßüI¡üÑ~ xÚ?iž,ø)m¦hòøÅZô°xëâ$qj—:¤Úµ¬Z…έá=[X·ƒÍÔ¾øì¶Ï¯~lÁ:¿àÿ³OŠ>~¿·¯Æ=gâ—Å¯Ú ÿþ Áðïà—ÄøãÇ â߀þ|Dø9£XOàÏ|ñuá«oøSÃZµ×†4øNßÂ>ÖVK¿x÷ÁÞ.ø‘«ë1¾þcàŽþ ð‡Š?àßßø8'Iñ7…<7â-+A.ëúu׎¾.üAðŸÂß‚?íµ»?Æ¿|eâŸxoÂó Îdºº‹Ã _Økþ?ñHÓîôÿ è¦Þ'Žï^Ö¼7¢k_Âí—ìßðƒÂßðiOÁÛ—ÂúD~ ý°þ üVOü#ý¥ôOPÓ>6|>¿³ý·<_ðö×Áß~$Ûjž-ðWΕ¯kZý·Ãï êÖÇúާñ<>þ8¿½×¦ôßø/Eþ‘ûIøGþ ¶ý¦~,ü&ð5§Æ_ÚNð3üwÔ/¼¡®¹ã}+QoÙ‡[>ñ…ÝÞ‹m©kÞ ³Ô|uã;íÂzâÜèšL~0×ã±±5AîûëåÕ(çÊ£V3ž_âEÁ¹§4=œ*RͰRÌ©×ÁÕŒêµ*±Âcð5ý¥%õ'>2’Ç*ÞžT«*˜j˜ŽF¡S…8ã?ÂËž ÇÁÑÅÆ¶Fñ©:90˜ªu)J1ÅF¥|­‚«Mâãý™~Ü?à¤Þñ÷ì•§þÁ³¿ÁŽ<_ñŸLÑ?kÝ{â׎—ÂzÇÂ߃2꾆ÿÄþ´“ƾ kA4‹Ÿ]ͪi¶õ6ëKÓ ²øMâq'•ú#_Âgüûû>üøûDÁ ì¾ |øCðvÎÚÄÞ‚ÓágÃ_|=µ‡Â:Åo€>$Ñ<-¿„´]"(ü9£ø‹Æž1×´­ iš~µâÏj––°ßkÚ¤÷_^|X×âý»àè[ÏØ‡öªð~™ñgöGý”?d»‰ ?g¯‰}¿‹¾x§â¿‰|á «ÏŒ~,øe¯ØOàßøŸMÓ¾1x—Áºï‰4ßEáÁ []èréÚ¢]íòðSXšZT©SÄ|iETĵ ´pœ7à1Ó’© Óxz”ðÔ£…˩ҕzìÈ©‹ÅáÝZ¸n¼eáÓÄTIS¡ÂÜ=™¸PiÆU³Ž1Í8^©®2uc˜:oŒ„ä§–RÃ:y}*ô*Cý{Ñ_ÂìñOÅ¿¿a/ø9oöø»gÅ_ÙÃö?´¥‡ì»¡üOµ>=³ø_áÝGý¢m< ðóÂrx¦-NÓMð÷ÁË¿‚>ñ?à 2ÄFÿµ™VûË¥,zX¶ü ñŸÁÅømÿ÷Á>?n}â'ÄëoÚÁðQøoàž»§øçĺ.‡ð?ÂP_|HñMîŸàéz¬µñF¯ñCáö™ñRø6Š~#Ü^E¢xa¼J|!áMFµÛìñ8ê')QÂ×ʸ:Ž#’5q?RãüÇ-Ë0PXHÔ/­`+æTêb©K 5(Ò«*XiìéOYà«*+•ÂXÇq®Fès[ OärÏêV–-sKêù† *öxZ•°µçU¨ÊQ«ì¿ÖÆŠæ¼}u©ø;Âz•ôÆâûPðÖ…}ypʈÓÝ]év·2F©™f‘ܬhˆ¥°ªªÃoìû+þοàì/ø*ŸÂOˆ?¾x£àõ·À GÆÚÁÍOÂÚ<ß¼Yâ=~Ù#\Õï|yðËìƒÁ><ŽûÅþ)Õ~!ÏeâíX²‰£MøÐhúV¹g­5jÙì²(û5Z9?f®¼§/g~ÂC<:Цålb”¡Ú:.*N^gù±ÄS–KK:J~Ê®7 ÂFƒŒ}¢†{RtãUËŸ—›  ¥*Jê«m*´íyvôWñ/ÿE¼-ðüÓþ §ãÝ>/~ÆŸ²×Åÿ‹ú'À¿ |F7|àÏ êZÿƽ,|0ЭüTÚöŸi¡è7? ü7ã-'Jµ¿_ì¯ϬøºÖÖß]Öou)~]ÿƒpà•¿?ࣿðKtºý¥|ñÆ×Hø9ÿÕ¾&|Ñþ|O½ðŸàx7ÁŸ ïµÍZûD‡H¾ðç‰5¿ÜJt[ßøŸIñ‹üá›#mð—Å?/¼¨NRZ•™NYu¨Ê©ŽÿY8›†^ÚEQúïåu³*†. ¬jS̽*:R_QöÜõÜçFµ UüSþÍz?…?àªðW¿ø.>‡ût|=Ò>7x3ö<ð?ˆ>~Ë¿ þ+XAãOü ð½Î½â øƒÇ_ ü-â[ ôo |Hñë|+ð×%ø›¤éøÚÚêùãÓ|Júp¶¯Šÿg/…ÿà·ßðl§Æ§øí/ˆ~2þÔ?°ïÅïŠWß²ßÅjŽ»ñ?ÄúWïøâF±á][źåÓj,øSž.øan5-JâçÑ< q¨IqªøRÊh¼ºXßmÃõóøRµ,' å|gŠ¥:‘Jf\GÈ¥[ÚÁNUs, - ƾ_FJUlF ޝ<5*¸ÏBxGK=¥‘ÕšZœC™p›­¦–}€É0µ8B iTËq5±u°Kª,E%F–)åó§^¥~|Lø¹«øGCÑü1¥Z[hÚ_‡4™4‹#Ò¬lbÓì´»s 6žDbèæ 6u˜a±ž&–†xï3‡$!:¬¿‡~­ŽÂf4hÊ­Gšap”±9F!bžvg:Íæ|]*‹— Fo’ѯB*8ŒOpIËíf«PÌx’¶&Ž+ñNŒè¼_ˆTÌ¢°ÒÄ×ÄaêáŸö^' Zþ ÿ๟¶ÿí3ÿãý…<_ûbþÍð+VÔ¾x—ÀúWŠ|ñÃáüucã+ˆ~9ð·4ßì À_þ\x&ïÃ×íγ}>£¥xê~ ÒàµÐI©¿Ý°ÿÆßþÒß±Ÿì¡ûDøïOðö“ã_Ž¿³§ÁŸ‹¾.Òü%i©Xx[Nñ'Ä_‡¾ñn·cáË-cV×µkM×QÕ®`Ò­µ=oW¿‚É ŽïS¾d¹“üó‘qã/ÛOãíQÿ Å_Ú_]Ôõ ߋߠ¸ý§¼ððø3Æž4k¬ø“ᾕ¡h:å‡ÂíZêëÀ:oŽt-Çšw‡­|[£éºµ¯ßÿðUoÛâ—Àø"ïü?àƒ¼A«xOá‡í[ðwönðÿí¨éþ5ñÂí?ƼðSàÕ¯Š>x³â—„ìõoø'Àßtÿ^Ãã‹­BÖïo¼-¢j–òéZ¾”š¯‡õ®œTrÌÞ–" šâx×Ã\Ÿ ~Ö­< ¸»…åŽÄàðµ¹=¶'B¶&ž.¥G„¡ˆÄ¼4áC’£F¤Î¥V7,–Ui`)pßfX–éQŽ#α”Þ"T"4!‹«„ÀV¥B”±¾Æ­8UÅ()U‡÷¯_Ž?ð\ÏÛö™ÿ‚qþž/ý±fÆø«j_ øáðÇÇþ:±ñ•Ä?ø[Àšoö¿à/ÿ®<wáëvçY¾ŸQÒ¼u¿ PipZè$Ôßó÷ß³ßí©ÿÐñ×íõûgxÀ±ì³û"êß°Åxwöý—>9|Nøá8¿jŸ‚_“WÐ>;ø#À!ý”ÿfï†zÞ$ð—†,tOŠrxGÖ7zÕ†•£ë^"_ßÇöËoæçÅŸ~|VÿƒVþ5ÿÁ@¾#é2ý´þ0~Õð‘|Uý¥õÝOP½ø½ñ Ú{ÁŸƒÛéZƒ®X|.Õ®®¼¦øçBÐüy§xzן>›«Zø8ê’š­NZ˜yeø>Í1Ò÷zs̸އ PËU*ueJ¥,eXœulLñêPËñXðSÆÖÅarÿCN1ŽZš­K1Äç9fP÷°õjåü."Åâý¥EN¢Ž¾'‚ÃòМq8ªšª¥*¨Ïþ†°ÿÆßþÒß±Ÿì¡ûDøïOðö“ã_Ž¿³§ÁŸ‹¾.Òü%i©Xx[Nñ'Ä_‡¾ñn·cáË-cV×µkM×QÕ®`Ò­µ=oW¿‚É ŽïS¾d¹“ê:üúÿ‚LÿÊ.?àöd²ßþ©_×è-}waè`ø“ˆp˜jq£†Âç™¶FP¥B†?J•8&ÛQ§N1ŒnÛ²ZŸ?“Õ©_)ÊëÖ›©Z¶]‚«V¤¾)Ô©†¥9ÎV²¼¥''e» (¢¼3Ñ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ð?¾"Õ¼9ei>pö³j¦…¦ÜËÅݬ¦Ñôßß2Çqc=µÌmö› gÊJ‚pÊH¯|¯™¿hÂF—£à‘ÿ'‡ºqÿ0?ˆµîpÕ*u¸ƒ)¥Z©Nx»J\Ñ•¨Õjéöi5Ù¤ÎÎR†_‹”$ã%N6iÙ«Ô¦ž«ºm?&|É«øÿÆ1Ã)Oøª'À¼[âµ–ÛF¸0Gn=úW‘übñN½â¾Zëz„ú›Zx}Anï%’æþk‹ßˆ:Ñäk«Éæ¹+§økI…^fy‹C$’Ë,’³×]¬öyN|¬ççx漿âOúχ¿öLãÿÕ§ñf¿Yãü ­,.Xæ8kT…(F¢æ¥5$¦¢¤”®ù•ìô¿ÂŽÈ1眸NµYAáfÜ%6âÚw»]]Òj÷?M?eßù!^ÿ¹›ÿSW!ûb~Ë~Ø_¯~ \þÑ´ìïárê&ñn¯û9j? 4/ø·H…ã¸ÃZˆ¾)|ø·q¢è­}ok{s'‚¢ð®·¨JÔu›¿ÞêzE÷_û.ÿÉ ð7ýÌßú˜x‚½ú¿”TÒR½”¡5Ë)EóSœjGX´íÍÍòÍ^3R‹q )8¶Õã(ûÑŒ•¥¤“W³v•¹¢í(µ$šâ>xO[ðOü?á/|Hñ¯ÆkF²{=KâGÄ{‡z|]#ÜÏ2ßøŠËáG€¾|;†ò8fŽÅWÃðÝ‹ÚÚÀóYKz÷W—?=|2ý…?eï„ß³ïÄÿÙKŸ ´1û9|\×~0k,ø;}mm'ÓOøçªêº×Ä/hšE½Œz/ƒ.ïµÍ[ûB³eOÚ]­†‹=•Ž›ogõåªÓ§^X©V¥F¢Ça+à1p•*~Ç‚Äס‰­„«AEQ–¥|- º.Í{5ÅBRŒŠR xzTªU„0¸œ67jÕyéc0˜|V ŠUÝGˆ£‡Æâé´¦ê%ˆ©.g)sŒ_ ¿à†¿²¿®fýÅŸ?iŽ¿cø‹â_ìŸû/|mñÃ|øã_Ä’ø“Ãúލxcà÷ƒ¾6üFµøj×èŸ ´ŽŸþ+hþðü¿`šÇR’k˜?gh¢¶•J“RS©:Ž¥z¸ªÓ©9T©ˆÅ×…Uñ˜ª³r«ŠÆ×¥†ÃR¯ŒÄN®&µ,6•J²§BŒa”iS„¹áN~Ê#ÉÓÃÓ«^µ<5E(PÂÓ¯ŠÅW§†£P…|V*´)ª¸ŠÓŸâ‰àƒ?²íýÿí¹¦ü?øïû^ü ø=ÿ ŸWÕ¿iÙ×à÷Ä?…šGÁýÅšÞ‘¬Új0ðŒž+ø)ãŠ_õ+ý\¾ñ~¹¡xOâv™àO\‹øßÂ%ø5ü1¯løkÿgýƒ¾~Á^!ÿ‚nÁà/xßöbñ~•gŠt‰¿>"xçX½ñE´–œ¿¼7q«ëí¡|*ñeÿ‹ôø¾ ÜÚ|ð÷ßCã«‹ý{Mð}ƒ_ÝÛËú¡Ea*T僫€” ð•ðXºµ'ûÜY˰“©üYPÀ§³ÂÓså¡NŽ5`ð‘¡Õ*õ§ˆ¥‹•Iüañ×€¼[ðãáçÅhk£xgâtÞ2ƒán•ûExç^Ðç—TÖt|Gøéâÿ†¾»Õ¤Ò<+àMÁú'„¼1áßÔº+²X¬LññR­RXŠRÁÔ¥QÉ·N¶]Z¾'‰‚øaŠÁbñ8Œn¬M uj˜Úuc‹“¬rF…ÑÄaÕ8û[­õšm]VXˆºxšsnòt±\°ØŠ7öUð“©„« áªN”¿mø oìkûdþÕ>ý¶­¾!þÔŸ²GíI¢XËg«|fý‹>-è¿|iãiƆôýkÄúÆ£à?^[x—Jðª]øR?ø>o kzdžutO_x‚ÃOÐbÒ=cöÅÿ‚:þÍ_¶?웡~Äú×Ä/Úà¿ÀIñ Åú?ÁÏøÿÆüo&°|M'‹¾0|PøïðÏãÄoø¶÷ÅÒßxÃÄ>0»ñ=·‹~Ì÷?eï þËþøùñ¯_³ð?Ãóð×À<[cð"ãâ÷ƒ|7§éAðwöl>øáσڮ¡à" ?Ýx·áˆ×Tm¬þ9‡Æ7Sj3ß<´'ü£öbÿ‚6Á!?à¬Öÿ ÿiOŽš>>~ÍŸ"Ö|-ûHøÃö}—ÃWß|Iá ¿ x>ïÂÚׄ¾ü)ñ_ü&¾(½½²ðnƒá5ñ^£¢ëwº´6zg„îþÕúoÅߎÿÿlo¾ Ÿá®™ûVü¼ø7§|MøƒðóPеÍ#Zð_Å|Cø/ñöñ¶«j> ¿ñrZÍðZÊO x¨[^ø"o Ø[¦˜Hh®+»5Í$þ½ŒÌÔÔš« vcJ¶1ÄÓ¬š«Jy†[ ŽTçc0sxtéT§‡Æsch{HJTqÕkãiÊ8¬Ezµ?/¼ ÿ—ý›¾þÅ¿¿b„~+ø¿ðßÃÿ´çü&—Ÿ´7Ç]Wøwâ?Úãˆþ'ÙG¤|Sñ‹|Mñá—|ž ø… íSþÁøg¢èÞÓõKé¾èþ ÕVÇR²øÄ_ðl¯ì‹âŸØ¿á¯ì¬þÕ¿·UÇìÍðŸâï‰>6ø3Âqø—öN·ÖíŒ!Ë \ª¾[-ÃQ:´iÔÃS¥8E­¡Z´!JœjO–Ž#4ÅÓ¼œ¥õ¼î…L.q‹œåyÕÅf”+U¥ÄÕ”ëâãR~ޤܤßðóÂw>ð'ƒ¼yâïøúçÂ^Ѽ97|e„í¼Yâ¦Ñ¬ °þÝñð¿‚|³©Πžð‡†´5¹’A§hº}·—mðû;x£á'Äø;'þ Gi¥þØW³þ¥ãŸ†#á¿Áþ'|$¶ÖuÿŒšVŸû,x_[øUá½?â†þ(|ø£â©G‡þ xgQøeã_‡~>ŸKñ‡õ-WGÐ4‰еÿ ÿ}TVøzΞyêºX—,«ˆò¼N~ãÛGˆðÔ°ØŠñ«MrÒ•Br…?a:U'8©ÇÙBTêsT§”K)ÃÆ¬nMŒÃÎt㈥KûuªP¡<5K*Ôª:ŒïVŒ Ò|ÓS‡æìÕÿýŸdOÙOãWì¹ðâÇoßþÑ:׋üWñ£ö—Ôñ¯Ž”YøÆz¿‰üwðÛÄ¿ £×.4-ú ¤6? ­4=6C_°Ñ­ükªêž)½üþ ]ð“þ GðÓÅ¿>üný¢~ ü'ñO‰'ñ¤øã¨|׬¼/ã BÞÎË]ñ‡µï‡?þxÎ[­~ÃKѬu ;ÄÞ&ñ&i‘m6…¤h÷—:¥Ö¡úyED'*uñ8šo’¶/„Êñ F2ܾÿÙù{£¨Ç€|²Àá¡N4p’§JXxS•NR­N*׫>;™Ñ•YJ¥hf8ëýwíæå^X¬bsŽ.¼êJ¦&5kÆ´§õ”ÿ,þ7Á&> üPý¡>)~Ô¿ ¾2þÑŸ²ÆÏß µ/‚Ÿ´_Šf]wá ¥—ǯÝÙèzn—'ü1ñÇà¿Ç ØxÏšV‡•áo‰´|@Ó´ýCQ·›Ä·‚Kciöì«û)|ýŠ~øöký›¼ gð÷áÃÛ;Ûm ÃðÞ_ê×w7zµýÖ¯®ëzö·¬\Þêúö½¯j÷·š–«ªjwwÍ=Ç“‘c¥¥¿Ñ4Vt¡'†¥Â…Jp¡*I'‡§ŠÇã©áµ»XZxÜÓ1ÅÓ¦°ðÄcq5£MN¬¤ÝT«Ö†"²ö•¡*•#R[ªµ°ø<%ZÖVN½\._ÃÔ®Ó­:8Z4å7$|ûþÃß`oƒºïÀÿÙËHÕ|9àÏ|Pø£ñoP}JãK½ÕGŠ>)ø¢ûÄw°A-ž¦i©£xJÂ}+Á~ ±“K–]?ÁÞðõޝu®jj:Æ¥ñgìuÿRøûþÔŸ´/íkàïÚ'ö§ø£ñö±“Å—´w†>2Ü~ÌšÏߊ÷ž0Õõê7Z¶à_Ù‹áî©áå·×õÍGVµÓ¼â èÓ<ÃMÕtÍOC_ì£û%E 0ö‘ªá NeLšðŒáO)­„†®]N”Ô©ÓÁÏN–T!Óxz4)[’… ©9Ô¥^„ç7KšSÎñR”}¶mK[0§˜T”Z”ñ0Æâq˜ÔroÚ×­/ù{>oçÇYÿƒp?d-Gögø¯ûé_´íËáØëâÅ{ìÛᯊ¿—À |q/Š4/À>kúçÀ=sâ• ÐÆgà‰ÿþ$ø>£w㻟Üü^²Ð>$h¿^|vÿ‚3~Áÿ´ì1áïø'ŸŒ¼ ãÈ?gï½µïŸø[¼mñ;ষ¦ÙßéÚ&³ðÇâ7Æ wâf¹¤'‡´ÍRÿFÐü+«wáý‡‡®O†Áïá¨áÒcýR¢T«agƒª½¥ ²ÁβŸ½V¼òÚ8ZmJø‡þÓ^®]Gƒ§—Õ«Vu0+ Cê²¢éAªuj |1ðói>øoðÇájC¥ØCÃð'‡Ç‰F Ûø¶ó_²ðƒm|=ðn³ÿà~ÈZìÏñ_ö)Ò¿iۗ±×ÄÿŠ÷4ÿÙ·Ã_~/€þøâ_h^#€|>×õÏ€zçÅ+ß XA¡ÏÀþ!üIð8}FïÇw>¹ø½e |HÑ ê+jµªWÄË]ªõçG‡«*Ð…Xb(aq”s5,íéþÎ?¯5ë^1ŽæÆ-Mcðž±Vú„VI©\§Å3n }VCu#_~Ïú‡N蜺´ž2¶Ó·²˜µ[˜¼¶ŸÉ¾$Òü=<É3§·Å?‹#úsï_®ø€å.„Ý:”Ô³,2Ѝé7+Qææ^Ê¥D£ïÙ)5-6êþ'‡yzùjsµ„ši)¨ÇY&­8G[ÇV®¼ÏÓ?ÙwþHW¿îfÿÔÃÄïÕà?²ïü¯ÜÍÿ©‡ˆ*ÿůÚkönø¬xÃßh?‚µÿ‰Ú„ÚGÃmâ×Åü8Ö>!j¶÷ZeÆ™à}3Æ:þ{âÍB ÝkF³šËA‚þæ+­[L·x–[ûT—ð%¬éÁk:³TéAk:•%wtã¼ç$¡äìì´?Fû3—Ù§ Õ©/³N8¹N¤ÞÑ„"œ§95Å6ÚHöú+Âþ4~Ô_³?ìß/„ ý¢?hŸ_gñýÝý‡!øÑñsÀ eñ­ö”Újj–^Ç Пėzkë:B_ÛhË{5›jºjÜ$fúÔKîjÊʬ¬XVR ²‘ÊFAAr(^ô=¤u§í'KkkMEÔ§Ì´ö”Ôàç óAN<És+Ý”c/vS¦ªÆ/IJ“œéª‘OWMÔ§Ršš¼\éÎæ„’Z(®SAñßüU­øÇÃ^ñ—…/ñ¯ƒ~hâoø·Ã>ðÜzžƒ¢ÉâëÚW†´DÖ×üE¤hÞ Ñ¼#c§¶¯{â­[ÅZå¶…§xrÏJGÔîµËËøtË}=ö[¤¶S(™NIÊQŒhÆ3­)I(Ò„ÕW TmÚš£YÆRiIQªÓ~Îv¨Âr•(Æ”«Êp£ŹV7IN’W©(:ôã ¸ºÔ“KÚBý]VÆúËS²³Ô´ÛË]CNÔ-mï¬/ìn"»²¾²»‰'µ¼³ºä‚æÖæ #šÞâ)¢t’7decÏxÏÇ~øq¢/‰~!øËžðãjþðúëþ3ñ‘á}µïkš†<-¢.«®^XØ_ľ$Õ´¯xM›Ýg\Ôôý'N†æþòÚÞK”e òM8ÏÚ*\’N3ö²š§|®ÏÚJ£PP·3›QK™¤DZœTàÔã(óÆQjQpåæçM]8òûÜÉÛ—[ÛS«¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+æoÚ1š^Ž x}¸ÇQ üEÁãšúf¾cý£Ûn•£qœø—ÃÃÿ(_ô¯ áKÿ¬™5·úÛÿÓ?5ÿ‘n/þ½ÇÿNÓ>ñ‡m§¼»Ôd:Ë6¡ý¨ÿfðÂË8Ôô,zÅ€í¼EeP­u°ºŒˆXË|ò»Èܯĕ /Ãà3øV‘žÚø§ñeêkÔuqºÖsÓld}pÀÿZòω2|=?õM~_>-é_±øVUxJ’j 4ó ,b¡J5ü&®Õ8A7îë)]¾ú Ãp§ öJ)óK 9I¹NOv÷“vM¶ìšIôÔý5ý—ä…xþæoýL.~Í>ñÇ…uxDÚ~¹á¿~Ò_ ôÝNÆ`1$Nöó³Û]ÀñÝY]$7–“Cu2§§þË¿òB¼ ÿs7þ¦ ¨?hoÙ{á?íG¢x_Ãßåø²º_ƒ¼M§øËBáOíûBþÏWqø—G»´ÔtMWSÕ?gÏŠ? õ_Ë ê–:LJáñ î©k ëv–úÖ‘–©]çz”©Öž5èÓÄa¡™eUñ”*|5°8\Ï ‰ÆÒQå’œêa)V…*Sä§V«…:•hÓœªÃôê5jP¨«Q«R…zJu0õ©6ªSÄ–Qš”eNÕÕ;Õ‹”éFõa ’‚§/Åï‡ß~&þÌÿg?ø%·í_âý[Ç2ðÇ/†¾5ý‡ÿh¯ÛÝ%÷íSû1xVÛÄšU×…|g®›XômOöŸýœíßHÐ~-ÚÛÝE¬xÿÁ·¾øÇޱêž*¹³ök¿ø(¿í/€¯?m=Çà†©ûø{öÇ¿ý’¼Yð¼ñ?j]3NÓ?j9¿c{Ï‹0übƒâÜÿÿ·ÇÅ94ÏÁð&ïöx·¾—áµêiOñ^/ËÃõׯ>üD½øeªxçÁºWеƒ>2³ø…ð·ZÖÅÍö¹àŸXè:Ç…¢ñ.‰­KpuXuK ø‡]Ðõ)å»”k^¯¨ÙjË{ÜÈþüÿöMµøÕ«ü|³øgªYxãÄ?¬¾/x‹@±ø¥ñ‚ËàŸˆþ1éÚv›¦iÿ¼Eû5ZxúÙÏ^øÇa‹¢^Y|XÕ¾Þ|Cµ×4MÄpx‘øá/Á¿ŠŸµOíÿ3ðß<%ìÏðcÁÿ >ÿlß~Á>ý¢|Kñ<~Ïÿ¿l‚vZLjõ¿ øCVÖ!ZøÆM!¼MoñÛÆ^øñ¤øÃö‡X·Ð42æ?ºïĤŒ~„E¡¼º|›~%ýƒ¿eÿüP¶ø½'‚¼]áÁ>×4Ÿ†?þ:| øañÃÿ"½´ð6‹ñwàŸ‰> ø/ñŸLðÖ“¨\xsN³ø³àÀž[OÊ’ø^ÂÃH¶é„×4%V)Ê›ç§:1…7õ¯¬a¥,v*”ãW ŒŒ°xzØ7”R£—å1x÷Œ£BŽ;ñ9 HÔtù)ò¤èâ#:u*Ô“”jûeOCMRÄá¡BrÃW£›Už75ƒÃVÃV–&†;ýñsÄ¿·—í÷ã¿Ù'Æß´ÅïÿðO/x+ÂßðPmöBÔÿgÝ[KøÑñ ÆÒïÂ?·¯ƒ¾ hm¾(x´'Åïƒ5{{M;øøàé_Å:^‰ûLÙøÿÂ×ZT_²ü¾™àOø(ïü!þê_µ§ÅŸ~ÇÚ'†_·Ïˆcÿ‹¾Ù|nñßÄ]gÁ²~Öß²½—Äo‡ß#ð‰üE£Þ]x;VýŸ5ø>3h¾¿×¬µŸ‚:—Œ-¼àŸ¿®?à”ÿ±c|ñ/ìôž øÏsð³Å?Sö‘Ö<9uûf~Ùë©j? ×dñ„^3W?4ãsã¦âþ§ø<5yñÞËâ5ç‡ïñ¼'â¯ü ø“áo‚ß&øÕðÃþ5ðΉñRçàç‰ümrÞÐ|geâýX·Ó´½ <½(×ÃSÅ$éa2ì¾¶"QU=•|M)p4¥zÑ­‹ÄæÒÁñÃŒ±5jÖÁeøì-|.3+Äáð0þŽeRŒð¸‡‚‹”±AŽötfá…­§KŒª`\ªQ§ˆ† X:„¨Ö­„§ ?Úy)à³HTÅâ1 |ý­kÿ Þ|׿ikŸÙ¯ö£øã¿ø+ßí©ðOñ&·ð“â^ñwö|ºø)kû\][êŸlø·ÂɯAñ94¯ èßÿh;/|+¾øÊ5¡ñ7ij·Ã8þ)‡Ÿ³<\'øSþŸ|>ð§‰gÍ#Âö¾ Õü¨i©{£|Dñ#ü;Óô[/¸ø§?Äü+úáüö8øâ߀6øaàï‹:¹û.xÅ_ ¾E©þÕŸµ—Œ|9à?‡þ6½¸Ô*þÑ|=áõýš)Òüã¶|A°ð½—†ü;âëÿ |Qÿ…±sჽ„oÛCÆ~ýо;iÚ·ì­Âø)|Ö>ø¢éÿ¾+ø“Æß²×>$ü ñÆÏƒW5»?ÚGOÐÿiÏ[è^ñ„~/iþпfCž&º¶Ôô]_ZÒtB ŸÒ¯þÄß³oÃ:‡í'ðûÁ^"ðÅGáO„¾xÖ;_ø@ø¾>?|3áÿ(»¹ðÝ·‡~éo¢êZωu}>[}WÅ>$¼Õp¾þÀ²oÀˆ ñ'ágÃ=WÃz½Ž±ãoøOÂ÷?þ0x›áÂÿüI¿Ôµ/xƒà—À_xû]øð']ñ…η¯§ˆ5Ÿƒ< ©jV^#ñ.™stúoˆõ»Ký¥9F2Œ©Su±U*Nƒ“ª°õóÜç_ÖH¹ã¸~¾E–á³:Rá¬nWˆÆå˜\³ K©i]U•Yû ,6µH¸ÑÄSáü¶‚ÅÕÅRÃÓž"9oÒÍqóÁÔõÅv6†3Åe¯ GäoÄÿÛûöÂñü«â_Äko þÅþ3üø)ûc]ÿÁC¾|Rø1ñkFøEkª|!Ôøßâ‰ü{ñ:Ïömð'í­ëåÓ>-xÃ?³õŸÂxóÂ?ð¤ü_®xã…æ«ñHmnÖߺO‡tëýc÷«â7ì]û4|Uð?í!ðëÅ¿ Œ>ý¯5Wö‘Á~2øðË]ø¯yaá? ø ?·¼cðÓÅ^ñ¥¥ï‚¼áß ëzv‡¯iZˆ|=o¨éõ®¥câê|õã¯ø$gìñ5äñï‹6ÆŸ <ð3â|þý®¿lO†þü=еO x7Ãÿ´5ïÃO~¼ý¢o4/ k:—…­üQñƈ.ŸÃ7Ãךõε”>n+ ,f >£YÆ8œÓ,˾§:>æŸÓ£˜ÇŒ FyFã#G-ÊkGj©fÓÄPÄÑxxëá-çÃßüW³Õ4¯ Iûü}‡Ç×Z¬ž-ððñ\ƒÂ(ÿÁDþ%üoýµ¿g~Ñe‡ì±eû/ü"ÿ‚¤|øeàOøóà—üYûRiºÁ۷³·‹>0øWãuÇÅm#¼Sâé~%Ñ¡øyÀ]cUµ[û}Wârê^*ºÐôÏÛ›ø&ïì¥ø»Ã~8°ðwÄÛoxÁ¿þê{?iŸÚ€è<'ð²-F×áþ›ûExIþ27„ÿj ¼5§ê·ºEž­ûF蟵™ô#m ßjZ5……· ñ7þ %û |YñÄx“áÏÅOÿÂßø•¤ügø™áO„ŸµŸí{ðᇌþ1è—¾Óþ.k_þüwøwð¦Š+«ø;ÂÞ"¼ø…ƒ"ñ~§â½ Oñf§¬^x–ªŸg^ž#2Ãc”kIÐÎèg’•z‘Z¸ÊÞA˜Õœ”a:º8éápZLÎhÔ̪áð–Yá`pï —¼IF e¸\¶/ ©¼Ê3Œ|'-I·J¥*ØÌª¤óZ¿ÍÖW'_ —PÆbð5ÿH誶6qiöVv=ÔXÚÛÙÃ%õõî§zñ[DÆ÷š–¥qw¨êLˆ­q}us{w)yî®&žI$kUË.U)(7(¦ù\¢£'èå)¨¶¬ÜTä“ÑJV»è3Œ\ÒŒš\Ê2rŠ•µQ“Œ’wJNmjãÙQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|ÑûE0]3G'?ò1ø|qï¡|E¯¥ëæß–:®«Ÿa§x[×DriÚ§üS’xnmZÞöÑuû t}+Åž(ð.‘y¥\ÙjÚ¡»»OÚj:}ý¾’¶ú>¯i{>•ìðî"†=ʱš´èP¥‰r«Z¬ãN8û«šS›ŒR»K{¶ÒŠ”š‹áÌ¡:˜ T)Âu'*qQ„#)ÎOÚSvŒb›oNÖKVÒM¯‹u¥&›Œl'ßfk̾%ËðôÿÕ3‹ÿV—Åšú_‡>;Ôcd_‡_ÂÈäh¿8 r>ÿíB[CÀ÷¯-øåàÍGÂÑü<—TÓµMá¼-{¡E¥ëRho« }3Äz¾¿&£¨Gá½kĺ%„ךŸŒ5+k]6ÃÄzüpéZ~›yq©­õýÞ™¦~ŸÇYþMáØ`ðYž‰xê,=hÔ—³…6¥+-mkkg·š¿Éä8mÕ×­…¯JŠÃJ<õ)T‚æ{/z)uï©÷ÿì»ÿ$+Àß÷3êaâ ÷êðÙwþHW¿îfÿÔÃÄïÕø¹÷AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^sâùCÿ`Û_ý)ÔkÑ«Î|Oÿ!èìkÿ¥:sâ…ÿo/Ô¸ný?TléŸq>±×Ã_¶çü†>Ø7ÄúU¥×ܺgÜO¬uð×í¹ÿ!‡ßö ñþ•iu?ŠÏÿM õÿ öÓéOÙwþHW¿îfÿÔÃÄâ¿ðP¯ÛËÁŸðN/Ùë]ý¨>)üøáñWáƒ.täø‰«|‹àÞ¡ª|>°Öµ½Ã:³®h¾2ü$Ô5?Xñ.¿¥hvÐø/jö·7&÷UÒôí õ8½«ö]ÿ’àoû™¿õ0ñ~\ÁÉ>ñ‹à‰¿·~™áÿ[Ô,¼ ðûÄ÷Vztq=¿‡üñ«á¯‹¼W¬Kd­†áW×5IÏÉk¦é×w/„‰aœbªà²úت2P• áªJRŠ”#Ab¨ýeÔæÒ4–ÚûYÞ.>jŠpqS¥’ahc󌯊n8|n? ƒ¯8ÍBtébkB„êÓ›N1©J3u)¹ÆtÔãiN¥>hKë»ÛïSÖ¿eO„ÿµ—†ÿb¿Ú×Ä~øÇ©x<1ðËOÖ?cK/Š–>ø¥&“kðÛ⺞ ý¯ô_†V¾ñ–¡â/ iÖZnŸñ7Sñæq¯ÚMâÏø{O²ÖïtŸ½t-BïWÑ4}WPе_ ßêzVŸ¨^øk]›D¸Öü;w{i ÍÎ…¬Oá­cÄ^ŸUÒ&•ôýBoøƒ]Ñ%»·™ô­cS°h/gü˜ý–¼oàŸÿÁ'ÿàœóxSÅþÖ¡ñÏÃÿØ ÃÞ–ÃQŽðø‹Ä^ñÂ][Å~Òíí÷wZß…ôÿøÒïÅb[›¯ ÚxGÅ7¾"K±ðÞ¹s§üûNøÇãïÀOø(õÿÆ¿ž,øéñÏö#ñ¿íAû,| øqñö<ý´þ#øRý„¾)ê? 4 Ùÿö®ý‰ôoˆ'ÁŸß¾;xïÆú&¯âßxÅŸt?‡Þ2Ôέuq6«ð‡BÓ¾£1ÁÑÃñ>3 ¡uCûz¶Q‡ÅWnN•L6;•ÒÁ¹ÁB‡×±³Ìp8•Oð´kâkÒÁ`ñ4q¹ŽK”f_-—bëb8kžbZXš™61¯ƒ¦•8TúæxꘈƢxá0Ãc)ÎXyb+PÁañÌV‡ÀfyŽ úm¢¿ƒOÛ·öéøç¢|mÖ>0þÎ?¶‡Ç_ˆMàoø-ßÃOÙ_^øŽ>,|Nø ðçž½Òï/uØÇÁ±N™ñSÇ?hïü:³°¿Ó¾&þÓ_¾|ñv¿âM7JDÒ~4éž!×øsñOö€Ñþè:ÆO‰ oEÿÃÏ|Fðý¿ö'ŠüOá¹×Ã> ‰!Ö5k ›Ûû; xn×NÕe¿Óí4m>ÚÖ+hý Q‚†&µ:ôêÐ¥˜cðXZð•9ÒÌ!—g9æG‰Äa¥N¥NeK‘U¯UkE`sLš¥,M|]lÏ”ùp­&ðtêÑ©G_/ÁãñXjœ*à?+Éól5ê¤ ùªPÍÞ9FE‹Ë3(º+ +ôeQ\ç@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWœøŸþCÐÿØ6×ÿJuôjóŸÿÈzûÚÿéN£\øŸáÛËõ.¿OÕ:gÜO¬uð×í¹ÿ!‡ßö ñþ•iu÷.™÷ë|5ûnÈcá÷ýƒ|Aÿ¥Z]gOâ£óÿÓB}Ãý´úSö]ÿ’àoû™¿õ0ñ{Ô±E_vöÐøçÄ¿ðNßø'ïŒõøƒÆ°·ìsâ½{â–´þ$ø›­ø—ödø)®êÿ¼E&©>¸úÿŽõ-SÁWž/ÖŸZº¹ÕßUñÚ…ój—êsw4“7ó‡ÿ<ÿƒlµÛËöÙø©ûLËà¯j^ñ–‹ðÓAðªxöÕñGì•}¦hžø x*?Æõßø''íï ë~ °],tïøâ¿ ^xFÏÃZTŸt¯é^#ñ¯¿°*+aé)áç(ÇÌ£J*1§*r¦©ºM$¥N*1‡-L<¨×„aìáZ4jV§Wxâ*¯­>y9ã!Ɉ¨å?iU{z8™*“RR«Ö¡J¬éÖu)N­*5¥Mס‡©Kó»áüSörÑd_Ù—öUý¨~|4ý·í?fiÞð¯ŒjO…_þ0jpÍmgŒ×šD7ðÖ³k¢Ç™o§ørÁ¬ ·¼ohš5•ýÅÔ–¦VûóBдO èš?†¼5£é^ðç‡t­?Bðÿ‡ô->ÓHÑ4-H´‡OÒ´}JÓá·°Ó4­2ÂÞ -?O²‚ K+H!¶¶†(bD]Z+¶½z¸Šø¼EI~óŠž7ãîªøªŽnUê%¤ê~òqŒåyF2qNÍ£††–ŽN+Ùàp±Áa.“t0°PýÍ7eÉNNœ%(AFœTœn•Š(¢±7 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óŸÿÈzûÚÿéN£^^sâùCÿ`Û_ý)ÔkŸü/ûy~¥Ãwéú£gLû‰õ޾ý·?ä1ðûþÁ¾ ÿÒ­.¾åÓ>â}c¯†¿mÏù |>ÿ°oˆ?ô«K¬éüT~úhO¯øcÿ¶ŸJ~Ë¿òB¼ ÿs7þ¦ ¯~¯ý—ä…xþæoýL~TŸ³£^¼µK÷xz5+Õi6¹¤©S›…8óT«$©Ò„êN—ÜôU.MNm3N—Z´°Óõ™l-$Õ¬4½FãXÓ,µ7·¯í4íZïKÐîµK k£,6šÎ‹£Ü^Û¤w3iz|’µ¤7ªå J/•¸ÉŸÊ3‹iÙòÎP”n´”dã%¬[M38ÉN1’æJQRJQ”$“W\КŒã+=c(©Eé$šh(¢¾Vý·i]Sö;ý“þ;þÓºGÂ|s¸ø#ðçÄŸçøoá_x;Á·ú¾á­:}OS¼¾ñ7õM;KѼ?¢ØÛÏ«øŽ÷M´ñGŠ¢Ñ,ï›Â>ñ·ˆÆ›áSŸˆ£„¡WˆŸ³¡B«Z§,¤©Ó‚¼êIB2’„#yNVå„§&£×N[ˆ£…ÃSuqŠ£B’qR«V¤”iÓ‡3Šsœš„#{ÎmF)ɤþ©¢¹x“þ/øCÅÿbþÎÿ„«Âú‰?³þÑöϰniVšŸØ¾×äZý«ì¿jò>Ñök?Ëó|ˆwykÓ×f"…\-zøjð䯇­R…hsF\•hÎTêCšP—,â×4%(»^-¦™Å‡¯KBŽ&„ùèb(Ó¯F|²=*ÐJs嚌ãÍ 'Ë8ÆJö’M4WxKâ×ÃÏxÏâŸÃß ø’ cÆ?5ïxc↋ –©ž×¼[àÍ⇴˫ËË}>þ}GÁ¾%еÐt‹½B+k}JÞÉ-ï<ËdôZÁ5(ÆQjQœc8I4ã(N*PœZÒQ”Z”d›R‹M6šfí8»4ÓÑÙ¦šºv}ÓMwNáESQE~|~Ö?ðPŸþÎñv«àßë?|WðÏöý˜ÿg/‹¾ðþµ¦ø.×á.­ûNxáÕ†¼Wãx®ÿµ4;Ã_ü/®G¥ü9Ñü}¯ßêšÿ‡t}COðösâ_xFy£íhQºö¸šøl5_Þl^/ÃÇû±ž+†£*³å¥IÖ„ªÎnJáNuG¶©R«ZoD£N9Õ©-Z»P„œ`¯:’µ:q•IF/ôŠó?ˆ~)øá½Wáe§€~ÂÉÒüYñ&×ÃuøN4/Â¥øw/„¼_¬\üOþÏÖ­ç¸ñçÙøKÂ;ñχ4 ÍgAð'kýxš50u1±1öSÁÏK›Œ–¶¼pøªùAÊ8,D%:ua‡Å:5ëá*ÑÇP§WZ–"|ô*CÎŒ¹¡R8)Ñ”“¥M<ÂjøJ¸GUAbéU†W íiÒ¯ƒÆa«Jž'‰¥Kõ*Šü³¿ÿ‚žxGâW„ckÏÙ Â>øÅãßÛ–/‰×|?ñ«â•ßìãà­ >èçRøÍáˆþ4Ó>üoñN“ñSÁŒwžÿ…_àß…þ=ñ¡¯h^.½ô¿ø7ÄÞ/Ó}gÄß´Gí‰qàýûá·ìO AãöñOÄ=+Æ~ý ¿hé¾ø;Ã>ø¦YMôŸ‰¾~Óö¾)³ø‰ª_Eÿ ßFÑuKÿu?'‚&i^"ý˜>éÞñKi%µÕ4ÅмCãí?WM3Ä0Áuéq?èµuWÃÖÃMÒ¯gV3ÄR7(º”êaqUðuéÕ„dåJpÄaªÅF¢Œ§MB½5*¨Õ©œe)Ås^›‚“p’‹ö”iW‹§7 ±öu ¥*RœaUTÃÍÆ½Ôé”QEbPQ_œvß¶§ÆO‹ß~1x/ö?ý›¼ñ·áÏìÙñ þ|oøµñ'ö€¸ø!e¬|RÒ,tícÇ ?g Hø/ñŽßâߌ¾X_Á¢xÚãâg‰¿g¿‡ö?ï´ÿØøÿP6>8Ö¼Á|Lý¹?kÍ Å²…þþÄß ¢Õÿki¼{áÛ_ ~Ò?µo‹þxïá?Ä/‡>øƒãÏx_ÇzÃoÙ'ö•ðÖ££x)tÏø3Æþ#Ó5¯jâËEµÔ|›ñ\˜Ëž*F3äÄÓÃÖÃÉÓ©Z†2„±8LM>h§,6' â0ø”½…j5°µiÔ”1˜YV*ÚLM:’„g„öÑÄ®x5F¦­*œ<ä¤ãõ¼-z¾Ã„Mâ°Õèâè×£N®  «4WçeÏí û~ ÄtïØÏöiÕ>"ÛøÛÇZV¶¶¿·WŽnþYøÀþÐïî/øñ~‘kRxzdðGÄÍ+Ä_³À=;Á)m#Ķº¦˜ºˆ|}§êé¦x†.¢]!î'Öœ%Vu¡NÒxxá¥ZNQ8,f˜áS­&©9ÖÃeøÕ)¹ýk Wâ±ëêÍMòRU¥û9U•hNSöÅRÁÎ>Ê1uR§Zµ9T“‚„0òúäå$e]~‹QE (¢€ (¯:×~-|<ð×Äχÿu¿Acñ'➃ãßø ÂÍeªOsâá‰ðªøïSŠöÚÆm.Æ7ü*—T¾±–êMfÚ=>;ÇK……6“Œ[JSmA6¯'J¤”Vòq§ Í¥v¡ Iû±m4›½“vM»&ì’»nÝÕ½’ÜôZ(¯fÏÚ¾çö„ø¿ûeü(»øMâ†3~Èßtƒ#Qñ'‰ü3®ÞüI·×~øâ…Ÿlô¿ \jÚw…´^ËÆ–çÚU÷ˆõO\hK§ê^+ÒüâK½SÁ:§RTc­Hajã%­†£‰Áá*T»´_.#0ÂSäMÔ—µçŒ:ueÉ/fêÛÜUiÑnêþÒ¬+T‚å¿5œ0õ[¹"ãÊJU)ÆaQEs^3ñׄü!â¯Yxk\ñ熼9­ëöžðÌþ¶ñŠnt}6çPƒÃºÏ‹õï øR kZ’ÝtÝ.oxŸÃ¾ŠöæÖ5Í'O[‹ø3¯Z–…lEirQÃÒ©Z¬ùe>ZT çR\°Rœ¹cùaIÚÑM´Š¥NuªÓ£M'R­HS¦œ£çRJ1Nsq„S“IÊRŒc¼šI³¥¢¾0ýœkKö‡ý…>~Ú:/Áo¶«ñ3àe—Æm7à7…¼[àÝgÅÓ]ßh’ëþÑ|gã}Cáw/u«‡të]cÄš§ƒ|!|Rñ$ðu®½àÏ O­\YjšŠ.½ñ ÆzÃßi‹g£Xê:„³ëÞ2ñFƒ¡[­(®5¦»’ÞÎ9îbžhëïGJ‘¢õZVŸ³ä¤õþ$ýµ.X|Rö´ìŸø2ãâÅ/Aá?ZëÞ ðÄúÕÅ–©¨¢ëß¼g |=ðf˜¶z5Ž£¨K>½ã/h:±ŠÑâŠãQŠk¹-ìãžæ&ÚV»KšP„nÒ¼êIBWÞSœ£Ek)IE&ÚBIÉ¥Ûz$“m¾É-Yè´WÇ¿³gí_sûB|_ý²þ]ü&ñÿdoŽ:Á‘¨ø“Äþ×o~$Ûë¿ |ñBÏǶz_….5m;ÂÚ¯eãKsáÍ*ûÄz§‰.4%Óõ/é~ ñ%Þ©àì*"ÔéЭiâp¸\e mφÆá©bðÕ,í(ûL=ju9&£RÜ•! ‘”Sœ%N¥JSV*µ(ÔI©%RIS¨”¢Üf”ã$§(MZP”¢Ô™ES$(¢Š(¢Š(¢Š+Î|Oÿ!èìkÿ¥:z5yωÿä=ýƒmô§Q®|Oð¿íåú— ß§ê3î'Ö:øköÜÿÇÃïûøƒÿJ´ºû—Lû‰õ޾ý·?ä1ðûþÁ¾ ÿÒ­.³§ñQùÿé¡>¿áþÚ})û.ÿÉ ð7ýÌßú˜x‚¾$ÿ‚¿øž÷Iý›>h:7ÃoŽßµÍ[ö±ý|Xº7À¯ÙóãwÇíSKð¯Â/ÚàÿÅ?ˆž#ñŸð_À>:»ðî•áÿx[\Õá—ZŠÆÜÙaxZß[ñ Ŷ•7Û²ïü¯ÜÍÿ©‡ˆ+ß«²2©K€ÅRpUrüÓ)Í)*°•JS©”æxLÊ*‘…JStëO ¨Ôp© ÆrŒ¹’*œÔ=¥Ó~ÓŠ¡xµAâpÕpê¤\£8¹RuUHÆQ”dà£$âÙüq|møm¥Gñgþ ûAøwöbý¹ükñf?ø*üÿâÿìÙãþÉŸðP"Ò<áigû¿^1ø|IðÇ[¼ð…í´ülðW‹/~Ç¡ÙÞü9Ò|ð’¸ø}{ð[ÂWºðS¿xËÅý–õéþx¯ö…ý”|;ûEhºÏí±û>ø[áö¯ñ+Äß¾ë¿|{á_ê,´WÄÿ|#ðÃâÿˆ~|PñïÁ#ÂÞ%ñ/‰4 =ÅŸƒ|Ku ¾{ú˜HPYˆ $’ ’Ià9$ðyõ§Å¿…7ÿ _ãeÄ߇·¿SÂw¾=‹vž4ðÝÇÃð.§Ï«j4é?…WÂvU­Î§{â3ª×O·žò{Èí¡’EÎ>Ë—a°1öo–bòÌÁGUð¯û?+áü³“G–—-,m¡Ó\^2¶#ÙÎUñ¸LfYV­eŽ”qóÌ]/«bm9F¾渹àc:XˆCáQÑ©mJ·òñöRеoŒÿ²Ôöß³ígì«ÿÁOeñÀ?ÙÏFø ûhé>þÌšßì•{௎w_ÿeÿøNß@øðWâíWâ ,ü5ðçã÷ÿü+üXŠÇºÀOüPÓõïø(_ìÕðÓSðÇüàíÿýø£ñÆw´OÿÁ&¼[ðwöø½ûD|$øgðLýž4oü8ø7û?럳çÃo‰š/ì‘ãþоñ­çÄ]/]_‚ñx³Jñ€uw¼ñÃø4«}úÚ±¾²Ôì¬õ-6ò×PÓµ [{ë ûˆ®ì¯¬®âIío,î y ¹µ¹‚Hæ·¸†GŠh$ÙXáø¿Æ¾ ø}¢?‰¼{âß ø#Ãqêz‹'ˆ<_¯i^ÑXñV½¦ø[ÃKêÚÍÝ•‚ê~#ñ>³¤xsA°ku¬kÚ®›¤iñ\jÖ¶òÆ# à1y=_hèâã‰ÂOë/Úâ°óÄå<=‘RÅáe%PÏéÐÈ\´Uç<û‰(SÁÑ¡›JÂcœ18 thá«UÂRÀº¥MGˆ©†Ï³\õûzsxŒ7ûV8LNU\ëC.Êñ3ÅO„§PþW£ý˜­¾<þÒZoÿi—ÿ‚šø_ÅñÞ~Ëž?ý‡õ_‚±—„â³ðÿà á_à ;߆?ðÓ¿aÝsãïì'âë/ŒÞøŸmñ×áŸÄÚ?öbÐ5Ï øÂÃ^¸ŸQ±ø‡â[‡û¿þ‡û:ü*ø{àßÛà'Åï|hÚÃö¼Ñ´‰¿µ'ÂÚ'Ãÿ5?€><øï­üAøm¤hÿkÚü\×~ø³ÃßðŒxó\Ó´zûDÕ¾%^kþ-ñì|]Õ«£Kë¦y”è{<´©RFS‰„«IÎqy^:Á¬%4œhÒËåW7†# „§I}IeØ ­xP£*_Ê—ÆهĞøïÿpÖþ þÆþ&—ãÄŸÚögøÞÚ߀?fíwÂú§í9û iúO쳯~Úß~þÔ¶¾Ò>ê2øÝ¬xâ|%øÿtß|OñL¾#¿½ðÅÅÖ©uâ(¿J?àŸ? |/áÚ[ö‰ñ×ì§ðOƳìâÿ„ÿ4ý࿊?gˆ²F…{ûUhšïÄAñGâÃÙ·âwþx“ÀšUÏÂûŸ„¾ñ§‹¬~xgÃ?|O¦ÛÝé—¾'Ô¼-®ê±þ•ø7ãïÀ¯ˆÞ?ø…ð£áïÆ¯„¾;ø¥ðŽk;oŠß |ñÁÞ(ñÿÃE¦M>ßâƒtMfûÄ^ šùíîÎ/iÚl—M˹‰ÂëøÛâ熓%¿Ä‰ß>ÜIá/øý ñ·<7áIŸÀŸ í4ÝCâ?R-wR°vð—Ãû kG½ñ¿‰–š¶›s¯^ØCjòðàçOƒÀ%:rÃÐËcK ˆN†# G)ŽUU«ïG”PÁ`£›aðßTÁñ?öaeF®*xj=¸¿k˜â+ÓTÛÄÕÅÁâi(:؈â£Ãæn¥(ÙTÃfµ±1–ŒŠxœ_Ö†I‰UhÓ§ˆ?”ßÛö~Òþøãþ à ö ø½â]WÅ¿ðRø'ïí·ðZø'ûüXøŸà{ èRþËöÿ´oÅÏxÿáÂ_x7Fø›oq¡ücâ> kQ|fñdZ÷‰µü9âM/_Öï¤÷ø'ñºßãßíöŸ±ÏÂík[øÁñ“àí¤<;ûV|RýŠ~(þÇ?µ·Áo‹>(Õ|)7€¾Çûp|@øw |ý²þ ø—Åz=ü_õ¿ÛëÞ4øáí á±Ô5¿øF“Ä'ô÷c}e©ÙYêZm审§j¶÷Öö7]Ù_Y]Ä“ÚÞYÝ@òAsks‘Íoq Ñ:I²2±µSG ,.`ùêB¥,&c–Êj1Œã†ÄðþGÃThÊXÕ§áð\=€©Š¨¡F#õ˜Ð«€Áמ :¸¯¬ºUáNØÜ·1‹¼¥N­Lc‰Í¥QÔ¡:‰<]|Ç1‹äĬ)üm¹ Öô¿|oðv™ñŸEÖôÃH×¾+]¥·‚!¾ü§ý¶?fÏø+âŸüMµý‰~;Iñcö‰ý·a_ˆßþ,þÍÿ°·í1ã{ųΕâÙâ/í¨xköý™þ ë±øFa㟇¿<}â­Ï⇇|}¨|HѤñm–•uãkÝQ¼þ½¼Eã_øFï¶,ño†|1}ã¯ÅàÏÙx‹^Ò´[¿øÂ}#W×àð§…mõ+»i¼CâY´ëúÜZ—š¤šF‡«êIjlôÛÙ é«£™J—´½œ)mãí^Ñõ[ïxÓâf•­Ãà_xÛÅÚ¿é§ü÷á›|'ø…ûAøwÂßã_†ú„¾ê6ßµW?`ÿ‹Ÿ°í5ñ[Å âïŠ7òøö®ðÏÅ?øGý¨¾,x;Dñ Ž«sûVü*ðæŸ¡øÛPÖ|Jž4Ò´¿ÞØÞøƒ÷~¼¿µ‡ì³ã¿‹Þ$ýŸ|ûJüñ—Ç¿®¬Þ/ø!á_ŒŸ¼Cñ{« Okm®·‰>é#¼ñž†º-Íõ•¾¬u=Ôi³ÝÚÅxa’â%u›ÂRŽ *Vœ°Ôâé¹Ãš¶.áü—‡â¥MAÕXl= ›/Ìë<=J3y¤iʵw•ÕÅexÉÇ·ŒP«(SÃÑ¢ðô³‡-.yçùß';ËØÔÆbóçjð©NTy«QÃG8§„Íp~?ø]«ØÁY¡øðÃàüß"ñŸÇ?Ø;âÞ‡â¿ÙoLµýœüWá¨~#þÊ_ðS| eðCXø'{6­áËþÊ>.ñ'‹5«Ïëÿõߨø£P½ðEïä·ˆ?aÛ¿ØÓö«ñ/‹ôø+g‰?oÍGö3øÑð£öŠð‡¿eGøYà¿‹ŸõKK?ÚkçÇÙö9øãø(_†kW_?iùåøWâýcÄô+ᦷñ†æÏúÕিðMÍj­­ÿÁA¿b t/\øK[:¯í_ðO?Ь…Á¼ðΪnü}ÓüAh-.ÍÎwäê0 [6Ù<™6ú‡ÿloÙÅ¿¼KûCxWö¨ýœ;ø‘û%kŸ³§í9û\ü4ý—~þÑ·ÿ ÿá•ÿ`ÝOã·Ã9ðßãö‰ðãö¥ñgÅÛ—á§ÁoO૯‚w>8ø·ðGÆÒê~#ø7ðgÄZ=ÏÅoxÏǾÑ­¯>&j?ßúŒøEñ·àÏíàËoˆÿ~.|1øÝðòòþÿK´ñçÂ/xWâOƒ.µ=*aoªiÖÞ(ðn­­hsß鳑 ý¤WÍqg1ÜGµéÕêâjN¶m Òµr©K0̳,>IWÂC šà«ÁdsÃÔQ§S†ëbñ¸¬Û1ËTi¬ï‹’Çb'F–8n "<¶¶^ëâ*Õå¹F#GìñN®Sœàó/íZxŽZÓ¥ÁàVŒæ’ËTUl- x¯­OüÔ~Ðß³çÀgöuðÖ—û~Ï?µ¯À؟ĵæâßÛCáWÂ_Ø£Å:.·â? øƒáˆþGª|3ÿ‚rþÙ³?Ä‹|1ð·Ä…ø-âïŒ ø}û!¿†¼GikªüUð~㿉 ñ=ö—ú1ûÇðGöQø+ðSöwð~¥ûejžø—ãoŠW?uÚGölñ€®4û)®î|k}áSEø{û;üøiû$ü>´¼¾Õ´/‚ß ~/øö}½¹·ÓÛà <£§‡!ºý?®;XøwðÿÄ>0ðoÄ=À¾×<ðêßĶŸ¼s¬xcDÔüaà[_ÙÙiþ0¶ðo‰¯lgÖ¼1oâË 7N±ñ,:%íŒzí…•¶¨·PÚÀ‘çFP¥R³åœ¡‰Žg)©VŽ ÀáèaiMÖèVË0±À¥Ã‚¯‹ÃÔ§qÁË §Ož4nÔ%‡XꔣN<”3_1ÄSÆU¥yJugS4ÄO5J¬^e:J”'–Vúõ\wãüãᇾ4|Eý›>|Oýœ|Qñ;á.§àÚî¾0è_²oÄÛ²O†¿ï­¾xÁþð¯À/Ãßþü3ø©ã{]gYÖ¼ûY~Ò_¾)øáV•àx2ßGÑ×â^±â7Øÿaë~ÿ‚;üºø©àŸÚKOñ¯Ã/Ù;Â_ ¾ øÅß³×í©|~ƒÇ^ð]€µm!~¯Ã‹ïŒ~3¸‡\…mí5Ÿ ø;Ä&·¤Æ|I êz…jãõ®Šâ©‡ö¹>y“¹F4³ÈÒúÅxFJ¬jPyÜ(Vpu%EÔ†>Åa'4°ôªÓÁ帉Óxõšã3~êx…O0ʳf¥W*št!7xª3x*˜šåËí)ÈËp˜©Js­(Õž.šo òì6WüíÿÁ$?`­+ÆŸ²§ìñWö‘ñ÷í©â¿ˆÿ²¿À‹_‡^ýj…š_ìñàßÙ{â¾­ðÃEð'uo|9ögýžþ$øûUðχ.õoxâ—Å?ülÓìômSÄW>ñuö¹u¨ëãÕ?aŠ^2ÿ‚u~Ëý„¾8þϵ?>2þζš÷Ã…ÇÀ_Ù›ãWÅï…´¯ÇŠü@ß¼a |wð‡¼Oð?àî­âí"çKѼw£þÓ~ Íð×Å–ºÖ·ãô¯…Óø{â·û¡Ez˜ì\ñ¸ÌÇ®µG_Gàä±2Äⱋ…­^v±´+cóxzøøfP–:Y…ƶ‰ÂyØ<<0˜l-(â'öpÃU¬¦—Õ©Rú¼p5aN¤pU©CWC<ž7 O…ž514+ÿ7šOìGáo†ß±ÀÙ¿öÿý”/ø…ûIþÖÿüQû;h~)üAýŒÿhˆ¿m¾2ü3ÿ…Wyð/P“ö„¿¿ðÍßÅ{áω¿f¿ ø»Å𮥥^ø«Pðå§Àù¾'xƒEû;öÕ~;ü*ýŒ¾9\þÐÞ,ý©>3|6ø}ãï‰6²çŽ~<|ø¬~Ûÿ¿eý'Â^¶ð–©ñ›á…üÆßüQ—ÇÇúVŽšßÂâÿ|§ø[Å)ð>›¬kR[×Z+ϯFp¹®0… 9–WS*… j¤°¸:.X(á±T¨V©VsÌrì]…Ép8éÖU£’ÏÅýnUhWÂuÆmVËëÉÊu°y|νwÉF6¾"¦3‰§RtéÂ.3˜bs f…(á%Ž£–×ÁÐÀý[ Ãò£þ ·gñŽ÷þ Iû+øáìZ—ìÿñãÀ~ü4Ô!ýª¿f¶‘x+ƾÒ´ +Æv^%øâß~Ì_¼S¦´6º®™¡ëºŽ´ß^Miâ#\ñ.“e.Ÿ¨ýûá ã}—ÂY4ˆÞ?øiâÿ§Fñ$-ã߇ |Ið£áÌÚÕÔº›xVòÇá§Šþ,ürñ‘m¤ÚK¤[k^üNñ)Ö/¬¯õ;UÒmu4M;Ö¨®¼Ö³ÍjæµjsЖqR½lL¨Tq©F¶%Uö²ÁV—5\$TëT(Ó•ãjN´ëÕ¤ªµBs¢ðÒjG…®ëSŒ¨Ç’§½Zxˆ7/¬ÓTáÊ•iJ‹—´©N•'VQ?“Ÿ…_õOÁŸ²Øö[ý¦þþÜ¿ tï‰úOü«ã×…> þÑŸ¼WûE|/Óþ üPðׯmN×ö¯ø?áÍ÷öÌñgÇ/VŸ ¾%~Îö>"üSø½àë«Í+WðÎðþ÷ÃZΕcúyÿ1ýŸüð[þ ãû:ßÛüñ7ÁÏŽúßÂ_øSö„Ô~,ü$ø‡ðÏãç‰|]ððjúežñÿã‡4/о&ð©è¿ ¡ÕfÔ|áŸMk¢ü,6^‹L³ö*ŠTëNšÌ-T–dð•kQÂRŽ…©…–-¬.[„§zx ’غ•¨d´Ü¨aqÓ¯Œ£U8Çã¿…Ÿ´×‰î~$x›ÂZ·Š?bÏüDøåðã/ÂßøÏĺñ‹ øs{®ÚÛéÞ,øeâÝ^KËË‹í|â ü&ÿ‚Kø#ö¹ð·üCÅž&ðïÄÚãÿí ãoéÿðU¿Œß¼ áˆÿ~6ø/á¾¹ûAþÎ)ão‹_õ{¸%ø}£ë?4_ˆºŠ|/e¨Ìÿ~趚Ljf¼þ´¨®jýŽ A¸Õ–“e*¤áíò솄¨eÐÄS‡,'ЧX ÔÄG’”êàÝe„…zÊ­ÄB8Šøª­Õ§ N#5ǪTêµ–uZlÇAÎ3té×sÇÅPKšœ1ª„+Ç Aaª~`~É~?øwàOÙƒã~‘à‡ÿ¶Züø;âŠZ‡‡üMñóàít¿þ'ß|L×|Oñ—ÄøWáOÆ_ê?µ×Æ_Ü|DÓ|oñ \ðLj|añ;ÅzwŠ I¬]h·zÞ¯ÿÛ³øÇ{ÿ¤ý•ü ðö-Köøñà€¿ þjþÕ_³ÆÛH¼ã_iZ•ã;/üñoŠ?f/ˆ^)ÓZ]WLÐõÝÇZ‡o¯&´ñ‘®x—I²—OÔU讇Q¿í)U©Ê9,êÎ¥i}ab²í[Vuéª|ôñ?Û·R“‚¨œpüØŠŠ5–#HNTᇅ8Ї°Åã1-*1•)GéIS ¹RŠ„èÂRN3¡8¹ÓŽœ%Oùáøýû/ŠðT?ØÛöÉøwâںݿf/ڣŸôåZ_¸ÀÏ/ÄÓ¨ê;O ^ŒÕz4crÃc0Ø)N¶+K€Åÿ>øËÅ_ðK?‡´çìoâ„ÿ‚„ø£öÅø‡àOÛkâïí ûüB¾²ý oµ?Ù¿ö­Ñüaiª~Ø>(øs¯|ý ~øÊxü7¬|3øgῌþ2м;ð¶ËÂÞð÷ÃßèŸßÂ^Èø=ðkö€ý†|ðö`ý¤¾ þØ_ ?à’ÿ¶çìeâÏÚ×ì¥ñà­·†?h3AøW©|ðïíã„0x8h\xâ§ðwâ…ε¬ü´×õÉ-¼-âÇñV·s£Íý`üwý‘¾þÒ~-ø)㟋šWÄ OÄŸ³¿Žį„W^øåñÓá=‡†¼rmš ~Î>ö›ÿ‚ZügøËÿâø{à¿øLý·>xo[øÿúøÇ¤ü9ð¿Œu_Ú#áWÿe/‹“|ñ/Ã?|eýˆô­júÿâoÄ}Ûã|^Ðþø¿Xø‰«[øïMÑuÛok_ÕmÙF«¡‰Ãâ)¯g 6&XŠT)µNÝl-|%IÒ¨¢ññ:Ìu,𝶕,$1^Ó2ÃgX¼6CÎöoØÎƒ«V¬j*Ь«ÉTnZt©ax¨ÃQÉaèUÌ¥<*b+Sœ2Éä˜,V7‰ü.ÿ‚Ï|+±ø‡oð_Xƒá¬ÿügà½âýÏ‚?gߊ¿ðOï·wì™ñƒX×téø{â%ÿÁx›Äÿ²‡Æ$Ô—G‹áí9q®èZ´Kÿˆ°jz/Œ´írÂÃòïã§ï/~)~Þ´%ßìwû^¿Çí'þ Aÿ×ñïÀCNý’?lŸ‰7ðŸÂýölÒ?h|ñƒ>ë¼Òôí'áoƯ|Gø³ðŠqÅhÞðýç‰ü]á|"°×?±Z+6 ¾ÎSÂã(ãhGÝ„hסÄ9Oª´œcí\EL£ ‚ÅÊ­JÔþ­F„°4rúÒÌjf}5*B¬*S©Ož\\ JsjtªáñZø\E*Ô§S•*”êFãJU&ªÇ0©˜R†WK)þZeøã¿ëž$Ð|-øá?þÁ_´·Ç=;àí=àŸ|Aðïí-¤üBýŸ|5ð›Æ¿þü`ñ¦‹«|"½øAûAj ô_j^ð·‰ôÿ‡?mõXüCú+ð áÅ/ÿÁ·íû8xwá'Å]ãzÿÁ;>$|µø=ñ+á·Ž¾üD_‰¶_ üGá(|(Þø½¡x+\S{­lômnka ëðÍo¨èÚ¾£§\Cy'ôEo˜Ñ¥˜ásü+„pñÏéÕŽ"xxÆ5*b³ìLkÎ6öu«B §íï¡\|Nðcø±àOÚŸöAøOûxÃ~<Òï5 V)í¾|2ý?d âŸÆÛ‘â oKñÇÆÿiŸô]oIÐì4{âµÚ[x"ïÜJ+ºx—"ҿା ÿ‚€kŸ±?Æÿƒ?´w4?Ù"Ûá·„>,|s×-l;ý¿4|cðöqðËÅüzý¥µSð—Æzöµñ~ÇGø_â?Œó[ÿk´W•<$j`*àg7/k•ÕÊãŠåƒÄ`hÕÁb°U#•¶<%,JÆâ±xçZž/ŠÅÔ¤–:–—`p~¥ dðùž3‡3ž 3ÊóPu$¨b[Œ¡Žøsû þÐÞ+øU©|ÿ‚B|gñU—Œ¿aÚÇÄ£Ç~ ~Ó——ß´·Šõ;ŸŠ?¯µO‹´<³'Äè´Š-pþ-øíãÏ M⯇z’øŠûÂþ8ðΓûwÿRø ðÓãü'ÀÞøqû0Iãï†~ø—û|Gð?À­?öañω<ðƒÁþÉâí7Âÿ³ çø¾#øbûÿn|ká­gáN—ðÎÇÆö>»ñ7€.<‹u©ø~OÚŠ+ÑÅW–&5.¢§> §Ä‰Ô^ÖŒñ”³(ãðølEìý¾_‚£†Ëòܾ‚©J¶CIbj0øÛÁÿ 5Ïø"_Ç/‡Ÿ²ÅmÓöiðGü(?è?~ø+ÇZwÃ]þ±­| ý¡¼%®xË⧆~3ß~Ï3è¾2†óW\ÓáÕü7¡þÁ^>jÿàZ…¾ | ·ý¥|aðÿâ÷ìmñÆžð÷Â+¯ŒZ®¡‚>:ü.?|MàŸ†:O†üOây®>\|Lµ¿ðÿ„|7ªx‹ZðF±â/ Ûé:ž­}¦]~ÆQXM)R§ÚR¡É±”Þ!F½*•rDkàñªQT}¾e™ÊêqVg ÐÄq*•f!aña%p¨áІ"Ñ„U } B‚T*:y­= f5—<–_…… C!Ëç´2J8¬n‡µÃâeN?Æþü=O~ÙŸ>þÅ?µÞ•®xgþ ÿÇñwìi—ÿìý¼|'€>|!ð×ìÓáïŠÏÀ¯…²|ðôŸ ´m#Á >-øâï‚ü'á=gÄ^ Ñ|%ðóÄSjþ×>h:¯Û¿³Gì³÷íñ?Æ?ÚTÿ‚„Û~ÙÞ ý¨~3øGÖ´ÙWá‰û<ü@ýŸ|[­øºûáFŸª~ݶ?±w†|]âÏ€'ÀxWMÖ?fŸ‰?¶?ü%¾øà«¯ø{á$úßühÿÒý®k õ?âWúH×£*õJŸXŽUÃ9\±—"R«‰‡ áeŒ›‹u¡ÇB›¡^X\V1­ã)V¦Ô(ËJ*Ô¥§<=:¹£§…“r»ÂáéçÙa(¦žOYT–ìcø]ÿžøWcñßྱÃYþ;øÏÁzÅûŸ~Ï¿àŸß?nïÙ3ã±®éÓ!ð÷ÄKÿ‚ñ7‰ÿeŒI©.Â?Úrã]дÿh—ÿ`Ôô_h7Úå…‡Ê?¿e+¿Œ¿·G|WûZÁÿðOÄX~ ~Ïÿ¿c ÿf/ÙßàÇÅxCáÕ—€>Gá…ûuYþÇ¿üuû(kº'ÆüOÒþ7xwUý­?g߇þ4ðŸŠìø³à·Ä€´V—ûEx7áWÅÍoÁ¾)|2“á7Ä kð_øÄžðÞ¯}ðßE’×úK¢—/û> &ëÒÁá2 - x§*´âòlŒÅrS•±œC…Ààpù¾.†&Xl,0ØZØz±pÄïZ¯·ÅâñRö”¾·Œâ LÖ¢§:t³ÜULU,=)Ô§^†I:®yD%JXXWP­ÂccG J‡òað³öý›ì¿mø'÷€¯>~ß¿´?ì¿?lÝ:õlÙÃã´_³ÖßüðÓÅß <â¯ÙÿÃß~~ÉŸ³ß€`×´Š×øKñà?Á˯Ïà…:νàËM?Aý˜õªþ³Q$HãEŽ8ÕR8ÑB""¨ˆªªª€ªªPN¢º=¬¾«†ÂsMÓÂK©9J>õZÎ8b])Nsœ0õeJ›£Br©R8B\N*QUŠ(¬Š óŸÿÈzûÚÿéN£^^sâùCÿ`Û_ý)ÔkŸü/ûy~¥Ãwéú£gLû‰õ޾ý·?ä1ðûþÁ¾ ÿÒ­.¾åÓ>â}c¯†¿mÏù |>ÿ°oˆ?ô«K¬éüT~úhO¯øcÿ¶ŸJ~Ë¿òB¼ ÿs7þ¦ ¯ý¹¾6üiý¼9ðcâ·Ãýká~‘ð†Ëãç¿~Ô^?øaâßë:Áω1Ñ|qãoêÞøËð¯Kð3øO\ÖtÖñ_‰üY¥xóCðÿ…u=GÆ·:Ô ¸Ð|Kìÿ²ïü¯ÜÍÿ©‡ˆ+½ø³ð«á÷ÇO…ÿ¾ |XðÍŸŒþüUðoˆþøÿÂwóßZÚx‹Â-Ò®´MHšóKº°Õ,~Û¦ÞÜ@—ú]ýާc#¥ÞŸ{iy ôÉK›8ëõ|^*NnñTð˜ª8š¸òŠ”£†ÇR¥<&PN¤hW©*N5c EÃ’^ÒIΔ+ÐÄá¥^8V­…úÖ¦c0ÔªT¥N¦+ê¬VjF”±i*¯Ù¹'ùðSöÓý´>)ÿÂmðòÃÅÿ²_Œ><|5ý ¾!6¯áfø ñ‡áGƒ¼yûhäñçÂï‰:6«?í;ñ“ZðlµÝkáî‹¥|e‹Hø££xROëšD_|oà]böïñÅ??hÚ¿öIý« ñ\ÿ²ÿ‚?e{ø 'Ã_ÚþǾýü[mðÃÁ>'ñŸí/y \|‚ÿãäÞðŒ<ñWáæ…âý?Ç·? Æ•iž=´ŸÃºÅÉþ)x#\øqãxÏ[Ôm¾&j>Ô~i÷ºwÄíŸ"ñ¶¿=¼ÿ ´7°~3~ݺ·í?ñ&÷þ d~"xçà¿ÆþÎðS_ø&µ‡ìÙð³Å è“øCâŠüñN÷Â?µx¿Äž/ñ‡ÄëÃÞÖ&øA'ôkðƒöý›þü`¸øóðïGø­Å+¿„> øwâþÒÿ´ÏÅK ¿…_¢‚?x^ëÂ_þ/xÏÁ—x~hîõ/Máçñ9ÖõïkóëSk~4ñn¡­y¯Æßø%¯ì]ûBøÛÇž?ø—àÏ‹ßÛ¿2ºð¬ž&±¹ð΃y©ö½&Æx=¼uxb³Ìkµc«â±’¼©û>3ÁguzêN¼1ê<9—ÒËêbñ)×Y®'Ž…g?ßÕñ²¸C/ÀÕÀ¸©RúŽ[†¥v¥8på¿8£:¼ÔëPÀcsªÙ–.žŒÝ/ìÙá°*Žð¯‰ÿà¥_¶ƒuo‹Ÿ³l >|ký­ôÛZ×öYø_ªüð—£x6ëÚ¿ì{¥þØéã gàÿí ûcüÓüW®x[Ã1øŸÁš–…gû]|?(rxçM:Ûÿ©~†ü ñ×í³ñ#öBñ½ñÏáǃ¿e¿ÚÆÚßâ6“¥CâMß<³CÔu(|ñ;Uøcð›ö–ñÕ¦•eâÍ=;[Õ~ißµ/Š5 êrÞègâv»¬Åî%÷ü÷ö/ÕeøÑuªøâv«ªü}ø›àO?üC©þÔ_µ^£â¸>.ü1–à‰ |[yñ®|ñÇ…,-,|7¤x—àž­ð÷VƒÁzv›àVºé¶:¿Ñºìãð·Ã5ïz$¬üâ3\Ó)ü&Óµë­CTøiâ ~ö+mNçÄúv¡âCúRÒÿà–ÿ±V‰ðƒá'ÀýÀtüñ©â_:Ö—ûQ~ÕzÅï‚·šç‡¥ðžµ¥|%ý í>6Cñóáσµ O>©øÁÿ´ßéMauáÙm¥’6çþ+ÿÁ#¿`¯6 Ò|uð·â*iøWãO‚¾Ò< ûQþÖ ô‰þ|MÕ%×>+h¾)ÒþüpðU‡5‹úÌ£UøÅâ¯[øÅÿõ,îþ#ëÞ'žÂÉíÌÛt14ðêu0üKB…7NáF¶u€Ï0™~:‚§}Kû2†oõ ^ zyÕu[‰ñXª­Z˜*ݹF:9vcƒÇT§Rr£ÉqµÜk9ʵ,«ƒ¯ˆÀVSQŽ2XÚÙ~ 5Âæ˜‡ù/Õéðî ˆÀF”~9“öðý¥í> þÓŸþÁð ~Á3<àãWÂо ñö©ñƒãì~ýš~þÑŸo¾|Rðßů xcà5“|;ñÉðßÃ[Ï|øá‹ücáÝGRÔƒáë«u†—íÿý³~ËûJAàÿ~ÎöÚ¶àÙëö™ý—¼âOÙ/ãŠ|]ñöYøƒeã{Ÿv:žŸ¥~Ú ›Ç> ÛxcP×µÕð§ƒt+Fð¾Ÿ÷†¯oþ/ècá÷è£ÿÈý‹umDñ.¡ðÏÆž™ào‡_ |Gü/ÿÚ.-ã7¾Çsoðëߴø³‡?k;/ ÙÞ^iÖûNi_®¥Ò¯.ô›Û‹­6æ{Y>œñ'Àƒþ0ø§àž'ð®|Røoàoˆ¿ |âýB§½ðï‚>,Üø>ëâghg\x‘üáˆgºº±¸Ô,¬­/ôí.îÇO×üAmªz9•ybqx¼^MK^¶!C;×Tqxª¸‰Ïš£åÏsºY=ZØ'”¸k*Y¶]–ÖÍ)c¥ xù}a0˜LDÒÃ`èáåZŒ©¾hÆYe*xáªáå,£ë }:´ñC‰ÅeÙ–?—TËá‡_ÿl_Ú‰¿³Š|à_Ø£öœø ñ{öĽðì×ãxsÇÞ ñG†uŸ~Ç'ømð â‡Å/„_³ÇõÚ{þ »ûKþØ > ü Ó¾*é~.‡â—ìçÂë­'Á7~?ñ—Š ^ÛV¶ Ò¥á¸$2\)ûþÊ?~|CÖþ!|MÔ¼IðãB—Á¾‡àŸüsö×ÿ‚Žx#ÅšÞ±áÝgLø™{âÿÛ_Â~Ö>xƒÂºN³ám¿ ¼+ ‡ˆ4Ï꺟·¬xjÃ\GÖl4»mRiîäô±•©J®x\<(P©K¸WZ2­„ƒ©ŽT¯ˆ¥J¤1’­%†ÅSZ¾Ú†_Ч„ÅV†;W J¬°Õéâ«NuÔ²ùS«J4kUÂË,©‰ö”*{9B2• bn’T%˜¨ãpx Ѧÿ2¿n[¿[|Yø] ø?Åž4“þ û/Má}Å>-Ô< àÿx¯GøÏð›BM7ľ;ð$jÞ±‡VÑäðþ³­éÞñ–¥¢I¦ÜÚßÜéí§Œ_ØÛÂ7Þ+¸ÿ‚»þÖ_­¼;ð»öŽøÇ$ÿ~>þÊ~µŠçFø­~Í ügáÿêÚ‡Ä)lôKãž±ñËáçŒ|9ñoGøÏqàŸ‡öž øq¯øÃVÞ²»ðŽ¥$Ÿ£?¿àß²_Æo…ß ¾ øÇÀÞ9Òþ|ñe‡þøoáwíûD| ûÄ/_·ñ~›ñ ^Ö~ üVø}âü@±ñµ¸ñí¯ŽØwG˜´«+«[‹˜b’ya?½ëŸYx÷Nðo‡l~(x“Â>0øƒm§E‹µ«Î¡{é4 ô9¾2–cšfÙ5V?ÚyŽ#©ÕŒ[¥ ø¬meK›ÚNÓ§ЕJ´Ô*U}ZqX =lG‘•àêåùvS—Îq­ý–aðU+§(ʵjpôe[’ÍJXÑN«9Ï (Ôtç5Œ«]uQ^aéQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yωÿä=ýƒmô§Q¯F¯9ñ?ü‡¡ÿ°m¯þ”ê5ωþý¼¿Rá»ôýQ³¦}ÄúÇ_ ~ÛŸòø}ÿ`ßéV—_réŸq>±×Ã_¶çü†>Ø7ÄúU¥Ötþ*??ý4'×ü1ÿÛO¥?eßù!^ÿ¹›ÿSW¿W€þË¿òB¼ ÿs7þ¦ ¯~®ÂBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼çÄÿò‡þÁ¶¿úS¨×£WœøŸþCÐÿØ6×ÿJuçÄÿ þÞ_©pÝú~¨ÙÓ>â}c¯†¿mÏù |>ÿ°oˆ?ô«K¯¹tϸŸXëá¯ÛsþC¿ìâý*Òë:Ÿþšëþÿí§ÒŸ²ïü¯ÜÍÿ©‡ˆ)¿¿hßþͶ~ñĽ?TÓþø³ÆxSÅå×>xwáçÁ»DðÖ½âQã_‹:Ï|{àëÍ'Àæ/Üé·:Ç…´¿Ýi7—6×Úæ›¥øv-G]ÓÝû.ÿÉ ð7ýÌßú˜x‚¼çöÂøKñ3ã‡À]À þüKÑ<ûG|-ø«ñIøáãÝÁºm‡†þêSk–Zσ´ýàÆ‹OøëDׯ™¯øcJ×#ð=…¦³£Øj1xÃL½‚Þæß¦\î¶_µusŒ’†2¤ ê*9m|ßG5®â§MµC-©‹¬Üg G“š2RHMÅQÆÍ©J¥<³5­†„$£:¸ê9n*®_F.Pœy«c¡‡¥(J2sQ”\[Eß~ß?±Ãÿ‚~ý¥<[û\~ÎzWìùã¿ØxÁ?ã5…¾/ñ^¡¯Ýødh¾ñÆ•®_xw\¹Óu}7Y_>™¨\ÛøWOð÷‰õ¿ͤèžñ£¦ÖñWüöðWÁoþÑþ#ý°¿f«?€,ñ¥‡Ã¯ ühµøÑðÿWøcâ/êÃècÃZ'´m{Pðþ©©é·°_Ïâ(¬¯æO èú7ˆ0ýª¼-ûE|°Ò>2|Cñ'…|]eðëÆß ý¡þ|@øGyñÿÀ¾xÛà>Ÿ¤ø—^¿øÙ቞ ñ'Â;Á~¾0Öo>$hÚÝïƒm´Ÿ 6•ª/‰uµ”³Ð›M¿¤Ö¦ÎãËü‘ý¼¼AûTAðÏöPñÆo€Ÿ ¾%ü[ÐÿnÏüfðÇÁ¿‚ÿlÏÚ‹àŸÃÏü.ø{ãhtþ*ünøOû7xßÇiâ)|u©hÞ$ðׯ¹e¯éß|Mâ?&“ð{â\?¼Gâÿ}—áoÿ5„_¶f·ã…Ÿ²v‰ñÛöÓ¼E5ÁY|Sã?Ž_²¶¥â ‚z?Ÿ þ'Õþ üñĽ'ǯ iÖ_^„úMéøqm¢xM]|øj gUʲpÁfUà”±XWVž„'D%VŽ]’âùeVš|u¹ý~þÍ6^ øcàOøÏ¿ þ|}¸ý˜ˆðÁ? ×ÂÛ|u»ø £øƒWð§4?ÿÂ;¢ë ~Aáë;ßxWñ§€üY{ cøOÄ3Yzí/ðûÆÞ'ø3¢|ø7 Üh^ø‘¬ø_àÿŽþÐZõÿ‡ä:5®—àïøBô]2ûM{ÉÅzCéÖÖz—ÊšgÁOÛPýŸ?fÈ<]ð‹öLoŽÿ²W<«øá‘ý£þ)xÃàwÅ=¿uo„ðxŸÄ?õ?ØïÃ~1øKãÝ*ëÅú×<+‘ð⽦‰©ø[E²MyäñMÞ¯àì á9gŒ¥ 4*äË«â)ÉÖÏ2Ãg5§‡£(¬\è%‘cgGìã*ø¼ÂzÔ°xzÑËTÕGS-Ÿ³§­RÏëã0´q0•5£SˆÉpTñu©©áéÍË8ËébqtÜÖ €Äã©Ê½xUÇý§¦þÓŸ³fµðRÚWGý¡>jß³­†§ªÜü~Ó~,ø ûॾ™¢ê÷Öu)þ*Zëòø '^´»Ñ5;É5å·°Õín4Û©"½‚XW˜OÛOö8“á«ñþ?ÚÏög“à>…{¥iºßÆÄøñð±þèÚŽ»qei¡Øj¿ÅGÁº}î³u©iÖÚU­Þ³ úÅý”6‘Í%Ô 'ɳþÌ´†¹áýWã¯ðïö]Ó?hcûWøgö¤±ýŸâ<[û7ë:¿ƒþ Ù|Ó-µÿŽ7_³§…"}ºúÞÖk}ÇYÔÌVáüAý¯¾ü0øuðGãŒth¿ ~2É Í©|JÖµ†ðÁ=Ä~Ô¼§ø»ãV§ã/ˆÞmÂÑXi¯¤êºŸƒ`ñÓ躤ñ]êÖÖ~†ÿÄV_ü ý›?n/€±ßÆ_‚ø[û.ø¯âÄ‹õí×Å·í]â]Mð'Ç;k^×µ?|qø¹û.üløÙãψþ ñ~²t7‰týJŠº|7_§ñ‰/í>hlÿÿlŸ~Ï¿²‡Âω߳÷ì_¨ëþ8|Ö|_¡MûQ|Sñ×µ?†ßôMôˆ>¾ñì-¡Ý^|V‡Æ6¯huO iƒwáýZµøÃý©rbÐîœe:Òý•)cü?¨ý»¥Rx<kŠ”x×åF­*8ïì,5|^# %*Õ~¿ˆÂÎThÕ¥€åªçN’J«†ázÐX¼^YG„ñP§Z+`ÞsZŽ>¤p؈IR¢ðT±0S«J®7î›/ÚöfÔ¾ÍûLiß´WÀ«ÿÙÂÞÖöúãö²ø¹à ¯‚0XéÚì¾Ô/&ø­ˆ$ð$V¶&‚oÞÜ>¼°Úë°Ë¤Nñ꽸,¿j?Ù›Rø#7í1§~Ñ_¯ÿg {[ÛëÚËâç€.¾Ác§k²ø_P¼›â´ “À‘ZØxš ¼;{púòÃk®Ã.‘;ǨFöãáÛ¯ÙÏö±’ëÆž<ÿ…]û)ê~3ðwí½­þÓ¾ë_~$Üü=ø‰ágá^¡ðŠ+¯‰ž2ÿ†O“Uø/ñGA‡R‰š焾üuÓì|Wj<>ºÖÛÃã;<¯þËÿµ¾ üQ¹Õ¾ þÌ ñgãí+àŸŒ>:ø?á¯Û öŸø?à¿ h^øuá?é^(ø_ûg|ýŸ<ñïÃïuï‡~ñV£ã­/àv‰þŸRø]wý¡aj<]«Ã’Ô§F¥l.Q]Ò¬êUþÏ­Ž¥”ÔÆákJ)Ë1©€©˜ã(ÎXXaáÍ’Õ•gBùK+ÞœWµ”j;Ò¥‹Í`ªAÆ2Æá°œÎžØÓ“’ÁÕÇa°x] ¸ª’ÃÕYš¡MºøU_Ôþ(ÿ‚†þÁÞ ø?¦þÐ^!ý²f[_šÇŽ´O†zWÅÛ?Ÿ5Ÿ‡Z¼AýŸ.ŸáK/h¾ Ô4Kb=7Sµñ¯mãÂ=á½ñ¦¾Úg„ôÍKY´õÿþÑß³×Äo„ºÇ߇¿> øïàN§x—WÕ¾5x7⇂2xÇö‹Ñ?iÏ xWøçñãƒì|KàŸˆÿ >!é^ø“ûb|Mø]eûGüg¹ñþ«ð®,þÍ:m¦¯à¹¼=á/ütñÏŠ<)à_|m𗉼@.õo‰šž‡ðCá,Qx/Äó|;Ó<¯ÞøZOˆ8×ÑÂâêP—µÄÒËèâa‡“Œý–2®RY=VzXÇ™P«S5„Œ0´ç\Õ| óƒŒ+VÀÓÄKØÒ©›b0š·IUÁÐÅâ)SÍ)Æ¢‹Ëðø¬,0øšqÆ{j”ÝeJq”•o«w?iox#àÿ…¾2ø>ËZøý¡üI¹ðNŸðsGø wàßjµˆínþ‹á÷‰µ¯øWásé!°¸Ý¿¼Uñ Âßlô¦×5OØéŠ·/ç¶¿¶…®> KñUþ|jƒÇ|H¸ø)ÿ Ð4ÿ†zlj>7C«6—¸¤Ñ>(jŸVšÜ'‰¦ñ™øÔ>h¾kø—â6‰ám/ZÕtß1ø›û2üIøû |ø¯üý|iãøàhø—û-Kk«øöø7€,txüIð—@‡PøGñ‡_ðoÁOë–°ø“ám•ÿÁß][·‚¼¡ëz½•Î¥ueËø öXøÕðûöiðvƒàŸ†?³gÂÿ‰Ÿ ¾?]|rø9û1ü4ø‘¯h?²¯€´‰î5óàî—ñcNý˜´Oi¾×4øãƇ\пf._ øëÅI¢XxkWðþ‡ý­¬ª´ãO›SufðX|â–^—²©Uå^áêsÇáœcUâq+‹âŒLãO¥ZY^]ìèà«Ñ§—ñ†½x|jq„±°8‡<<í ÚŸÙùíz1Nu¨Ô¡„xü/áYTÂÂ<Ǿµjµ¸SÝöÎðô?æø¡sð[㥿­þ%Zü¸ý™™ðÂçãÅ¿ÆmBúÒ /á½ÕÕÅ[¯—šž‘©i~1´ñµ×Ç~jv>)ºøƒm¥Ïç+­lÿ \|—â«ü"øÕŽ"ø‘qðSþ iÿ õ|n‡Vm.?…qI¢|PÕ>6­5¸OMã3ñ¨|$Ñ|×7ñ/ÄmÂÚ^µªé¿>xÛöGøÅñövøŸ§üCø]û/|Nø§ñ·ö‹Ðh?‹³¼qâ~Éž:±ðþ“à?é?|EñGÄŸ³ßŠ|U¬èO„~xÇ/âËßÙ Ç®|NðÜV’xGðÖ óY]ðì±ñ«á÷ìÓàíÁ? fÏ…ÿ>|~ºøåðsöcøiñ#^Ðe_iÜk:-çÁÝ/âÆû1hž(Ó|'®h>+ñǹ¡~Ì:\¾ñ׊“D°ðÖ¯áýû[YÆ—µ”'ñÔþñÿŒô?ñ~»uðOá&ðûþ2ðïÃïø›JøÇñÇǶ¾ÓüáI¬½köÈø㯉_ü/ð³àÃ?„þ.ƒCñ§€î¥ðg>>|xý‘Dðw‚mï.´{¿„´ìÁáO|Xø9ñÃ:ý‡„¤Ðu ønêÎïÂðx——¦ÒÏ\7i75†§VQ£OV–M…ÄP‹©V† 2¯„˱AZœhÏWƒË±x¹a2Ê”ñx¼&. Ê•\¤èQÍ!­(Ñ~Ê›©Z¥?iƪó<>*¾[†–:†W‡—:XhbóXÒ©_F¾-Çà«a²ªÿR¡„Íjà#Õêß·ì§| ñí/eûOþξ øá룣ÏñSHøýðZ†w~+šÒÊëIðL?µßh¿ ì#ð·Ãß|JðtÔ5=_öÆñ§ì¯ñ/ö‹ý©~ [C³ñ\Ú÷Æ…Úˆ"Ó¼Vÿ lê°ø9ôíHø‚Æ?ˆÉ­$ºu曦izžµéø#ñ›ö}ý¥?e_þÈÚ~¯û2|øiሱ&¥ x#à÷ƒÿlOÚCáχ|YûüøÃàk›Ú|ý…¼G¨|!ð^¥¨ø‡á߉>|`¹ð‡ˆuoüGÔü?|c¤|9Ôµ]_õr…¶}§Â¯Ú[ÄšÁOÙÓã÷íGâÔ‹Å? -¿j?ŠÚ/ÁŸ øfßàΛð¥~ Éñ¦Ïö'½ñ§ÄŸŠšˆðöˆÚ®¨üðNŸ/…­|=áqã)?á´Ô¼Jf•,yW,¨ñXœ+ƒÊ=ØÆ…\<©a±¡Q¥JŽm‹Æb”°j´ke¹u >6xÜF à X%Nx¼ž–:?V£ŒÁa±Ù¿íœ^sJ¶Jv^ß‚Ëð؈V9ÃŒ¯,p‘ÄÁa*}­þÒ_<ð?Ãÿ´gʼnžøð{^ðׂüNþ8ø×ã?ü4ðÞkãë}*O Øx—ľ$×m&| ø…àŠß üWosuáˆ? ¼Y xçÁ$µ³¿ºÒîîtøcPÕ4bÞ×S±¾Ó®fÓ¯îc‚þÎêÎV[‹y£OÊ?ˆ¿±¿íMñ×öZýšü%ñGÁß ðWÂï‡^´ŽÿÅ^>ø‹â Á> ðÕ„·Vö1^øƒÅ^%¿Ó4-ÒKÛ«[8îuûh^êæÞÝ\Ë4hÞ?íŸûMðsSý¢¡ý¬?f™gÝV²Ð5ŸŽ±üvø]'ÁÍ#]Ô¤Ò"Ó´]Oârø¤ø&ÃV¿—_Ðc²Ó®µ¸¯.¤Öô„‚R³|áñÛö3Ö´ÏÙÖ/ƒ³Ÿ‡µ_ŒK¨üaðÏÄ/iŸµü+öûÐümgc¢Ù£Õ>þØ–>#ý¡¿i/‚>0ÑçÆš¾©qò3ÿÁ/þ,Íû9xWI6ú&™ñgÁ_¶ŒkᇿnÿÛ/ºUüþ7øc¬üÖü5ãø)?‚<áÛoǾ4—@ñ/ˆþ"ÚüeñÿÃïx‚Þ]VÙæÿÃÚÏÂ=Ú֓ÅKë’sä§Eà¡Bs¥6çR¦#)Ž)J7:õWÕñ™ZÃS«‡¥ žSÅâ)âñØl±vÉ(¬Q•Z¸‰b£R:”cmásIà':õêQ¥B]À`°Ø×ˆpp†sB½iKˆ_Ö#ûUþËÃáƒ>7ŸÚGà ø/ñ_Ó|)ðóâñøÃðð|/ñçŠ5VûAÑü7àÏŸÂ)âV×4ÍKFÓt}V¾Ôoµ]>ûNµ¶–òÒxcä.¿nÏØ†ÆÖÚú÷öÈý•lì¯~)j¬ï.¿ho„vö·ôEÓÛYø?mq/‹Ò)þ)i «éM©ü?‰ßÅ– ©éæïHˆ^Û~‹ö,øûáߨsöŠøðûöbý›´ßˆ_´¿Ä_ß|Mð§Æø)GíûTxÆñ€|5á?üCñÇÚ#öFñ×ÅꝄôOÞ| ¹øqÿ=߆l¿·âZÝï‡î>Èÿ…âÿˆŸ³dñWÂO€¿³oÆ ¿ƒ5o†zOÀ_xƒâ'Ã?‡ž%ø¬Zjÿ³ãÙxÖo‚_³‡‰ïü ¶‹¤èþ ð=¯Ã} KƒÀÚ‰¾ØÏ©ø{Vº’óJŠ”*MÞ£¡JYeZÉ(T­O _û:¾iK©ÉÇ0Äà°óÇQÀûFXüEl<±˜lžyv7ˆÊ ¤½”%ìã:ÑÅS§VíÓöÔ玣„«^K F¼éákbiW¨–•:‘Ãb³cð¸œ?ssûrþÄö~ø©âÛ¿Û öZµð¯À¿éþøÝâkŸÚ á4ø9ãM[Y»ðæ•ኚ̾.];áï‰õ?Ø_è:~âÛ#U¼Öl®ô»kI/­¦:£ûUþËÃáƒ>7ŸÚGà ø/ñ_Ó|)ðóâñøÃðð|/ñçŠ5VûAÑü7àÏŸÂ)âV×4ÍKFÓt}V¾Ôoµ]>ûNµ¶–òÒxcø ã_üÛâÄ?€_DzÍ§Š¿iü~Ö?jŸˆÖš?í'ûF~É^ø³ñwâG‚| ð6¯â­ÁWŠ~(x»Gð†¨ø«Ä׋g¤èÖwzÅÕ²\\•:¦¤ñn·Ð¼9¦k~*×fÓ|5 ëZµ‡“h³t~økÀß¾i?³^·£Üè–£Áÿ°§ímûE|8ÑtxOÔü1ðçÃúwÆï‚>ý‰¾&êþÒ<)~`‡áÍÿ„´ÿh3 KK+ XhšN©oÿd™<'û7ø·á_ìõ­øÛÄ>,ÿ…‡ðÛã'„ãý©?iÏÚW㦱ãO…þ|HÓQ>$–/‹&×…ÉÖåJ}½ÖÜôqþÒÿ³ŒßÏí+íðJ_ÙÈi’ëGãü¼ÿƲþŸV?W^>d> ŽM [ó¯}–=eLyEê´à¿Ú7öXý¬?jï„¿ 7ÚkÞ ðU…—…üâ ?ƒ<9ªiÓkË?õX´¹”ZŽ2.P§V”°1¢Ô¾±:òÊ©b]_f¡\hK˜UrË«WPžZ°òæÁbgža¨¹á¥yN‹úêÅ]B…IÏ ,Ƥ!„S«RpUhaòút*ã¨á©bªæeNP«‚ú–'î?ÁC`ïüÓh/þÙ?³-¯ÀÍcÇZ'Ã=+âíŸÆÏ‡šÏíGÇÞ þÏ—O𥗋´_j%Ʊ›©Úø‹W¶Šñ¿áð‚^øÓ_m3Âzf¥¬Ú{ßÂŒÿ¾=x"ÇâgÀÏ‹ >4|7Ôîu-7âÂø_â/‚5 Íî[ ZÒÇÅ~ÕuîçK¾‚k-F {ù%±»†[k”ŠhÝç'Â?Ø£ãOÃ_ØïâŸÃm;Oø_¢|dñí¢~Óžð.¯ñÏâÿÆÿØø—Á?þ|CÒ¼ñ'öÄø›ðºËöøÏsãýWá;\xãÄ߆>(ñ÷€l#ø›ÃZ‰¼?áOøà×Ã=GÀ>4øµàxáøs¯è¿ ¼Kñ;Å{U£œ(Õ‡Ö*RË”a^q&3 º“Ãbq=½,T0xÚÙŠÇc0rx.ñ2ÅNœðsÌf‹Œ•9V”éS§ŒÌ¨âªS§íê×ÀåóÆÎ9Ž)áêSúæ… ø,¾­J˜ÌV"½,ÏVQÃý%û?|c_¿aø«¦øtè^ ñ7ˆ|Qÿ ÃQ}f]þ |2ÒõËÍ#Á¿à[kkm3Bø¡¦Øø.Â+½ZY¼ ­xcW¿½´Ôõ[Ý GöÚÎÒ4/ÃúN— èz}ž‘¢èšu–‘£éZu¼Vš~™¥é¶ÑYéú}¤ ÚÙÙZC µ­¼(‘CIj¨  ί²ç’£Ïì£hS•D•Z‘„TZÊ-ÓUë(ûZÑ¥ËF5g5Fé(SŒÅÎIΤ!Ju'R«£Nr«KíjJ¢ÂЫ8S«W…RX|=ZñúÅJ4á'ÿô?ö µÿÒF¹ñ?Âÿ·—ê\7~Ÿª6tϸŸXëá¯ÛsþC¿ìâý*Òëî]3î'Ö:øköÜÿÇÃïûøƒÿJ´ºÎŸÅGçÿ¦„úÿ†?ûiô§ì»ÿ$+Àß÷3êaâ ÷êðÙwþHW¿îfÿÔÃÄïÕØHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWœøŸþCÐÿØ6×ÿJuôjóŸÿÈzûÚÿéN£\øŸáÛËõ.¿OÕ:gÜO¬uð×í¹ÿ!‡ßö ñþ•iu÷.™÷ë|5ûnÈcá÷ýƒ|Aÿ¥Z]gOâ£óÿÓB}Ãý´úSö]ÿ’àoû™¿õ0ñ{õxì»ÿ$+Àß÷3êaâ ÷êì$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Î|Oÿ!èìkÿ¥:z5yωÿä=ýƒmô§Q®|Oð¿íåú— ß§ê3î'Ö:øköÜÿÇÃïûøƒÿJ´ºû—Lû‰õ޾ý·?ä1ðûþÁ¾ ÿÒ­.³§ñQùÿé¡>¿áþÚ})û.ÿÉ ð7ýÌßú˜x‚½ú¼ö]ÿ’àoû™¿õ0ña~ÒCö®–ËÂðþËþ.øðù­ÓÅz×Ä?|tøCã_úU¾•£èñI x{Ã~ð'íû:jé­ëúµÃÉ6¿wâÝOKÒ´½*ö9´y¯o¬µÄâ)áhUÄÕæöT êÕ”W3…(kV«ï(Ò‚•IÆ Uc%N›Œ%T©ÊµHRƒ\õ$¡î”§-! ¤ìç+B.V‚”“œ¡)/¦è¯çkNý¿à¦>ý‰?f¯ÛcÆ–Ÿ±7Å~ÒCö<ŸQÒ<)ð§ã_Áÿñ~Ѿü?×l Z×íñîOŽš£x{âMÜ>xÀÝ+C¿Ñï¼Wâ CZK-/áï‹?iìjÿÙkSøSâÏŽúoí+ðPøà-WSмuñ–Çãû¿…> ×4[Û=7XѼYñÉájºN£¨iöž¬kwv·Öv·PÅ=Ì1¿]zO ñq¯*tê`1˜ü:œ§<&#-žµ]7hÑ„±ø>LT\°Õ£‰£*5ªF¤ŽYóR‡$¯]ÑX{%5ˆxˆV(Ñ”£*²ú¶)<3k…­*”cMBs÷ê+È_öø¿&ý£“ã?«Ùú \xéþ7ÚüAð•×ÂFðe¤rI?Šâø¯'ƒåðìk™ÖcÖNÜ…~Ó¸b¿-cŸø*Fñ»áü6ÆOÚ§þ ßà/؇ǚ&•eáèæø¥kðóâßìãñ£V½]KKøñëÇž-ø³â„Þ7ñ~«à ›_Þ‹M?àG‹|3«(Ñ¡ømâÝõ/ü4ñ/ü×ö·ý±<ã¿üGñ¥Ô-ñìÿÂ_J]5ü ^è|7_|Coi·zWˆuÛœö^¶×~iâF»úCkû]þÏ~Ÿà_þ/|}ø ðÓãwÇx7]ðÂ_|TðGƒ|wãíGÅ6ÖÇoðëÀ~'ñ,.ñL:ô³éd:5¦±<ב}f¸¼G¨Þ»©Fq©OG ì*EÓÄO_Ÿåð£J„’«R§Öxg6‹Œa~Z1œy”¥ËUáõz8\EIÓt1tq˜ˆV§5RŒ(`pù.µjµ£z0¤èqU(ÔU%zµ(͵ ”ãõòw‹?o_ØcÀ3øòÛÇ_¶‡ìà»…ž/Ѿ|N·ñgíðÓü8ñ÷ˆ­üAwáÿxò-cÆ6rxCÅúí¯„üUs£xkÄ §kZ¿†|A5•”ñèÚ‹[Vñ·í1áMKâ7ÃχÿhÙÿÄšGÇOøö‚ð7¾+i·_´¿ øËá'Ä_øwÁ¿<3áMzKû/Žž*þÁð÷|#áïXŧkŸ 4_ˆ¾$±³ºþὄMIR”}êuª`ભiFê¸*t1š÷V¬ÃYÕM§CF¤ÕjJdá*~ÕUýÔ©PÆ×p«xNk†ÄâkÒ§$å[— ^œ!§ï`ã9AFr×TW„ø ö£ý™~*kÚ‡…¾~Ñ~#øŸIð>•ñ7Uð瀾.ü?ñ†½¦|6×c†]⡤x{Ä:Ž¡eà}f+›y4¯\ÛÇ ê1ÜBö—ó,±–å~ ~Ûß±wí%â›ï~οµçì¿ñóƺf‡sâ}KÁÿ¾?|(ø§â?ÃvWº~›yâïøÅšî­i¡Új:¾•§ÜêÓÚGaî§§ÚËp“ÞÛG-B2©.ZiÔ—³©W– Ê^ÊŒ«Â­KFïÙÒž “·,%‡¯4èÔQ‰þï›Ú{œµ!J\þï-Z£VåÍkTƒãíSáOÅ?|DÓ¼®ÚÁ%ÕÖ‹ã ßkºÅ·†ukkh¥¸ŸNÖ¥²¼†¤šHV4fçhåMЖ)MÉr<4'rÄs_—ØF¤á V¿³Œç¹)I'nœÔ¡ ©Tœ)Ó‹‹R©9ºê‚jòœÞ¡¦äðõÒOÙTåöª+â_ÁKÿàœ>0º°±ð—üö$ñMî©â_ø3L³ðçíYð'[ºÔ|aã /¡ð—…,-ôÏ]Kwâ_K¥êQxwB·I5MnM:ù4Ë[¦´¸ú¬_µÏì£qàÿŠŸàý§g©¼ð+Ä·þ øÝ㘾4ü7“Áÿ§ 1|ñI¸}Vž+ SÌ—±…z2©ËlZÒu­ªR…kþêq­9S¢ã?†J­HÊÜ[Sœ\cvš>Ä¢¾zñoíqû(øÅö¼wûN~Ï^ ñö£ã½/ávŸàühøoá¿ßüL×4­]Ñ~YøkYñ-–µuã½cDñ_…õ/Â0Y?ˆ5 +Äš¡i§Íi¬iÓ\ÍâŸÚÇöYð?Åÿ~Ï~5ý¥¾x?ãïŒ?²?áø⟌Ÿ¼?ñÅ?ðKqƒÿçÃM[Ävž4Öÿ¶ç´»‡HþÌÑn¿´¥µ¸ŽÏÎxdU˜~óÙ{?Þ{zª…O{ÛWtiâ\·ö•^µ*êœ9¦èÕ§W—’q“'û¨Ô•OÝÆ•'^¬§îFRtjŽVP¤ªÓ©MÔ“PU!89sFI{ýóeçí™ûé×Þ0ÒõÚ·öl±Ôþø_Æ8ñöyñÏá…­÷üðóÅ÷|âÿZO┸ð×…ü ãë;¿øÃ_Ö£²Ò|3âû[ kWvZÔÙ+|9ûgþÇž1ðV‹ñ+Â?µìÕ⯇^#×üKáOxûß~kž ×¼QàÏ êž:ñ‡†ô_iž)ºÐµMÂ~Ñ5¯ø—G±¿ŸQм+¤jž!Õ-­t>îò¥OÛ)'KêñÅûT׳ú¬ê΄1<ÿÕç^œèƵýœªÂtÔœââªPœ*{ÆPªê΂¥(¸ÔuéÑúÅJ<){ZxßιáG÷²Jñô­à> ý«ÿe¯ˆºßÿ ü>ý¥~øëÄŸü)«xïá7‡üñá߉õ¿Š>Ð.õ wÆ_ôÄw×þ6ð¦‹}¤ê¶z·ˆ¼5o©éuÞ›¨[Þ^C5ÊGåŸÿࢱWÁ¿þÒž3ñí/ðGY¸ý‘ü%«x³ãç€ü#ñsá–»ñ+áðÓ¤{ øÁƒÅöº‡|câ¿ý“Áž ð÷‰Î…uâ?jšW†lXêwðBÑ^µ<,jO/d©RÅÖš’|ê–¤èãf©¤êIa+SBŒdéVŒ¨Í*‰ÄxjsÆT¥O o:õðxj*›RU1ŒiOF2O—ÚcaZL,[N½:´êSæ„ã'öò>•û{þÅ:—Ã_ƒ_.kÙ¿@ðírt¯ƒ>#ñÇo„Ú^“ñ#ÄÐ^E¥j¾ ðF¯'ŒdÑ|aãëÒŸ øƒÃ¾Ôµ­CJñSh÷1‹Èü³èºŸí?û4èŸÂmgö‡ø¤|TmC_ÒWáž§ñkÀ6Uð§‚4߉ž(Óƒ.üAˆÎ¡á¿†úΑñ_²oÚtjºoŠõ­´ë[ùw­NxzÕèW²­…©‰£ˆ§&”¨ÕÁFÅ¢¿»,4*S{ÿ )ÎvŒâÞT$±0§R…êÆ­ˆ¦á7*öÖ«Ëne áñ ɤ”¨W‹´©TQ÷:+Çþ þÐßi? _øßötøãðãï‚ô­rã狾 üLð_Å? i¾$´±Óõ;¿_ëþÖõÝ*Ï\µÓum+P¸Òn.㿆ÇSÓîä·[{Ûi$ç4ïÚÛöTÕþ2êÿ³ž“ûM~Ïš§í áøïå×¾ißþ^üeÑ"Ò´˜õíR]_á…·‰%ñ¾››¡Ë³~÷º+g¤É£pc³u˜ÌÓ§?g4á?a,O$ÓŒþ­ Q¯+ø…ðÖàÝ=ˆƒÇþ ÐuËÿx6c{–b/iºs›¤{p¾r² JRj*2rsÆÓQå’”§–ÔT³Å5w, YFž1$þ­9F5¹IË´a’iSœ0µ!Q´¡*xä傜eð¸c#K $íˆIºNi3Øè¯Æí[þ Óð–ëþ àßÙ×ÀÿaŸþÌš_ì×ûF|`ø÷ñgÃ?´§†¼gñ àçŒþøƒáÖ›u¥üUÓôKOøð/Àúf›âbêë\ñŸ‰'ÿô?ö µÿÒF¹ñ?Âÿ·—ê\7~Ÿª6tϸŸXëá¯ÛsþC¿ìâý*Òëî]3î'Ö:øköÜÿÇÃïûøƒÿJ´ºÎŸÅGçÿ¦„úÿ†?ûiô§ì»ÿ$+Àß÷3êaâ ôŠz®¹¡ü7ñΫáŸøŸâoˆ,ü/¬I£ü?ð]ï‚tßø»Pk)b¶Ñ4ÿ‰0øà;MFòG þ+ñ¯†thÎMÞ­l˜cçÿ²ïü¯ÜÍÿ©‡ˆ+ß«L^Ì.' RS…üSý¿kÏk>ñ÷Ãßé–¿´ |`ñÏÂ_xçáõ·„&ñ…â{UÑ4Oéڊ韛©[˜ã¥Ê«f˜ÚØüdS£:ØŒW c+(ÓŸ:Œ^'…2úÔÝ\5ZøÊ¸Z”*}Nx1Ö“ÃSÂËXR£^‚Ÿ4ãUÓÄÃ2£YsBqPu0¹l$åJ4ÝL=*¨ç5Z¥o€ÿfŸ…wìéû#xçIøUû*üføs6©¨|Yø™¦~Ï>0øý¢üuý¡|Wã?Üßx‹Ä2øÃâ—Å/¾8øtŸþ!xÆïUÕ.!»ý¦¼QàhdÔ­5}Sâ&Ÿ}ªkv7åì—ðöçý>ÿÁ.~)ë߲Ŀjß²ìÍñƒöBøåû*§ÅÙTüP°Ôü{oð¯\пiŸ:õßíÀÚG¨ü1›á¾¹¥xÓã/ïÇàOë:Ž™¢—·»ðª+ÜqÄÁ¸ÎX|¿ ¿ÞR£C/Àf¹T)Ò§[ÚG’®WfÓ©í)a©T£W.†„Âb(d¯õw†“ç„ëã15¦ÔaV¾#ˆ¡uªNŒi5RŽa…Ãcã:jœ±UéΖbñØ'x{ÅŸþ—ø¡ûD|-¹½Ó> 辟þ–­ðûAñô}K^ŠËán¥ãý6ÚÃë-KöWý³.þ~Ý?³·ˆÿd_|GÒ?à¢ß¾ê?¾,kÿgì‰ã“û4ü>øwàÚSNºøÇuâ6Ðÿg|7Ó¾1|1ñ쯦þÑj·^!ÖN‘m£x¦Ìjšßô›EeF… 8|F4”°¸¬¿ “Ö£:•¯,Ÿ Ìó,>_ñ«T91Yœ¤ó(WŽw8ápêy¤lÆXÜMJ¸LC©â°9†;7Ââ#GzyÆeý–±¹‹ÃΔ°Ue–F?Ùµp³É)GˆTrºj–]õÅÏÿ°/ǯˆ¼Aà_xæêÿ´‡ìÁá}ö‹ø©?ˆ-ôßx[ö ý•¤ÑSörø§à­35ÝÏ‹þ%êö™«x÷Y0Ýé–ÚìñáíSº†M[I²Õ¾eý©¿eoÚƒâ¯?àß~,~ÂIûLþÑö?¼cñ·öÏð¯Ã­göP»Ó¼áßþÊ^'øãº£ûC|nøY ø«ÃšÚêŸ ü7¬hÕµxÚÏán»âo]-ûxf?G´Qˆ£ T*ªÉJ¥l~1«]FœkJ¾7ÆgþÏŸ²Oì±áo‰¿°OŒ¾|3øÿÿ‚…~ϵ.©iñ—öøiᘾ'|vÓ|©iºqñ§†ÿhOj±?Äßü&½¿Ô~ é~ ñ(°¾½›â›á?Ö¯ø&ÝÿÆ þд?ÚÇáůþÓ?g…0iúÕ÷Â?ÙÛá_Áï|ý™µ=CÂZ Ñxsö|ý¼¿o©tÏŠrx›ãf®úç‰|yã‡7<8š&ð¿ÀV–¿ |_!ý×tÅ:&±áŸhÚWˆü7â-/PÐüAáýwN³ÕôMwDÕ­%°Õ4}cIÔ!¸°Ôô½JÆyìõ >öÞ{KËI¥·¹†Hdto&ø!û3~Íÿ³.‘­øönýŸ~þϺ‰u5èŸ>xáF‘â ^ÚØY[jšÞ›à=@³Õu{5[H/¯ážæ+` ŽUˆ®øc*ýc:©J†.Ž"5ióÔ¨êN¾eÄ™ÅQUe(eñÀæœGˆÄF½Z®7åXˆAUxøå‹ÿiÃਤ ð•êÕ‹…éÆÕiðý:²¬¹ªGëÓáÜ)‚£ˆTññ¯Vxzh~0xöø©ê_ð]ß‡Þ ýš-¿dEýºu«è¾|sI¾è¾ø…myðËᮡ¬j1þϵߌ^³Ö¾-ÿÂÃø¡{ÿ _†ü!â 4ïŠz—‹(~"xƒÅú«þÀž>øŸû0~Ðoðãöý >þÑÞ4øgû=xcƺí¡ÿ×ÿj{/Ú Ã?~1ø_ãµû.x7Åzßíûbhš_Àé6þ?‰<}¦|–qñ+]{áUÇ„Á@>(ü^Ö-¼5âÿ…´7ÄÿƒÚhÖ¼9áBð“xëâg„åîœ Ö¬´ îËWŸÐ|aû#þÙ¾1~Ñ|Uû ~ÑÞðf£ûz|ý©to~ ý°þ|øåñ‹áD¿±E·ì«â+ÁfïÚçÃ>øÏðKÅû¾%j¾ñŸÅŸü3ñç‡ìÂ^ø­­Ï®ÜÝißÐÖ—û5þΚ'ÆmsöŽÑ~|Ò?hoé_Ø^$øñ¥ü+ð-‡ÆoèŸcÒôÿìms⦅õm+ì&‹cý®\Z}HÒí¼Ÿ'O´H½ª§ N8l6’QsƒÌªÖ„£´#‰Ì¸« ĵêÐöÑ^y¬³)ÁNµIÞšÃâ1Y},¿ZjZò\g+jŽ"†_…OJ5å…Áð¶‡*Q¨ðÊ…(ÓŸ²ÇÖ¦¨Ó…EOXŠØf™üêüOýŽþ'xàïà ¯Ø«öHý·?gŸŒÖóþÓïƒ5m+öý˜¿iMGÂú×ǽCÃú¯<5û~x?öÊý©¼kàŒß¾6xîÞøÚËàçÄÏŽ>>ðÓx6Û[ðGÄOx¿ÄWú\¿r~ÆŸ h?„Ÿ¶íã{ñcà¶¡§ø?öñ—Á¿>øÙà¿ü2Ôþ ͪxKöiøð{Å¿-´߈6ôÏÁã/ x§PЧÕþ AàËŸépÝ\øÚß[¼³Ñ.Q¨­©MÑjלc‚«—ÂINtèàê×¥‰Ždð´(âha±¨á*.µzÔê¼F3ë<Í7väù¥)U©5q•\MJÞÖ¶2·$"«bñr¡^½U9΄£©QÃÎò7ìÿyã/Œð_¯Ù?ö}ýƒtOŸÚÏâ‡~Þ|pð¤ß³wÃ…Ÿ üCñöGøQ­j,øÝi¯øË¿5/Â^:ñþµñæÁþ|0øË­ø›Çš§‹o®4ïø§UmsYî?kߨûöÒñ‹>%øieo‹?t/ þÒŸ°Æo†~%ø/ñö;ø3ðãg„?g‹ïÙÖïâ—?h=Å_~ünøéûXk6¾ø•á]Ãÿ´¾&ýš4Ïxsám×®|㯈µOè[áÇì×û:|ñŸÄˆÿþ|øYñâÖ ú·Å_|8øWà_øÏân©&£¬I©|AñG†t-/\ñž ú¶«©êyâ;íJáµJþõ¤77—ÉíU–/ ž¤Z–'.Àðί´Œ+aêÖáyákeÎ4ªÅÓ8¬=LD*Xz³úÜኖ&®‰¡Õ‰ÄJ½lKîóÄæµpêÑ…U枎c:Ó¦•YÏC „Ãâ(×Äbðñ¥…ŠÃÆŒq8ÈVþkg¯Ùö“øCÿÚý¤¾ü.ÿ‚é~$x“öùñwÇ? |Õ´oØ]Öµ/‚ž.ý§ü9ñDñ_Á­.ßâ_ÅŸÙ_Løýð_àe–•¤|‹ãµÄðGÄ߆¾²ŽÇ[ð?‡´ »ß—tïØ/ö‹¸ý­|ñCÄÿðKÿ~=ðÆ—ÿ>ðW혿þ7ügý„>4üHÐþj_±¿…>ø¾Óľ!ñŸí¬ø®ËÇZwíᯠ|GÔ~ü;·Ô¾xcFð…¿áRjWøáï…lÿ¯J+l5J˜Zø\E*“upx| ‡FêT….Ÿ ÕÁ/m;×½Z¼”TÆþõGÞ&Š¥R•:U¨êÓÌ)J0QÌ¥ÄÄ(B1ŠŸ,îéѤ’¡NthñcC5IÏ Fq„e/Þº¿Ê·Â?Ù'ö¾ð¼ß³ûiðO?Šÿ Üøj_³WÂß~Õÿïþiõß xÆÚÇ„>$|ýŸt†Zt£L_êwþÓ-µêjŠä–ÊñO4Õ N[G*{©c)á0Ü3‡á<$0Øš‘œðÑÃåtjÊTh*x\v+‰«šañÔÖŽ©ãëjá3„©ÇƒÌ§™Ñ„c%…uªñFcŵéÖÃ9:uéÕÌóS…Jªx¬ ‡¥—bpu§Äbÿ›ï‰¿±ÿÅŒ¾?ð÷Ä/ß°Çí­ñWá7ÆØËá§ìËã?€? oO~Î~+ø/â/ƒþ)ø¥x›Lø÷á„ðP/†?¾6|ø÷ᯉ1x“MÔ|)ãÏ‹¾0ð…—„õ-Ä_ ÿŒ$ÓtþÛöQýˆo¾êðX_ kðN]Sá÷ÃÚ_QðÓxÃ_ ~#þÏ>›ö†ðFû=h_ ½á‰¢´ø“§gI·ÖõïÆßŒÿ²ím㯊Þ×¾'Á<>'|rð¿ÂÏÛwöªøâ?†ÿ|}ûøKöFñ¿ìïñÇáÏí%ðëCÔ>~Ïž#øýð–‰ß¾ '޾øËöˆñ¯í™¡Íñiwú„ÚQs©M¼´¯R´ã*óÅ׎1Åâ]_kŒX¬l±nµLL¦¯ Ö W J1öU1¬BM(Æ’Åasl'Õ¨Q§ìðô°xjYÅo¨a¡ESÀK —<"¤°tÓþi¾~Áß´‡à—ŸðLŸ…×ß²÷ÅÏø×ö/ø‹¤x‡ãÇì›ðcö—ðŸìÑñ{âl:‡ƒ~)|5ñ—>|{ý›¿i_ø×Ŷž&ø¢ßlm|UñÃÁ ñ+OÓøwáìã¬x À?>$þËÖ^3ñ?Ä¿GàŸŠÿµ¯Úã&“⟉ZÞ³âo|Iø‰yñcãU½ÏŽüEâëý[Äú†¾7üIÒA¹µÕÅñëZ®­¥ikÑZã'õïíw‰JO;xŸ®Î› ’†2žšj­ R«R5ªeÔ+¹bgˆ© ÜžÊp¥„Ëé`æÔêeõ!7Í–Ê3ÃÆq§VŸ=:ù…z3•ЩJ3£,ÓÎŒ(Ê­:õc‰uý¶!Öþrd/ÙÇÿ³‚ü5­øŸþ ËûS|dý§ÿeïÙÿâÁ='Ç9ÿ‚ŒÿÂÖøû@Yëé~Ömÿfo‡?¿lïxᆾ?\ø[Â>ñ‡„¾.üýŸô¿†~[í+J»ñŸ‰|!áß ø«ãÛ+ö`ø…ðWöø¹û4ühýãG¯†ŸµÏì3ñSö\øÙñ6ïàŸˆ´Íñ'ö‚ýŸé>#ñ7ìïðÃ^×t­?Áq~ÍpYü)Õ5+ý+‰â‹_Ø%x÷ƯÙçàí'á›~Ñ_~||ðn—¬Áâ=3Â_¾ø/⟆tïÛYÞéöÚõ†ƒã]Ò¬õ›{ KQ±ƒT·´Žú+;ûÛhçXn§Iê×xªxÄéJ¯Örªµáì¨P£Rž]Ä1âû 8zÃ`jÏêb)G‡£…¥[ÜŽaq9… ]ÑTéÇÙÞ¤)Ʀ2½&¥*õã:ù\rºT'ŠÄÔž.¾hÎ…Yb15±XŠx™ÖÅ×Åâp9EL¿ðãöý‹¿iŸÚ«Tý¬hÏ ~Ïž<ý›.|eð÷ö"ð~ƒû+x‡ã¯>üaý£ìgñ÷Ä?|Bu¿Œ?²GÆx;àŽ«ã¯x>üñf—ñ³RÕ|5}`|IãXüáû}28ú‹Ùƾƒáwíðö ý£<7®|>ý±ü)ûB|eýi?Û'Ký¡iÏÚIm¾øïös“Æúo޾'~Øÿ>éÞ(øI£øÏÁþ1ø[§øçöš³³ñŸÃ»û+Û‡~%Ò< {ªþûXØÙi–Vzn›gk§éÚ}­½……¼V–V6V‘$¶vv°$p[ZÛApÛÛÃE H‘ÆŠŠª-S¦þ¬<,:kõøMÂ*óÌðY®&uq=¾&¥"jn•­ sÅþ!Ô´=ãß„¿ðL?‹·?³w‹þ¯ìÿûD|ý±|ûüxý•|ûm|_ÿ‚ƒ|MøÝû5ê·þ7ðªø&oþο 5ÚwãÇŒþø_ã–«áx×ÅžñìÙðF÷áW‡..¬ü9¨xƒÅ ðö›®ÿO´V •8á«aiÂ¥[ ˆÁÿIÒÃ×Y·-*­®•2Ïsf°ÑÿeÅÓÆ,.gC‚Áåøl'T1¡[ˆU$ëౘ|u:›{Jô1\D¥ˆ¥Z5§^X eZT¾³†ú³­—×Áb±y†#üòø_Oý¬ßö·ý…ÿh9?à‘Ÿ¾h¿³GìcñûàÄ x'â·ü—VÓí5Ïißõøàþ§oûeøoQñÃ-SøaâÏøbûÅúÃF°›ÄžÔ/ü+áÛ KÄ÷>þƒ4»»CLÓ¯îô»ýêöÂÒîçEÕ$Ó&Ôô{‹›xæ›KÔeÑucF–ÿO‘ÚÒîM'VÕ4Ǹ†F°ÔomLW2Þ¢ºgUÎ2Œ£ËŽÄ©^£œjf9–?6Æ+Êo™UÇfXŠ®Uêií?ˆêrB•:J”hÅR¥G‡ÂÂŒ,à¨á0¸l9MN¬ &7UÞ óóµŠ(¬Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼çÄÿò‡þÁ¶¿úS¨×£WœøŸþCÐÿØ6×ÿJuçÄÿ þÞ_©pÝú~¨ÙÓ>â}c¯†¿mÏù |>ÿ°oˆ?ô«K¯¹tϸŸXëá¯ÛsþC¿ìâý*Òë:Ÿþšëþÿí§ÒŸ²ïü¯ÜÍÿ©‡ˆ+ß«Àeßù!^ÿ¹›ÿSW¿Wa!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^sâùCÿ`Û_ý)ÔkÑ«Íü_5¥ž¢oï®â³µ‚ÇO„³Ãyq$²Í6³*G½…­ÝĬ"µžW 8ÙÉÚ Ô¥V¿%4çV­IÆ0§N.sœšzF1NR~I65(ÁJs”aÆò”šŒRºÕ¶ÒKÕ›zgÜO¬uð×í¹ÿ!‡ßö ñþ•iuôì~iªïÄ(Wi%|/ã'/^G‡yöõ¯‘ÿkßèž(Ÿá¦­ ßǨØ^hºõÕ¼éð³BÚ•­¦d‚ê(. uº±»·’áŽh¦·–9#GB+¢®Sš`¡F¾3-Çá(9û8ÖÄá1)J£¢Ú„jU§JmFME6Ú‹v²¹…<^´åNŽ&…Y¨)8S­NsQN ÉÆ2rI6•ímVºŸWþË¿òB¼ ÿs7þ¦ ¯ÊOø8ÿWñŸÃÏø$×í!ñãágÅ_Žþ.ü‹áÞ·ðïÇ>;üdø'ªi·þ+øÃðßÁè×"øSãŸéþ9Óî|5®ê¶6Ú?Žì¼K¤iw7gVÒ¬lµ˜ Ô"ýMý˜õx>ø&'Žù?á%ÜaÒõ;˜þokî6Íoi,/à ìvÚÙVÃÂÿðZOÙköˆý¾`¯Šÿ±Ïìݧ|"´Öþ87…4ïøßã¾*ü>Òü ¥ø;ÇÞø…i¨èz?€þ|c»ñÖ¡«ÝøU´+*þóÀvÚUµðÖbÖ5YmŽ?‰F¥\¾¥ø=ûNøÓKÿ‚•Á1¼3ÿÓý­¾;þÙ > þÎSkŸðTjµoÆÛ³àgÂm%|8Ú¦“ãßxÿâÇþ4iÿ³×Å­OÄV~1†ßÃÞø‹à«ÝKWð‚<7…´Í7Æ·6>8÷ßø#ßÄO‰ð\{OÛöØý¦~;þÓþøo¢~Ð^#ýfÙ§örý§>;þË ø1à_ xcž0>(ñ©û5üBø[®ü_ø›¯§Ž´ÄÔüGñ7SñM…æªÛèºM‡‡/4]@þ†?dËo‹>ý¾øãÿ†~øwâ€<áßxŽÃà犾!|QðêxKD°Ð´ýsMñ~üñø†ÂÊ fï÷þ #ÃÒÞ&xšdÖï?'ÿeø'÷íWÿ±ñÏíKáߨ'Oýž¾9~Ê¿´·Å=Sãß„¾~Ñ>?øÇû7ø›öfø¯XZé%м3âφ?³7í3eñ‹áƳc¦h+¥Yjú?ÂoÂZo‡t­ nüGrúŸ‰µ£Æb2øf9¥ °Xìö¼ƒIZ43,׊p™µ 4¨EEåøxpÔ³³$–&j¦MZx¼,ñ˜W™a°ø?ÀÓ¯,³]û\&>UøBŽg„œéÞXlŸ‡óL»0Åb«EB9•lFw<«›*j²Í©ÐÁb#‡ÅÃ/zßšß³oü?þ YñöVÿ‚Ú~Ãÿ õßþѶü+Çš·Ã?Ùë㤚†îþ6|XøAįx*xõK ]='Æ´_…>|8ñ}ï„üVžÕ5_øºÿÃo©øcÅ>/†èø¯éOø%×íÙû þÜ,ð×ÂÙ;öÎý³>üaðÿ…¾+iŸ¿boÛsãÅ‹¿oü^~ë> ‹â§þ!üpñgÄ¿jºÏÃ?Û¶±/Ã/…_<+à»--o¼uão‚Þñ¾›¤jýEû'ÿÁ*>1~É?iß|=ý¤´ø(í­ûK|:ý¦þ>þÒMðgƯð£HÕôo7įü*ðŸÂÛoi~,ñ?Â=;ÃzÄ¿[húßÄ_ kß"ñ¦«.³¯x×U·´ð×y?ìñ3ö€ÿ‚ŒþÌÿ··í%ð›öeø/âÙBøŸ¦x[Ä¿³Ï‰~*üVø¥ûI^xû·ÞðôµÏþÎÿ"øqàO†š>¡®ø›Ã·Ô¾:j âo\éÖ=Ð4]3ZrBkWÃaó:ñÄ,oåÙg×§9SªóL»ƒãý£™aq´' ʬ÷<' ‰nyžc ™þS‹¥ˆ¢ñX~ÜDéªX¼^SNX*X>%Îs.ÁÖ§*ÒŽU‰Ì²ÉeYf7 YFxHË „«SŠ¥:¿ØøJøœ¯8ÂWÁÎ8,oãWÇ…~8ø9ÿÁ3ÿàžšWí‡ÿ׿fÿ‹²7‰¼]ñ¯Ãú×üsöçMgâ§ÄO ø?ö˜‘<{ªø›Ký ìüðGÂmKâ_ÄŒ7°¾Ò!ø‘ñ_ÄzÇŒ>$ø›M:Æ£y£Íã_ëú–­¬ø£Ä:~‘uc¤j!Ô¯¤ºÖeÓ΢ðÙý¤Y[þþÓðO_Ûsâ·ü'öPÿ‚xFý˜¿áHþË /~ Ãà¯üføñ¡üTñY¢üYÓêÞ4ø«fÚuÌÚ·€ôÛI,®nÿcÿ‚pÿÁMïh_ø8ÃáïÂ?‚Þ ø_ÿ8¿ðo~|_øåñ_ZÑÒßÀ—~ø£áŸü@ð—‚¾ü;øçâ]gWÐôï½¢x↙ðd^^êz^«câ›»}/TÒ¦ö_Ú'þïûgxÁŸdŸ…~ üVý¾Á6uÙMøKûBjß<šWíE©h÷º.›û_k_ ~|ñ÷‚>5êÞm;¾#øaሾ/ÓSáŠÖëÄ¿îü9â½×Åß ø™ä¹v!¨Ã2Äð÷ ãªÒqPœsì_çyž}–×ùUú® Ÿá¸c uåB£Äæù¦UW1ÁT†"¯öªx8ç¸úIexlÏ0 §7•SÎ8O€ÆaqS–;ˆËñüY:Š‚¬°Ðʰ”p8ÿd²®"ý*ñçü‹öTðG€àŸ¿í¼ûAøïáßü‹S¶Ð~x“À?4 bëCñæ™§jVžø…à½CÇ:?ÄHu‹¶½¹Óm ø{ሑ]êzEõ½´òÅs¢\jþk{ÿäý˜Çt?ø{à?í_â¿Oðã¯í;ã¿€ÖÞøàÏŒ_þ~Î|oð›â‡âîöÛé¿ø*Oì ûu~Ü?õÍ/Áþ<øâïØƒÄÿ±§Äï‚ðþÏÿ5ï¾Ó|ûPøþmf-ö Ô~øàǼñïSø_kkàÝO᎑ñ+Äú!ø}âë[Ïø ¼)âÝ6ÛÄZ¿ve?f³o¨J"ø—ˆ¨ä’¿4çà¸W ™dq“÷?´8–¾3)©õšxjÕ¨àðøj•òo[>§çäñ•YåßÚ×£ |?Õó_fÒo7Åq;/â*Tãu=¥\&K ? õ:•)áZØè೸F†MŠ÷o‹Ÿð\ÙKá/Ã¿Ø âéøcûMüGø_ÿÖ|/á€Þ.øcðóÁZäúO‹|Yy¢ÙiþñïuŸ‰ÞøŸ· ÚÃ,ÑøÀÿ,îßL¿·Ñouk¹ôk}[ȼAÿ~ʾøuûN|Añ—ìÑûpøTþÅŸ´‚µ…5O†n5oúˆ5Í;šŒuèß´«ð›Ç~Õü[¨>a£üø‘ñâ|Ñé÷¾,ÿ…t¿ßNñuÿÃ*ÿ‚@ÿÁ@µoÙŸþ‘ðgM‹öEoÿÁ,¾7xSâïÄ‹ûï´E®ƒñ>‡^2Ñ5Oh^¹ƒö/¾Ô4é¼U¡é“\k:†½¥ÀžÕ^-2ÆÓÅöeõ„óïŸðEßø(ßÅ¿ƒðX_…ÐCûèwÿðSßÚcá7Ç ê²üxý¤¯í>h¼gwâÍGG× OØrÒoê×Éc¢ØÙ6žt‹0Úž©q<ñÒyâëªXŒã꣈ÃÃ8ÎÖIíE$øJóá…ª|Tø=oðcÇ!ðxãGÄ…©áýWDñÑ/ü+ø—ðJÑ~%|4øcáüYðαáËŸ€z?‚>ë~+¶øzÇ0­Â0Äa\wÎq8>–>…>u(áq™v"¯aðñÄΜñÖU,¶ž#„þÒÌ>¬Õ¿à²²¦™ñ§\ø_‡¾1k_üûJøGö5øûTèÚ'ýœþþÕ~9Žx¼;ðCÄw·,¾1êZãëm£x[Zñ—‚~ x·áG„üAâmßÅŸt;(õ»ýÏ_þ —û2[ülø·ð"ûàísk⟵¯Ã_Ùâˆmþø_ð'…Ò|E%¾¡ðãD³øíðbK BÖ}vïY±Ô5[¸£úóöýŽ?jÿÙwöÍÿ‚©|røˆ>Þü+ý·¾,èÿ¾ AàÏüfñü+­xNÃ^ðΓ¤üOеÏþðäzWˆt-GMÖ5'ð¯Šõ‹¿ jÖWÚ%³ø¦Îþ wNò°µêº8 ¸dåþ®×ÌñÔ½œ¡)g˜Jü_ÃÊ?YS…J­Çt0XÚwÁ×ÀÒÊ0øZùŽiƒ©™æÝXØ[‰£„oØÇ:Ã`(Wu¥,§G‹h᳨ÿ³Êœ•*‹„+fiÆl5xfŒF/Áâá—Pú³ö,ÿ‚‰x7öêµðÿ‹þ|ý¢4O¾=ð‹|oð«ö’ñ}¿ÀGàÇÄí#ÁÞ2Óü¨éÚe×Âß> xÆ7:ü·vþ7|>øWã¨í4_ZjžÓuï ø‹EÓBkð£öÿ‚u|Gý›¿mï~Ô6Þø!û*øâÂ_Âß> ~È¿¾?ø«à§íEñž÷Wð„ší ¬~Îþ?ø=ðßáßì½âhÞ×í´ßü=×¾1j:Ã|E×!Õ¼z/­¼Oâ‰_¸ŸÚÖ¿óËSÿÁ.³ÿÈèÕxeC*Rå©:þ³Nuá^¥:Ô³us×…<5:ñ«…£†ÄPÄG–Ï…­B¾'*ʱu1vž“¬ëcDùc‰°jŸ³ƒ¡S …­{Jò„©Î¬èâi¼^>,eÏîgCEsßð•h_ó÷/þj?ü‰Gü%ZüýËÿ€ÿ"QíiÏÊøÏÍ}ágÙýÌèh®{þ­ þ~åÿÀ Gÿ‘(ÿ„«BÿŸ¹ðQÿäJ=­/ùùOÿùù¯¼,û?¹ ÏÂU¡ÏÜ¿ø¨ÿò%ð•h_ó÷/þj?ü‰Gµ¥ÿ?)ÿàqÿ?5÷…Ÿg÷3¡¢¹ïøJ´/ùû—ÿ5þD£þ­ þ~åÿÀ Gÿ‘(ö´¿çå?ü?çæ¾ð³ìþæt4W=ÿ V…ÿ?rÿà£ÿÈ”ÂU¡ÏÜ¿ø¨ÿò%Ö—üü§ÿÇüü×Þ}ŸÜΆŠç¿á*пçî_üÔùøJ´/ùû—ÿ5þD£ÚÒÿŸ”ÿð8ÿŸšûÂϳû™ÐÑ\÷ü%ZüýËÿ€ÿ"Qÿ V…ÿ?rÿà£ÿÈ”{Z_óòŸþóó_xYös:+žÿ„«BÿŸ¹ðQÿäJ?á*пçî_üÔùkKþ~SÿÀãþ~kï >ÏîgCEsßð•h_ó÷/þj?ü‰V¢×,'A$"þhÛ;d‹HÕäC‚AÃ%‰S‚8<AäSU)½ªAúJ/õó_xYös5ëæÚ[TÕô ¥Þkc}­CM]"ÃTÔî4]2ÿSø.Ÿe©kzV»w¥é÷W‘C æ£k¢k6ï%ÔV£,Kg7ÑÚÖ¿óËSÿÁ.³ÿÈóí wa­ZZiiˆî.,îôb8ô ?K“WŠòÊÙÇ Úg‹u¯iÓi÷:åÛËp(Å3бGP£Ò»ü/m&£{«'‚¾*C«ê~•¬EàÏ«©_išEÆ©w¤i×WßðÑkyqa¥ÝkzÝÖ›g±ªMm2jfn{âž‘•—€naMVÓÈðÕï‡?³õشȵˆ×Nñ±âI/õ´=S]Ñlå½Ô¦ê­—É¿²ïÄߊ_ü«|[ø•oðÚËÃ_µ¹õï…^ ðd:vµyàO[Æ4TÑüKã+ ¦²×uÙïôË‹íRÂM.ÓWðþ¹6·o«I¥Éumð÷áçÔVÞ%ð­Ÿ…< ÷þ4Óô;Ý?ÃzŽy¤ÜøÇZôùÆþ0Öí¯ãøSÆ)w0ëÞA³Õ“JÔQ¬…ÒZ\i×Ö7s|ûðËáìýðn_¯Ã?[xsNø‡â¿øKõ §ƒ¿hÓá-T—M³Ó®`ðw†ÛáÑ|/§ÞIj÷÷QéÖ‰3¼ði"åöø7•arŒ­Ô¯fðÐu¢°øÉrUÕ7zt' jùefÝÓonúÉcqN”!+U’Š|<£îôHÍ+h“[«ùŸ}ëúäú—…­ô½AÅåº[ÌÜ^?„Ÿ³þ¬³1›~ù¾Ñ®^1™²äÏ.[÷Ÿ3Û¤ÿÐ;OÿÀXøÕmk—¾“–—ößü)d‹¨Ymîá×®µKÍ2/‡ |o©I£øoGñµ¦IwðîïQM3QÓ­õ 3Uµ\‡HÕ­¯´¨<çûKÂôTü;ÿ„ÏÅÿþv5<;šä8|¶4¥˜S¥8âq~Úœiâ½Ú¯>noeEÚQå“Wm+&ôhÓ0ÃãåŠrú³œ]:.•Jn<²JSRqVÑ´µÑ_¯Y·Iÿ vŸÿ€°ÿñª6é?ôÓÿðþ5\Ÿö—„?è©øwÿ Ÿ‹ÿüìhþÒð‡ý?ÿá3ñÿ{«;Ètÿ…Hôÿ—xïîÿÓŸ_¹ù߉a±Ú².ŸòûýÏúyýYw׫û.Üý†Àgœ}–.üÿr²ióãaÿ€±ñÊjxPtø©á¼vÿŠgãOü6jøSþЧ†ÿð™øÁÿΧûk"ÿ¡´ð^;Ëþ¡ý?1}_ÿ@k§ü½Ãwþžú}˹Õý“HÿŸü‹ÿˆ£ìšGüøØà,_üErŸÚ¾ÿ¢©á¿ü&~0ó°£ûWŸôU<7ÿ„ÏÆþvmd_ô6þ ÇyÔ?§ãæ%‡ÇéþƺËÜ7÷éï§­¼Î¯ìšGüøØà,_üEdÒ?çÆÃÿbÿâ+”þÕð§ýO ÿá3ñƒÿ…Ú¾ÿ¢©á¿ü&~0ó°£ûk"ÿ¡´ð^;Ëþ¡ý?0X|~Ÿìk§ü½ÃwþžúzÛÌêZÇI|ľÁ±ÿN°Œgëµ7û;Iÿ m‡þAÿÆë˜þÖð¸û¿<5Ï\økãúÍ.oéGödžèªxgÿ ¯Œüëi¬ï$é›Å/ú÷Žÿå¿Öððù…ôÀßm}®´{Ô¾—]z.›tÿÙÚOýl?ðþ7N[=&»û:Ñ·›h^{F}+–þØðÏýO ÿá5ñƒÿmÚÞn$ø©á¬u|5ñ€œÿá®^0OšÎòN¹¼꽞7ËþœzÿH#‡Ì.¯²Ó_kƒÓáí;õ[k·Ë¬Û¤ÿÐ;OÿÀXøÕtŸúiÿø ÿ®OûKÂôTü;ÿ„ÏÅÿþv4ixCþŠŸ‡ð™ø¿ÿÎÆ…ä:¤z˼w÷éϯÜüïªÃc´ÿd]?åöûŸôóú²ï¯Y³In?³ôñž3öX{ñÿ<©>ɤχþÅÿÄW)ý¥áÓ⧇sÛþ)Ÿ‹ýðØQý«áOú*žÿÂgãÿ; _ÛYÛ5ŠÛþ]ã»/úpúþ·ê/«cô¶ tÿ—¸oîÿÓÕå÷.çWöM#þ|l?ð/þ"›¨ KÐu b] Ù-¶|¸a6Ö‰ÿŸ‡¼r¾c=…Û7Ú.|k`v„ò ½¸›ç’8Ö¹oí_ ÑTðßþ??ùØU[ëŸj6­ewñWB{I>ÕæA‡ñªÙ$ûv«x~ëÌ¿ ¡2yÚ6»¬iÇym¶úÒ¦Ö“p#œðûiO6÷ü´ñüÛ+ZÔ ÷µýõ¥ï}S™aó.WɄЖ–n®­áÞ¤–Û{¯emZg_y‚ºö££ÚèCŸý±™®ÒáçþÎøñÀÑacÓíV-öÞ‚þNdýþ£,+¶;ti]ý¤ÿÐ6Ãÿ ÿãuÆÅwán®oW⦀÷wžwÚ'¸Ñ~5]<ŸhÖ5¯OÍÏÃ9ByÚ׈µ­FO,&ûFvl¯–©oûcÃ?ôU<3ÿ„ׯþuµO:È“jžqî-¹áré{¹S›Þö¼ž–Ù+Ç™Ùs`—Vª`’Ý[E8­šèµKÍ®Ÿû;Iÿ m‡þAÿÆêA’€/övŸò€¿ñën?ç—µrŸÛÿ¢©áŸü&¾0ó­£ûOÂ'–ø§áÌžN<3ñ=qÿÀqŸaô¥ý·‘ý¬Ú2Ûþ]㻫ÿË_ÖæÃæ|.ßò÷¯¬–wÑ|¶ë¡ÖmÒè§ÿà,?üjºOý´ÿü‡ÿW'ý¥áú*~ÿÂgâÿÿ;?´¼!ÿEOÿøLü_ÿçcBÎò?áR=?åÞ;û¿ôç×î~wµ†ÇiþȺËì?÷?éçõeß^¬Ûé2sö Ž1öX¾½£´}“HÿŸü‹ÿˆ®SûSÂcîüTðæ=ü3ñƒ¯þ ?µ|)ÿESÃøLü`ÿçaSýµ‘ÐÖ+m=ž;Ëþœ?ž½üÅõ|ý®Ÿò÷ ýßú{é÷.çWöM#þ|l?ð/þ"šÖ:Kãþ%ö úu„c?Xý«–þÕð§ýO ÿá3ñƒÿ…ÚÞw⧆¹ëŸ |`Où¥Íý(YÖGÓ6Šÿ¸xï/ú‡íúù’ðù…´Á_m=®ÿ'z­vß²ïs§þÎÒèaÿ€Ðñº?³´ŸúØà4ün¹í ÿÑTðÏþ_?ùÖÑý±áŸú*žÿÂkãÿ:Ú¯í¼—þ†ðÿÁxïþQëý-cêùývÿ—¸?îÿÓÏ5÷/—R¶zL'wöu‡#o6мöŒúSöé?ôÓÿðþ5\Ÿö·…[‰>*xkFß |`'?øk—Œßð£ûKÂôTü;ÿ„ÏÅÿþv4mäZsf±oº§Žïúsë½þëšC i_——µÂ鬖vývïgÖmÒè§ÿà,?üjšKqýŸ§ŒñŸ²Ãßùå\Ÿö—„?è©øwÿ Ÿ‹ÿüìhþÒð€éñSùíÿÏÅþ¿øl)mä?ô4Méã¿»ÿN}~ççzú¶;þOù}‡þçý<þ¬»ëÕý“HÿŸü‹ÿˆ£ìšGüøØà,_üErŸÚ¾ÿ¢©á¿ü&~0ó°£ûWŸôU<7ÿ„ÏÆþv¿¶²/úGÿ㼿êÓñó%añú±®Ÿò÷ ýßú{éëo3«û&‘ÿ>6ø ÿ^¥ð†6¹øàÛ‰[H|1ñðÃj„ùˆo¿er0ŒG‰¯.å+ª™®g“æ‘›À¿µ|)ÿESÃøLü`ÿça^íðS^ðâmÄ:Ä Íe¤èì.n.$Ôô36¡ã­Gàì–vv6%Óô]vuÓm~ß\êW×Z5†žÇ\Ò­´«Rh5ìß–ã×&­‘â©ÒÌ)ל¡ˆŒ`㉋r©ÅÓ‡+­Jæsœ"’—5äôøS(¡ŽXÚNXg§BNQi N¤®©Ô”¬¡6ímWìoìoö?ñÊ?±¿ØÿÇ+#þÁÿú(~ÿÁÍ·ÿGü.?ƒÿôPü)ÿƒ›oþ.¿ù)ö—õóõþ–¿£óÏϧOOø¥µÿ±¿ØÿÇ(þÆÿcÿ¬ø\ÿè¡øSÿ6ßü]ð¸þÿÑCð§þm¿øº9)ö—õóõþ–§<üútôÿ÷ú[_ûýürìoö?ñÊÈÿ…ÇðþŠ…?ðsmÿÅÑÿ àÿý? àæÛÿ‹£’Ÿi_?_éjsÏϧOOø¥µÿ±¿ØÿÇ(þÆÿcÿ¬ø\ÿè¡øSÿ6ßü]ð¸þÿÑCð§þm¿øº9)ö—õóõþ–§<üútôÿ÷ú[_ûýürìoö?ñÊÈÿ…ÇðþŠ…?ðsmÿÅÑÿ àÿý? àæÛÿ‹£’Ÿi_?_éjsÏϧOOø¥µÿ±¿ØÿÇ(þÆÿcÿ¬ø\ÿè¡øSÿ6ßü]ð¸þÿÑCð§þm¿øº9)ö—õóõþ–§<üútôÿ÷ú[_ûýürìoö?ñÊÈÿ…ÇðþŠ…?ðsmÿÅÑÿ àÿý? àæÛÿ‹£’Ÿi_?_éjsÏϧOOø¥µÿ±¿ØÿÇ(þÆÿcÿ¬ø\ÿè¡øSÿ6ßü]ð¸þÿÑCð§þm¿øº9)ö—õóõþ–§<üútôÿ÷ú[_ûýürìoö?ñÊÈÿ…ÇðþŠ…?ðsmÿÅÑÿ àÿý? àæÛÿ‹£’Ÿi_?_éjsÏϧOOø¥µÿ±¿ØÿÇ(þÆÿcÿ¬ø\ÿè¡øSÿ6ßü]ð¸þÿÑCð§þm¿øº9)ö—õóõþ–§<üútôÿ÷ú[_ûýürìoö?ñÊÈÿ…ÇðþŠ…?ðsmÿÅÑÿ àÿý? àæÛÿ‹£’Ÿi_?_éjsÏϧOOø¥µÿ±¿ØÿÇ+篌·ñÚk¶Z$ñ[MxWM¼†+¨£‘b–ç^ñBI",ªÊ†E¶ˆ9Q—¦ìì\{wü.?ƒÿôPü)ÿƒ›oþ.¾?ø÷ã߇ºŸ,õ­?â.‰ ´^²ÑŒ1èÞ8ñ:Nm5 [R[ûkxWÆQE«Íe%žªºV£ÚsN¶—}íÜßoÀS‡BX™ºpXLCŒœ*O÷‰ÒqJ4£Rwv’¿-­tÝ·ñ3ùU–^Ô“öÔ®œ¡ãªw•G«hõ~‰èÌO…_´7ŽâøûñöWøåaáøóG}_Ç øðÓÃñßü>Õîέ¦hÞ7ðõηð»\Ð4ýOO°Ò—ÅטÕ4Ùt{+íkYÖ/ü1âÿŠª6z¥Æ§ux·3Iptý3áõ¢K+´²:Ü|%ø}«Èï#’Îò\ê“Êîij»³1,I¯€~|/ýŸþ ÚøºxÎÞ=SÇž+Ö<_âÿxÁÿ´wˆü]âSVÔõ BÞcÅZÏ­cQ°ÐãÔf±ÑÒþîæuG¼ÕõKOÄÚ߈õígí/\ð¥›]ÝEâíæÓS¶ð£XÉ.£gcvöÚ€Üíl~?U§NVk§_4}áù5ÿ ‹¿èiñþ5?þJ£þÐÓâ?üjü•Eð˜ø»þ†ŸÿàóSÿäª?á1ñwý >#ÿÁæ§ÿÉTQ@ü&>.ÿ¡§Äø<Ôÿù*øL|]ÿCOˆÿðy©ÿòUPÿ ‹¿èiñþ5?þJ£þÐÓâ?üjü•EÂcâïú|GÿƒÍOÿ’¨ÿ„ÇÅßô4øÿšŸÿ%QEð˜ø»þ†ŸÿàóSÿäª?á1ñwý >#ÿÁæ§ÿÉTQ@ü&>.ÿ¡§Äø<Ôÿù*øL|]ÿCOˆÿðy©ÿòUPÿ ‹¿èiñþ5?þJ£þÐÓâ?üjü•EÂcâïú|GÿƒÍOÿ’¨ÿ„ÇÅßô4øÿšŸÿ%QEð˜ø»þ†ŸÿàóSÿäª?á1ñwý >#ÿÁæ§ÿÉTQ@ü&>.ÿ¡§Äø<Ôÿù*øL|]ÿCOˆÿðy©ÿòUPÿ ‹¿èiñþ5?þJ£þÐÓâ?üjü•EÂcâïú|GÿƒÍOÿ’¨ÿ„ÇÅßô4øÿšŸÿ%QEð˜ø»þ†ŸÿàóSÿäª?á1ñwý >#ÿÁæ§ÿÉTQ@ü&>.ÿ¡§Äø<Ôÿù*øL|]ÿCOˆÿðy©ÿòUPÿ ‹¿èiñþ5?þJ£þÐÓâ?üjü•EÂcâïú|GÿƒÍOÿ’¨ÿ„ÇÅßô4øÿšŸÿ%QEð˜ø»þ†ŸÿàóSÿäª?á1ñwý >#ÿÁæ§ÿÉTQ@ü&>.ÿ¡§Äø<Ôÿù*øL|]ÿCOˆÿðy©ÿòUPÿ ‹¿èiñþ5?þJ£þÐÓâ?üjü•EÂcâïú|GÿƒÍOÿ’¨ÿ„ÇÅßô4øÿšŸÿ%QEð˜ø»þ†ŸÿàóSÿäª?á1ñwý >#ÿÁæ§ÿÉTQ@ü&>.ÿ¡§Äø<Ôÿù*øL|]ÿCOˆÿðy©ÿòUPÿ ‹¿èiñþ5?þJ£þÐÓâ?üjü•EÂcâïú|GÿƒÍOÿ’¨ÿ„ÇÅßô4øÿšŸÿ%QEð˜ø»þ†ŸÿàóSÿäª?á1ñwý >#ÿÁæ§ÿÉTQ@ü&>.ÿ¡§Äø<Ôÿù*øL|]ÿCOˆÿðy©ÿòUPÿ ‹¿èiñþ5?þJ£þÐÓâ?üjü•EÂcâïú|GÿƒÍOÿ’¨ÿ„ÇÅßô4øÿšŸÿ%QEð˜ø»þ†ŸÿàóSÿäª?á1ñwý >#ÿÁæ§ÿÉTQ@ü&>.ÿ¡§Äø<Ôÿù*øL|]ÿCOˆÿðy©ÿòUPÿ ‹¿èiñþ5?þJ£þÐÓâ?üjü•EÂcâïú|GÿƒÍOÿ’¨ÿ„ÇÅßô4øÿšŸÿ%QEð˜ø»þ†ŸÿàóSÿäª?á1ñwý >#ÿÁæ§ÿÉTQ@ü&>.ÿ¡§Äø<Ôÿù*øL|]ÿCOˆÿðy©ÿòUPÿÙuima-addons-2.3.1/SimpleServer/src/docbook/images/simpleServerUserGuide/sample-app-form-top.jpg0000644000175000017500000013427711625126446032532 0ustar drazzibdrazzibÿØÿàJFIFÿÛCÿÛCÿÀÃM"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þ®|ðCñN‰¤M§xR}oT—DÒoծm_uåœr=̲^k:~Ÿn²Ì%òãiá2²È¶‘H!”E×ÿÃ8KÿD»Rÿ¯GÿæÚ»‚:þ០ë:Þ±©Øhº.“ð÷Àú®±«ê·–úv—¥ézm‡‰®ïõ-KP»– K H溼¼ºš+kkx¤šy4f âO||»Ô<ñÂ>ñMïÿá1¹±Õ~ é°ü9Ð>"x‹áÅÿ€|pÖÿ¼f~/kþ Ôßâ_eð¿Ã}3Ä~ñ†ü%6¯¨|L·¿ñWˆo~|"ùœÿŠðY©G F"¥jôi¬._†§ŠÅRÃOK WS¥iap¾×Ûb=Š­‰(UXL6&¬é`2¼F`ê{)áèÂ:’öغËFuaFU£†…Y.E^·'³¥ÎáJ3œz´a%QqÇöqOÂýHÉ#ÅZSSµj©T©ÏŠÂWÁÍSÄB1“Jp•:”ëÒ©ÍzUèÎ¥±S„éÊTªMB¬*Ò“U)ÎãáVøþ€_ùSÖùaGü*ßÐ ÿ*zÏÿ,+Õ,üã-WUÒ¬ï4ÍCÂ:c\_I©ëwþÕ¢·ŽU“NŠM:ÃÄš•õݼúêé^Ád–wRØ5ÒAªi’2ÞÃqoy§ß]iZœ k©Ùyfâå7ÓA1Zê:mÑŽ·éþLÆÆôC…á¹±¾µ°Õì5=2ÇÜŒ¨N\±ömÚöJ.ëËÐå<óþo?èÿ•=gÿ–­ð'ý¿ò§¬ÿò‹^4›á¿Â¿‰Ÿí­ Ô.<ðûÆ~4‚ÂêG†Úöo xsR×"´¸– dŠ —±Xf’0]#vd€¯Ê/ÁJêÒZI}¢êmÛÚ¼ÿµ5¼ÏnÓÛHÐ<ÖðJÑi!‰ÉEð3¾&Éø~­Y‡µS¯R •Í(©8'&åvÔ¬““÷]Ò¼y¿XðßÁN?ñ^†aˆà¼®žcO,« 8®jÒ„ã9FœÝ¡N•irÆ5isJJn¢Prj|¿«¿ð«| ÿ@/ü©ë?ü°£þo?èÿ•=gÿ–‰ð;Çš¿ÄŸ‡6^'×âÒâÖ£ñ7Ä_ jM¢Û]ÙiWW¾#x³Àê6V7×ú­ÞŸ¨|3ý¤4ùõMNKºk3¨^ˆ̾·^æµ f ‹¡èâ¨QÄÑr‚Œ*ôãV›”Z¼[„•ÓÕ=Íól³’æ™–OŽŒ!ŽÊs fYŒ„&ªB¬"¦TŽ“„kRšŒÖ’IIhÏ?ÿ…[àOúåOYÿå…ð«| ÿ@/ü©ë?ü°¯ ñÇÄ]6ÇPþÑñ?žøÿ¿ï´­šdžügâïÜø|Gm7[ñn‹àísÃQëú't÷â•ïÄýkVoü(‡áüþ 6úˆü%ñKVñ/Ðüc |6ñç¼gñUðÿ4øËáÝßTøkFð¾…¬kWqÜjߥ_«a°žÆu1xŒñtéªô©xÓàÿÃýWÅ>‚ø_Þ:ñׇ|Gâ=Zð¶¥¢iWöž/ð´ºÇõüWÃþ øUsãÏÙúÎù5¿ Ý|Vâ…¿jÙûöýŸx8üuÕ|3ð·UÒÿf{Íwâ‹â/[iŸ´eçÂÍN/øSÆ>º³·×<â{%ƦwäÁW©jÔ°ÍÃNKëðÑÆÑ¡xàŸï«`ä±tiüu0²Ž"•&¦óRÄ:*»Äa£Iáå‹sž¤#5.^Â<3â/| ð.‘«Ûë¾x“ÅúÅý„—>ðN» çÃ=wÄ­ã+ÁR”ç($°™–5E`12©<6SŒ†:T£ŠujÊ8©¨a©R„ëcé·ˆÀSÄáã*« þÿÑ*øÑÿ†Wö‰ÿæ6øF< ÿD«ãGþ_Ú'ÿ˜ÚôßÿÁD>ü)øÏñ§ÁõZ xWѼám3áÀßÿ>$]øƒÃ0ø­ _ >ê¿5gÁZŸŒ2öØ?gB·Õ+{,SÃÇ Qâ)(b%‹9ác‡“Á%YâaV”ðþÉÏÛµ)ÒçŒâäJ–:jU(¯gÎwÁÖ\¢Ü+Ôšx»Â ±ÓšŒ)Ö‹§)_—›Ìáð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯SÔÿિ°Þ‘§XëŸ|rúDžÑüwâMWOýœ?iÍ_MøQàÍgÅ^7ð8ñ?í}¤ü½µýœ4]Æ ~ xoÇÿ%øoý_Áž$³ñëøn]&ñbÊð/üƒá›á{y¾9kZ–“âÛŸ‰4[äøWð[ã§Äßü>økðûöŽø­ðWÀ¿>7x§áÏ„~%øoà/‚üE§|7¾¹¸ø›ñ«Äß¾k†~"êÚ6§g¢x7ĶþÒ>ÂRQŽæñÂF ¼9ç‹ƒŠžú•刃kž‚N¬n¹¡Þyq|žÓÛáÜ)U”–«Q¡Z—µ§‰“XËG 8r8×»“­A)?knþÿÑ*øÑÿ†Wö‰ÿæ6øF< ÿD«ãGþ_Ú'ÿ˜ÚûÓã—íð§ötðރ⊧Šx’ßÁþðïÃφ_þ5üFñ¿‰î4[ÄEð7‚Þøƒñ;Æ—Ö>Ð5ÿkø[Â:°Ðü- ëž&ÖZÃAÑõ-FÛÇ­?à Ÿ²¥ÿ‰¼á{/xÞî_Xx&îÇÄößh)¾økQø‘áÝ+Å~ðgÅ/Œü-o…?>(x»Añ…ot„Ÿ¼gà‰úƒøÓÀ–PxE¯üsá]k%_ÔÚÂÕjœÕ:bi5 Ž1š„ßÔýÙ¸IMFV“Œ£+4Ówì±ÖOÚQ³ÃþÜ?³GÇtð}ÏÃOøRÒ¾!øgÅ~4øâOü$øÉðóÁþ<ð—‚4‡úÿ‰|Ià¯|EøáO ø¯E±Ò¾&øVæßQÐuB×Uxü[i£Éyðïâ¿…ù½/þ û'kZït='Ç>6Ôbø‡£øWѼ]iðöƒ›án‡7Å? hþ3øoá_‰SáaøQðsâGŽ<3âoê¾øUñsÆ~ø—«ÅãAgá9nü{àë}nL,\”°Uâ鯄æž"šp†'Û¬<¥|»CÂâ• ;*¿W¯ìܽK Ž9©ÉT¢ãN5gRKY¨B„èÒ¯9µ‹´cF¥zêÊVTç^Œ&ÔªAKç?øF< ÿD«ãGþ_Ú'ÿ˜Ú?áð/ý¯øehŸþckï?€?´_Â_ÚƒÀ6ÿþ ë^!ñOÃÍBK!¡ø»Vøsñ'À:7‹,µFñ%Ž»à‹ˆ¾ð™ñ×….´ÍvÆ8|_àôÖü,ÚÌ:džƱÿ ‡|A¥iŸü7ÿ‚ª~Ï>0ð¡ãxWö‡ð޳iñSãgÃ{/‡Ú'ìûe|Hñïˆ4ï‚ßu¿ë_ü1à¿ ~Î2øßÅ?ìm­|/uñÆþð¦±à„^0ñ¾ð³Çž2°ñÅæ§êdêá)ÍÒ©ƒ­N¢¥þÎxšP©ìgì¹j¨K¤éÉV¤ã4œZ«M¦Ô¢Ù Xê–têQ©zÒ¡û¼i¿mNŽ'R›QŶ¥NŽ R¥×î㇪æ×#¿!ÿÇè•|hÿÃ+ûDÿóGü#ÿ¢Uñ£ÿ ¯íÿÌm}/üö\ºñtþð¯Œ=|Døcu<¿ føß¥ø8ümðÂÿ|·ø—¯|*[Oè? eñ¿ü,ýoúχ¯ôjÄšzŸ™øöð½øéðö=ø«ðkÀ·þñ¿ígãx{Ið'Æß|fð$Z%¬¼Añ›â²BÞ.øðûÅz¶§øÁ'ѼñŠÏÂ3|<×uCÃ^'Ñ­ü[¥^ÙøYjxg:°ú†+›S-†%*ŠRÃÃ4ÅbpxlMJqÀJ¯Õc[ŒXšð„á„ ý¾]xká÷Ãøýà |gñoŇ¿<3ðŸÅv¾'¶ñ&¸|= ]x™½{Xÿ‚™þÆú„í|[sãψ×ßkñWŽ<| áßÙ§öžñoÆ« Kᮑ¢ø‡Çš¦·û?x[àÞ³ñÏÃþ ð·‡)|@ñÅŸÙ[š®«áOƒ¿¾'üð§ƒ?hˆ^³Šü}øqáK¯Ÿ üe­ü(ñ‚xëáîƒñ↫êözçuûo ëú/‹|9mâjø}ûuþËçñ·öÄmKDѼàcâ~§ãŸ‰ß þ,|ø[â/…>d> ø»ð»âçÆxá‡Æ„µÆ›©ë?þx»Ç?4½_ð¶½}âX4_ønÿU¨Ï *5kýJº… V7 W›J2…L»‚Çãg(¼ãC‡ÆÓ•ZÎЧ*X˜ÍÇêõ1†2~ÏÙÖÃÔjv"”éá*Î)æõ+ÒÊù'cR–`ðõ%‚I¿­AÓh¤¯ò·ü#ÿ¢Uñ£ÿ ¯íÿÌmðŒxþ‰WÆü2¿´Oÿ1µÕü`ÿ‚³~Å>øûDüYýž?hïÙÿöºñïÀ¯‚Þ1ø¸Ÿ¿fÿ‹þøíãÝf ,ôÍ*]GÂ_¯>#x×EðdÞ-Öü5£ø«Çá‰ü;à}7Vø’òÃH²ººŽ/Ùçþ %ðÃQ´ðÃ?¦ñÇ¿ÞYiþ Ö<1ûþÙÿ²×Âÿø—ÅvºŽ»àO†l¾8Áñ>Ïà?ÅoørÒÒïÂþ5ü\ðŸÄŠ–Zç‚üKà /âO€ìõ¤ªá-9KZœ# RŒçŠ¢•gVU¢¡I,›”c†¯9ÊQ%8ª’¨1Ξ2©ÖöØiÓ›Çó¸a§/«SËieõquñ_í¶ÃЂÌð1Œê4ç*éÆ.«NÏü#ÿ¢Uñ£ÿ ¯íÿÌmðŒxþ‰WÆü2¿´Oÿ1µé·_ðUïØJËÂ>ñõïůYøÇ±âÿ øÆïöxý¥­¼1¬|;ðݿÛŸü]‡]›àúi|ðŒ_üÿ ‡Ç »›„~–ÿWƒÄ~4Ó'ð—Œ#Ð~°ø#ñÿá_íá½sÅ? 5ÍcVÓ¼1âÝ[À¾&°ñ7¼{ðÓÅ^ñVo§ßÜé> ð7Äï x?ƺ+Ýèú¾‹â= ïSðý­‡‰¼)¯h-ðåÖ«á­wHÕoZžW¶ùiO+W¦ùhS¯C R³¶ JTñ8œ>u¹ øŠ¥%R¬#)šÅSpU1jn¥EFšž¤JÎjª”9±‹š£¥…ÅUTãy{<=iÛ–F¾ÿ„cÀ¿ôJ¾4á•ý¢ù£þÿÑ*øÑÿ†Wö‰ÿæ6¿X¨©öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-'áð/ý¯øehŸþchÿ„cÀ¿ôJ¾4á•ý¢ù¯Ö*(öø?ú­ÿ…4¿ù×úZœ¸¿ùÿ†ÿÂZ¿üÙëý-~øOa¤kÔôNÓu]øyàÝ#Xѵ‹KmCJÕô­BÃÄVzŽ™©i÷±Íg¨i÷ösÍk{eu ¶×VÒÉñIާÏüUáÚ×Ä¿¾x?Ǿ0´øg?Œougã—©|6×~#øOáÞŸðûÇ_føyã/ø\/OŒuñ_‡PøWâN™á¯øÇÄ~‹ZÓ¾(O§x¯Ã—>0õÞð_ˆ5OøZk}ı ü7 K þ™a¨#MntÛybÛ*[IoqnâO2&xåØžÝãÊdÑÿ…mâßùåñÿ®ÿùW_qgåÜ]S ,ÂŒù°XÜ62†+– :TkÒ¯W^¤"åSŒ‡v“§9OW‰T±4þ“*Îñ9C¬ðî”ã^ZR£‰ÃÃF©IÒ†*9µˆ¡Íí(ÊJPs„cZZW¦ö|)ð¼ø_^>4ñGÅüUñ&›á½{ÂþÔüyÃ=/þm ÅþÕ¼Ya¥Yü-øuðÛN¾ÿ„—Pðgƒ®/®|Ki¯ÞØÂ5g‡®4X5ŬòЭݬÿ¼’M{R¾¶¸„¡–ÚöÇÄ·Wöq RXK[Ëx.cŽâí¥h„w0OÉ êŸ†ž*qµíü"¼kxU‡uli€àŽ8<[ø;Ävñ$x_^Š(ÆÔEÑõ#’I,Ð3»³Ï#³I#–y™»Ã¼?„È)¼. ‡ÁàÔ*þîj•çV­iÒrjµœëU—%8ÓS­Vr(R£ZTáðãqµ±ÕlEYU«eûªTi *1…*qs”ç%NœTêN¥Y'Rr”¹IõOØ\é÷Úæ«âܱ_é÷©á{sm.~°\Iug¢X^C§ösÜ=£Ý\-°¢°½eïmæI¥½Ô.šûR¹X–êñƾ\&CoegyE–™ff›ìvK$›k‹»©ï5;ÝCP¼éáñOý Zÿþ õþF£þOÿе¯ÿàŸQÿäjú8Q¡Nn¤#ÉÅGK$’ì–‰½.÷i%²8ÛmY¶ÕïóðÇÏ¿´O„|Eñö~øéà/AÏ‹|oðsâw„|/ouu•µÇˆ¼IàoFÑ ¸½œ¬6K©ÞÛG5ÔÌ"·šYD&¿ÏÿÁ5¾4x¿Æ^-ñb|ý¤4Ôñ?‰µï&œ÷?²eóX.µªÝêKd×£öÒ²j.DèYÚ ƒ”[@ÊOê—þOÿе¯ÿàŸQÿäj?áñOý Zÿþ õþF¯›â.Éøž¦®g,W6Ö¼)&œœ¯>jUi·k4’oKÙ¯èOþ“>#ø„Î0œK‡¹sÌE1ðÄ¡§ø¼Uåß³?ì/û_é?~k_?i‡>ý þ~ÄZ·ìÓû8]|*ýœSN·ýšõøeŒüOñFÏÆ´gÇoþÓ4ð†·ð‹áͦ‹q¡Kð›áÕúhž.– ê–þ0Ò¥ð§ÕÿÙ_´Oýßø@|ÿç#GöWíÿEwãGþùÈÖ8|2Ã}gÙæW,U,N£ÆÔ©JL¿2Ê×±œ°®Q©_šâéb+Éλœê×¥R–#˜UÆôˈ•jX©ÖZU«ÖN0ËãË™¬Ú­:”Õg,4±’¨ªaV‚©ý—Š£_,¡„ÁÐò>?xîÛ'T°ðõÝÿˆþ'|.øû ü.×#Ö|¥I{ð³Zv¸øëñºÖÍüAäx~= ûãW/'Ñ5coâ»óðj(¼+àíu5 ÿÂ]GÅ¿ðO¯‰úÄŸücý™¿hßüøƒâWǺL6ßgÛ¿?4ß…?~þÎ? uO ·…t¿¼Gsãok_³?ƒ|_à¯Úø÷LÐ,mµŸxcÅ_ ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üäk©F¯·Äâ^i‡|e:t±j¼eYÎ*¾Öêa'ìèáäùpô©òSÃÑŒpô#N„!MdêÕ•,=aqr§†”§J2­‡½©J¸Š²xÇ,F&¼)ÆXœUwW‰¬§ˆ¯V­yΤùŽ?±7Ž<{ñ²/ÚCá7Ç=áÆ ÃðVO‡øÃá ß~é×ß ô/ÚKÁ~%·ø…á‰ÿ üAão øïÁ?´·‰,í´ß øïáˆ|#â x{Ä0ø¿\Ó$Õ|-}óLJ¿à•~0ðÇŽ¾øÇDý >hZ—u¸¼qñgâO„?gÿ|>ý¦>"xÏÄ_´Ä?Úkㄼñ÷áïí5áfðŸì·ñoâgÄ+¿í¿Ù;ão€¿iÿ…öš.i,í«øÆ+é¿Wÿe~Ñ?ôW~4áðgÿœÙ_´Oýßø@|ÿç#QNŒ©NZy–5(ãicéM¼d¥KF‹ÃÁÓrÂI‡³”L$m„«UʽZ¯'QÛÄVtg‡ú¦)P©„§‚©J3ÂB(RRV1Å%R½u*Ñ£‹Ÿ6.–¾'N¼hbkӪ߅³Ç…2ÛxkCý§4x¾ÚþÓ_>5Oá;V~4ñ?ÂÿŒ÷¼k®üñ‡ÄMGâ>¹lo4‹ß4ÏøWâ§Ãÿ|8×-¼-àMÀÚÞƒ®ÝjúÿŒ/þRÐÿà•ž5v—§xÛöð_ˆfø5ðÃÃÿ ¿eÏxkölƒÀž8Ñaø}ñ»á·íð§Ä¿µˆí>2ë~Ôz¯þ$|ð>­6“à­+öeðˆf×~.ê—~µñÄ=3]ðWÕÿÙ_´Oýßø@|ÿç#GöWíÿEwãGþùÈÖPÁBJU¡Â½(PÄÅã–&„£ƒ–ž"Ž%a}½,m=J®†>Hãhb*â1”qÆW«^¦¿_ÄóÊkUJxˆâ¥jyr‹¯ζp¥È«((<}i*J*Œèá°89Ó– -Ëðøoõ/ø'Ç‹››ÏŠP~Ó?µoÚCÇ~"øÑwñ»Uø…ûê~<ý–¾"xOã7€¾|+»ðÖû5ÏûNèÞ9ðž¡áO‡?¾ø[Bñ­ûKxá5; ¯‰–.ÑkºÆ»/‰¾ð/ßjãà7ÀíGÆ^ö}ñKÉ?ƒõÈ<âŸÁâ‹sáÏxþÊý¢è®ühÿÂàÏÿ9?²¿hŸú+¿?ð€ø3ÿÎF´¥Aáç ˜|LJ©MåžÎt©â"á™óåTy~¢éÏ —×äÅáð5!<qÔ0øç‡–/ ‡­O9b±§V”°Ø¾ZÔqô*IUÃF·³ÌëÒÄc91ŪôªJthBzU!_ ‡Ãáð˜:”0´(чǾ%ÿ‚tüaøïðoàíæ³ã_‡_³÷ÆKã×Å?‰ž$Ö>kÞ;ý¡þxÏö—ñí—ŽxÓöwøƒá ¬ß uÝwÂ>1ø§ðÏâ/†¡¶ÐÒ¾ xŸÁÞøÿká;ˆ>|aÐu[UÓ5øÁ~3Öo ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üäj¡EÓ–tó g„Å,eòâå/¬*U¨Ó•YK 'ˆ§Bž&ºÃa뺘|$ªÔ©†¥J¤¹™Wˆ¬±©†Åºx›ûJJxHÓ„§¯V„!ŠK _,¦+CÙ×ÄK AU©*t(BŸŸþÔÿðN/…#¾ñgÁφŸ±·Â_ŽÞ&ñƃã/üjøƒûiß<]âÛÏ ø[Ä^ð¿ˆm|kð³â×ìËñëÁ_>ßëwˆ~|lðGÇ­ Ç µ>¹I/æËæÿ ÿÁ4/|mð÷Æ®~Ê5‡_ƒ¯Ž~&þØŸ°î—ûJ~×çÆÿþx/á§ü%ßk»¿Žþñ§Ã˽_Mø}áÏés|Bð¿Ç/xcâdþ#ñŒ~+ÕÆ¸4›´?²¿hŸú+¿?ð€ø3ÿÎFì¯Ú'þŠïÆü > ÿó‘®xà)B§ vçÊ8Ë(Ʀ©Â £J•£ :T”)Ê¥8UpuiÓšoˆpTÞà¨Ê‚Mà›Phb%.o¬ó{gR_Y¿Ö%* ª¡9S–7Œ?aK?þÊŸ³ÏìØ>&ÝhÚÇÀO øÁ6ÿtß Dº¾·á;áµßÁ/‹Ún›¢Éâ2Þ¼ø­ð{Äž:𾨮½­kºö‹âÕ´ñUÇ…m´ÝC¼mÿ©ðV³û^ø‡öŸðÿ‡?b nx¿áÏŽü@ß´ì ៎´7€üGðóÁÞð‹~Ο´îŸñŸáv³ð‹JƒDð/…õï Øx—á÷Å{üAÿ‰ô-@iz½Ÿ…´o£¿²¿hŸú+¿?ð€ø3ÿÎFì¯Ú'þŠïÆü > ÿó‘­qeŠÄb1Uó $ñ¼F+ˆ¬–.*TƬ/Ö åO 4§„£Zž¸J•[‡¡K‰ÄU­ëÕ¥F8x`ñ£ ,0pƒx9{:ª«/g)bœ¡YÏ•O±5)B*V t鮿Âÿ±‡À©~þÍß>8|3øMûFÃû3xSᾕà_|VøKàÿÇ¥xËáÇ…tÏ XüGð–‡âë/¼M:éÆîÒ÷GÕ&Õt•¸6°ë73<ŸŸ¿¿àº‡ÅCDÔ|AãŸÙ âå¿Ã¯Š´ÏоxCö¾ý€4ŸÚ‡áæà?Ú³â=¿Æ/xwÆÞ¿ý¡þÍâo‰~ø…eioð»âï€5Ÿ„é§Ö|㟇ÿµmQ|geöŸöWíÿEwãGþùÈÑý•ûDÿÑ]øÑÿ„ÁŸþr4b0ÿ[ÅUÆWÌ0“ÄÖÄbqu*%Œ¦ž+©ÇˆTéa!J5«R¦°ó©FTup‰¬-j”j:8ЏzP¡K^4éÂ8§õ)ÉR£C‡¥IΦ&U%Fœ3 UHÒ”5Š•þÉ¿²î£ð›áÄíÁvŸ ‡‹5ø‹AðÜz‰¼ÿ GâF±wãï‡ ¾ xJøæÚ?øÅú§Å ë¿xCGX5oxSÒ²¿hŸú+¿?ð€ø3ÿÎFì¯Ú'þŠïÆü > ÿó‘¥S íû|~½9Ñ©B½ ËV†&œð™ŽŸÖ)ÏÕZ˜_í\n' YþûŒ«,E:ŠS¨ª)W«:J›Á⹡KF…eW«ái`«á*–¢Æ^4«ÒÂG‹¥%:xœ,æªA׆½,Ö?à›ÚçÁ|ðߌ¼#ðãDðgì=ñ›ö3°Ó¼ðÏÄxBÉ>/Ü|*º—Ǻ‰âÏ‹¾/ñ]½®…qðÒiŸÃ>(øƒã/ø’çÄSß럦Õ-n¯õx|}ûü_âÇ~<þÏŸ´¿„~üVñçˆ~#Çxÿg˯ŒÿáøqñKá?ìéðûÄ—Âz7Æßƒþ"ŸÇ:'ˆÿf¿ xÓÁž<´ñî™áû5Ïø_Å_ i…“’Å·,6w˜ÔÍsj3S¼éãñµ«Kó)áêÖÀé«<4õúî%ÖX‡„¯:ª¼1<Õ¤~±O G N³§gð÷üçÄÿtÏ |øOûEéý”4¯þÉßõ…þ-ø'sã_Œ—‹?e]à‡ƒôë'㥗Æh/‚|}àÿ€~:þ‹}ðOÄ^)Ò¼k¯ø‹DñÔº²ðŸsö.ÿ‚Tø+öB¹ñv‡§é²ð~¯ðŸ]ø1¢üHøûÙ+öÞÔ¼ªÞiÉßÿl_„×QñÇŠ§Ò4»x¯áçÂÏ‚zƯñOÒ¾#é3xgXÓ-¬ëèÏì¯Ú'þŠïÆü > ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üäjå Îx‰Ï2ÂNx·]âHâª}ab2úTãYO%Rœ2ì=, RNž„g ,hûZœøªÕ£pXljöO:súÅm ™}j¸Œ=e_ë¾ÛëÄW«ˆÆb=£¯˜×j¶aSRåwÄðN…áÆÿøâoíAa«|hø9ンëlŸÛGö¯ð·‡,|uÓþ+øoKðoÃMOÄ?>x£Æ~ ñ/Á¯ˆþ&Õntoé^øá=#ÅöV¾õì¯Ú'þŠïÆü > ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üäka#7MË1ÿeOÙS\øûB—ÖècÕ4–ÜÇá°ØèBÎ4ñ¸z8ºj8ŠTê+†*½5%O ˆƒš¬¹âðQ« W§NZÔª¬Oµ¡ˆtiÆŒqTg E:.¥*UaNµXÔóÿÁüÿ…Uâ^#ÿ„“û{þÅË/ŠcþÇþËÿ„cì¾ü*þÂûGö¦£ýµæ²þÞþÔò4ŸÛÙÙÍý›ý£á_Ù_´Oýßø@|ÿç#GöWíÿEwãGþùÈ×LÕZµ*Õžeƒ”ëRÌhÔ—³Ä.jY®w"Ì#hà’^ß9ŠÆsE)R³ÃÐtð¯Ø ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üähúœ?è;÷c?ù“ú³ò¹íêÿÐ'ÿÂóWõgå¹(¯†ÿ²¿hŸú+¿?ð€ø3ÿÎFì¯Ú'þŠïÆü > ÿó‘£êpÿ ìÝŒÿæOêÏÊç·«ÿ@xŸü ÿÍ_ÕŸ•þ䢾þÊý¢è®ühÿÂàÏÿ9?²¿hŸú+¿?ð€ø3ÿÎF©Ãþƒ°v3ÿ™?«?+žÞ¯ýâð,'ÿ5V~Wû’Šøoû+ö‰ÿ¢»ñ£ÿƒ?üähþÊý¢è®ühÿÂàÏÿ9>§úÁýØÏþdþ¬ü®{z¿ô‰ÿÀ°ŸüÕýYù_îJ+á¿ì¯Ú'þŠïÆü > ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üähúœ?è;÷c?ù“ú³ò¹íêÿÐ'ÿÂóWõgå¹(¯†ÿ²¿hŸú+¿?ð€ø3ÿÎFì¯Ú'þŠïÆü > ÿó‘£êpÿ ìÝŒÿæOêÏÊç·«ÿ@xŸü ÿÍ_ÕŸ•þ䢾þÊý¢è®ühÿÂàÏÿ9?²¿hŸú+¿?ð€ø3ÿÎF©Ãþƒ°v3ÿ™?«?+žÞ¯ýâð,'ÿ5V~Wû’Šøoû+ö‰ÿ¢»ñ£ÿƒ?üähþÊý¢è®ühÿÂàÏÿ9>§úÁýØÏþdþ¬ü®{z¿ô‰ÿÀ°ŸüÕýYù_îJ+á¿ì¯Ú'þŠïÆü > ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üähúœ?è;÷c?ù“ú³ò¹íêÿÐ'ÿÂóWõgå¹(¯†ÿ²¿hŸú+¿?ð€ø3ÿÎFì¯Ú'þŠïÆü > ÿó‘£êpÿ ìÝŒÿæOêÏÊç·«ÿ@xŸü ÿÍ_ÕŸ•þ䢾þÊý¢è®ühÿÂàÏÿ9?²¿hŸú+¿?ð€ø3ÿÎF©Ãþƒ°v3ÿ™?«?+žÞ¯ýâð,'ÿ5V~Wû’Šøoû+ö‰ÿ¢»ñ£ÿƒ?üähþÊý¢è®ühÿÂàÏÿ9>§úÁýØÏþdþ¬ü®{z¿ô‰ÿÀ°ŸüÕýYù_îJ+á¿ì¯Ú'þŠïÆü > ÿó‘£û+ö‰ÿ¢»ñ£ÿƒ?üähúœ?è;÷c?ù“ú³ò¹íêÿÐ'ÿÂóWõgå©~ÿÉ-økÿbƒõÓk¿®á?ü’߆¿ö x7ÿQÝ6»úá:BŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( á?ü’߆¿ö x7ÿQÝ6¾rý àý¾µ¯‹Ÿ <9û+x›ö^øiðrOø÷Wø»ñ/ã÷ˆÿµñeÏì}ûGxöÛâ}Ì~?ñ÷ ¹¸Ñâÿ‚‚x>_Á,¾]JUQñ¤Gªµª †°ÞÿO߯~4ê?þÞþÑÚG´w ðüŸ4†2êS|9°ø‡ýŸ øªK­jzβþþÖ/áó¬j—º¯ö[Û F_¶ Ñ‹Oø5þRÿÊÿ²¯?þ´/ÇŠôø<ãáφ®¾ ~Á_4? xWOøÊÿµ´o‰²èZcxªÓÃwž×5ë/ ÝëͧÝj7>µñLºúèw"÷L‡P[‹Èl{«¡q9}jµr.©:j¾'Š0Ü)K0®•(â#ŒÎ3Ü^HñxhKØÐ¼åÂʾ ÖÁájG Jq«‡œg*ÅzqYÏQUcB†AÏ^IMaÖ/Ép9¯Õñ5Wµª¡a‰tñn–+Mâ*FP­MÂ4¿µÚ+ð â?ü¯û ü]‡ö½ñwŽ5~<ø§ûk|ð§ƒþ$ø§â_ÄÝKÇ^ñkÁ‘[jžý¡<a¨ÙÇ­xkÇú‰l´ùíô=7ÄQ|4ð߃b½øYðûÀ^ øe«êÞ½üAÿ‚;h¿ÿi¯ÙZÿ‚ ~Ò_³·Â~?þÊ_¶Þ¹?ÇÝ6÷áîk{¨üømâ}SÅZçílóhÚ%þ¡ãÍvÿK¶ý“â „“x¦ÏÀÿ< ¯ê:–¡¥ë¥Þm…„±8ŒN¸G0Ãapøïg:˜LF 9åŸ7Æañ.:òÃäô±XÚ²ž ž"®]Ž¡9aðõhæ4°8J«X>f©ËêUëÖ¡>wbðÕ*dRͲšuès:Û4ÆPÆä‘¥KUSÌpÔãFxÅŽÁF·÷wEÞ4‹Ã?µçü˧ÿÁ=>>|1ð—‹ÿaÏØ§ö4¶ñ_ÀÿÙSÄžÒu/Ù¾ãÇ7¿ ¼ ¯ÄCàÅæ’Ÿ5ýCÃ>øµ¯xÂ1jš&±§x>ËÃV ᡤßAp‰òìñOÅ¿¿a/ø9oöø»gÅ_ÙÃö?´¥‡ì»¡üOµ>=³ø_áÝGý¢m< ðóÂrx¦-NÓMð÷ÁË¿‚>ñ?à 2ÄFÿµ™VûË¥,zX¶âž.?Ù8ÌÚ•9T¥C‡sî(ÃS”¡NXŒ«!âZ<;SÚµ)ý[‹xŠ8êeê9K‰«F½9#ÔÃ`jÖͲü®¬£Eâ³¾ÈqUÓUVÅ™5ãV…4á,f NZMá«ûIÕ¨ðð¡Bu÷_þÞ¿ðP¿€_ðO¯ø'ÄŸuý:ëÇ_~ øOáoÁ„vÚÝŽŸã_о2ñOм7áyÆ…g2]]Eá/‰ì5ÿø¤i÷z†tSoÇw¯k^Ñ5¯óƒøýá? ÝÿÁªðOOÝøgÃ÷^4пࡼ5¢x¾ãFÓ¦ñFáÏjõhV¿%³jº~‹¯êðåöµ¥Z]ÃcªÞxDº¾‚yô«ƒö«þ™ø[ðÇPøÛÿ2ñ5ÿß_x“â7Ä“ðÿâˆ/ÓáGÃh4ï þÎ0ü]ðö›oào Ae¡üVÖþþÏÚæ·ñ/EµJiµ­kÅ^(Õµ_Xʼn5 SÄšö¡w¨Íw¬jÜùs”g›á0[‚yocëbiR§,L?³8W Z8yÇB¤ðuêSÍ)ájLJÄâòü6 O€Äb©Ôê¢Ý,«6Ç:*âðQÈ*e9ád±üUå8ªs¨½•Kb0Øú˜'R0§[ K[…©KƒÂóÿißõêþð^­ñÃzwƒ¼©øOú‡Ž<#£ëkâ]+Âþ.½Ò-.|GáÝ7ÄIkbšõ†‹¬Iy§Zk glš”ÉxF³už7ì­umÿÿ‚uÁ|¿à¥Ÿµ‡OŒ?lß…Þ2ø•yû=|[ñ<“j¿d];àW‚îþ0|!ðìßâ»Ûx5ï¶ÿ|g¯^9ŸáÃxGSÖe·Ž}~K«àò× ÁD>+ø›öÞÿƒHg?ÚÃö˜ÐtoþÑ>ñO€ô #⯉4KkÏ«huŸƒ‡Œ-4ºñGÀÛgá>­ð‹EÓüsâmÀ>ñ¿sðƒÁ¾"ñU×€´CMðÇŒ¼I«x7Åþ´Ôü{§ø¥¼¥ ÃØü!¨kž*¾ñNf¡•fYæ]ˆ”¥.XwŽ©ÆNj¿Ë…"ðÐU*'†ž8‡=jNQ¯<EJ­oS<–Îp.>šTãžâðØ<•KTÅð¥~"¥*“~É(Ç…Äe5ZMF†cIÖ…E…úÙQ_æ¹ûKÞøËÀ??à×/ø(-ÏÅŒ~8ý­¿ieømoñ§âÿ>#ë:®­â Aã?‚Z›àm+@AoàoøRÇÁß¼iá BÇÂÑçñ埈uÏüTºñ÷Äx—ÆZ×úPHæ8ä.âˆî*¥¶çÆ3ƒ×¡­±Tia0Xœ]Zé¼{ÄÙ&*œ)T’„¸oBL])Ûžµ,\+ª”éªQ­IÂTå· K–•iUž *iSÇðþGžÐ©Î¯(ç^„è88®Xá«à*ÂiJ3ÄR”*ÔÃáez)õùGÿžÿ‚–'ü£öñ—í=¦ø+Kø‡ãûßxwáo øƒR¸Ó<3yñÆjÓ隯Š^ÁãÕõ ø[JÑ5¯êú‡q§ë%µÑ›@³×<2u'ñ>ü‘~Ê×VßðP?ø'WüËþ YûQøtøÃöÍø]ã/‰WŸ³×Å¿É6¡ñ+öEÓ¾x.ïãÂþÍþ+½·ƒ^øoð÷Æzõã™þ7„u=f[xç×亾-pðV¯Œ¾0ý²à×Oø&—íiûCèú7Š¿hñûBéÿ &ø¹®è6w?õ? ø~ÛöŠð-þ¤Þ*¾³:ä-ñ>ÇáWüY㥱¼‡Nñoˆ´Í;[¾†ê[=>H›öfø»ðFÏPðn—ñÓáGˆ<¦ë7>)Ö¾ë~?ø“áÍö•®O5„ø“â ž««Áqµü£G¥&©¯~u| ÿ‚¦~Ö¾&ÿ‚øþпðJ‰ZWìë­|ø_ðsQø»á/ˆøgñ/Á?eVð׿x[Þ"½×þ;|Dðަú•ñ"] _Ö´Ï è+âCI^Ó´Û^7‡í¿kÿf/x?áïìçð3Áž𧆼àýáG-t/ x?BÒü5á­ÖO é÷R[i:‹ke¥éÖïs<÷ ¬1´óK3)’Gfþ,<{û=xö£ÿƒ°¿à >(ê^:‡á—Šÿaˆí¼}á¿øß_øusñÃr~ο³½¥Ç‚|GâÏ]i>7³ð†¡yweªkzg…%¾Õü¬x»Â>$õ3‰Ç,âZØXÅWÂe™'Ætª8ÒxépæAVXlf!Ñ£ìVaZ® c*Ô¡‡£BXÚµ]:8l5GJ7Áf\9_Š­*uñ¸W ð§í'„«›ñ `ñ0Ðç¥*˜eƒÍñ˜ 8|EwFteˆ­*Ô)âiÿt¾(ñG†¼á¯øÏÆž!Ðü#àÿ h𝉼Uâ¿êÖ†ü3áÍ Æ}O[×üA®j“Úéš>‹£é¶·:†©ªj7Vö:}¼÷WsÅRH¿~ÇŸðP¿€_¶wìýñ7öªð¿§xsöwø{ñ/ãƒ-~*øÇ[±Ð¼3®x/à­É³ñÅûëí]4Ë? xÿìš¶¹§\k·hö¾µ²×µÉ4‹‹»Í#Jþ??àˆßãüGÿ^øUñzÃLø«à/‚w_µôŸ ü5ñM±ñž‘ài´Ù×Aø­áÛ éšüún‰wᯊSÞüIðåÞ•ggu¡øëP½ñF™5¶¯"]GÓÿÁeßÙ›Åßðl'í™ñkų·À¯üUÕ¾ ~ÝP꿹¡‹OL²ºƒÍK,­Å’u#ˆÃä|“ñNôœ%RYüòüfµX*ªN¾±àÕxáå]\SÄÕ« 4pþ–_ÙþÛž/ø{kàï‡?mµ Oø+ÀçJ×µ­~Ûá÷…õkÇãýGSøŽž_ÞëÓuãiQËáZX™Õö9VØféS…jøšœaF®®6 TÃSu¡S‹Ìjàã:ë,¥*p§'åà\ÅP©J4ã<Û<ã_‡”:Xì7ÆapµkËÚ8áýœ(åÑÆUujÆœ;Ï'V+ý$+æ¿Ûö‡Ó¿dßÙkãÏí¨éÿÛMðᧉ¼Y¢øucši¼WâÛ{¶ðWƒí ¶’+››ïø¾ëDðÕµ¬‰sqyªÃ » ~aøö ømÿ¼ýàšÿÿl}ã·ÃøoÂÿÿjé-~ xõ~^^üNÕþéwZ¤üZ…uys©\_iº§‡ì<1ãÏ ý¢EðoŒü?¡ªÿi{—íÍiíûWþÀÿ±mwyáñî·ûo|Ó⸼6׿ dÙ´&øQáKÂI5‹ÿi¿|)ñ6WÏ5¾»kð·Ä6—‘\ÚÇy‘™eÕ¨cq |D°øçžã2:•p2öµ)eØ:Têæ™æ S¤ÝLN]£Ÿf0ÀÏ %ìrXÖ©[“(áÖ[£W „ÎÔÁÿdPÎ'GÔiÕÆV”þ£’UtjòòæX‰e™tqŸX£MâóZT)ÝÓö²ôŸÚwö—øÿû8þÆ ¼Yw¢|/Öÿm?‹Çìåð'Âþ‡Añ[|!½ý¦¾8x‹Â~ÖZ Ãã_øMែïµ?xÒÿNÿ„üëøÂwÍsâ4SjCócà×ükö¾Öà¿¿à“´ŸÙ»^ø!àO†:¯Äß|Dð?Âÿ‰þø«$ÿüHð¾¬Ýkÿ~#xFúmÓÆ£@×õ‹ iIâk0ëzv‘á8¯±lþàøƒnŸ´Ÿüƒà÷ÃùZâûáÏü×àn©ûFx¦Íe¹5Ïí+ûLÉâ„¿c¿Ž)’ÖïXø{ðkÂÿ¼C •ì3‹ñ;ÃZÌH—kaqà—1ÿÁé´³…ÜSöUÓœ(8,WöcøvçÆ3ƒ×¡¬°øªuól>+ tpÙ†ÄlÏêtiÎpx Ÿ)©‡Áaå„qxWÃg9Fo™àªÆ¥_¬eì¦TÖµöa”æ´yâkäùwFxºŠ1ÄO6Í8»†éãkªô9(×Ãb¸o=ÀakPk“ ™Ï6§*TëP¥*ÚÅþxß²µÕ·üþ Õÿòÿ‚–~Ô~>0ý³~xËâUçìõñoÄòM¨|Jý‘tï^ »øÁð‡Áÿ³Šïmà×¾Ûü=ñž½xæ‡ áOY–Þ9õù.¯ƒËW¿lOø*×í5ã¯ø"‡üd|sñ÷޼5áÛKâω¾þÜ?t+ÍÃÞ"øû>üø¡Ãox{Äþ:Òîl5½>o¾7$ñóéWV—Ÿ,t¯ÙÜ]Ëá½OÄf­4yêPÂJqN&§‡ÔåJUiJ…øˆQÅO狌œf²ØàñǸStçÃêu1©=kÒú¶3B§<°øZüq†©R”aW:Ü ‡–#2…ª£Wë°£ŠYt¾µr•*1ÅO ñ'ì³oûBþÏkàÝ{áçÃûï‡ýмžðîqá/úOÁÂ^Ñ¿á.ðe¾›{â5í[ÆÏáå´ñWÄ Ò×Oÿ„ÇW¿?ÃWüwÄš/ÂOØ;öXý£ÿf?‰^%ý¢þ4|*ÿ‚…ø“ÂÓÁmçøSáÏÙ×ãíIâTð?u„ð—ƒ|Ioãˆÿ´/Ư|-’ÎÿÁ*ø±ñ—ÄþÐ/&ð¯„ü1ðÂË⇅¦ñ«àÍpŽ/7Áe Ô¡^»ÈaŠöЧυ­œñN…êÁQ¥Z¬¥ LnõŒ[ÀQÆCO‡Ÿö”+a)B¥R¦â0ÒÃVö¿]ú›uÝ,=wƒáÚ¹âæ¯:W—·«‡Äà¡OG1Ä–®iW SÖ¯üçþ ·û]ÿÁ3ÿhø'߃þ i³‡ŒþþØ¿'øcâ½âɺ—ü!wáÿ|5Òußø{Ç^øõáÝ[ëZ'ÄÛHtRøk,žÕ<=q¨Þk^$´ÖâÒ4]Ú{þ ™ûZþÏð]_Ø×þ ¯g¥~ξ(ýœkÛü@Ÿ]¹øgñ/JøÛà[Ó~,é÷Z >4‹ãµ÷6±o­¿Âm^_É¢]ßéGÅŸå÷üy4—?ÿà„÷6ù§ý¦|_4¯…]òKãOÙ]ݶ U]ÌÄáT(ΫÁ]üiñKþ”ÿ‚L|>Ô9XþÑþ Ò-ø‘â'Ö¼g¨]ÅñÃö^1½oø’×Çúƒ¼?âÍKÅ>:š=;Å·ùç4±øq:Tq¹Wÿª™‚¡%‰«–×­Vɰ¹„è×§AÊž:0§Ë%RŒð•ðó”§R¤¨¬6'\–|n7*œéÊ®_™pö#ˆðS©?eKðYöî+)upóªéb0ЧˆÂcc´ëûJž TÂÉãèzß ¼kÿ 'áŸÃ¿ˆ¿ÙŸØ¿ðŸxÂ>5þÇûgööOü%:Ÿ®fh}’Ãíÿ`ûÙ~Ùö?µy^Ù-÷ù)ùAÿ˜ÿ‚©ÜÿÁ2þ|Óüá_ø—ãí_ñ—Kø!ð›Sø­©jz?Á_†÷7²iÐkŸ~.]è—Ö£àß6µ¢Üj>ÑuŸ êzÕ­ÝÔ±x›D·Ó®nê¾½ÿšýŽlø%ÃOضûÁ·_³—Á¯‰^øñkű~Éš€þ êÚ¿Ä'ÃÞñ ωu‹+?ë~ ñF£â+Í2ÐxŽçÆ> ñÚŒ–ö:ªImâBÖt¿Îoø83á×ì­û9ÿÁ9à“ž øa≟iоøû$üañgŽ5—×fõðf›á†zßÇßxºäÜkµ3Gñnˆ~j·ZuŸÅd¹Õ5;ÿxw_ðç†oÇ£žÐ ã—à°Ò©]q®O”e¹- ò\ó.«˜ÑY¦]‡ÌªNËq3Œ19N^JØylbqù:§R®ÈÈk.ý¯ôh·Œ¥¤kZ_ìãá 3Q´Ô f2Ã<:…õ³™@ß5´ê 4oŽ<\ý–S˜f˜|e*óË|?â&ËñRÂG vgCÄå:Xœ¶§îã_†riC$Íð8ª5éc1Uéãñ´^3Ùã+ú˜L3Y….°x¾-á «‚uþ±8åy‡c3}l.a ²—ÔóÜë/«˜àqX)RÄáhF¦…|SÀSþƒ?nø/O¾þÄ_°Çí'û9øWþ!ñŸü‡Ä> ðÀY¾7jSh¿ ~Kâx4ØüWãwÔÍÕæ›ðXÕí4_xKÂþ(Ò.u;ûm]lüa¥ÙéSêëþÿ‚~Õ?à©ÿà™ß¶ ŸìÿñV×öŒýŸõŽ?¿h?ÙÇá÷Ä/‚0iš‡ÇŠÆÿ¾&ü"øñ£öˆ¸¸76Þ¼¿ð÷<;ñ6ÊÒ(ãÓm.ü9{6¹{/„ÿ–Wð—ÂOÿÁ¿àŠðNo¿ õ~Ñÿ·¯ÆÏiÿ²wÄ«Í^ÿÂÐþÊú7‹þ7øŠÝ>7^]Ǿø¤é¾øŸáySàÅÄš^‡ñ@Õeš?èW¾ðv¬þëÿ¹ð¯íKÿ¤ÿ‚ë\Á7ÿk›ø?jí_ö‡ýš/¼û(~Ø*ÔüuâOˆÞøðïÃß\ø#Æ>ø›ð_EŠh|?ãí ÃZ¾âÍcÁ~Óµ?zuðÿWÏxŽ…*N¶ žq½¢œyªQΰùËÂV›©Spöy:½lu5‰þÚ¤ñYe,v6ž•a|xJ­l‡-Æ:ÐöÿØ;0¯<Åq­L âê”!5,VCŸd˜L^_Kß6[8SǼ&c0™½_ؽkþ 'ûJ|^øwÿ#ý®¿dÏ ~Ïëû&ÿÁ1þ øƒáÿˆüñsÁ_uï‹¿µ­ÇÁ»x¼Uñß[ðÅ_ üRð/‚¿gMO ܦ“ð±µß„´^§¨jV©â¯éZE¶¯oàËÛ€¶ÁïÚö;ø{ûoxWQ¹Ñ~ øûàÄ_^µ„:Ÿ„¼;m Ük^'Ò¼MýŸ{¦Ûë~ šÃWÑ|Gž¡ygmªéñAw(Ño KHÖ´¿ÙÇÂf£i¨@Ìe†xu ëg2¾kiÔhßÁ?¼3ãÝ_þ úÿ‚^~ÂZΡ­[x£þ %ñsVøc}¤Ú•†±¤~Èú—Åߊ_´ÇKż‚[=N×D×ÿfÿë> ¶Õ`–¶›â§‡môéšÞm>w枣Ëñ,&7 W<›ÂyåÙ­JNxgœñæQ™G1Çâ}•Jµ#•Ë2¥ƒÍkÓr«ƒÊrü&5`þ­JN…oGS‡ÍaS̰sÿ0ù†  ±QÈx?„©…–^ʦ#€¥ˆËàýìfk˜æx/­b1UÕ9Óßì1ñ‡âÇí û&|øõñ§Ã^ðgþ4xD|SƒÂÒµ½ÓÃ>ñÞ§¨x—áN‰«Yxƒ]ñ§ÿ …‡ÂíKÁðøêᯭìîüf5ë7Gдé-t{3ÿ‚‘|Cÿ‚‡ü3ýžañü/à'ÁïÚ+ö‹oøcO»ð'ƯÛø[Ã6ßn£Ô‰µû½ø‡ð—OÕu› ˆ´¨ ±»ø yw—ºµ§ˆ.l¢Ñ/?à¿>ý¬fïÚƒöaÿ‚€øköBðoü þ ÷û7| ñO~$þËÚæžo ýŸüD5¸õÍCö†ðŽ—®ê^ñ]Ÿ…´¯ Ûxkãæ‰áƒúoµó­Eá+]SD×güãÿ‚üøËö@ý¢ÿàÞ?Øcö’ý–ôÿx£ÀÒ~ÔVÃoüs¶oþÑ ÓüQ¥þÐÿ~x·âˆ¤Ö¼_¨j1|AðŶŸãI¼[âH<}àïø«Rñ_Ž¥Nñeÿ7N¦¾q‚¡VŽÅùv]<¾UéσÃUâ%‡ÊÖkááÏ…Íð´°óš§EQÇåøŒd)c(×7S¯,Áb7 ‚ÇK V¦3†³\Ñc¡N¤²üVa„áêùžc„ÀÓUa:Uð㊧Jz”§†­†¥Z–€„Ü¿]^}HŸÄVn¿6™a.·§iwójºe†¯%¬O©YiڥŎ—q©XZÞ´ðZ_ϦéÓ^[ÇĶ6#[ǧ_À/üà? Ý|gÿƒn|C¥éö^ñ׌î~x7Wø“áÍ@¶ñûhº/‰eù¼-n|C}¤j/¨CàíGÅ^"Ö<+¦ë¶ú¾‰¤jšÖ­s”ëªêQ]çüý•<¦ÿÁÆðT_ø'VãŽý޾4~Î:·¾9ü'Ó~9|M¸Õ>6êãá—Ã/‰_µ¿êÿ5k{|Wñ§Šuký;âV“â/®±ªø'ÄÚî³ð»Ä¾0ð'ˆû1² ù¬Z„^â%*0‚š§Uð Ãb*Ź:“¡ Ë ˆ“ÃÞX™a«Ò Ó­ ;MTËò¬DªÖ”q9GfUeQBu¡C‹³*ù4ù¥FñXe rŠPÃQÇÆ»œå–Æœ¢ UþuðHÝYþ(ÿÁ°_ðY/…mí¾ ø7àE×í ¨|+Ѽoi§øŸMðEݯÁŸ|HÑo?ê:ŸÄtðûøâþ÷^›\e:Ž­VµIàp €ªÔ¯F‚–"x~:UÝ7 -JÔ¢ñbÂâ}¥‰öx¿gKMÕJ;P¡^´°´9! f/6â¼–UýÌq¼1 \Ó©‰åJ8|sÃÒƒ¬é[ëNsZT}¥Oé_þ sÿ[ý®ÿà™ÿ´?üïÁÿ´ÙÃÆ l_‰“ü1ñ^‹ñGáÄÝKÇþ»ðÿŒ¾é:ïˆ|=㯠üzð‡‡n­õ­âm¤:N‰©|5–OꞸÔo5¯Zkqi/ôs_çïÿÜøÃãÚá·ü ñÏâV˜ú?Ä/‹šï†~!ø×O{y,Ì^'ñaý5jU´–ÚÍíb»¿»žò³D°Åp‘Ʀ5Vo¬mÿ¿¿jø9?ÁÿðOïü&ø-ûI| ø/ðm{áGì•ûVüTñ/ÂÙ‡âgÆŸ|›â¯ñ{źn‘ð3ö–Ñþ)xëÂ~ñ?‹ôXø£á§cáçÑukíSðÞ±g}}­DpØŒ*Y=XÇšGŒ¼BʧZ¤¡' å¸lÊ^üiJ¤ðô¥F½?îù ñ©QSÂÑ«:3*”q8\sMK…©À<1ŸV åKÞÅfüaŸpíÊõ¡‡¥/fò¨ãjÒ”“£ƒ­ˆ§KŒŸ&'ûW¢¿œ?Ù7ÅŸµ¿ü‹ö:Ö>~Õ¿þ8~Ývöÿ´¯ˆ4ÙÛàÿüKHø›ûo|Aý›g/ø^o|<økñ ëâ·ð3Å–¾Qðg‚µ©lnì Òoü'¡éö¶eÓ´Ï,ÿ‚’üFý²à­ðMjß±_ìuû\ü ñ¿ÁOÚGáoŒ>!~É_·ïÀ‹_Zçíƒð«À1Cã {áî›àÛßê>j:Åç‡õøbëÄþ_Eàÿx"ÅouË#LÕy1Õéá¨ÏC›K²y㜗³–]O2ycżb£õ¸9dÐ̹³„©‹Ã§…Ä:8š´#õƒL-ˆÄG9F„±sJXQòÇ, ÌØºŽ’£ý¬ð ê[xu¬ÑúË£ï[ú¢¿‰_ƒ_ðVŸ†6ðIoø*×ÇßÙKà/ÄoØ—öáýœüðßá¿ÆÙGPÄ:‡ÃßÙ§Å×¾#Ô¾ øÅ¿³×„|E¥h– ¼ ¢jx«ÄZ¿Áû-šg¯ø_^þÑðÁ¾¸ñ¯ÄÌø&gì‰û]|lýà•ßðP/ÙgEý‹þø¿Âþ9Õ<}û]þØž!ý¯>:ø“ö“ý¹~øßâEÝŸí'ðßö¤Ó#ý‘ôËx‡^ñæ‰u©è:GÄï?ôïø¯@Ð,¼+®èÞJêpúÃIæ8Œ$ÛŽ S†a_2‡%\*§ÄÔñÕ°ØÚSOeW…Ã`¾½^´k,E| nl£_IÕt°ñU!(bªÕâ*ËÚµxâxw €¯WQK–¬1ØÙæ˜8Zk<*ç­ˆ­Œ§…†¶/ûˆ¢¿…/Úsörðw‰?àïƒüŸ<7ñöb×<]ñ¾ïáÔß |WãØüGð‡ã…¯Ä cñ‡‚âÓ8ñ‹b¿Œ^ øáý¡ñO[Ѿ krüøâ+6ø‘ðöx'ÐôMUø{ðûV_ ø×DÑõ}#Tº´Ò4Üj—:þ³ã?êZ¯—õ¨ÐËrÜÛ0K ‚ÆÔÅRÄT¦Þ'ê/Åx®Æbª% \Ùu(áªfŸZŸ°© .3Ž+ …Ž[5ëVÍq™N¶' C ^‹¨Ý(â>¿Ãï:Áamש }jÞÇ/–œ+®|~_[[êâ¨`¿ºÊ+ùÙýžþ*üøÿð'â/ü÷áwìÿðÜüAø5ÿôø«hÞÑ×\µÖ¼ðBçâÇÆé7ºTv«iþñ¦¡aû;é¶v—PËá;¯‡¼¢Ýiö>$×­®žÏø&§À?Ûƒþ {ÿÿ¹ý®þÇû&i?ðP=öÑñÄÿÿÁP>7þÖôOÚÃÂÞ!ðE®‰oð{Uðσ?dI¢|Ô>ëz_€m¾ÃñýþÍà^[éþÙ M·ô¥AÓÍó,¦º©Ny. ͱ1‚«‡Ã`ó'©‘åøº3…N\FYm5žc+9Qö1œ2ì¾®"­ µ¹(TöÙ^4IFÅ|F&¡ÍûüVcƒáºÖ3‹¦ãàªÑÌ*Ë%Š„1uâ±µéaéGK þ‡4WðÃÿõøSm©ÿÁkÿà„þ%ð?ü"¿ >2ühñÇ‚¬>!|bøo¥èG\ÖfÐ>+|-Ól5Ë}{Qðõúx¢ëÃ:§­YxSñ>“¨}’Î]:ÜÃme pÛ~âé¿gø ·†¾6ü[ýžfŸø)‡í}íûBÙø¯ÇŸ ?g½ _ý³|sà/Ÿ x“Sºñd–¾,ñ6ãKoê·pêÄÞ>øƒãoˆž;×¼a¯h֚ωo­[N‡Nù²¥šbÜpðžqÄ™(QZŒ±ü?œeYd#*–£8SÌif5qtꪆX7†¨ä«Â¼UJ­æ+†ƒ­%”ðþsVUe)àóÌ·2ÇÍû%í£)àj`)áœ}²x•‰öÔù=„éËöãgÆß„¿³‡Â¯|oøéñÃ? ¾|:Ѥ×|eãŸêPéz‹`'†ÎÙiO™w©jš•Õ–¡hÖ]jþ ×u ;CÑ,oõ}FÊÊ5ýŒÿiï~Ú³ÁÏÚ›ÁÞÕ|+ᾓƾеۛ{nÏ×Z¾§g¡É¬µ¤ikoªßi–vº†¡§Û=ݾ—ww6›£ªGhº×óyÿ®ý¥|ÿÿ‚~Ü)ÿ‚wÿÁ@¼ ûÁ^ÿfxKã'ƯÛSø“û?ÿÁR>^ë–7?µÇÄ-[âjj>ð¯í®hÑ\Ø|{øW¨k^0´‡BÒ¼Usw¨~Î7ºÏÃË]sáO€õHÄßûRÁMgø\‡›’¶#Ëÿ}GS1Ëóš)åø<4›¥ˆÇVÉeˆâ.¾3ŽÅÑ¥K,ÂákfSÆQËü·ˆL§›ác*ô(arü}(·ó`1ù.7ñ¸‡NU¥G „Ͱ‘ȱxœ5#ÿ‚…üÓ?oO†ðN¯kúw¿hoü>ñ÷Å/ˆ­ØÜ•ðoƒô-WЭàK¹¬üOñ ¼C¦ÜxSÂÓ›A¼/ç‹õ -4ÛŸ Åâ}Ú¿öñÏÂOˆÿ±ÏÁo„ºW…µ¯‰µíeà«È¼[¦ë:¶™á¯ß¼%âŠ_ür–º½áÛ˜5}/ÁO xCR½¾ŸE°ñ÷|#&¯¤ë–lú5ÿòàŸÙöhñ—üûJü(ñìïð/Å_ døŸŸá¯‰>x\ðüFÕþ|ñž«ã÷ðv§áû¯·µ?kz׋58ë·¾%ÕõMvæþ]Rþîê_é³à]¬´WüûöªøûsçÞøö+øá/Øwàâ´—ØÐ|PñÕ‡þ=~Õ>'Ò-Äß`–ý¬µO€? .ïŹ»Óî¾ø“G†h£¸ÔbŸ‡.YÁð¦6£ýö7Œâ<Êœ#ÏF £:ÆÐÃÒ©JÒL;3¥’ðÎe­&¨fË M؈á°ýy„Ÿa#$©ÑÃäø ¾¬ôÄOÄœ3“æR&ùpÿ\Ë0¹®cŸá!&ãìòj˜IQƬ4ñXÏÕÚ(¢™ðŸþIoÃ_û<ÿ¨î›Zž9ðî¯âßø‹Ã: ëíã?x#à†µð?Ãþ“Ç„M~7×.~ üø›âOY·ÓeþɶÓÿá$·ð´6Jξþй½¾ºý`¢…Æ–[B S£“ÔÃÔÊéRýÕ<°u–#°°§Ë0Áb”qx:PJžã0𥉊ª–žÓY¥*¹¤jÃ1©4ªO«Òú¾"X‰O™Õ©‰Ã²âjÊõ1OöZó©‡ýÑðŸíiûXx#þ ûëß´OÇ»¯ÿ´„~ é>ÒügâOø#á߈þ2ø¸ëö“áAã {Bð~›ðSá.”°Ýjqjž'Ô¬4߇ÞÓl¡œØið\Ic¦]x‡ì%ðgàŽ¿i¯Ûþ _ðÇÁú²~×IðcÁ?>$i'N»ƒâ§Â/…ß |1,ßtÛË!Y)þyþÒ_ðMŸƒ´íð§öÄðïÄŒ³?íqðƒÃÚÇ|=ûD~Ï:—Ãkokÿ uÝ;ÄV:ÂïˆøÑð¿ãOÂ/ø,]ø–ó^Ó#ñ7ÃkýÃúýµ†¡áíJòe†}Ù‹þ ±û)~ÊŸ³ŸÄïÙ—ÀÞ ÔüYà¯W><ÕÿhÏ|JÖˆþ ~О*ø¥£É üGñwÅ/éöšίâý2ií¯,<)£øSÂÚ|8ðÏÂ/xSᯃ†´|9àý&+O¹ñ7‰5ÿø£Rey./u¯øÇÅzޱâx£]Ô'»Ö üNøcª|J‡V¸Ðþ%Ý|øðˆø§FŠÙ]m54“T—Ò?m_ø$_ìßûk~È?`ýSÆ¿g¯Ùkáœ^³Ò¾~Íú‡Â¿[júOÃû{|¢ëšÏÅ„ŸµÑ§xVkÔmN…¨èWÚΧ,×Þ+½ñ ÂÜÁúErË Bxxa%J2ÃÓ–XáIß•G$mä´›¿4°ù2r†S…“x|¶œçKJ…:“„¶UjG,Z“X™ÇUÑÉÿjBó9««*Ù”iQþÑ®’¯Ž• ÅT«:¥–¾ ~Ìð?öVÐe_üyø×â=3Â¥ø]àŸŒ-³ø7ÅïxZ×Dÿ„wÂI¦§‡>øk᧨xEŠÆË÷ž*øIâ/í!¦ÚÜxâ/]ͨ\_~8xþ žý‘~~Çß¿a ~Ôÿ·-§ì÷ûI|Hð_Å/Šzlj¿eKÏj>%ðCA=¤Z_Š.?dwÕ4m/W¿Ò|%¨ëV¶r,æçÁš,:EÞ‘§ê>/²ñ?ôiEoˆÿj¯ŒÄâˆÌ)áécªÕ÷狆 ÂÖ¯ígu8c'RW©WZ¬çSÞ' )`¨a0¸Gõj ÒÄ`©QJœp•žxHÏ Ê“¢éajTÃaÕ7á°õjQêTêN2þ|¾$ÿÁº³GÅOþÞ ñOíoûrcÿÁ;´«M7ö`“MÖ¿dk;ï \é¾+Ò¼U¥k^"™ÿcéâñ†§¦Ÿ x7A‚-vÞçF¸Ñ<¥>¡¤Þ뺟‹5¿@öñ<ðC-Ä×’C QIwp¶ëqtñ¢£ÜN¶ZÚ¬Ó°2ʶÖÖöáÙ„0CXÖj+YV«8T„¥xÕÆâó‰¨Þxì|ãS‰nÜÞ×8BU¥ÞJrMÂ6ÉS‚tZŠÕð”p}ØÒÁaœÞ FÐ ;©UЦ£ËI֬騺Õ\ÿ~#Áÿeßxö¡—Á_¿io€_ mÝcBñíû6üñwÂÝ3àÇÏéºî©­x‹]Õ ñçÁψ?¾êŸ¡Õ®4?‰w_~'|">)Ñ¢¶W[MM$Õ%ßý»?à‹Ÿ²Ïíéû0ü ýŒ|SãOf?ÙòëB½ð/ÂÙËPøEáÍ*k¯xjç —YÖþ&üø±âÇÿ„KÃÚž¿ea‹â  foêzŸŒbñ6«‘}¥þ»Ñ\Ž…BžÓ‹¡Måü”š¼2ˆÎ=/·‡ÉáR¤2Œ4ù°ù\g(à)aÓhè…j´ñ3ÅÂrŽ&¥<}9VZM¬Öœ)f²OìÕÍ)Ò¥μR­˜*4¾¹R³¥MÇ̾ ü7¸ø=ð«À_ n> øçâ£x Ãz…àñÿĵðBøïÄvTfÛM¸ñ+|8ðWïM¨ZiÉk¦ý§Eðfˆ.ೆæþ+½RkÝBïòµàŠ ­?o‹ŸðRMö»ý²ü=ûM|eðŠ>xQÓ®?dk¿é^×ü-¦xCGð¿‡|%¯~ÈÚͽ½¯tøHø[TÕ®õŸ^]xSL›ÆÚߌWQñ<^ ýŸ¢¶Äÿµâªãq?¾ÄÖ†:Z³Þ¥<Î.…9ÅZ†2›•*ñqå©Fu(µìêT„²Âÿ±ác‚Â¥G à¡1IÇ“.­G‚ƒr朣†ÄáðØšq”œV' †Ä4ëaèÎ’?ðO/ø#_ìÝÿßø/ñïövø_ñ3ö€ø¹ðSö½Õu?ˆøñ®|&ÕìáÔüKáƒà¿^èçÂ߃ |YhÞ.ð´ZnªÙê^ Õ´Ûô{+¿ Yh:•Ư{©Ûý‚ÿà²?üßáÅÿÿ õß>|e·ñ†‡«øwãÏÅ«ïé> ð-Œ,øsðÇAðî•௠øÃ^!™äÔ²Ò¾ÿ‚ÿÁ??e¿ø)·ü£öbø5ñoö­øçâ߆¿ ¾(x·Æß´ìGðßã7Ã{‡W;Ó~:|XÖ| mñr×þ wö‹øw xÏÁ’éÔ¼ñƒá€5Ùí!ø› xbÛâÞ³ãCût¢·Ãb*Rúó¬Þ&UéðÄ0R¨Ûx¸ŒÇ€SU}´1–#2©Šœ*Æíø\>Rž/:•³¯Rž žØOaŽÎq¸ª”cÉWó¼»û7 5hºÀ·‡Œ){J2”žXŒT0Õ”)þ`ÿÁA?à’ß³'ü{Ãß³_…~1x“ãwÃ}öVøƒ§üBøa¥þÏßí~YÍ2ÇLÓlt]bÎo øŠÒ=;O²Ò,mô-gÃ0xkÇ~‡í±x7Æ>‹UÕ’ûë¿ ~;ðÇí%ñ;ö§Tñnµñ3âwÂÏ…ÿ'ƒ^Ô´Ûß ø7áï­cÇ$Ò´_YÁ£YêÚyñ‰¾ k¾!ñÖµ­ë÷Χ’`}>ÓL·´AÑY)Î<Öœ×63˜IóÊïÁÒËñØ—+ßÚâðTi᱿ïi))ßÚTr áN—*T©a0Ø t¢¹iSÁ`ñï3ÂáaJ6§43±”©¨òÇ Uæ£IÃçÿƒŸ³¾ xóö‹ø™áýSÅ~ ñ§í=ñWOø¯ñYñuþ•5­ö…ðûÁß <+á +DÑWLð7„|%à.×@Òo¿µu(o/5BûY¿ºÔåuüõðÏüàç…¿à¥>#ÿ‚©Y~Óµ­ßí+âÙ$Ó¼G£ßß~Ìð§Sø~t}Ã6ß ÂöŸ³Ÿˆ,ü#cáOh>¶ÖtïÙüL’ÇJ‡P½øƒyâ­O[¾ýŠ¢¦—îk`«Ó÷keø(eØ9·Ìèàa„¡—¬-§Í”¥ÃÒÂUU?m‡S¥YÎj©ÝFêPÆaç):9…_oŒŠ”¢ëTúçö„eϪASǪxÊ0¥(B†&†½¦ *_?¿à‡ÿ²ïŒ¼GûPËொߴ·À/„¿¶î±¡x‹ö¿ý›~ x»án™ðGãçˆtÝwTÖ¼E®êÐxóàçÄ‰ß uO‰Pê×Ä»¯€?¾èÑ[+­¦¦’j’ýûSÿÁ*bOÚïö2Ð?`ÿ‰_ mtO€žðþƒ¢|¶ðÌz‹~ÞøKC›ÃÞñWÂÿêºÛiž&Ðt»‹‹g¹×ì¼G¦xšÞëP°ñ¾•â3VÕ¬o¿E¨¬ 2Ã}MÓ‹Ãò`)ªv·-,ª2†QJ3_¼,žœ2zQ’§”Âs†]4g$éTšÄýqIýfø©{WfܱþÉf3qw„ªf~‡öG<ËØQúô±ÊŸ/ä_ì³ÿ\ý•¿f/‚^3ø©|Cý©j ø¯áWŽ~hºïí_ñãZøŸâ/„_>#xGKð_‹¾ üµÐô¿x/àw‚5­'H²}Q¾x?þ&Öæ´Ñí¼Aâ-[HðŸ‚ô¿ üFßðkü’çöC¶ýõo‰Ÿ¶·ˆ|¤|WO‹¾ñ¯ˆ?h-?Uñ‡Ãímìîìµ]áç„n>Ÿ€ ѼQ¡zþ2¿Ð~ YøËÅó¾Ÿ7ˆüY©?‡|.tOéBŠÞ¤Zõ15-*õa…J®1æ”rÜÅæØKÙ%Í ÎU1Õ'n|N&¶"¦&U¥‰Ä{ENs¥KBœçZØÊøzJrötªæ5—ã'_—÷Øà âÓŒ)R£jÂ'â§í©ÿ2ý¿n[ïÙBo‰?´_í•á /ö+Ólbø £x;â?¯Ϥx’ÒÿÃú…Ç|_㟿~6üUø‘âýYü!á5I|yñ_ðüxnÌÚø~ÒãP×î5ÏŒŸðF…Ÿ?n?ðPÿþÖ¶þÑ_³—‡<'á?…÷:-Çìaà½;Aðí–³o¬Yjž—öN¼ÃxòûÅ^5Ö¼Yuy~×vzŒuX| ?ƒ4}3ÂzO†ÿcè¥J5)ÖŒ¤«Q̱9ͼÍÔ¡šã9–+0£6ܨâëÆn+Óqœ©¨SoÙÓ§Ïü¸–l4òšYðëÝ¡S'¡^8ª9té+Sžž)Kr‹KWˆþ6':¿‘Ÿ°¿üËà—ìû@~Ó_´gÃÏ¿´ßÅ?~ØšŽµû@øsãeßìí«øÆÞ)Ô^J”08ü ‚§V3޶ ,:§ì)r:Ò–!ãe^R©<ÉÆc')KÚWÅc0U²Üew4ÔáW€ÄWÁâeNPuðõªR©ÍÉ?Šþ5~ÅZoÅ?k>3ð'íûHþÌž'×þxSàž­qð Ä? G†n~øJûÇú•Ÿ‡#ø_ñ¯áÆ„VZÍßÄÐ<}aà_‰~Ó´]'BðWŒü- _ø»KñGοÿà‹ÿ°ÏÅÏø'O†à—×>ñŸÿfo"ÿÀóxÆZüGð§‹4½Sñ<þ:°ñW‰ôïXj~)×5ÍÄ·Úóø›Ãúî‡|þ#Õ#MÞÓ£ÓÿW¨¬ëR†"Ž']{Z8ÊøOÂqáÿèþ¥®·¨è3kzV‡¨é£ÔWDëV©(|ný¬?k'ø~¿ |'ñ¿ö‹Ô¾®«ðÃákÈ×7Þøcà€ß þ|𕞯5ýþ¯â;†³øîþMkÄrø³û'Ä:Öçßà‘_³¯ÄþЗú?Ä/~þØz–•­þÙ³gÁÏ|;ðÇÁ?Ú{_µi­üGâI¬|-ñ/Åï‡úïĽ íü5ñ_Uýž~,ü»ø‰¥ÙGyâi/¼E{¬kºŸê“Q~Æ.ý Uðôè{:k ðø¬cÌqxj˜e«ÖÃcs&ó,nµ*”1™“þÐÅS«Œýù¤gR>ÙÆ­U:õ0õêVöµ>²±:Âà±4±._X¡‰ÀàéÃÄЫN¾ à°µ)aW±?>?kø&7ì¡û\üø-ðsÄþÖ¾[~Ìzÿ‚üUû,|@ø©Øü4ø‹û3ø“áìZe¯„u?ƒÚŠidžô›m'NÑôÝ:? xƒÂÞ$ð|°éúUÜþ“Uд CK­ð[þ ³ð—á—í=¨þÚ¿>(|ný¬?k'ø~¿ |'ñ¿ö‹Ô¾®«ðÃákÈ×7Þøcà€ß þ|𕞯5ýþ¯â;†³øîþMkÄrø³û'Ä:Öú!EhªTUªâ=¥GZ®#ŒYÎsŸ×s ˳ l%7'K˜eÉeÙ†2—&'—ÿ°âªÖÂþäÍ•:±TiQÃáaJ1P‡Õ0x·˜`ðsŒTUL 0o1Áa*sá°™ƒxì5*X¶ë•ßà‘_³¯ÄþЗú?Ä/~þØz–•­þÙ³gÁÏ|;ðÇÁ?Ú{_µi­üGâI¬|-ñ/Åï‡úïĽ íü5ñ_Uýž~,ü»ø‰¥ÙGyâi/¼E{¬kºŸÕZ_ìwðcAøÍð#ã'‡tíCÃðÌÿ_†ÄÖ¥§‡ŒÙu¥,DêT­)NuŸ5Gwj’Äáq•«%£F3‚ÂVÌ1Q¯˜ÏEãêbT>4øïûEñ›Æ~$ø‹áoÚSö›ýÝhÚ·ÃÏ굕Ò'øsñËá7ÆÏ…1뺖¥ñP–ˆÖރ⎋i¤éš7ƒ¼máQñ~™âŸƒ¿iø _ìcûHþÅ_³ïüÙüYñ…þ¸—Þ2ñΩ,~Öü1¢êŒõyµ}#QK Å ~ÞQY:TåJ¥ GšlF V”›tç[.«‹¯“ƒn<¸LN?Œ¡M%Nž7‰ÆÆ Z¥iiõcZž"3q¯GŒÂÓ«)ÆŽ? GŒ‹’W”±>R¬¯UàhQÁ)¬-*t£øsûPÿÁ¾ ~×·±®©ñ‹ö¹ýµ.u¿ØKHÑí>ë^¾ý‘ô;»}C×´=rÇÆþ.µOÙçHñ‰xGÁ4¶'L±ð\šWƒt·ÿ„IuSź¿‰7toø"'Â/þÞ¿à£Úíqûfi¿´çƯxÃáÿ‹5”ºý’.¼%gá/xKMðv¥h>¿ý‘îì-‚4ÿxJó·÷ÒjZ•Ö¥á=1ükyã -GÅ> ý©¢µ¨ý¬«N¥§,ELê­g$›©Sˆ”cÉÝÌÎŒ1IYNŒPŠK:mÒ¥F…;FŽ –a(ÓIrà ’ÕöùU 4ù©à1Åaã.nL\¥Š×9TÊÏÇïø%çì¿ÿfÿ‚/ÿÁY|%ðŸöøËªøã·À‰·÷:_í+ã/òéÐüZñ€5èþ Ö|ðƒá6­?‰~!]Ýxo¶>Ôu[êšµ®gáMÇYÔuÕ¾1ÿ‚ÿÁ??e¿ø)·ü£öbø5ñoö­øçâ߆¿ ¾(x·Æß´ìGðßã7Ã{‡W;Ó~:|XÖ| mñr×þ wö‹øw xÏÁ’éÔ¼ñƒá€5Ùí!ø› xbÛâÞ³ãCût¢·Ãâ'Ny…Jц"¦*<1$ÜcƒÿU+cëåªq”jSÆRŒói Uaѯ€Ê«Óýæ<óˆç«O U'‡t1ùÖ;V3›¯‹ž{€–©V„éUÁÔ¯çˆÄRœêâU|t*¶±µd¿à ¿ðEŸÙóþ 3ãoٷƾ7~ÒŸ ,?dßÀ_|¼ýž¼5àx‚GÃ×íâeµñïìïñ+Ä­ì©àïiÃCÕ¼Gyà›-;ÂÚ|:_…,&¾×î5œÿÛïþoû#ÁE°ð¯íSû<øëÁ ~;kqxBæmcÃóø“Vƒá®±à¨5='Å×77ÐõŸxÂ:¿…¼Iq8ðö¡M&ˆß²ÔW/*µ5ïsQÌêç4*¹Iסš×çXŒ} C~ÞŽ' Ê–&¥*xŠ´+{J0…8ÕÚåJÑ„2Ødñ£¡†þ˧Q×¥xh¥‡–Ž"u14iÊ“TqU±ª\˜ŒEz•&xÎÿRñ'Œ|Yª[éö6†êîâ3DÑtíÂ^Ò|=àßx{úUo4oºg­¯¾ |Wøa¯|3ñ¼¿<ã_ƒÞ0Â>'мhžñ¯4ÍJío´­Ã~.ÑôË?êZ¬þñׇ|QðçÅ—ö:v™ñÂ0ðƒëÕ½æŠÖ½J˜š’«Vrue(MT„)Ó7Ft%IÁáåAÂ*›ÃºtÝMÓ‡,QŒpñP§ÉËR3D«F´k)¬Dq ·´X•‰U*,RÄ{E‰Uj¬G´ö“æüóø1ÿËý›þéµ”^6oþÒ¾3ýºŒ6ÿµÏÄÿÏàkßüoÐtï _xÃþ×´/„þøKð³Ã~ðǃõ-CBÑ4¿|9ð‰X¯'Ôuõm†¦¿(þÁßðAÙþ ãñVñ‡Á?Œ_¶wˆüuã Kâ'‡ÿf_‰¿´Mö³û-ø?âÕÆœÚO¬þxSÃ^ Ò|mã?éÚ>¥x7Ä¿/~%êúм9âX®¥ñφ<9â½+öêŠ(ÔžUì1˰¹LjQJ•²Ü(QËð\°Qƒ¡—Âú„\_Ôgz˜WF¤¥6ªS…Z50õS©J¶3˜UIJn¦3',eyÎMÍÏÌáŒN\¸ºJ4q©F1‚ürñwü‹áW‹¿à£ZOüoÚ¿öÄÑÿi_AƒáË&ÿöZ›á†ƒðå,µ"…v׿emsQ“ºµ­è—Z®¡â;߈¢ßW¼Ôí|wmâ5´ÖíV¾#ü?ð¯Å‡¾;ø[ã­.oÁ?|âoxÃF¸Th5o ø¿E½ðþ¿¦Ê²$ˆc½Òµ »fß®$9VΊæž…L½eU)Ʀ^©bè}Z¥êAÒÇÕ­_ ÊmÎkˆÄbq8—9ÉÖÅb±XšŽXŒMz•7§V¥sÌéMÒǺ˜Z¯NК©‚Œ)àç¡…¥J•±J• 4(A*4)B8~ÊŸ²·ÂOØëöføKû'|"Ó¯ßáGÁÿÙøDÅ2éÚ¶¹âDYåÖµÏÜYizN‘ªxƒÅڥøžk-JÒ¯5]VüÙi}ƒÃcåÀ?ø7Köý˜¿hïüxøñö¿øsà_‰!´ñ?cßþÐÚ—…d.-A´/ øóá·…¼=¢xÃâ?€4OWÖuM?áÇÄ_‰,ð$±ë:¿…µ?j>Ôï|#7ï]ØñÞcW7ö’Y•h×\dm³XšðÄÕRqJ?ï4©â)¾[ЯÕ éÔŠ’æT),rÅN1Ëàè¸aÕ(¼Çë}f›WU–".ž&œÛ¼,E,6"ý•|$êa*Âxj“¥/ÉÏŸðFÙã¯í÷à¯ø(Ljµß~øÝᯠiÞ ñw…þüZ¾ð?¿^Ñí¥´ÒôoŒz•¥ÂUâM;UÓ-5Ÿè¾5ðׂüm§hznãÿ ø¯F—VÓõO¸ÿfÏÙ¿Àß²ïÃýgáÿuOø†?üQøµñ“ÅÞ+ñÕþ•ªxÃÅŸ~4üCñįkzåþ‰¢xwK™Žµâ)ôÝ" MÎ-7ún¥(”X‰åúŠæ¢–„0Ô?u‡¦ñΩû°_ÚXèfXôÒø£ŠÇӥЫ7Z•)$½œvªÝz®µVêT“ÁJR“vs˰U²ì Ghº¸\"¾•^_i=j”ù¹g$Ê(¢˜Žá?ü’߆¿ö x7ÿQÝ6»úà>ÿÉ-økÿbƒõÓkȾ5þÛ±ŸìÕâM7ÁŸ´gíoû1üñ†³¢Câ]#Ÿþ=ü+øWâMW××Údþ›¡xëÅz©}¢M©izžŸ«kk-Œ—Úuõ¢N×—Ç.Q‹Š”£98Á6“œ”e7¦ï)(Bsi]òÆRµ¢Ú¨ÂrS”c)*qS¨ãÔ çjSiZ1sœ ¥+'9Æ7¼’NQ^MðkãçÀ¯Ú3Âsx÷ö{øÓð›ã¿mµ{¿ÜxÓà×ÄoüPðœõ„—7Ú$Þ#ðF³®hñjöV×ö7zkÞ-í´¶’Í Gq ?¬Ö’„àÒœeã ¥(¸· ‘Œá$šO–p”g m(Ê2M¦™œg ¦á(Í)N ÆJINœå Å´Úæ„ã(N;Æq”ZM4QEIAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPðŸþIoÃ_û<ÿ¨î›_š_ðQMOâæûQÁ.¯þx#áÏÄOˆñ|zý WGð§ÅoŠ^&ø5à›ûy?d¯‹‘ê’ê(|øü¾'ñ—Žu;áÿ‡ Ò>;MðWƾƒÂ ~ø—ãM„ß ~èçBøƒãäøa©xÛAðà¤ð߆ïø«UñÅö±yñŽÃÄÚv“á/¹­ÿdø%d:ÏüKqñkSÖ|Wðïã_¼3ã/ÁJj/xÙ¾,Úø;Eøy§ø£ÄÞ3ñGíG«ø£ÇPèÞÐáðfá¿jÞ"ð§‡ü1«øÃCÑ4; ;Çž6·ñü=ý?à” õ¿xŸÀ!ÐüOðÛâwÄ/‹Þñ;ÿÁCh_ÄÐxÏâæ³áŸüX\ñ¹ûJêZÇŒ<ñCÄ~Ð6ð=ÇŽ¼Ã߆?¥øoð«þéÚ·‡|'âè¼Gñ!øëÅ>5ñUÊY¢A6«âŸë:µÚ(7—Ó·ÍS‰Ë±u0Æ ‚ÆPž/„ÂeS­õœV'S=«Š|z¥‡úÍvñy:y¤041Õ©eõ£QÑ…IRÄaO0¾]Vx¬_«ãóN?“êôhc£*Y2ÙÒÁʦ%àé©PÏ^#*x¼N‹ÅàêS©Š«*“Ãþ~ËŸ·GürÏö-ý€>ø/LÓÿkoÚ£ö—ý›|YûJÛü@±øKàízó¾Üü"ðÍæ‹ñ3´üÇö[›â÷u|V·mWâç„~6ø.ÇDÓŽ“cÀ=E%¸Õm¾«ø¥ûeÁH>ø—ö@Ñþ%è_²‡ìí{ûdx[Ã?ÓÁÞ;ðM×Å_ö]ý¨‡ˆ~[kÃâÏŒ¼'ûl|=ðçÅo‚~3Óux3áµïÂÝ+NÖ­þ;xãà/Âs^¿ºñ½ž©®{=—ì‘ÿ§Ò¾|?øW¢|F²ðï…¾øÏZñÏÁëÿ ÁA?h üAø5¨xÂçÁzï†þ ü\Ð?i ;â¿Âo…Ú¯†Oö]ïÁ‡~4ð×ÂÐ%ËøÞ¢\¯GâïÙËþ }㯠|LðW‰¾"ønïÂÿ< ðÛá¿Ä Ëöáø½¡A«xKá?‰ux>×O—Aø÷¦\ø[W“Æƹâ¿x«Âsè~+ø™âOx‹[ø•­ø·Sñ³s}ÔðØŸ¬ÒÄG.ÅJÚQÅâpîœáJ®4ó*pËðª^L:x\V]€©Rt±sÅâòØñ$Ý ^/•Î'ÂóÕpÆa”V ¥,,¹¨sRÆË€© N&I×¥Œ‚©G˜:v¡†Ä¾ŒQÏ(ùì¯âoÛÓâí“ÿ@ðäÿ´ÇÀÉ| ðŸö‹ø5àÏøKÅ_³gůÛøSEÔ>üø…yeáW‡öÌðþ™áë-KÀú÷‰´mjÒ×D—ûWã´ßÞh<7 Ÿn¿j+ó#Mø'ÿæÑYøÿXð¯üSö‡ð²øîëáU§ôßx—Æšg‡ÿi-7HñWWDøuá? ø£â6½a¨xûâ„­uOü@ñ'‰ü3âiZÏÙÿðÒ³¿ý¯‚ÿøt¼ÿËÚÎ\0x?ÕqR©†Âáðõ§õ9E׫C †¡W*©:³ž6µ*˜©Ð©Í,ë:tªUNSj¦7 SV²¯…„j¨IB8¨8ÓmÎR£ k–š…xÓ†"*1QQjTœaíW‹ÿÃH~Îÿô^¾ ÿáÒð?ÿ/hÿ†ýÿè½|ÿÃ¥àþ^Òú–3þ1_øOWÿó_x¾¹„ÿ ¬7þ¥ÿÉy¯¼öŠ+Åÿá¤?gú/_ÿðéxÿ—´ÃH~Îÿô^¾ ÿáÒð?ÿ/hú–3þ1_øOWÿó_x}s ÿAXoüKÿ’ó_yíW‹ÿÃH~Îÿô^¾ ÿáÒð?ÿ/hÿ†ýÿè½|ÿÃ¥àþ^Ñõ,gýb¿ðž¯ÿ!æ¾ðúæþ‚°ßø>—ÿ%æ¾óÚ(¯ÿ†ýÿè½|ÿÃ¥àþ^Ñÿ !û;ÿÑzø/ÿ‡KÀÿü½£êXÏúÅá=_þCÍ}áõÌ'ýa¿ð}/þKÍ}ç´Q^/ÿ !û;ÿÑzø/ÿ‡KÀÿü½£þCöwÿ¢õð_ÿ—ÿù{GÔ±Ÿô ŠÿÂz¿ü‡šûÃë˜Oú Ãàú_ü—šûÏh¢¼_þCöwÿ¢õð_ÿ—ÿù{Gü4‡ìïÿEëà¿þ/ÿòö©c?èÿ„õù5÷‡×0Ÿô†ÿÁô¿ù/5÷žÑEx¿ü4‡ìïÿEëà¿þ/ÿòöøiÙßþ‹×Áü:^ÿåíRÆÐ&+ÿ êÿòkï®a?è+ ÿƒéò^kï=¢ŠñøiÙßþ‹×Áü:^ÿåíðÒ³¿ý¯‚ÿøt¼ÿËÚ>¥Œÿ LWþÕÿä<×Þ\ÂÐVÿÒÿä¼×Þ{EâÿðÒ³¿ý¯‚ÿøt¼ÿËÚ?á¤?gú/_ÿðéxÿ—´}Kÿ@˜¯ü'«ÿÈy¯¼>¹„ÿ ¬7þ¥ÿÉy¯¼öŠ+Åÿá¤?gú/_ÿðéxÿ—´ÃH~Îÿô^¾ ÿáÒð?ÿ/hú–3þ1_øOWÿó_x}s ÿAXoüKÿ’ó_yíW‹ÿÃH~Îÿô^¾ ÿáÒð?ÿ/hÿ†ýÿè½|ÿÃ¥àþ^Ñõ,gýb¿ðž¯ÿ!æ¾ðúæþ‚°ßø>—ÿ%æ¾óÚ(¯ÿ†ýÿè½|ÿÃ¥àþ^Ñÿ !û;ÿÑzø/ÿ‡KÀÿü½£êXÏúÅá=_þCÍ}áõÌ'ýa¿ð}/þKÍ}ç´Q^/ÿ !û;ÿÑzø/ÿ‡KÀÿü½£þCöwÿ¢õð_ÿ—ÿù{GÔ±Ÿô ŠÿÂz¿ü‡šûÃë˜Oú Ãàú_ü—šûÏh¢¼_þCöwÿ¢õð_ÿ—ÿù{Gü4‡ìïÿEëà¿þ/ÿòö©c?èÿ„õù5÷‡×0Ÿô†ÿÁô¿ù/5÷žÑEx¿ü4‡ìïÿEëà¿þ/ÿòöøiÙßþ‹×Áü:^ÿåíRÆÐ&+ÿ êÿòkï®a?è+ ÿƒéò^kï=¢ŠñøiÙßþ‹×Áü:^ÿåíðÒ³¿ý¯‚ÿøt¼ÿËÚ>¥Œÿ LWþÕÿä<×Þ\ÂÐVÿÒÿä¼×Þ{EâÿðÒ³¿ý¯‚ÿøt¼ÿËÚ?á¤?gú/_ÿðéxÿ—´}Kÿ@˜¯ü'«ÿÈy¯¼>¹„ÿ ¬7þ¥ÿÉy¯¼öŠ+Åÿá¤?gú/_ÿðéxÿ—´ÃH~Îÿô^¾ ÿáÒð?ÿ/hú–3þ1_øOWÿó_x}s ÿAXoüKÿ’ó_yíW‹ÿÃH~Îÿô^¾ ÿáÒð?ÿ/hÿ†ýÿè½|ÿÃ¥àþ^Ñõ,gýb¿ðž¯ÿ!æ¾ðúæþ‚°ßø>—ÿ%æ¾óÚ(¯ÿ†ýÿè½|ÿÃ¥àþ^Ñÿ !û;ÿÑzø/ÿ‡KÀÿü½£êXÏúÅá=_þCÍ}áõÌ'ýa¿ð}/þKÍ}ç´Q^/ÿ !û;ÿÑzø/ÿ‡KÀÿü½£þCöwÿ¢õð_ÿ—ÿù{GÔ±Ÿô ŠÿÂz¿ü‡šûÃë˜Oú Ãàú_ü—šûÏh¢¼_þCöwÿ¢õð_ÿ—ÿù{Gü4‡ìïÿEëà¿þ/ÿòö©c?èÿ„õù5÷‡×0Ÿô†ÿÁô¿ù/5÷žÑEx¿ü4‡ìïÿEëà¿þ/ÿòöøiÙßþ‹×Áü:^ÿåíRÆÐ&+ÿ êÿòkï®a?è+ ÿƒéò^kï=¢ŠñøiÙßþ‹×Áü:^ÿåíðÒ³¿ý¯‚ÿøt¼ÿËÚ>¥Œÿ LWþÕÿä<×Þ\ÂÐVÿÒÿä¼×Þ{EâÿðÒ³¿ý¯‚ÿøt¼ÿËÚ?á¤?gú/_ÿðéxÿ—´}Kÿ@˜¯ü'«ÿÈy¯¼>¹„ÿ ¬7þ¥ÿÉy¯¼öŠ+Åÿá¤?gú/_ÿðéxÿ—´ÃH~Îÿô^¾ ÿáÒð?ÿ/hú–3þ1_øOWÿó_x}s ÿAXoüKÿ’ó_yíW‹ÿÃH~Îÿô^¾ ÿáÒð?ÿ/hÿ†ýÿè½|ÿÃ¥àþ^Ñõ,gýb¿ðž¯ÿ!æ¾ðúæþ‚°ßø>—ÿ%æ¾óÚ(¯ÿ†ýÿè½|ÿÃ¥àþ^Ñÿ !û;ÿÑzø/ÿ‡KÀÿü½£êXÏúÅá=_þCÍ}áõÌ'ýa¿ð}/þKÍ}ç´Q^/ÿ !û;ÿÑzø/ÿ‡KÀÿü½£þCöwÿ¢õð_ÿ—ÿù{GÔ±Ÿô ŠÿÂz¿ü‡šûÃë˜Oú Ãàú_ü—šûÏh¢¼_þCöwÿ¢õð_ÿ—ÿù{Gü4‡ìïÿEëà¿þ/ÿòö©c?èÿ„õù5÷‡×0Ÿô†ÿÁô¿ù/5÷žÑEx¿ü4‡ìïÿEëà¿þ/ÿòöøiÙßþ‹×Áü:^ÿåíRÆÐ&+ÿ êÿòkï®a?è+ ÿƒéò^kï=¢ŠñøiÙßþ‹×Áü:^ÿåíðÒ³¿ý¯‚ÿøt¼ÿËÚ>¥Œÿ LWþÕÿä<×Þ\ÂÐVÿÒÿä¼×Þu? ÿä–ü5ÿ±Á¿úŽéµð¿í‰ñKÇüC®ø³áÖ»ÿïˆ5ŠÿðG¿…º†¡ý™£êÿhð'Çø)”?>)h_e×týNÊ/øJ>|@ñw†´à¶‹XÑ?µÿ¶|;¨i °Ó5[/º>ÿÉ-økÿbƒõÓkó_þ ÷o?ìåÿà„úøoчþ;þÁaÿ©¸1Öþ&þÂ%ÿ¨˜£õžŠ(®S (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šà>ÿÉ-økÿbƒõÓkż]ð·ÀŸ>3|@ðŸÄ] þ/éý‹>)iúöž±¤}ŸÇ¿hÏ‹ßþë¿jе 2ö_øEþ&ü?ð‰¿³'¹—GÖÿ²?±¼E§êþ¿Ôô«ßiøOÿ$·á¯ýˆ ÿÔwM®[Bÿ“ˆø¥ÿd_à/þ§´…uaÿƒŽÿ°Xên ç­üL'ý„KÿQ1G´QEÊtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Âù%¿ ì@ðoþ£ºmrÚüœGÅ/û"ÿõ8ý¤+©øOÿ$·á¯ýˆ ÿÔwM®[Bÿ“ˆø¥ÿd_à/þ§´…uaÿƒŽÿ°Xên ç­üL'ý„KÿQ1G´QEÊtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Âù%¿ ì@ðoþ£ºmrÚüœGÅ/û"ÿõ8ý¤+©øOÿ$·á¯ýˆ ÿÔwM®[Bÿ“ˆø¥ÿd_à/þ§´…uaÿƒŽÿ°Xên ç­üL'ý„KÿQ1G´QEÊtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Âù%¿ ì@ðoþ£ºmrÚüœGÅ/û"ÿõ8ý¤+©øOÿ$·á¯ýˆ ÿÔwM®[Bÿ“ˆø¥ÿd_à/þ§´…uaÿƒŽÿ°Xên ç­üL'ý„KÿQ1G´QEÊtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Âù%¿ ì@ðoþ£ºmrÚüœGÅ/û"ÿõ8ý¤(¢º°ÿÁÇØ,?õ7sÖþ&þÂ%ÿ¨˜£Ú(¢Šå:Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙuima-addons-2.3.1/src/0000755000175000017500000000000011625126452014405 5ustar drazzibdrazzibuima-addons-2.3.1/src/main/0000755000175000017500000000000011625126452015331 5ustar drazzibdrazzibuima-addons-2.3.1/src/main/assembly/0000755000175000017500000000000011625126452017150 5ustar drazzibdrazzibuima-addons-2.3.1/src/main/assembly/bin.xml0000644000175000017500000002643211625126452020451 0ustar drazzibdrazzib bin tar.gz zip true apache-uima/addons annotator/AlchemyAPIAnnotator AlchemyAPIAnnotator/target/base-bin **/*.sh 644 755 annotator/AlchemyAPIAnnotator AlchemyAPIAnnotator/target/base-bin **/*.sh 755 755 annotator/BSFAnnotator BSFAnnotator/target/base-bin **/*.sh 644 755 annotator/BSFAnnotator BSFAnnotator/target/base-bin **/*.sh 755 755 annotator/ConceptMapper ConceptMapper/target/base-bin **/*.sh 644 755 annotator/ConceptMapper ConceptMapper/target/base-bin **/*.sh 755 755 annotator/ConfigurableFeatureExtractor ConfigurableFeatureExtractor/target/base-bin **/*.sh 644 755 annotator/ConfigurableFeatureExtractor ConfigurableFeatureExtractor/target/base-bin **/*.sh 755 755 annotator/DictionaryAnnotator DictionaryAnnotator/target/base-bin **/*.sh 644 755 annotator/DictionaryAnnotator DictionaryAnnotator/target/base-bin **/*.sh 755 755 FsVariables FsVariables/target/base-bin **/*.sh 644 755 FsVariables FsVariables/target/base-bin **/*.sh 755 755 annotator/Lucas Lucas/target/base-bin **/*.sh 644 755 annotator/Lucas Lucas/target/base-bin **/*.sh 755 755 annotator/OpenCalaisAnnotator OpenCalaisAnnotator/target/base-bin **/*.sh 644 755 annotator/OpenCalaisAnnotator OpenCalaisAnnotator/target/base-bin **/*.sh 755 755 PearPackagingAntTask PearPackagingAntTask/target/base-bin **/*.sh 644 755 PearPackagingAntTask PearPackagingAntTask/target/base-bin **/*.sh 755 755 annotator/RegularExpressionAnnotator RegularExpressionAnnotator/target/base-bin **/*.sh 644 755 annotator/RegularExpressionAnnotator RegularExpressionAnnotator/target/base-bin **/*.sh 755 755 SimpleServer SimpleServer/target/base-bin **/*.sh 644 755 SimpleServer SimpleServer/target/base-bin **/*.sh 755 755 annotator/SnowballAnnotator SnowballAnnotator/target/base-bin **/*.sh 644 755 annotator/SnowballAnnotator SnowballAnnotator/target/base-bin **/*.sh 755 755 annotator/Solrcas Solrcas/target/base-bin **/*.sh 644 755 annotator/Solrcas Solrcas/target/base-bin **/*.sh 755 755 annotator/Tagger Tagger/target/base-bin **/*.sh 644 755 annotator/Tagger Tagger/target/base-bin **/*.sh 755 755 annotator/TikaAnnotator TikaAnnotator/target/base-bin **/*.sh 644 755 annotator/TikaAnnotator TikaAnnotator/target/base-bin **/*.sh 755 755 annotator/WhitespaceTokenizer WhitespaceTokenizer/target/base-bin **/*.sh 644 755 annotator/WhitespaceTokenizer WhitespaceTokenizer/target/base-bin **/*.sh 755 755 src/main/readme 644 755 issuesFixed/** README* readme* RELEASE_NOTES* 644 755 uima-addons-2.3.1/src/main/readme/0000755000175000017500000000000011625126452016566 5ustar drazzibdrazzibuima-addons-2.3.1/src/main/readme/LICENSE0000644000175000017500000032776411625126452017616 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. For bsh-1.3.0.jar: Office Open XML schemas (ooxml-schemas-1.0.jar) The Office Open XML schema definitions used by Apache POI are a part of the Office Open XML ECMA Specification (ECMA-376, [1]). As defined in section 9.4 of the ECMA bylaws [2], this specification is available to all interested parties without restriction: 9.4 All documents when approved shall be made available to all interested parties without restriction. Furthermore, both Microsoft and Adobe have granted patent licenses to this work [3,4,5]. [1] http://www.ecma-international.org/publications/standards/Ecma-376.htm [2] http://www.ecma-international.org/memento/Ecmabylaws.htm [3] http://www.microsoft.com/interop/osp/ [4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/ECMA-376%20Edition%201%20Microsoft%20Patent%20Declaration.pdf [5] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/ga-2006-191.pdf DOM4J library (dom4j-1.6.1.jar) Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain copyright statements and notices. Redistributions must also contain a copy of this document. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name "DOM4J" must not be used to endorse or promote products derived from this Software without prior written permission of MetaStuff, Ltd. For written permission, please contact dom4j-info@metastuff.com. 4. Products derived from this Software may not be called "DOM4J" nor may "DOM4J" appear in their names without prior written permission of MetaStuff, Ltd. DOM4J is a registered trademark of MetaStuff, Ltd. 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. For asm-3.1.jar Copyright (c) 2000-2005 INRIA, France Telecom All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Eclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT’S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i)changes to the Program, and ii)additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor’s behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient’s responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor’s responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient’s patent(s), then such Recipient’s rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient’s rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient’s rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient’s obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. For bsh jar: ------------------------------- Sun Public License, v. 1.0 --------------------------------- 1. Definitions. 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications. 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof and corresponding documentation released with the source code. 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data. 1.5. "Executable" means Covered Code in any form other than Source Code. 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. 1.8. "License" means this document. 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications. 1.10. "Original Code"../ means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.11. "Source Code"../ means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated documentation, interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control"../ means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. Source Code License. 2.1 The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code. (d) notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. 3.4. Intellectual Property Matters. (a) Third Party Claims. If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "../LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. (b) Contributor APIs. If Contributor's Modifications include an application programming interface ("API"../) and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. (c) Representations. Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License . 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. 4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. 6. Versions of the License. 6.1. New Versions. Sun Microsystems, Inc. ("Sun") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Sun. No one other than Sun has the right to modify the terms applicable to Covered Code created under this License. 6.3. Derivative Works. If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must: (a) rename Your license so that the phrases "Sun," "Sun Public License," or "SPL"../ or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Sun Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) 7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 8. TERMINATION. 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. 9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation,"../ as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. 11. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. 12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. 13. MULTIPLE-LICENSED CODE. Initial Developer may designate portions of the Covered Code as ?Multiple-Licensed?. ?Multiple-Licensed? means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. Exhibit A -Sun Public License Notice. The contents of this file are subject to the Sun Public License Version 1.0 (the License); you may not use this file except in compliance with the License. A copy of the License is available at http://www.sun.com/ The Original Code is _________________. The Initial Developer of the Original Code is ___________. Portions created by ______ are Copyright (C)_________. All Rights Reserved. Contributor(s): ______________________________________. Alternatively, the contents of this file may be used under the terms of the _____ license (the ?[___] License?), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the SPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the SPL or the [___] License. [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] For bsf.jar: ------------------------------ MPL 1.1 ------------------------------------------------- MOZILLA PUBLIC LICENSE Version 1.1 --------------- 1. Definitions. 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications. 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data. 1.5. "Executable" means Covered Code in any form other than Source Code. 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. 1.8. "License" means this document. 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications. 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. Source Code License. 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code. (d) Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. 3.4. Intellectual Property Matters (a) Third Party Claims. If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. (b) Contributor APIs. If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. (c) Representations. Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License. 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. 4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. 6. Versions of the License. 6.1. New Versions. Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. 6.3. Derivative Works. If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) 7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 8. TERMINATION. 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. 9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. 11. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. 12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. 13. MULTIPLE-LICENSED CODE. Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the NPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. EXHIBIT A -Mozilla Public License. ``The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is ______________________________________. The Initial Developer of the Original Code is ________________________. Portions created by ______________________ are Copyright (C) ______ _______________________. All Rights Reserved. Contributor(s): ______________________________________. Alternatively, the contents of this file may be used under the terms of the _____ license (the "[___] License"), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the [___] License." [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] ========================================================================================== For org.tartarus.snowball package: Snowball license (from http://snowball.tartarus.org/license.php): All the software given out on this Snowball site is covered by the BSD License (see http://www.opensource.org/licenses/bsd-license.html ), with Copyright (c) 2001, Dr Martin Porter, and (for the Java developments) Copyright (c) 2002, Richard Boulton. Copyright (c) , All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ========================================================================================== APACHE TIKA SUBCOMPONENTS Apache Tika includes a number of subcomponents with separate copyright notices and license terms. Your use of these subcomponents is subject to the terms and conditions of the following licenses. MIME type information from file-4.26.tar.gz (http://www.darwinsys.com/file/) Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995. Software written by Ian F. Darwin and others; maintained 1994- Christos Zoulas. This software is not subject to any export provision of the United States Department of Commerce, and may be exported to any country or planet. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice immediately at the beginning of the file, without modification, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Charset detection code from ICU4J (http://site.icu-project.org/) Copyright (c) 1995-2009 International Business Machines Corporation and others All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. ============================================================================================== Copyright (c) 2004-2008 QOS.ch All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ============================================================================================== COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 1. Definitions. 1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications. 1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. 1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. 1.4. “Executable” means the Covered Software in any form other than Source Code. 1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License. 1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. 1.7. “License” means this document. 1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. “Modifications” means the Source Code and Executable form of any of the following: A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; B. Any new file that contains any part of the Original Software or previous Modification; or C. Any new file that is contributed or otherwise made available under the terms of this License. 1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License. 1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. 1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants. 2.1. The Initial Developer Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. 2.2. Contributor Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Availability of Source Code. Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. 3.2. Modifications. The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. 3.3. Required Notices. You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. 3.4. Application of Additional Terms. You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.5. Distribution of Executable Versions. You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.6. Larger Works. You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. 4. Versions of the License. 4.1. New Versions. Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. 4.2. Effect of New Versions. You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. 4.3. Modified Versions. When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. 5. DISCLAIMER OF WARRANTY. COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 6. TERMINATION. 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. 7. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 8. U.S. GOVERNMENT END USERS. The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. 9. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. 10. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.. ============================================================================================== Some code in src/java/org/apache/lucene/util/UnicodeUtil.java was derived from unicode conversion examples available at http://www.unicode.org/Public/PROGRAMS/CVTUTF. Here is the copyright from those sources: /* * Copyright 2001-2004 Unicode, Inc. * * Disclaimer * * This source code is provided as is by Unicode, Inc. No claims are * made as to fitness for any particular purpose. No warranties of any * kind are expressed or implied. The recipient agrees to determine * applicability of information provided. If this file has been * purchased on magnetic or optical media from Unicode, Inc., the * sole remedy for any claim will be exchange of defective media * within 90 days of receipt. * * Limitations on Rights to Redistribute This Code * * Unicode, Inc. hereby grants the right to freely use the information * supplied in this file in the creation of products supporting the * Unicode Standard, and to make copies of this file in any form * for internal or external distribution as long as this notice * remains attached. */ Some code in src/java/org/apache/lucene/util/ArrayUtil.java was derived from Python 2.4.2 sources available at http://www.python.org. Full license is here: http://www.python.org/download/releases/2.4.2/license/ PSF LICENSE AGREEMENT FOR PYTHON 2.4 ------------------------------------ 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 2.4 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 2.4 alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004 Python Software Foundation; All Rights Reserved" are retained in Python 2.4 alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.4 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.4. 4. PSF is making Python 2.4 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.4 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.4 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.4, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python 2.4, Licensee agrees to be bound by the terms and conditions of this License Agreement. for snowball: Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. uima-addons-2.3.1/src/main/readme/NOTICE0000644000175000017500000000673311625126452017503 0ustar drazzibdrazzibApache UIMA Addons components Copyright 2006-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). This software also includes: - Beanshell 1.3.0, lightweight Scripting for Java, from http://www.beanshell.org/ - Rhino, the open-source implementation of JavaScript written entirely in Java, from http://www.mozilla.org/rhino/ This software contains parts of Apache XMLBeans (http://xmlbeans.apache.org/), which contains the following software: - W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web Consortium (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) - Piccolo XML Parser for Java from http://piccolo.sourceforge.net/, Copyright 2002 Yuval Oren under the terms of the Apache Software License 2.0 This product includes the Google Collections Library from http://code.google.com/p/google-collections/. This software includes the Snowball software from http://snowball.tartarus.org/. Copyright (c) 2001, Dr Martin Porter, and (for the Java developments) Copyright (c) 2002, Richard Boulton. Packages: org.tartarus.snowball Some included third-party works are licensed under terms that have additional distribution requirements. See the Apache product's LICENSE file to find the applicable third-party licenses. This product includes portions of Apache Tika, which includes software developed by the following copyright owners: - Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995. Software written by Ian F. Darwin and others; maintained 1994- Christos Zoulas. - Copyright (c) 1995-2009 International Business Machines Corporation and others - Copyright (c) 2000-2005 INRIA, France Telecom - Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. - Copyright (c) 2000-2003, BEA Systems, . - Copyright 2001-2003 (c) World Wide Web Consortium (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) For Lucas / Lucene: This product includes the Google Collections Library from http://code.google.com/p/google-collections/. The snowball stemmers in contrib/snowball/src/java/net/sf/snowball were developed by Martin Porter and Richard Boulton. The full snowball package is available from http://snowball.tartarus.org/ The Arabic stemmer (contrib/analyzers) comes with a default stopword list that is BSD-licensed created by Jacques Savoy. The file resides in contrib/analyzers/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt. See http://members.unine.ch/jacques.savoy/clef/index.html. The Persian analyzer (contrib/analyzers) comes with a default stopword list that is BSD-licensed created by Jacques Savoy. The file resides in contrib/analyzers/common/src/resources/org/apache/lucene/analysis/fa/stopwords.txt. See http://members.unine.ch/jacques.savoy/clef/index.html. Includes lib/servlet-api-2.4.jar from Apache Tomcat The SmartChineseAnalyzer source code (under contrib/analyzers) was provided by Xiaoping Gao and copyright 2009 by www.imdict.net. ICU4J, (under contrib/collation) is licensed under an MIT styles license (contrib/collation/lib/ICU-LICENSE.txt) and Copyright (c) 1995-2008 International Business Machines Corporation and others uima-addons-2.3.1/Solrcas/0000755000175000017500000000000011625127636015231 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/pom.xml0000644000175000017500000000764011625126510016543 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent Solrcas 2.3.1 UIMA Annotator: ${project.artifactId} Writes information contained in CAS objects to fields of a Solr server; mapping is done in a mapping file. scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/SolrCASConsumerAE.xml SolrcasUserGuide org.apache.uima uimaj-core 2.3.1 provided org.apache.uima uimaj-component-test-util 2.3.1 test junit junit 4.8.2 test org.apache.solr solr-core 3.1.0 test org.apache.solr solr-solrj 3.1.0 org.slf4j slf4j-simple 1.6.1 javax.servlet servlet-api 2.5 uima-solrcas uima-addons-2.3.1/Solrcas/LICENSE.txt0000644000175000017500000007305611625126510017055 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. =============================================================================== for slf4j Copyright (c) 2004-2008 QOS.ch All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. =============================================================================== for servlet-api-2.5.jar: COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 1. Definitions. 1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications. 1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. 1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. 1.4. “Executable” means the Covered Software in any form other than Source Code. 1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License. 1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. 1.7. “License” means this document. 1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. “Modifications” means the Source Code and Executable form of any of the following: A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; B. Any new file that contains any part of the Original Software or previous Modification; or C. Any new file that is contributed or otherwise made available under the terms of this License. 1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License. 1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. 1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants. 2.1. The Initial Developer Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. 2.2. Contributor Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Availability of Source Code. Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. 3.2. Modifications. The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. 3.3. Required Notices. You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. 3.4. Application of Additional Terms. You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.5. Distribution of Executable Versions. You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.6. Larger Works. You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. 4. Versions of the License. 4.1. New Versions. Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. 4.2. Effect of New Versions. You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. 4.3. Modified Versions. When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. 5. DISCLAIMER OF WARRANTY. COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 6. TERMINATION. 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. 7. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 8. U.S. GOVERNMENT END USERS. The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. 9. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. 10. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.. uima-addons-2.3.1/Solrcas/marker-file-identifying-single-project0000644000175000017500000000000011625126510024560 0ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/marker-file-identifying-standard-pear0000644000175000017500000000000011625126510024360 0ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/marker-file-identifying-osgi-project0000644000175000017500000000000011625126510024240 0ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/NOTICE.txt0000644000175000017500000000060511625126510016742 0ustar drazzibdrazzibApache UIMA Solr CAS Consumer component Copyright 2010-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). Some included third-party works are licensed under terms that have additional distribution requirements. See the Apache product's LICENSE file to find the applicable third-party licenses.uima-addons-2.3.1/Solrcas/src/0000755000175000017500000000000011625126510016006 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/main/0000755000175000017500000000000011625126510016732 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/main/resources/0000755000175000017500000000000011625126510020744 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/main/java/0000755000175000017500000000000011625126510017653 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/main/java/org/0000755000175000017500000000000011625126510020442 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/main/java/org/apache/0000755000175000017500000000000011625126510021663 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/main/java/org/apache/uima/0000755000175000017500000000000011625126510022616 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/main/java/org/apache/uima/solrcas/0000755000175000017500000000000011625126510024264 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/main/java/org/apache/uima/solrcas/UriUtils.java0000644000175000017500000000535311625126510026715 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.solrcas; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; /** * Static methods supporting proper handling of URIs * */ public class UriUtils { /** * Create a URI from a string, with proper quoting. * Already quoted things in the input string are not re-quoted. * There are several cases: * String has no characters needing quoting * String has chars needing quoting, but no chars are currently quoted (e.g. %20) * String has quoted (e.g. %20) characters but no other chars needing quoting * String has quoted (e.g. %20) characters and chars needing quoting, not currently quoted * -- this case will throw an exception * @param s * @return URI with proper quoting * @throws URISyntaxException */ public static URI quote (String s) throws URISyntaxException { if (-1 == s.indexOf('%')) { // 3 argument constructor does any needed quoting of otherwise illegal chars // https://issues.apache.org/jira/browse/UIMA-2097 return new URI(null, s, null); } // assume s already has all otherwise illegal chars properly quoted return new URI(s); } /** * Create a URI from a URL, with proper quoting. * Already quoted things in the input string are not re-quoted. * @param u * @return URI with proper quoting * @throws URISyntaxException */ public static URI quote(URL u) throws URISyntaxException { return quote(u.toString()); } /** * Create a URI from a String, with proper quoting. * Already quoted things in the input string are not re-quoted. * Mimic exception treatment of URI.create * @param u * @return URI with proper quoting */ public static URI create(String s) { try { return quote(s); } catch (URISyntaxException e) { throw new IllegalArgumentException(e); } } } uima-addons-2.3.1/Solrcas/src/main/java/org/apache/uima/solrcas/SolrMappingConfiguration.java0000644000175000017500000000347311625126510032121 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.solrcas; import java.util.Map; /** * A mapping configuration to stream a CAS documentText, documentLanguage and FeatureStructures to Solr fields */ public class SolrMappingConfiguration { private Map> featureStructuresMapping; private String documentTextMapping; private String documentLanguageMapping; public SolrMappingConfiguration(String documentTextMapping, String documentLanguageMapping, Map> featureStructureMapping) { this.documentLanguageMapping = documentLanguageMapping; this.documentTextMapping = documentTextMapping; this.featureStructuresMapping = featureStructureMapping; } public String getDocumentLanguageMapping() { return documentLanguageMapping; } public String getDocumentTextMapping() { return documentTextMapping; } public Map> getFeatureStructuresMapping() { return featureStructuresMapping; } } uima-addons-2.3.1/Solrcas/src/main/java/org/apache/uima/solrcas/SolrCASConsumer.java0000644000175000017500000002244511625126510030120 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.solrcas; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; import org.apache.solr.common.SolrInputDocument; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.xml.sax.SAXException; /** * CAS Consumer to write on a Solr instance */ public class SolrCASConsumer extends CasAnnotator_ImplBase { private static final String CLASSPATH = "classpath:"; private static final String FILEPATH = "file://"; private static final String EMPTY_STRING = ""; protected SolrServer solrServer; private SolrMappingConfiguration mappingConfig; private boolean autoCommit; @Override public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); /* create the SolrServer*/ try { this.solrServer = createServer(); } catch (Exception e) { context.getLogger().log(Level.SEVERE, "Unable to initialize SolrServer properly"); throw new ResourceInitializationException(e); } /* create the mapping configuration */ try{ this.mappingConfig = createSolrMappingConfiguration(); } catch (Exception e) { context.getLogger().log(Level.SEVERE, "Unable to initialize Solr mapping configuration properly"); throw new ResourceInitializationException(e); } /* set Solr autoCommit parameter */ try { this.autoCommit = getAutoCommitValue(); } catch (Exception e) { context.getLogger().log(Level.SEVERE, "Unable to initialize Solr autoCommit parameter properly"); throw new ResourceInitializationException(e); } } @Override public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { super.typeSystemInit(typeSystem); for (String key : mappingConfig.getFeatureStructuresMapping().keySet()) { Type type = typeSystem.getType(key); if (type==null) { throw new AnalysisEngineProcessException("required_feature_structure_missing_from_cas", new Object[]{key}); } Map stringStringMap = mappingConfig.getFeatureStructuresMapping().get(key); for (String featureName : stringStringMap.keySet()) { if (!"coveredText".equals(featureName) && type.getFeatureByBaseName(featureName)==null) { throw new AnalysisEngineProcessException("required_attribute_missing", new Object[]{featureName,type}); } } } } public void process(CAS cas) throws AnalysisEngineProcessException { // create the SolrDocument from the CAS object basing on the mapping configuration SolrInputDocument document = createDocument(cas); // send the SolrDocument to SolrServer try { solrServer.add(document); } catch (Exception e) { getContext().getLogger().log(Level.SEVERE, new StringBuilder("Error while adding document"). append(document.toString()).toString()); throw new AnalysisEngineProcessException(e); } // if AutoCommit is enabled send the commit message to the SolrServer if (!autoCommit) { try { solrServer.commit(); } catch (Exception e) { getContext().getLogger().log(Level.SEVERE, new StringBuilder("Error while committing document"). append(document.toString()).toString()); throw new AnalysisEngineProcessException(e); } } } /* allows retrieving of a URI from a path specifying one of: * file://absolute/path * http://something.com/res.ext * classpath:/path/to/something.xml * data/path/relative/file.ext */ protected URI getURI(String path) throws ResourceAccessException, IOException, URISyntaxException { URI uri; if (path.startsWith(CLASSPATH)) { uri = System.class.getResource(path.replaceFirst(CLASSPATH, EMPTY_STRING)).toURI(); } else { uri = UriUtils.create(path); // this supports file://ABSOLUTE_PATH and http://URL if (!uri.isAbsolute()) { String dataPath = getContext().getDataPath().replace('\\', '/'); if (dataPath.matches("[a-zA-Z]\\:.*")) { dataPath = "/" + dataPath; } uri = UriUtils.create(new StringBuilder(FILEPATH).append(dataPath). append("/").append(path.replace(FILEPATH, EMPTY_STRING)).toString()); // this supports relative file paths } } return uri; } private boolean getAutoCommitValue() { boolean autoCommitValue = false; Object autoCommitParam = getContext().getConfigParameterValue("autoCommit"); if (autoCommitParam != null && autoCommitParam.toString().length() > 0) autoCommitValue = Boolean.valueOf(autoCommitParam.toString()); return autoCommitValue; } private SolrMappingConfiguration createSolrMappingConfiguration() throws IOException, ResourceAccessException, ParserConfigurationException, SAXException, URISyntaxException { FieldMappingReader fieldMappingReader = new FieldMappingReader(); String mappingFileParam = String.valueOf(getContext().getConfigParameterValue("mappingFile")); InputStream input = getURI(mappingFileParam).toURL().openStream(); SolrMappingConfiguration solrMappingConfiguration = fieldMappingReader.getConf(input); return solrMappingConfiguration; } protected SolrServer createServer() throws SolrServerException { SolrServer solrServer = null; try { /* get Solr type*/ String solrInstanceTypeParam = String.valueOf(getContext(). getConfigParameterValue("solrInstanceType")); /* get Solr Path */ String solrPathParam = String.valueOf(getContext(). getConfigParameterValue("solrPath")); if (solrInstanceTypeParam.equalsIgnoreCase("http")) { URL solrURL = UriUtils.create(solrPathParam).toURL(); solrServer = new CommonsHttpSolrServer(solrURL); } } catch (Exception e) { throw new SolrServerException("Error creating SolrServer", e); } return solrServer; } /* create a SolrDocument from the current CAS object and the mapping configuration */ private SolrInputDocument createDocument(CAS cas) { SolrInputDocument document = new SolrInputDocument(); if (mappingConfig.getDocumentTextMapping() != null && mappingConfig.getDocumentTextMapping().length() > 0) document.addField(mappingConfig.getDocumentTextMapping(), cas.getDocumentText()); if (mappingConfig.getDocumentLanguageMapping() != null && mappingConfig.getDocumentLanguageMapping().length() > 0) document.addField(mappingConfig.getDocumentLanguageMapping(), cas.getDocumentLanguage()); for (String key : mappingConfig.getFeatureStructuresMapping().keySet()) { Type type = cas.getTypeSystem().getType(key); for (FSIterator iterator = cas.getIndexRepository().getAllIndexedFS(type); iterator .hasNext();) { FeatureStructure fs = iterator.next(); Map stringStringMap = mappingConfig.getFeatureStructuresMapping().get(key); for (String featureName : stringStringMap.keySet()) { String fieldName = stringStringMap.get(featureName); String featureValue; if (fs instanceof AnnotationFS && "coveredText".equals(featureName)) { featureValue = ((AnnotationFS) fs).getCoveredText(); } else { Feature feature = type.getFeatureByBaseName(featureName); featureValue = fs.getFeatureValueAsString(feature); } document.addField(fieldName, featureValue); } } } return document; } } uima-addons-2.3.1/Solrcas/src/main/java/org/apache/uima/solrcas/FieldMappingReader.java0000644000175000017500000001033111625126510030607 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.solrcas; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; /** * SAX Reader for Solr mapping configuration */ public class FieldMappingReader { public SolrMappingConfiguration getConf(InputStream input) throws ParserConfigurationException, SAXException, IOException { SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); FieldMappingHandler handler = new FieldMappingHandler(); parser.parse(input, handler); //parse the stream Map> fieldMapping = handler.getFieldMapping(); String documentText = handler.getDocumentText(); String documentLanguage = handler.getDocumentLanguage(); input.close(); SolrMappingConfiguration solrMappingConfiguration = new SolrMappingConfiguration(documentText, documentLanguage, fieldMapping); return solrMappingConfiguration; } private static class FieldMappingHandler extends DefaultHandler { private Map> fieldMapping; private String type; private Map mapping; private String documentText; private String documentLanguage; private boolean inLang = false; private boolean inText = false; private static final String TYPE = "type"; private static final String MAP = "map"; private static final String TEXT = "documentText"; private static final String LANGUAGE = "documentLanguage"; private static final String MAPPING = "solrMapping"; public Map> getFieldMapping() { return fieldMapping; } public String getDocumentText() { return documentText; } public String getDocumentLanguage() { return documentLanguage; } @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { if (MAPPING.equals(name)) { fieldMapping = new HashMap>(); } else if (TYPE.equals(name)) { type = attributes.getValue("name"); mapping = new HashMap(); } else if (MAP.equals(name)) { String feature = attributes.getValue("feature"); String field = attributes.getValue("field"); mapping.put(feature, field); } else if (LANGUAGE.equals(name)) { inLang = true; } else if (TEXT.equals(name)) { inText = true; } } @Override public void characters(char[] chars, int start, int length) throws SAXException { if (inText) { documentText = String.valueOf(chars, start, length); } else if (inLang) { documentLanguage = String.valueOf(chars, start, length); } } @Override public void endElement(String uri, String localName, String name) throws SAXException { if (MAP.equals(name)) { } else if (TYPE.equals(name)) { fieldMapping.put(type, mapping); } else if (LANGUAGE.equals(name)) { inLang = false; } else if (TEXT.equals(name)) { inText = false; } } } } uima-addons-2.3.1/Solrcas/src/test/0000755000175000017500000000000011625126510016765 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/resources/0000755000175000017500000000000011625126510020777 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/resources/solrmapping.xml0000644000175000017500000000214211625126510024053 0ustar drazzibdrazzib text language uima-addons-2.3.1/Solrcas/src/test/resources/org/0000755000175000017500000000000011625126510021566 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/resources/org/apache/0000755000175000017500000000000011625126510023007 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/resources/org/apache/uima/0000755000175000017500000000000011625126510023742 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/resources/org/apache/uima/solrcas/0000755000175000017500000000000011625126510025410 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/resources/org/apache/uima/solrcas/conf/0000755000175000017500000000000011625126510026335 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/resources/org/apache/uima/solrcas/conf/schema.xml0000644000175000017500000007005211625126510030323 0ustar drazzibdrazzib text text uima-addons-2.3.1/Solrcas/src/test/resources/org/apache/uima/solrcas/conf/solrconfig.xml0000644000175000017500000013005011625126510031223 0ustar drazzibdrazzib ${solr.abortOnConfigurationError:true} ${solr.data.dir:./target/solr/data} false 10 32 10000 1000 10000 native false 32 10 false true 1 0 false 1024 true 20 200 solr rocks010 static firstSearcher warming query from solrconfig.xml false 2 explicit dismax explicit 0.01 text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 text^0.2 features^1.1 name^1.5 manu^1.4 manu_exact^1.9 popularity^0.5 recip(price,1,1000,1000)^0.3 id,name,price,score 2<-1 5<-2 6<90% 100 *:* text features name 0 name regex dismax explicit text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 2<-1 5<-2 6<90% incubationdate_dt:[* TO NOW/DAY-1MONTH]^2.2 inStock:true cat manu_exact price:[* TO 500] price:[500 TO *] textSpell default name ./spellchecker false false 1 spellcheck true tvComponent default org.carrot2.clustering.lingo.LingoClusteringAlgorithm 20 stc org.carrot2.clustering.stc.STCClusteringAlgorithm true default true name id features true false clusteringComponent text true ignored_ true links ignored_ true termsComponent standard solrpingquery all explicit true 100 70 0.5 [-\w ,/\n\"']{20,200} ]]> ]]> 5 solr uima-addons-2.3.1/Solrcas/src/test/resources/TestSolrcasAE.xml0000644000175000017500000000733411625126510024204 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.solrcas.EmbeddedSolrCASConsumer SolrcasAE 0.1 ASF mappingFile path to the mapping file String false true solrInstanceType type of Solr instance, one of http or embedded String false true solrPath If the Solr instance is of HTTP type this represents the URL otherwise this is the Solr home directory String false true autoCommit true if Solr autocommit is enabled Boolean false true mappingFile classpath:/solrmapping.xml solrInstanceType embedded solrPath src/test/resources/org/apache/uima/solrcas/ autoCommit false false true false uima-addons-2.3.1/Solrcas/src/test/java/0000755000175000017500000000000011625126506017713 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/java/org/0000755000175000017500000000000011625126506020502 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/java/org/apache/0000755000175000017500000000000011625126506021723 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/java/org/apache/uima/0000755000175000017500000000000011625126506022656 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/java/org/apache/uima/solrcas/0000755000175000017500000000000011625126506024324 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/test/java/org/apache/uima/solrcas/EmbeddedSolrCASConsumer.java0000644000175000017500000000404611625126506031567 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.solrcas; import java.io.File; import java.net.URI; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; import org.apache.solr.core.CoreContainer; public class EmbeddedSolrCASConsumer extends SolrCASConsumer { @Override protected SolrServer createServer() throws SolrServerException { SolrServer solrServer = null; try { String solrInstanceTypeParam = String.valueOf(getContext(). getConfigParameterValue("solrInstanceType")); String solrPathParam = String.valueOf(getContext(). getConfigParameterValue("solrPath")); if (solrInstanceTypeParam.equals("embedded")) { URI solrURI = getURI(solrPathParam); System.setProperty("solr.solr.home", new File(solrURI).getAbsolutePath()); CoreContainer.Initializer initializer = new CoreContainer.Initializer(); CoreContainer coreContainer = initializer.initialize(); solrServer = new EmbeddedSolrServer(coreContainer, ""); } } catch (Exception e){ throw new SolrServerException(e); } return solrServer; } } uima-addons-2.3.1/Solrcas/src/test/java/org/apache/uima/solrcas/SolrCasConsumerIntegrationTest.java0000644000175000017500000001130311625126506033313 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.solrcas; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.core.CoreContainer; import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASException; import org.apache.uima.cas.admin.CASFactory; import org.apache.uima.cas.admin.CASMgr; import org.apache.uima.cas.admin.FSIndexRepositoryMgr; import org.apache.uima.cas.admin.TypeSystemMgr; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.util.CasCreationUtils; import org.junit.Test; import java.io.File; import java.net.URL; import java.util.Collection; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** * Integration test with a running Solr */ public class SolrCasConsumerIntegrationTest { @Test public void testCASConsumer() { try { /* create Solrcas tester */ AnnotatorTester annotatorTester = new AnnotatorTester("src/test/resources/TestSolrcasAE.xml"); /* create a mock CAS */ CAS cas = getCAS(); cas.setDocumentText("Francesco Totti is the best football player"); cas.setDocumentLanguage("en"); AnnotationFS annotation = cas.createAnnotation(cas.getAnnotationType(), 0, 9); cas.addFsToIndexes(annotation); /* execute Solrcas on the created CAS*/ annotatorTester.performTest(cas); /* create a Solr instance to check document has been indexed as expected */ URL solrURL = this.getClass().getResource("/org/apache/uima/solrcas/"); System.setProperty("solr.solr.home", new File(solrURL.toURI()).getAbsolutePath()); CoreContainer.Initializer initializer = new CoreContainer.Initializer(); CoreContainer coreContainer = initializer.initialize(); SolrServer solrServer = new EmbeddedSolrServer(coreContainer, ""); ModifiableSolrParams solrParams = new ModifiableSolrParams(); solrParams.add("q", "annotation:Francesco"); QueryResponse queryResponse = solrServer.query(solrParams); /* check the result contains only one doc with 2 annotations of the mock CAS */ assertTrue(queryResponse != null); SolrDocumentList results = queryResponse.getResults(); assertTrue(results.getNumFound() == 1); SolrDocument doc = results.get(0); Collection annotationValues = doc.getFieldValues("annotation"); assertTrue(annotationValues.size() == 2); assertTrue(annotationValues.contains("Francesco")); assertTrue(annotationValues.contains("Francesco Totti is the best football player")); } catch (Exception e) { e.printStackTrace(); fail(e.getLocalizedMessage()); } } private CAS getCAS() throws ResourceInitializationException, CASException { // Create an initial CASMgr from the factory. CASMgr casMgr0 = CASFactory.createCAS(); CASMgr casMgr = null; // this call does nothing: because 2nd arg is null CasCreationUtils.setupTypeSystem(casMgr0, null); // Create a writable type system. TypeSystemMgr tsa = casMgr0.getTypeSystemMgr(); // Commit the type system. ((CASImpl) casMgr0).commitTypeSystem(); casMgr = CASFactory.createCAS(tsa); // Create the Base indexes. casMgr.initCASIndexes(); // Commit the index repository. FSIndexRepositoryMgr irm = casMgr.getIndexRepositoryMgr(); irm.commit(); // Create the default text Sofa and return CAS view return casMgr.getCAS().getCurrentView(); } } uima-addons-2.3.1/Solrcas/src/test/java/org/apache/uima/solrcas/FieldMappingReaderTest.java0000644000175000017500000000366611625126506031524 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.solrcas; import org.junit.Test; import java.util.Map; import static org.junit.Assert.*; /** * TestCase for FieldMappingReader object */ public class FieldMappingReaderTest { @Test public void testConfReader() { try { FieldMappingReader fieldMappingReader = new FieldMappingReader(); SolrMappingConfiguration mapping = fieldMappingReader.getConf(this.getClass(). getResourceAsStream("/solrmapping.xml")); assertNotNull(mapping); Map> featureStructuresMapping = mapping.getFeatureStructuresMapping(); assertTrue(featureStructuresMapping != null); assertTrue(featureStructuresMapping.size()>0); for (String type : featureStructuresMapping.keySet()) { assertTrue(featureStructuresMapping.get(type)!=null && featureStructuresMapping.get(type).size()>0); } assertEquals("language", mapping.getDocumentLanguageMapping()); assertEquals("text", mapping.getDocumentTextMapping()); } catch (Exception e) { fail(e.getLocalizedMessage()); } } } uima-addons-2.3.1/Solrcas/src/docbook/0000755000175000017500000000000011625126510017426 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/src/docbook/SolrcasUserGuide.xml0000644000175000017500000001030211625126510023367 0ustar drazzibdrazzib Apache UIMA Solrcas documentation Introduction The Solr CAS Consumer (Solrcas) is responsible to write UIMA CAS objects to an Apache Solr instance. It uses SolrJ client classes to execute local or remote updates to the specified Solr instance. Configuration To use Solrcas the following parameters have to be specified: mappingFile : identifies where is the file which holds information about which (and how) UIMA objects must be sent to which Solr fields. solrInstanceType : this has to be http. solrPath : If the solrInstance value is 'http' this represents the URL to the remote Solr instance. The mapping file The mapping file holds information about mapping between CAS properties, types and features and Solr fields. Here is a solrMapping.xml sample: text language ]]> The documentText element holds the field name in which the Cas.getDocumentText() value will be indexed. The documentLanguage element holds the field name in which the Cas.getDocumentLanguage() value will be indexed. The fsMapping element will hold a list of types. For each type specified a map between a feature and a field will be defined. As the getCoveredText() of Annotation objects is not a Feature the coveredText feature name will be automatically associated with the Annotation.getCoveredText() value (just like a common feature). In the sample above the Cas.getDocumentText() will be written inside the text field, the Cas.getDocumentLanguage() will be written inside the language field and the Annotation.getCoveredText() of each uima.jcas.tcas.Annotation object will be written inside an annotation field in Solr. Note that documentText and documentLanguage are all optional. uima-addons-2.3.1/Solrcas/desc/0000755000175000017500000000000011625126510016135 5ustar drazzibdrazzibuima-addons-2.3.1/Solrcas/desc/solrmapping.xml0000644000175000017500000000344211625126510021215 0ustar drazzibdrazzib language text uima-addons-2.3.1/Solrcas/desc/SolrcasAE.xml0000644000175000017500000000727111625126510020502 0ustar drazzibdrazzib true org.apache.uima.java org.apache.uima.solrcas.SolrCASConsumer SolrcasAE 0.1 ASF mappingFile path to the mapping file String false true solrInstanceType type of Solr instance, one of http or embedded String false true solrPath If the Solr instance is of HTTP type this represents the URL otherwise this is the Solr home directory String false true autoCommit true if Solr autocommit is enabled Boolean false true mappingFile /solrmapping.xml solrInstanceType http solrPath http://localhost:8983/solr autoCommit false false true false uima-addons-2.3.1/issuesFixed/0000755000175000017500000000000011625130124016100 5ustar drazzibdrazzibuima-addons-2.3.1/issuesFixed/css/0000755000175000017500000000000011625130124016670 5ustar drazzibdrazzibuima-addons-2.3.1/issuesFixed/css/print.css0000644000175000017500000000033611625130124020540 0ustar drazzibdrazzib#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks, #leftColumn, #navColumn { display: none !important; } #bodyColumn, body.docs div.docs { margin: 0 !important; border: none !important } uima-addons-2.3.1/issuesFixed/css/site.css0000644000175000017500000000006511625130124020347 0ustar drazzibdrazzib/* You can override this file with your own styles */uima-addons-2.3.1/issuesFixed/css/maven-theme.css0000644000175000017500000000536111625130124021615 0ustar drazzibdrazzibbody { padding: 0px 0px 10px 0px; } body, td, select, input, li{ font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; } code{ font-family: Courier, monospace; font-size: 13px; } a { text-decoration: none; } a:link { color:#36a; } a:visited { color:#47a; } a:active, a:hover { color:#69c; } #legend li.externalLink { background: url(../images/external.png) left top no-repeat; padding-left: 18px; } a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover { background: url(../images/external.png) right center no-repeat; padding-right: 18px; } #legend li.newWindow { background: url(../images/newwindow.png) left top no-repeat; padding-left: 18px; } a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover { background: url(../images/newwindow.png) right center no-repeat; padding-right: 18px; } h2 { padding: 4px 4px 4px 6px; border: 1px solid #999; color: #900; background-color: #ddd; font-weight:900; font-size: x-large; } h3 { padding: 4px 4px 4px 6px; border: 1px solid #aaa; color: #900; background-color: #eee; font-weight: normal; font-size: large; } h4 { padding: 4px 4px 4px 6px; border: 1px solid #bbb; color: #900; background-color: #fff; font-weight: normal; font-size: large; } h5 { padding: 4px 4px 4px 6px; color: #900; font-size: normal; } p { line-height: 1.3em; font-size: small; } #breadcrumbs { border-top: 1px solid #aaa; border-bottom: 1px solid #aaa; background-color: #ccc; } #leftColumn { margin: 10px 0 0 5px; border: 1px solid #999; background-color: #eee; } #navcolumn h5 { font-size: smaller; border-bottom: 1px solid #aaaaaa; padding-top: 2px; color: #000; } table.bodyTable th { color: white; background-color: #bbb; text-align: left; font-weight: bold; } table.bodyTable th, table.bodyTable td { font-size: 1em; } table.bodyTable tr.a { background-color: #ddd; } table.bodyTable tr.b { background-color: #eee; } .source { border: 1px solid #999; } dl { padding: 4px 4px 4px 6px; border: 1px solid #aaa; background-color: #ffc; } dt { color: #900; } #organizationLogo img, #projectLogo img, #projectLogo span{ margin: 8px; } #banner { border-bottom: 1px solid #fff; } .errormark, .warningmark, .donemark, .infomark { background: url(../images/icon_error_sml.gif) no-repeat; } .warningmark { background-image: url(../images/icon_warning_sml.gif); } .donemark { background-image: url(../images/icon_success_sml.gif); } .infomark { background-image: url(../images/icon_info_sml.gif); } uima-addons-2.3.1/issuesFixed/css/maven-base.css0000644000175000017500000000437111625130124021425 0ustar drazzibdrazzibbody { margin: 0px; padding: 0px; } img { border:none; } table { padding:0px; width: 100%; margin-left: -2px; margin-right: -2px; } acronym { cursor: help; border-bottom: 1px dotted #feb; } table.bodyTable th, table.bodyTable td { padding: 2px 4px 2px 4px; vertical-align: top; } div.clear{ clear:both; visibility: hidden; } div.clear hr{ display: none; } #bannerLeft, #bannerRight { font-size: xx-large; font-weight: bold; } #bannerLeft img, #bannerRight img { margin: 0px; } .xleft, #bannerLeft img { float:left; } .xright, #bannerRight { float:right; } #banner { padding: 0px; } #banner img { border: none; } #breadcrumbs { padding: 3px 10px 3px 10px; } #leftColumn { width: 170px; float:left; overflow: auto; } #bodyColumn { margin-right: 1.5em; margin-left: 197px; } #legend { padding: 8px 0 8px 0; } #navcolumn { padding: 8px 4px 0 8px; } #navcolumn h5 { margin: 0; padding: 0; font-size: small; } #navcolumn ul { margin: 0; padding: 0; font-size: small; } #navcolumn li { list-style-type: none; background-image: none; background-repeat: no-repeat; background-position: 0 0.4em; padding-left: 16px; list-style-position: outside; line-height: 1.2em; font-size: smaller; } #navcolumn li.expanded { background-image: url(../images/expanded.gif); } #navcolumn li.collapsed { background-image: url(../images/collapsed.gif); } #poweredBy { text-align: center; } #navcolumn img { margin-top: 10px; margin-bottom: 3px; } #poweredBy img { display:block; margin: 20px 0 20px 17px; } #search img { margin: 0px; display: block; } #search #q, #search #btnG { border: 1px solid #999; margin-bottom:10px; } #search form { margin: 0px; } #lastPublished { font-size: x-small; } .navSection { margin-bottom: 2px; padding: 8px; } .navSectionHead { font-weight: bold; font-size: x-small; } .section { padding: 4px; } #footer { padding: 3px 10px 3px 10px; font-size: x-small; } #breadcrumbs { font-size: x-small; margin: 0pt; } .source { padding: 12px; margin: 1em 7px 1em 7px; } .source pre { margin: 0px; padding: 0px; } uima-addons-2.3.1/issuesFixed/jira-report.html0000644000175000017500000004766711625130124021250 0ustar drazzibdrazzib JIRA Report - JIRA Report

JIRA Report

Type Key Status Summary
Bug UIMA-1581 Closed RegularExpressionAnnotator tests fail
Bug UIMA-1740 Closed Mock integration tests on AlchemyAPI Annotator
Bug UIMA-1741 Closed Add AlchmeyAPI Annotator documentation
Bug UIMA-1745 Closed Wrong name in TextLanguageDetectionAEDescriptor
Bug UIMA-1747 Closed TikaAnnotator: null pointer exception in MarkupHandler.populateCAS
Bug UIMA-1748 Closed BSFAnnotator fails tests
Bug UIMA-1760 Closed Fix AE Descriptors' names
Bug UIMA-1802 Closed Missing of a type Entity in TextRankedEntityExtractionAEDescriptor.xml
Bug UIMA-1803 Closed Reconfiguring AE causes NPE on AbstractAlchemyAnnotator
Bug UIMA-1826 Closed OpenCalaisAnnotator annotations with negative begin/end
Bug UIMA-1845 Closed Fix sandbox-runtime-project (osgi-bundles) dependencies
Bug UIMA-1861 Closed SnowballAnnotator needs refactoring
Bug UIMA-1878 Closed TikaAnnotator doesn't handle spaces in path string
Bug UIMA-1890 Closed SimpleServer does not set content-type header
Bug UIMA-1982 Closed Align addons to 2.3.1 SDK release and 1 parent pom
Bug UIMA-1993 Closed Add documentation to the website for AlchemyAPI Annotator, RDFCASConsumer and Solrcas
Bug UIMA-2003 Closed WhitespaceTokenizerPerfTest failure in sandbox Last Changed Rev: 1056535
Bug UIMA-2006 Closed Switch addons to parent-pom 2
Bug UIMA-2015 Closed some addons not passing RAT audit
Bug UIMA-2017 Closed Fix TikaAnnotator-osgi
Bug UIMA-2026 Closed Move uima-addons and uima-addons-parent to sandbox/trunk
Bug UIMA-2033 Closed some parent poms putting apache snapshot repo for plugins under wrong xml element
Bug UIMA-2034 Closed Solrcas should list uimaj-component-test-util dependency with scope "test" instead of "default" scope
Bug UIMA-2041 Closed Solrcas mapping switches values of language and text
Bug UIMA-2045 Closed Solrcas: All files should begin witht he AL 2.0 header
Bug UIMA-2046 Closed Solrcas should not support the embedded solr server
Bug UIMA-2067 Closed Solrcas should remove CAS.toString() to field mapping aka "CasMapping"
Bug UIMA-2094 Closed uima-addons distr package creates empty archives
Bug UIMA-2097 Closed Treatment of URLs with blanks is incorrect in some places
Bug UIMA-2129 Closed Check URL availability in URLMicroformatsAnnotatorTest
Bug UIMA-2131 Closed Solrcas uri generation failing on windows
Bug UIMA-2133 Closed SimpleServer tests are failing on Windows - they have a dependency on new-line and svn:eol-style native broke the tests
Bug UIMA-2135 Closed undo some svn:eol-style for testcase data
Bug UIMA-2182 Closed Addons OSGi - bundles not picking up the License/Notice files for the whole bundle
Bug UIMA-2183 Closed Addons OSGi - License files not the same as the non-OSGi versions - missing things
Bug UIMA-2186 Closed addon Solrcas has wrong scope on uima-core dependency
Bug UIMA-2187 Closed addon FsVariables is being built as PEAR, but isn't one
Bug UIMA-2204 Closed fix license / notice files in addons
Bug UIMA-2205 Closed solrcas has a wrong dependency on 2.3.1-SNAPSHOT
Bug UIMA-2213 Closed OSGi builds missing version information on Export-Package
Bug UIMA-2214 Closed addon build - make common part conditional on single-project marker file
Improvement UIMA-1833 Closed Create an AE for training the HMM Tagger models
Improvement UIMA-1836 Closed Add concept tagging service to alchemy-annotator
Improvement UIMA-1837 Closed Add OSGi annotators' versions
Improvement UIMA-1863 Closed Entity annotators enhance for AlchemyAPI Annotator
Improvement UIMA-1930 Closed TikaAnnotator should have Tika version updated
Improvement UIMA-2014 Closed create a top level project for the Addons
Improvement UIMA-2035 Closed Solrcas should make commit after adding document to server configurable
Improvement UIMA-2036 Closed Solrcas AE should be extensible to support the creation of a custom SolrServer instance
Improvement UIMA-2042 Closed SolrCASConsumer should be refactored to not use JCas
Improvement UIMA-2043 Closed SolrCASConsumers initialize method should be refactored
Improvement UIMA-2047 Closed Solrcas should not resolve the solrmapping file only via the classpath
Improvement UIMA-2054 Closed Improve Solrcas integration test
Improvement UIMA-2057 Closed Improve error handling in Solrcas
Improvement UIMA-2066 Resolved Solrcas should be fail-fast if type system mapping is incompatible
Improvement UIMA-2073 Closed Add sentiment analysis service to AlchemyAPI Annotator
Improvement UIMA-2110 Closed Turn the HMMTagger class into a more generic class for tagging tasks
Improvement UIMA-2126 Closed Update of the Lucene libraries to version 2.9.3. Addition of an attribute for field definitions in the mapping file to make this field unique in the resulting index.
Improvement UIMA-2130 Closed fix line endings in svn for normal text files - set to svn:eol-style native
Improvement UIMA-2132 Closed cleanup svn for some projects which have generated files / folders checked in which shouldn't be
Improvement UIMA-2142 Closed Add statusInfo to Results for debugging failures
Improvement UIMA-2153 Closed Create new "addons" top level SVN spot for released sandbox addons
Improvement UIMA-2158 Closed Addons build from top level
Improvement UIMA-2176 Closed Addons OSGi - embed dependencies as jars, exclude UIMA Jars
Improvement UIMA-2184 Closed Addons OSGi - improve build by removing duplicate projects for osgi builds
Improvement UIMA-2185 Closed cleanup addon binary build
Improvement UIMA-2208 Closed addons: Dictionary Annotator - create temp file in temp space
Improvement UIMA-2209 Closed Addons OSGi - remove useless Eclipse-buddy:registered directive
New Feature UIMA-1984 Closed RDF formats CAS Consumer component
New Feature UIMA-1985 Closed Solr CAS Consumer component
Sub-task UIMA-1931 Closed Enable LanguageIdentifier to extract language
Sub-task UIMA-2074 Closed Enable sentiment recognition at entity level
Task UIMA-1733 Closed Import AlchemyAPI Annotator code inside the Sandbox
Task UIMA-2018 Closed Add Solrcas-osgi to sandbox-osgi-runtime
Task UIMA-2023 Closed Rename sandbox-osgi-runtime and its modules
Task UIMA-2061 Closed Introduce autocommit parameter in Solrcas to control Solr autocommit capability
Task UIMA-2103 Closed Final tweaks on uima-addons for the release
Task UIMA-2109 Closed Set latest dependencies/plugins/properties versions for UIMA Addons (where applicable)
Task UIMA-2144 Closed Refactor addons-osgi-runtime build
Task UIMA-2152 Closed Change alchemy-annotator artifactId to AlchemyAPIAnnotator
Task UIMA-2192 Closed Apache exports page needs updating for UIMA-AS and UIMA-addons
Task UIMA-2216 Closed remove OSGi builds for now

uima-addons-2.3.1/issuesFixed/images/0000755000175000017500000000000011625130124017345 5ustar drazzibdrazzibuima-addons-2.3.1/issuesFixed/images/icon_error_sml.gif0000644000175000017500000000176211625130124023056 0ustar drazzibdrazzibGIF89a÷ÿÿÿ ²±«£ q x v m¸;@’GJf46éÒÓ_ Á· œ › ‚ i [ ¾½¹·«¦ ˜ — – “ Š ˆ ~ } s q p n X V L ž  … ƒ  v l ¾~ ®Â"±",¢9?‚6;{6:Ždfå³¶ðàáÂ$¿'¿)©OWͱ³ÞÐÑÅ-Å/«*Ç"4À"3Øs}ôÖÙñÕØðÖÙúðñûòóÇ%8Ç&:È(=È*@È+AÃ*?É5H½=MÀM\ùñòÄ+BÉ.FÉ/GÉ0IË2MË3OÈ2NÇ%9J.F¯p«±r®N3O²v´³x·µ{»@-EL6RO8V08G3O1:bGm3=4>7 C5AgOx?2ME7TmW†|d™}gŽu²š„Á^Vƒøððèààöððýýýûûûúúúôôôÿÿÿ!ù,Ï; H° AJýéÃg’ÁN’Þ´YcŒ—* FrÃM™/]¨HI‚h $5iÎŒ³å “%B€øéTÉ ™0P8ÁÒ$À“2,Êã…‹•,Z(µ¤D‡ŒðL‰¢É¥¨@¡€¢;GŒÉák$<Hd‡ >`ê'‘!\2ƒ†?v°hp‰‡  uÚ@‹ .¨Xñà = q˜0 )f$Tp„"F¼ˆQƒ´ÁGrểCÇÁ€;uima-addons-2.3.1/issuesFixed/images/icon_success_sml.gif0000644000175000017500000000173611625130124023376 0ustar drazzibdrazzibGIF89a÷ÿÿÿ„™º¦¶Î§·Î¼ÈÚÇÑà¿ÈÕc~¢¡±Çßåíw¬™´¦¸Ë—®¿³Ã©½ËSq‚*/‚¡­%(#8='*!37,/(CH'AF&>B/2*,)FI"!Prkœ¼´¢À¸j•†„¬œtœ‹¢Å²FcOƒ­7G;ÅÖÈÈ£¬Ö©·Û´¸ß²2B.²á¥³â¦·ã«¸ä¬¸ä­ºå¯¼å±Â€¶ã©²à¢²à£œÎˆ¬Þ˜«Ü™©Ù—«Û—]•BÎ…¢Ô‹©Û‘Í„­Õ—]”>¡Ô„çñሻf“Çr¿mˆ¶jÐæÂøûöbœ7Jw*U‡0WŠ2•ÑiÔäÈmª;Ag$r³?o¬=ež8fž8b›7ZŽ2YŠ1S‚.Jt)Qy1‰ËW…½Yu¤Qe‹FcˆE—¹{›½{“h­Î×Çîóê„ÊGv·@uµ?k¥:hž7`’3Jr(ÃE^‘3Q|,S~-Dh%}¼DEi&‹ÎQ²Å¢ÖàÍÏ×ÈãëÜIm&Qx+Ot)Mo(êïåLl&Ig%Gc$õ÷òþþþûûû÷÷÷ÿÿÿ!ù‹,» H° A!,X E aCF5pAÆ *01#†"NT0è‡A˜ ¡ =†Y²&€ NR¤I’1ÅÁbà€JðÃ'À:oŒ8bŠ˜3‡ˆ-ÃeË“‹„у™>Ô|‰Â¥ (ØÌq£Å‹•4häÔ±(Ћm®TÉ"Jž;*d(Å"4l¨p ,Pø°( ;uima-addons-2.3.1/issuesFixed/images/icon_warning_sml.gif0000644000175000017500000000110011625130124023354 0ustar drazzibdrazzibGIF89aæÿÿÿ¸œ§º¡«b`awr}“ޤ˜ º¡¨¿¬²Æ~ް„’²j| £¯ÇfsŠ„™º§·Î·Ä×ÄÏßËÔ⣴ÌÜãì[M@Kƒ? àk®T£N ”G J$ùwñsïrêpÛi×fÖfÔeÎcÍbÇ_¿[¼Z°T©Q¤OšJ E D E ƒ? i2 çnämÃ]¹X·WµV•H ‰A €= h2 ]-Ëbùzù{ìz&«Z¿i&×iù(Ëj&ùƒ1ùƒ2ú†7Ìm-D2%Ìp4úŠBúŽIØ|DÌu@ú”Yú˜aæ\Ì}R׈[¦v[úmI:2̓`û¡vû¤û§ƒÙ‘s=.()ûª‹+*û­‘ç ….!Ó—<,&é¤5&!:*%²‡y*Švp묜*,-¨‡‚š~zÇŸžÿÿÿ!ùv,€v‚ƒ„…† †…oae‹ƒd][s’v iT ‹u^PW†\Z¥MI…gXU¥GAD„SRQ¥?4ƒVONK¥)#C‚nJHFE0=7'6*v B@%¥+8, l !5"9¥.:/Lt"$&(-3:øc‡ Yìø‚f3càÄ‘#¦ ;;uima-addons-2.3.1/issuesFixed/images/logos/0000755000175000017500000000000011625130124020470 5ustar drazzibdrazzibuima-addons-2.3.1/issuesFixed/images/logos/maven-feather.png0000644000175000017500000000640211625130124023722 0ustar drazzibdrazzib‰PNG  IHDRZ#ž/ pHYs.#.#x¥?vgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF xIDATxÚb`H €øÿÿÿ£ FF€blnÚ³gÏ÷ïß!ìß¿?xüä8û÷ïߟ?´¶ €XˆQtãÆ®®.[LL,##CAAMÍû÷ï'Ož\WW7eÊooo g„„„ ²oß¾1cFuu5A»øøøBCCýýý£££&ì=q†ñߟß7¿j›%ôó7£™»¾º€¾§²<· Õƒ €ˆJÏŸ?¿yófZZZJJ ''gpp0¦666mmm cß¾}oÞ¼Ù°aCoo/\öÛ·oÀh'Æ.33³ ­366^½zõ›W¯ž<{sbá‘['>>¿ðú׌}ßÒ'|vJzdt9&çî’Ÿ^=§bp±™E@@ÀÂÂÂÊÊ*;;ûÉ“'@‘Ù³g_¿~ȸzõêÂ… 1y÷î]ˆâ>½´uëÖcÇŽÁMøóçO}}½¯¯ïâÅ‹¥Õ¤I“._¾ ÿüùsUUÕß¿ÉçÖ­[@`Ê&F ™Ë–-›ÒѼ}ãªÝOžïgU:̪¾•Mú›øÍŸ"oo3².?ÚÕþÌ)ôJzÖU ßݽýÿÿ? ƒ €XˆTwçÎÖÖV £8P^^2”••555¡søða`d–••¥xyy½¼¼€Ztuuá&œ>}:77˜¢¢¢ää䘘˜€îééÙµk׳gϘ™™ /Ô²&&&ÁÑ «7lxóàÉž›[ÿ1òK3+J2‰>eggaýÿAýï3ÁŸœ|×~‹Þ9ùgñÑÇš3«©ý7Va××ááã–•eçæáæ$)8ˆØààááQWW:èî9sæ$&&âQ T#** Ì2Àp XXÔ ÊÔÔT`vww¯[·...( ,¸b`¨\¸|åç¿á1Ñúg]¾±ã*ËŸÓ ïþy|÷?';#?ûFAvVN=–Ï\JýýÌzñŸäõK_÷ß`ý¸ö×ï÷r|ÿy9ÿëè y™0É*°rˆ ÉK±rpã÷&@!!!ö‰'Ž= ¯¡á~ÀÁÁa°²²«4)))`šÌ2ööö˜õ¿ž¶–¢œÜ?†ÿ?ï­ÿs;èày>•Íìò/~ýþø÷Å“ßOÖÿ}ÉÈÀ´•]މ_ŒEÒœé;ëqÖ,² _¾~ù÷å:»ÜïZGÜÙpùàY¡GLºÂL"¼R&¬œŒŒX €"68~þüùâÅ X@= ¥¥Œy`VúdóæÍ@ïaÖá?~ü@9wî܃€¡T_\\ ‰ŒŒ,**rtt„„° QUU&+¨ËXX@V%=ú÷yúµgO}þ{ýãï;v¡ïìo¾ÿþ÷öü¿ï/þ¾½ÿëìq†?ŒŒ‚BŒüŒlߘ$¤™lÙYßþ[÷ÞÀéïÃ{ßEïüÐT8÷ºðÒu/NWÍÿ‚*†üÒpGQÁô9°ÀÖŠX•*))S{zzúòåËXÁXŽ nnnSSÓ &ìܹÓÝÝRïkßœœ`1±³³  æ©S§Bl™?~rr2<8à€]>5ó½¯çûƒ[¥Vï×:rùínŽ_ìŸþ³²³ü÷bz΢øŸUæ1Ãÿwÿ¾?ÿÿëÝ`ûäþ­¿ÿÿÿõ‘‘Møÿ¡Íÿ¿=þ%æËðòòC.‘»¿¬Å?2~øûñÍ3Öoûï=ãc°“SòçÚ@µJ%+¤¤À* l71‚²°~ „ ` L˜‰ »uÿþ}ýòñãÝóßoÿ³ü—ãï½ïØt˜þúýå?#+'3Ã'&.&¶L,Ϲÿ1ü8Ä .Êð‘õß÷Ûÿ9˜þ}øÏ$ðë,»fì.qfIvvF†ÿ~þäÒõŠ™t@ X#}÷îÝ………ÀšÅÃÃT½¿ÿüùöéãßï~ðëùß½çî¾öÿÝŽŸ‹ýá~ø‡…õϯŸ9¿ü}ÃÆñô¿€îï·¹9Y¿þüÍÎÅõó÷/A®2Ìì‘L?M¹þ}aüøƒ]XÂÅÒ!DQp Q`ÛÀÖ'<†õ%° ä ó?.½ÿÀ"ÐñÀTóû÷/†ÿÿ|ÿñíÝ›¿?~þ{ûö˯ÿ‡nþåÿ÷—‡ùïN%A†/Œllßò‰sÈÊ1üøóçý‡?ÊÜl¼¼\\<À4t3@AM$¬]»V€M/`› X.BÊ`kXpþúõkÞ¼yÀR– €íË{÷îý:è€"!8€Å¼Ö¶AÐb Ø6sssC+€u3†1ÿþÿüöÿû§ÿ~QâtHüøñ#0‰áW ,à€õAeà bƒh0¶‘ZÀÊ…‹‹ ­r•••6çá"À–„£‹þNôÿS£û§TñO‰üŸr•?]ÎÿÌþÿ÷PöñãÇÀXm»ºº;8pKm6{0X±bDغ ¶ƒ€õ°ÊFLKK °‘&R`T4 Xµ—””ÈËËkC 2`O08ˆØàƼ‰ t1°Å¬#+ }@.0Ò^¾| ¸ Úíþäc¢‡æ"›,M€Íˆ–7BÌv  €"ÀôÀ†2<Ülˆ`›˜O!Í|`á…[ÀîË—/øƒ €ˆ `Kn.ЕÁGÁkY`×¥2üüü`‰ûÇß™1ÿÎù÷ðÂÿ×÷ÿÝ>ò·Ó eC”Û`]§N‚Ä3°‚øØŠ,]ºâUH:tØ*ŠÓ)$¼€KxÛ×Çǧ¡¡ÁÚÚž¢Ý(üÁ@ÄÇĉá«§OŸB‘ûì[¶l[ðö80£æã?ÿ?¿ý÷øò¿«{þÎŽƒÇ–6ˆ$0‘CtmذÈ9s&„ ¬‰A ÌAÀÄŸÀüò A÷jRRDWcc#ÄXHÒKxÿþ=þà bë9`ŒAÀt+&&owÃK `3¾rå ¼ydxÿ”).ï`xó€áïo”GÁ€§ 'Q ì@CülÝÍ?{ö,d˜ÆÂ0Œ€YjðT iø°' ϹÈåV@,D¶>®°ŒŒà…“'OBÀâ Fð€VÀ Ô÷è¿é _ÞƒAVQÎ[èÿÞ) ~10³2Ê@Ô«©©Á[«“&MæD Ø©Ôb± –Öð€ƒ`¹ôêóçÏU;$tàAvæÌÃÒÒ’ Oˆ¨à¦±Û·oÃG«àÍ­óçÏ£ "‡¢¢"$Œþ¯¯…0!xW2¹002ýxþÿ®~"E^Q´ÔôÄ '+**àÖAÀ‚cÙ²eh-1HRº’0õôô€õDöøñãÄ@5Lî ²Ï5ÈÇ ‡ÑϯÿŸ_Gä `·Øâ8µ‚ìFED² t·k×.`3° ¯Îà#IÀÖàÂ… !Þæ©U«V ËàáeøàÜçÀçÒ¥K¶••AŸQ©XtAœœœpg!‡‘¹¹9„LáÀ¤Ž,l ì< _߃æs¥´þ¿ºÃðù-4€”Á!##4Ød‚D5°dõ÷÷‡Ë=ì »ÈÀ¶oBB°ï TüõëW bqqq`:ÂÀòõõë×@°dgF< €ˆJ@C¹Á˜á¥Ñ…  ‚‚‚‚@qˆ 0*€…DF̬L>• lœàNΧÿÏ®3ZÅ3Ë2°°ƒ¢rqt1;Í& Hµ ¯&-±ÔÔTHsÀF0Ûcyyy„póæM ^ àÁÌwÀ" (hkkKL¿ €ˆêÂ}úô 'ÒØÂƒ]I±@GÃ'€:`ŒÁ›=ÿ¼{üÿé`Tprò3|~É, |â H®¶»íKHÐ`|ÀÕ\»v H= ,Võ¤^V+*HA<ÿ € `ôðóóœv ÑY8”à ¦ÑP@4ŠP@€„Z¤':ævrIEND®B`‚uima-addons-2.3.1/issuesFixed/images/logos/build-by-maven-black.png0000644000175000017500000000436611625130124025074 0ustar drazzibdrazzib‰PNG  IHDRZ#ž/ pHYs.#.#x¥?vtIME×úļ•IDATXÃíXiLTY>ï½* ( ±J¶BZ@–€Š›ˆ†%‚‡?hÆ?"jb‚Qd~(„d\ÆA $ &Œ2™¸1 ›€ »‘"R`UJ-¼Zîü8Ìm„žîÎ4É´NêÇ©sÏ}ïÞï~ïœsÀš¬É𬒤¦¦ÖÔÔÔÔÔTWWzxx¬ôQ(‡bY¶¤¤ÄÕÕU&“‰Å⥣¹¹¹ßÄfÙ_ôغu+!¤ªªª¶¶6<<¼¼¼|¥ÏÜÜÜøø8˲™™™NNNçÎKMM¥£~~~1118`rrR©T¶¶¶ÖÔÔ@II‰D"€ôôô¤¤$www???tÞ¶m[JJJ^^µÀúõë¯_¿^__Ÿ””ÄqÜ… eáááÇ …çÏŸ_J¨ß5‰‰‰gÏž---­¨¨(++€ýû÷;;;@TTTxxx@@Àž={Ðùýû÷ÝÝݳ³³K¿¸ºººòòòêêjOOOooï´´4ÈÍÍ%„0 # ¿vhµÚáááööö“'Or÷3Î&“É`0LOOó>þÕ«W‹¥¹¹ùÒ¥K·oߎãöíÛçääô °czz:;;;>>¦¦¦<¸°°PQQQUU¥ÑhZ[[ggg ÃÄÄ!dppÐn·777·µµ€Á`P*•>ôðð¸|ùòÔÔܽ{÷ðáà  :;;—~_ߘ–ý¯äZ9Äqœ@ð#úiii•••ke@~~~___ppðïma̯ôsvvvssC]¯×B‚‚‚<==­Vëàààüü<ùøø2 £R©&''†Y‡Ãáp|«çyæÌÜ€ÕjÝ»wï³gÏìv;!„2<<ìçç'•J¯^½j2™Ðh2™²²²þ°ônllÄ}Z­V£ÑH¾–G-3~;ðue·H¹/A„”“:3Ëø‚‚ù{‘º CíK7lسk×®àààeC,Ë¢?G®®®[¶l‰ˆˆXÍ´%ÆÇÇé>5MSSÓ‡–nÞh4>}ú´»»›ZL&“H$Â'ämsžøóúù<©-_fË—Yóe†¤ÿø^âïÆâz{{µZ­V«MNN¦ï½xñ"ëëë¦ÈÈÈÐó°ÙlCCCééétJQQN¹víÚéÓ§ÕjµÃá°ÛíoÞ¼ùî»ïV???‡Ã+¸qã^.ÂÂÂèÎ{{{7n܈)“ÒD§ÓÑüÒô½X8*CthnnÆYGŽAKPPÐüü~ü6›Íf³¡q``€Ë·ZûÁ~ñ­Ö‰þ¦õ¼¡«z»X¤†x,Öû£££¨ÈårTŠ‹‹÷ÊÊʾ¾¾ºº:±X<33£P(¶o߈e‹H$ÊÎÎÆr122§÷ôô;vìèÑ£´hÆ[…"=..³Ùüöí[Ô#""¨CWW½¹Ò‹,5Àé—&r1»}ƒ@.f‹à¾7Ø…B‘““ƒE`II œ:uÊÝÝjkkœœ°c€F ‘Éd Óéñ0ÒÓÓ322@¥R­2£££z½uÚ „tww£Fó1…Ãß=©pÉ ròwc™¯3{‡Æ¶–eKKK1øÎÍ͉D"Ú@)(((((X¶BäæÎ;‘Å”˜¾¾¾¨tvv® ÃÄÆÆRÒ×PŒT*ÕÌÌÌ2#…#̃{šå.³Ð3ck›²M|¶ĸø¸² üccc‡ƒeY¹\¾{÷n<Ï—/_ÖÕÕ€D"Á]Y,–'OžB–-òñãÇþU*•”­´Ø£Æß$¡¡¡4åååÑ\£R©ÐØÐÐ@oݺ…F­V‹ukŸFÍ¿'‰9`ƒ3cøAŠaUâÄÐuùò…¢V«ÛÚÚ!<ÏÓíyyya™c4×­[·l…Ø+á8n``ßN/– 42 ³ ¡tåcõéïᅩ„ÇEGG£Ž—e Æk‘€½Ÿìv, ‰… ¼ÓÚ¾ð„¶±]äë뛀1‚ž§^¯Ÿ˜˜À:¢²²™Â²lllìµk×JKKÀÓÓsóæÍØCèééÁ‰;vì ÔXɩ߇^¯Y™k(F2™ D„€~aq‰®ÿÚï>œëñ×Ý‹M@ú¥, 0;;[TTDÿò<_VV†ûÉÉÉQ«ÕƒÁb±tuuåååõ÷÷c,Ãp344DåW{{ûêô; Ïó<Ï¿{÷îóçÏhŒŽŽFãüüüëׯi——Îó  VD„Oj© ´½÷ìG>»’ø|aÒ?æÎ™3÷ÎïÌ™™sJ!„`&‰^€`Ž/ƒãùóç&)--­»»{¶ŽÑhÌÈÈ€üüüW¯^1 óîÝ;2j0²²²~!pô÷÷wtt>|øÐ¡C"‘h÷îݳuø|~`` |8::ZRR‚•%É–-[ÂÃÃW¬XA,hµÚÀÀÀœœœÜÜÜššš¦‹ŠŠ ªªJ¯×ÛÙÙY­Ö¯^ææ ‡£££R©ô÷÷ß°aÃ¥K—ŒFãg”íìì\]]¥R©D"!ÂÕ«WÇÇÇûùù%&&VWWïÚµëîÝ»¡[·n%$$À±cÇ”Jå×…Ã~Žzr¹<66óuuuµµµ€slll.„B!fx<EQnnnµµµ­­­*•êËØ€€‰DÒÙÙi³Ù***fëS5>>>]ÒÔÔÔÝÝm±X***Ö­[ )))ÑÑÑ)FóöíÛo‰DÂ0L\\\\\ÜÙ³góóó ERRRaaáúõë—.]êééÉãñüýýÀÇÇG,‡„„ÔÔÔTVV’º£V«=„áØ¹sg{{û¾}û°Î•+WH2þj„¾€l6›Ífû±Q–e9Ž›!™˜˜ }}}aaa3t¾.Á×zqUUU``à½{÷Ðω¨/©mcccÃÃÃ|>ßÅÅ…¢(,´Z­ƒ¢(™Lfoÿ£©šã8Žã>£ðsß,¥¥¥A“ÔÖÖ–žžîææ†óÂÞ½{ÇÇÇ-ËåË—hš¦i:44´«« }Sô?À‘œœLªÆì!55uãÆ$F0ÅÆÆÎ2á 3{l–/ùnƒ&“é'S˲ ÃÌ1CÍŽãBCC§7Z …ÂÁÁaFquww—J¥Dâáá1e¡ö{6w‡íO+lô¶ð´¥úÚþº«.@¬ !ôæÍ›èèh•Jc6›ÉKU*•J¥*..ÆB­V»gϹ\.‹%‰R©ÌÌÌ$z||\­V«Tªèè覦¦'Nxzz:99)•ÊŠŠŠyƒÃd2‘3&&w†„ƒR©Ôh4V«upp âëë;U†þ¼ÎvT6ûÇÕN·oooßÝݧ”——cû^^^&“ !tîÜ9‡¡wtt$¸9rOimm¥ihš–ÉdÓWËÅÅeddd~ਫ«#vËË˱°§§ÇÎÎ O:E–çؾ}ûdp³÷qÿ¾Ä½~‚Þ¾â^ü‡ýËz û}2VY¾|9žU__×9(({^RR‚º~ý:v5** CVSS#ÀÁÁãUPP@zß­[·ž>}:22’D´N§›8rss?ôm4Ý×ׇ…ÓÏì·o߯B½^OúñÌÌÌ÷± 1îM+×vŸ-øÝ8nŸÅƒjµÏ*++C]¼x?nÞ¼™ã8³ÙìããƒýÔjµ}“„¡'®8pÏ:sæ 6‹Ïø”`4?ïæ\ë\}}=f¼¼¼/^Lún’5BBB0ÿôéSÒž!{¹šBÔúOêÖúQÆñú fHtôõõ™L&|]$ ÏŸ?OQTcc#îY­Vë”ÙIâñx2™Œã8Ÿñ€¡¡!²s§çµÿÿDzlcc#æW­ZEš…ÇcÆÓÓ“`D€ãóù+W®Ôó„ûûoad( ܃)_ƒØý+l°ãQ+±¾ŸŸfôz}^^^OO¤¤¤à*†ïVÀÝÝGH¡PH¥Òþþþ®®.Œ¬¡¡3áááós¢5/^¼À<©/V«µ¹¹y†p:ÞÞÞ#ôS02”ú;z〢ÑëfTõ7€_yƒÄuFt444`# …"--¼3QQQ7nܘÝ:@ss3Ìàà`±XŒG=z4w8æt„klldYv†çƒƒƒ¯_¿þiŒ&FQÿ³©}AÑ`³ úb@(ï©°÷ññÁqWUUe4)ŠÊÎÎ&åŒÜ$•––a·M&ÓÍ›7###ñõ-¹|#ž›Íæ––ÌGDDÌOthµZ̈D"òYÓ1Z³f fzzzôzýGpØóAà£Fà ÷Snè0†)¦àX¶l™H$b/µZ­Þ±cˆˆØ´iSee¥ÅbÙ¿ÿÁƒE"Ñèè(BhÉ’% …â“pèt:|i “ÉÈfüÒèÐétb±X,“lôäÉ,tvvÆÂ––¡Pˆå0²ãÑ[¿¾`ì=Ò?£"~2w°€½¼C§§C???@ œ³³³qY%e²¸¸8)) ·,ËŽŒŒP%—Ë?Ž¡££C …BGCCŸÏk×®Ñ1’æt„{ÿþ½ÅbÁÙÑÉÉ GFFpÄÒ4íââBu£££¤í™òçÝÔ÷x"Êc%ˆóÞ,à´¦}¥Á`˜˜˜Àиºº~òc C{{»Á`îîî¾¾¾¸®s700€Ëœ\.ÇÎ3 Ã0 ˆÅâE‹Í ;-À±@ÿ§wýí¿ƒIEND®B`‚uima-addons-2.3.1/issuesFixed/images/expanded.gif0000644000175000017500000000006411625130124021624 0ustar drazzibdrazzibGIF89a€!ù , „j œ´Î;uima-addons-2.3.1/issuesFixed/images/icon_info_sml.gif0000644000175000017500000000113611625130124022653 0ustar drazzibdrazzibGIF89aæÿÿÿýýþùúüøùûÚàërƒžÑÙæÕÜè×ÞéÖÝè 'SG]}]y¢Vp–OgŠLc…J`EYxCWtI^~FZyeªh„¬gƒ«j…­l‡®mˆ¯pаXl‹t²v´dy˜w´|”·~•¸w­€—¹uŠ©nž„š»ƒ™º…›¼zŽ¬ŠŸ¿w‰¤‹ ¿¡À¤Â…—²™¬Ç˜«Æ‚’©’¢º†•«¡²Ë¦¶Î©¹Ð­¼Ò¬»ÑŸ¬À±¿Ô°¾ÓµÂ֏Ũ¼ÈÚÁÌÝÃÎÞÂÍݲ¼ËÉÓâÆÐßËÔâÍÖäÌÕãÓÛçÒÚæÈÏÙéíóãçíõ÷úôöùóõø@TpAUqyŽ«}ަ•©Åž°É§´Å¹ÆØÀÉÕàæîßåíáçïåêñäéððó÷ïòöÝäíÜãìÛâëçìòæëñìðõëïôêîóØßçâèïñô÷öøúûüýúûüþþþÿÿÿ!ùr,»€r‚ƒ„…‚`fg`l\d LGƒ^qqopnQmbj.‡™MObhNg r\oP6 [igŒ%‚d›mE4k_^eL‚ PRah YcHB‚ËjfV ‚FØ`\- 5Z=97‚D`] I' 1ì30‚@KICA@,¨"‹éøcÇ $X ñA‚ ?tàÀrå…Š!8h 2è† @ Pa†b ;uima-addons-2.3.1/issuesFixed/images/newwindow.png0000644000175000017500000000033411625130124022074 0ustar drazzibdrazzib‰PNG  IHDR Óº&gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< PLTEuuu™ÿÿÿÿÿÿ€8ÉÙtRNSÿÿÿ@*©ôFIDATxÚb`fff„f€b±™@€‘ €€Æ „8@!³™ @`6Ô€±L€Ø& ±´Â^IEND®B`‚uima-addons-2.3.1/issuesFixed/images/external.png0000644000175000017500000000034611625130124021700 0ustar drazzibdrazzib‰PNG  IHDR Óº&gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< PLTEuuuÿÿÿ™ÿÿÿÑðPtRNSÿÿÿ@*©ôPIDATxÚb`&& @ P6#@ `ÀÄÄäX˜Ć2™Ê« ›‰d@AÔ3ƒ (± *‡½ÜtIEND®B`‚uima-addons-2.3.1/issuesFixed/images/collapsed.gif0000644000175000017500000000006511625130124022003 0ustar drazzibdrazzibGIF89a€!ù , DŽ`ºçžcŠ5 ;uima-addons-2.3.1/BSFAnnotator/0000755000175000017500000000000011625126744016122 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/pom.xml0000644000175000017500000001554611625126462017447 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent BSFAnnotator jar 2.3.1 UIMA Annotator: ${project.artifactId} Annotator to run scripts using Apache's Bean Scripting Framework ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} 2.3.1 desc/BSFAnnotator.xml org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.uima uimaj-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test bsf bsf 2.4.0 org.beanshell bsh 2.0b4 rhino js 1.7R2 log4j log4j 1.2.14 commons-logging commons-logging-api 1.1 uimaj-an-bsf org.apache.rat apache-rat-plugin default-cli release.properties README* RELEASE_NOTES* issuesFixed/** marker-file-identifying-* DEPENDENCIES src/main/java/org/apache/uima/annotator/bsf/types/Firstname*.java src/main/java/org/apache/uima/annotator/bsf/types/Nickname*.java src/main/java/org/apache/uima/annotator/bsf/types/Token*.java src/test/resources/Nicknames*.txt src/test/resources/testdoc*.txt org.apache.felix maven-bundle-plugin uima-bundle org.python.*;tcl.lang.*;org.apache.xpath.*;COM.*;com.sun.*;javax.jms.*;netrexx.lang.*;* uima-addons-2.3.1/BSFAnnotator/LICENSE0000644000175000017500000017611111625126462017133 0ustar drazzibdrazzib------------------------ Apache License, v. 2.0 -------------------------------- Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. For bsh-1.3.0.jar: ------------------------------- Sun Public License, v. 1.0 --------------------------------- 1. Definitions. 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications. 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof and corresponding documentation released with the source code. 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data. 1.5. "Executable" means Covered Code in any form other than Source Code. 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. 1.8. "License" means this document. 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications. 1.10. "Original Code"../ means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.11. "Source Code"../ means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated documentation, interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control"../ means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. Source Code License. 2.1 The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code. (d) notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. 3.4. Intellectual Property Matters. (a) Third Party Claims. If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "../LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. (b) Contributor APIs. If Contributor's Modifications include an application programming interface ("API"../) and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. (c) Representations. Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License . 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. 4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. 6. Versions of the License. 6.1. New Versions. Sun Microsystems, Inc. ("Sun") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Sun. No one other than Sun has the right to modify the terms applicable to Covered Code created under this License. 6.3. Derivative Works. If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must: (a) rename Your license so that the phrases "Sun," "Sun Public License," or "SPL"../ or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Sun Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) 7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 8. TERMINATION. 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. 9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation,"../ as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. 11. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. 12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. 13. MULTIPLE-LICENSED CODE. Initial Developer may designate portions of the Covered Code as ?Multiple-Licensed?. ?Multiple-Licensed? means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. Exhibit A -Sun Public License Notice. The contents of this file are subject to the Sun Public License Version 1.0 (the License); you may not use this file except in compliance with the License. A copy of the License is available at http://www.sun.com/ The Original Code is _________________. The Initial Developer of the Original Code is ___________. Portions created by ______ are Copyright (C)_________. All Rights Reserved. Contributor(s): ______________________________________. Alternatively, the contents of this file may be used under the terms of the _____ license (the ?[___] License?), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the SPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the SPL or the [___] License. [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] For bsf.jar: ------------------------------ MPL 1.1 ------------------------------------------------- MOZILLA PUBLIC LICENSE Version 1.1 --------------- 1. Definitions. 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications. 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data. 1.5. "Executable" means Covered Code in any form other than Source Code. 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. 1.8. "License" means this document. 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications. 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. Source Code License. 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code. (d) Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. 3.4. Intellectual Property Matters (a) Third Party Claims. If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. (b) Contributor APIs. If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. (c) Representations. Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License. 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. 4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. 6. Versions of the License. 6.1. New Versions. Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. 6.3. Derivative Works. If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) 7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 8. TERMINATION. 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. 9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. 11. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. 12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. 13. MULTIPLE-LICENSED CODE. Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the NPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. EXHIBIT A -Mozilla Public License. ``The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is ______________________________________. The Initial Developer of the Original Code is ________________________. Portions created by ______________________ are Copyright (C) ______ _______________________. All Rights Reserved. Contributor(s): ______________________________________. Alternatively, the contents of this file may be used under the terms of the _____ license (the "[___] License"), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the [___] License." [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] uima-addons-2.3.1/BSFAnnotator/README.txt0000644000175000017500000000127711625126462017624 0ustar drazzibdrazzibApache UIMA BSFAnnotator README file INTRODUCTION Note: This is the only documentation for this annotator at the moment. Please feel free to add more! The BSFAnnotator component provides an UIMA annotator implementation that allow the use of a BSF-supported scripting language to implement the initialize and process methods. The annotator has one mandatory parameter the 'SourceFile' that contains the script. Sample code is provided; have a look at the BeanshellTestAnnotator.xml, RhinoTestAnnotator.xml or at the more complex BSFAggregatedAE.xml and their associated scripts. These are found in the src/test/java and src/test/resources directory in the source distribution.uima-addons-2.3.1/BSFAnnotator/NOTICE0000644000175000017500000000074411625126462017030 0ustar drazzibdrazzibApache UIMA BSFAnnotator software component Copyright 2007-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). This software also includes: - Beanshell 1.3.0, lightweight Scripting for Java, from http://www.beanshell.org/ - Rhino, the open-source implementation of JavaScript written entirely in Java, from http://www.mozilla.org/rhino/ uima-addons-2.3.1/BSFAnnotator/marker-file-identifying-single-project0000644000175000017500000000000011625126462025460 0ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/marker-file-identifying-standard-pear0000644000175000017500000000000011625126462025260 0ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/marker-file-identifying-osgi-project0000644000175000017500000000000011625126462025140 0ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/0000755000175000017500000000000011625126460016704 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/0000755000175000017500000000000011625126460017630 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/resources/0000755000175000017500000000000011625126460021642 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/resources/org/0000755000175000017500000000000011625126460022431 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/resources/org/apache/0000755000175000017500000000000011625126460023652 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/resources/org/apache/uima/0000755000175000017500000000000011625126460024605 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/resources/org/apache/uima/annotator/0000755000175000017500000000000011625126460026612 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/resources/org/apache/uima/annotator/bsf/0000755000175000017500000000000011625126462027366 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootuima-addons-2.3.1/BSFAnnotator/src/main/resources/org/apache/uima/annotator/bsf/BSFAnnotatorMessages.propertiesuima-addons-2.3.1/BSFAnnotator/src/main/resources/org/apache/uima/annotator/bsf/BSFAnnotatorMessages0000644000175000017500000000226111625126460033300 0ustar drazzibdrazzib# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # bsf_annotator_resource_not_found = "The resource file {0} could not be found." bsf_annotator_language_not_supported = "The scripting language {0} is not supported." bsf_annotator_error_reading_script = "Error while reading the script {0}." bsf_annotator_error_executing_script = "Error while executing the script {0}." bsf_annotator_error_calling_method = "Error while calling method {0}." ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/BSFAnnotator/src/main/resources/org/apache/uima/annotator/bsf/BSFAnnotatorMessages_fr.propertiesuima-addons-2.3.1/BSFAnnotator/src/main/resources/org/apache/uima/annotator/bsf/BSFAnnotatorMessages0000644000175000017500000000237511625126462033310 0ustar drazzibdrazzib# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # bsf_annotator_resource_not_found = "Le fichier de ressource {0} est introuvable." bsf_annotator_language_not_supported = "Le langage de script {0} n est pas supporté." bsf_annotator_error_reading_script = "Une erreur est survenue lors de la lecture du script {0}." bsf_annotator_error_executing_script = "Une erreur est survenue lors de l exécution du script {0}." bsf_annotator_error_calling_method = "Une erreur est survenue lors de l appel à la méthode {0}." uima-addons-2.3.1/BSFAnnotator/src/main/java/0000755000175000017500000000000011625126460020551 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/java/org/0000755000175000017500000000000011625126460021340 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/0000755000175000017500000000000011625126460022561 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/0000755000175000017500000000000011625126460023514 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/0000755000175000017500000000000011625126460025521 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/0000755000175000017500000000000011625126460026273 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootuima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/BSFAnnotatorConfigurationException.javauima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/BSFAnnotatorConfiguration0000644000175000017500000000507111625126460033251 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.bsf; import java.text.MessageFormat; import org.apache.uima.resource.ResourceInitializationException; /** * * */ public class BSFAnnotatorConfigurationException extends ResourceInitializationException { /** * */ private static final long serialVersionUID = 1L; /** * Creates a new exception with a the specified message. * * @param aMessageKey * an identifier that maps to the message for this exception. The message may contain * placeholders for arguments as defined by the * {@link MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if the message has no * arguments. */ public BSFAnnotatorConfigurationException(String aMessageKey, Object[] aArguments) { super(BSFAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments); } /** * Creates a new exception with the specified cause and a message from the * {@link #STANDARD_MESSAGE_CATALOG}. * * @param aMessageKey * an identifier that maps to the message for this exception. The message may contain * placeholders for arguments as defined by the * {@link MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if the message has no * arguments. * @param aCause * the original exception that caused this exception to be thrown, if any */ public BSFAnnotatorConfigurationException(String aMessageKey, Object[] aArguments, Throwable aCause) { super(BSFAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments, aCause); } } uima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/BSFAnnotator.java0000644000175000017500000002212611625126460031441 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.bsf; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import org.apache.bsf.BSFEngine; import org.apache.bsf.BSFException; import org.apache.bsf.BSFManager; import org.apache.bsf.util.IOUtils; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Logger; /** * This class enables the Java scripting of an Annotator using the Apache Bean * Scripting Framework. It has a mandatory SourceFile attribute * containing the script's source file to execute. *

*/ public class BSFAnnotator extends JCasAnnotator_ImplBase { public static final String MESSAGE_DIGEST = "org.apache.uima.annotator.bsf.BSFAnnotatorMessages"; public static final String PATH_SEPARATOR = System.getProperty("path.separator"); public static final String SCRIPT_SOURCE_FILE = "SourceFile"; private Logger logger; private BSFManager manager; private BSFEngine engine; String scriptLanguage; String scriptFileName; /** * Initializes the annotator by compiling the script. */ public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); // Initialize a BSF manager and do some 'cooking' to adapt the class loader manager = new BSFManager(); ClassLoader classLoader = this.getClass().getClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); manager.setClassLoader(classLoader); // Is a UIMAClassLoader if (classLoader instanceof URLClassLoader) { manager.setClassPath(classpathFromUrls(((URLClassLoader) classLoader).getURLs())); } Reader reader = null; scriptFileName = null; try { logger = aContext.getLogger(); // get UIMA datapath and tokenize it into its elements StringTokenizer tokenizer = new StringTokenizer(aContext .getDataPath(), PATH_SEPARATOR); List datapathElements = new ArrayList(); while (tokenizer.hasMoreTokens()) { // add datapath elements to the 'datapathElements' array list datapathElements.add(new File(tokenizer.nextToken())); } // Get config. parameter values scriptFileName = (String) aContext.getConfigParameterValue(SCRIPT_SOURCE_FILE); File scriptFile = new File(scriptFileName); if (!scriptFile.isAbsolute()) { // try to resolve the relative file name with classpath or // datapath scriptFile = resolveRelativeFilePath(scriptFileName, datapathElements); // if the current script file wasn't found, throw an exception if (scriptFile == null) { throw new BSFAnnotatorConfigurationException( "bsf_annotator_resource_not_found", new Object[] { scriptFileName }); } } reader = new FileReader(scriptFile); } catch (FileNotFoundException fnfe) { throw new BSFAnnotatorConfigurationException( "bsf_annotator_resource_not_found", new Object[] { scriptFileName }, fnfe); } try { scriptLanguage = BSFManager.getLangFromFilename(scriptFileName); engine = manager.loadScriptingEngine(scriptLanguage); } catch (BSFException bsfe) { Throwable cause = bsfe.getTargetException(); if (cause == null) cause = bsfe; throw new BSFAnnotatorConfigurationException( "bsf_annotator_language_not_supported", new Object[] { scriptLanguage }, cause); } // read and execute the script try { String script = IOUtils.getStringFromReader(reader); engine.exec(scriptFileName, 0, 0, script); } catch (IOException ioe) { throw new BSFAnnotatorInitializationException( "bsf_annotator_error_reading_script", new Object[] { scriptFileName }, ioe); } catch (BSFException bsfe) { Throwable cause = bsfe.getTargetException(); if (cause == null) cause = bsfe; throw new BSFAnnotatorInitializationException( "bsf_annotator_error_executing_script", new Object[] { scriptFileName }, cause); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { } } } // Call the initialize function implemented in the script String methodName = null; try { methodName = "initialize"; engine.call(null, methodName, new Object[] { aContext }); } catch (BSFException bsfe) { Throwable cause = bsfe.getTargetException(); if (cause == null) cause = bsfe; throw new BSFAnnotatorInitializationException( "bsf_annotator_error_calling_method", new Object[] { methodName }, cause); } } /** * Call the process function implemented in the script */ public void process(JCas jcas) throws AnalysisEngineProcessException { String methodName = null; try { methodName = "process"; engine.call(null, methodName, new Object[] { jcas }); } catch (BSFException bsfe) { Throwable cause = bsfe.getTargetException(); if (cause == null) cause = bsfe; throw new BSFAnnotatorProcessException( "bsf_annotator_error_calling_method", new Object[] { methodName }, cause); } } /** * @param fileName * @param datapathElements * @return */ private File resolveRelativeFilePath(String fileName, List datapathElements) { URL url; // try to use the class loader to load the file resource if ((url = this.getClass().getClassLoader().getResource(fileName)) != null) { URI uri; try { // handle urls with embedded blanks, coded as %20 // https://issues.apache.org/jira/browse/UIMA-1748 // https://issues.apache.org/jira/browse/UIMA-2097 uri = quote(url); } catch (URISyntaxException e) { uri = null; } if (uri != null) { return new File(uri); } } if (datapathElements == null || datapathElements.size() == 0) { return null; } // try to use the datapath to load the file resource for (File dataPathDir : datapathElements) { File testFile = new File(dataPathDir, fileName); if (testFile.exists()) { return testFile; } } return null; } /** * @param urls * @return */ private String classpathFromUrls(URL[] urls) { String classpath = null; for (int i = 0; i < urls.length; i++) { File filepath = new File(urls[i].getPath()); if (i == 0) classpath = filepath.getPath(); else classpath = classpath + File.pathSeparator + filepath.getPath(); } return classpath; } // Maintainer note: remove these methods once base sdk 2.3.2 is released, and switch // to using these methods from there /** * Create a URI from a string, with proper quoting. * Already quoted things in the input string are not re-quoted. * There are several cases: * String has no characters needing quoting * String has chars needing quoting, but no chars are currently quoted (e.g. %20) * String has quoted (e.g. %20) characters but no other chars needing quoting * String has quoted (e.g. %20) characters and chars needing quoting, not currently quoted * -- this case will throw an exception * @param s * @return URI with proper quoting * @throws URISyntaxException */ private static URI quote (String s) throws URISyntaxException { if (-1 == s.indexOf('%')) { // 3 argument constructor does any needed quoting of otherwise illegal chars // https://issues.apache.org/jira/browse/UIMA-2097 return new URI(null, s, null); } // assume s already has all otherwise illegal chars properly quoted return new URI(s); } /** * Create a URI from a URL, with proper quoting. * Already quoted things in the input string are not re-quoted. * @param u * @return URI with proper quoting * @throws URISyntaxException */ private static URI quote(URL u) throws URISyntaxException { return quote(u.toString()); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/BSFAnnotatorProcessException.javauima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/BSFAnnotatorProcessExcept0000644000175000017500000000561511625126460033235 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.bsf; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; /** * * */ public class BSFAnnotatorProcessException extends AnalysisEngineProcessException { /** * */ private static final long serialVersionUID = 1L; /** * Creates a new exception with a the specified message. * * @param aMessageKey * an identifier that maps to the message for this exception. The * message may contain placeholders for arguments as defined by the * {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if * the message has no arguments. */ public BSFAnnotatorProcessException(String aMessageKey, Object[] aArguments) { super(BSFAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments); } /** * Creates a new exception with the specified cause and a message from the * {@link #STANDARD_MESSAGE_CATALOG}. * * @param aMessageKey * an identifier that maps to the message for this exception. The * message may contain placeholders for arguments as defined by the * {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if * the message has no arguments. * @param aCause * the original exception that caused this exception to be thrown, * if any */ public BSFAnnotatorProcessException(String aMessageKey, Object[] aArguments, Throwable aCause) { super(BSFAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments, aCause); } /** * Creates a new exception with the specified cause and a null message. * * @param aCause * the original exception that caused this exception to be thrown, if any */ public BSFAnnotatorProcessException(Throwable aCause) { super(aCause); } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootuima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/BSFAnnotatorInitializationException.javauima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/BSFAnnotatorInitializatio0000644000175000017500000000511111625126460033246 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.bsf; import org.apache.uima.resource.ResourceInitializationException; /** * * */ public class BSFAnnotatorInitializationException extends ResourceInitializationException { /** * */ private static final long serialVersionUID = 1L; /** * Creates a new exception with a the specified message. * * @param aMessageKey * an identifier that maps to the message for this exception. The message may contain * placeholders for arguments as defined by the * {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if the message has no * arguments. */ public BSFAnnotatorInitializationException(String aMessageKey, Object[] aArguments) { super(BSFAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments); } /** * Creates a new exception with the specified cause and a message from the * {@link #STANDARD_MESSAGE_CATALOG}. * * @param aMessageKey * an identifier that maps to the message for this exception. The message may contain * placeholders for arguments as defined by the * {@link java.text.MessageFormat MessageFormat} class. * @param aArguments * The arguments to the message. null may be used if the message has no * arguments. * @param aCause * the original exception that caused this exception to be thrown, if any */ public BSFAnnotatorInitializationException(String aMessageKey, Object[] aArguments, Throwable aCause) { super(BSFAnnotator.MESSAGE_DIGEST, aMessageKey, aArguments, aCause); } } uima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/0000755000175000017500000000000011625126460027437 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/Nickname_Type.java0000644000175000017500000000744211625126460033037 0ustar drazzibdrazzib /* First created by JCasGen Tue Nov 06 10:21:22 CET 2007 */ package org.apache.uima.annotator.bsf.types; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; /** * Updated by JCasGen Tue Nov 06 10:21:22 CET 2007 * @generated */ public class Nickname_Type extends Firstname_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Nickname_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Nickname_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Nickname(addr, Nickname_Type.this); Nickname_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Nickname(addr, Nickname_Type.this); } }; /** @generated */ public final static int typeIndexID = Nickname.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.annotator.bsf.types.Nickname"); /** @generated */ final Feature casFeat_firstnames; /** @generated */ final int casFeatCode_firstnames; /** @generated */ public int getFirstnames(int addr) { if (featOkTst && casFeat_firstnames == null) jcas.throwFeatMissing("firstnames", "org.apache.uima.annotator.bsf.types.Nickname"); return ll_cas.ll_getRefValue(addr, casFeatCode_firstnames); } /** @generated */ public void setFirstnames(int addr, int v) { if (featOkTst && casFeat_firstnames == null) jcas.throwFeatMissing("firstnames", "org.apache.uima.annotator.bsf.types.Nickname"); ll_cas.ll_setRefValue(addr, casFeatCode_firstnames, v);} /** @generated */ public String getFirstnames(int addr, int i) { if (featOkTst && casFeat_firstnames == null) jcas.throwFeatMissing("firstnames", "org.apache.uima.annotator.bsf.types.Nickname"); if (lowLevelTypeChecks) return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_firstnames), i, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_firstnames), i); return ll_cas.ll_getStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_firstnames), i); } /** @generated */ public void setFirstnames(int addr, int i, String v) { if (featOkTst && casFeat_firstnames == null) jcas.throwFeatMissing("firstnames", "org.apache.uima.annotator.bsf.types.Nickname"); if (lowLevelTypeChecks) ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_firstnames), i, v, true); jcas.checkArrayBounds(ll_cas.ll_getRefValue(addr, casFeatCode_firstnames), i); ll_cas.ll_setStringArrayValue(ll_cas.ll_getRefValue(addr, casFeatCode_firstnames), i, v); } /** initialize variables to correspond with Cas Type and Features * @generated */ public Nickname_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_firstnames = jcas.getRequiredFeatureDE(casType, "firstnames", "uima.cas.StringArray", featOkTst); casFeatCode_firstnames = (null == casFeat_firstnames) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_firstnames).getCode(); } } uima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/Token_Type.java0000644000175000017500000000336611625126460032373 0ustar drazzibdrazzib /* First created by JCasGen Tue Nov 06 10:21:22 CET 2007 */ package org.apache.uima.annotator.bsf.types; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Tue Nov 06 10:21:22 CET 2007 * @generated */ public class Token_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Token_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Token_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Token(addr, Token_Type.this); Token_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Token(addr, Token_Type.this); } }; /** @generated */ public final static int typeIndexID = Token.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.annotator.bsf.types.Token"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Token_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/BSFExampleTypes.xml0000644000175000017500000000444311625126460033141 0ustar drazzibdrazzib BSF Example Types Type system used by the org.apache.uima.annotator.bsf package. Defines token, sentence, named entity. 1.0 TEMIS org.apache.uima.annotator.bsf.types.Token uima.tcas.Annotation org.apache.uima.annotator.bsf.types.Firstname uima.tcas.Annotation org.apache.uima.annotator.bsf.types.Nickname org.apache.uima.annotator.bsf.types.Firstname firstnames List of possible firstnames related to this nickname uima.cas.StringArray uima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/Firstname.java0000644000175000017500000000277711625126460032247 0ustar drazzibdrazzib /* First created by JCasGen Tue Nov 06 10:21:22 CET 2007 */ package org.apache.uima.annotator.bsf.types; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Updated by JCasGen Tue Nov 06 10:21:22 CET 2007 * XML source: C:/dev/uima/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/BSFExampleTypes.xml * @generated */ public class Firstname extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Firstname.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Firstname() {} /** Internal - constructor used by generator * @generated */ public Firstname(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Firstname(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Firstname(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/Firstname_Type.java0000644000175000017500000000344211625126460033236 0ustar drazzibdrazzib /* First created by JCasGen Tue Nov 06 10:21:22 CET 2007 */ package org.apache.uima.annotator.bsf.types; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Tue Nov 06 10:21:22 CET 2007 * @generated */ public class Firstname_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Firstname_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Firstname_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Firstname(addr, Firstname_Type.this); Firstname_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Firstname(addr, Firstname_Type.this); } }; /** @generated */ public final static int typeIndexID = Firstname.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.annotator.bsf.types.Firstname"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Firstname_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/Token.java0000644000175000017500000000274711625126460031374 0ustar drazzibdrazzib /* First created by JCasGen Tue Nov 06 10:21:21 CET 2007 */ package org.apache.uima.annotator.bsf.types; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Updated by JCasGen Tue Nov 06 10:21:22 CET 2007 * XML source: C:/dev/uima/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/BSFExampleTypes.xml * @generated */ public class Token extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Token.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Token() {} /** Internal - constructor used by generator * @generated */ public Token(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Token(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Token(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/Nickname.java0000644000175000017500000000741411625126460032035 0ustar drazzibdrazzib /* First created by JCasGen Tue Nov 06 10:21:22 CET 2007 */ package org.apache.uima.annotator.bsf.types; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.cas.StringArray; /** * Updated by JCasGen Tue Nov 06 10:21:22 CET 2007 * XML source: C:/dev/uima/BSFAnnotator/src/main/java/org/apache/uima/annotator/bsf/types/BSFExampleTypes.xml * @generated */ public class Nickname extends Firstname { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Nickname.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Nickname() {} /** Internal - constructor used by generator * @generated */ public Nickname(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Nickname(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Nickname(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: firstnames /** getter for firstnames - gets List of possible firstnames related to this nickname * @generated */ public StringArray getFirstnames() { if (Nickname_Type.featOkTst && ((Nickname_Type)jcasType).casFeat_firstnames == null) jcasType.jcas.throwFeatMissing("firstnames", "org.apache.uima.annotator.bsf.types.Nickname"); return (StringArray)(jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, ((Nickname_Type)jcasType).casFeatCode_firstnames)));} /** setter for firstnames - sets List of possible firstnames related to this nickname * @generated */ public void setFirstnames(StringArray v) { if (Nickname_Type.featOkTst && ((Nickname_Type)jcasType).casFeat_firstnames == null) jcasType.jcas.throwFeatMissing("firstnames", "org.apache.uima.annotator.bsf.types.Nickname"); jcasType.ll_cas.ll_setRefValue(addr, ((Nickname_Type)jcasType).casFeatCode_firstnames, jcasType.ll_cas.ll_getFSRef(v));} /** indexed getter for firstnames - gets an indexed value - List of possible firstnames related to this nickname * @generated */ public String getFirstnames(int i) { if (Nickname_Type.featOkTst && ((Nickname_Type)jcasType).casFeat_firstnames == null) jcasType.jcas.throwFeatMissing("firstnames", "org.apache.uima.annotator.bsf.types.Nickname"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((Nickname_Type)jcasType).casFeatCode_firstnames), i); return jcasType.ll_cas.ll_getStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((Nickname_Type)jcasType).casFeatCode_firstnames), i);} /** indexed setter for firstnames - sets an indexed value - List of possible firstnames related to this nickname * @generated */ public void setFirstnames(int i, String v) { if (Nickname_Type.featOkTst && ((Nickname_Type)jcasType).casFeat_firstnames == null) jcasType.jcas.throwFeatMissing("firstnames", "org.apache.uima.annotator.bsf.types.Nickname"); jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, ((Nickname_Type)jcasType).casFeatCode_firstnames), i); jcasType.ll_cas.ll_setStringArrayValue(jcasType.ll_cas.ll_getRefValue(addr, ((Nickname_Type)jcasType).casFeatCode_firstnames), i, v);} } uima-addons-2.3.1/BSFAnnotator/src/test/0000755000175000017500000000000011625126460017663 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/test/resources/0000755000175000017500000000000011625126460021675 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/test/resources/testdocRef.txt0000644000175000017500000000007411625126460024541 0ustar drazzibdrazzibToken(15,18): Joe Token(40,45): David Token(76,80): Dave uima-addons-2.3.1/BSFAnnotator/src/test/resources/testdoc.txt0000644000175000017500000000012311625126460024077 0ustar drazzibdrazzibHi! My name is Joe and you? My name is David but my friends use to call me Dave. uima-addons-2.3.1/BSFAnnotator/src/test/resources/BSFAnnotator.xml0000644000175000017500000000746211625126460024730 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.bsf.BSFAnnotator BSF Annotator Generic BSF Annotator. 1.0 TEMIS SourceFile BSF script to be loaded String false true Regexp Regular expression String false true SourceFile TEST.rb Regexp Dave|David|Bob|Tim|Joe org.apache.uima.annotator.bsf.types.Token uima.tcas.Annotation org.apache.uima.annotator.bsf.types.Firstname uima.tcas.Annotation org.apache.uima.annotator.bsf.types.Nickname org.apache.uima.annotator.bsf.types.Firstname firstnames List of possible firstnames related to this nickname uima.cas.StringArray x-unspecified true true false uima-addons-2.3.1/BSFAnnotator/src/test/resources/NICKNAMES.bsh0000644000175000017500000006452311625126460023715 0ustar drazzibdrazzib/* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /** * Example of beanshell script to be used as input for the * BSFAnnotator * @author Olivier Terrier * @version 1.0 */ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.regex.Pattern; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.StringArray; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.annotator.bsf.types.Firstname; import org.apache.uima.annotator.bsf.types.Nickname; import org.apache.uima.annotator.bsf.types.Token; /** * Initialisation of global variables */ String scriptName; HashMap nicknames; /** * Invokes this annotator's analysis logic. This annotator will access the * data in the JCas and add new data to the JCas. * * @param jcas * contains the document to be analyzed and may contain other * metadata about that document. * @param rs * a list of output types and features that this annotator should * produce. */ public void process(JCas jcas) throws AnalysisEngineProcessException { // iterates on the existing token that have been created by the previous // annotators ArrayList annots = new ArrayList(); ArrayList tokens = new ArrayList(); Iterator tokenIt = jcas.getAnnotationIndex(Token.type).iterator(); while (tokenIt.hasNext()) { Token token = (Token)tokenIt.next(); tokens.add(token); String name = token.getCoveredText(); if (nicknames.containsKey(name)) { ArrayList names = (ArrayList)nicknames.get(name); // is it a real firstname ? if (names.isEmpty()) { Firstname annot = new Firstname(jcas, token.getStart(), token.getEnd()); annots.add(annot); } else { // it's a nickname Nickname annot = new Nickname(jcas, token.getStart(), token.getEnd()); StringArray strarray = new StringArray(jcas, names.size()); for (int i=0; i < names.size(); i++) { strarray.set(i, (String)names.get(i)); } annot.setFirstnames(strarray); annots.add(annot); } } } for (Iterator it = annots.iterator(); it.hasNext();) { ((Annotation)it.next()).addToIndexes(); } for (Iterator it = tokens.iterator(); it.hasNext();) { ((Annotation)it.next()).removeFromIndexes(); } } /** * Performs any startup tasks required by this annotator. The Analysis * Engine calls this method only once, just after an Annotator has been * instantiated. * * @param aContext * Provides access to external resources that may be used by this * annotator. This includes configuration parameters, logging and * instrumentation services, and access to external analysis * resources. */ public void initialize(UimaContext aContext) throws ResourceInitializationException { // List of Firstnames => Nickname String[] name_list = { "Aaron,Erin", "Aaron,Ron", "Aaron,Ronnie", "Abel,Ab", "Abel,Abe", "Abel,Eb", "Abel,Ebbie", "Abiel,Ab", "Abigail,Abby", "Abigail,Gail", "Abigail,Nabby", "Abner,Ab", "Abraham,Ab", "Abraham,Abe", "Abram,Ab", "Adaline,Ada", "Adaline,Addy", "Adaline,Delia", "Adaline,Dell", "Adaline,Lena", "Adelaide,Addy", "Adelaide,Adele", "Adelaide,Dell", "Adelaide,Della", "Adelaide,Heidi", "Adeline,Ada", "Adeline,Addy", "Adeline,Delia", "Adeline,Dell", "Adeline,Lena", "Adelphia,Addy", "Adelphia,Adele", "Adelphia,Dell", "Adelphia,Delphia", "Adelphia,Philly", "Agatha,Aggy", "Agnes,Aggy", "Agnes,Inez", "Agnes,Nessa", "Aileen,Allie", "Aileen,Lena", "Alan,Al", "Albert,Al", "Albert,Bert", "Alberta,Allie", "Alberta,Bert", "Alberta,Bertie", "Aldo,Al", "Aldrich,Rich", "Aldrich,Riche", "Alexander,Al", "Alexander,Alex", "Alexander,Sandy", "Alexandra,Alex", "Alexandra,Alla", "Alexandra,Sandra", "Alexandra,Sandy", "Alfonse,Al", "Alfred,Al", "Alfred,Fred", "Alfred,Freddy", "Alfreda,Alfy", "Alfreda,Freda", "Alfreda,Freddy", "Alfreda,Frieda", "Alice,Allie", "Alice,Elsie", "Alice,Lisa", "Alicia,Allie", "Alicia,Elsie", "Alicia,Lisa", "Allan,Al", "Allen,Al", "Allisandra,Allie", "Almena,Allie", "Almena,Mena", "Alonzo,Al", "Alonzo,Lon", "Alonzo,Lonzo", "Amanda,Manda", "Amanda,Mandy", "Amelia,Amy", "Amelia,Emily", "Amelia,Mel", "Amelia,Millie", "Anderson,Andy", "Andrew,Andy", "Andrew,Drew", "Ann,Annie", "Ann,Nan", "Ann,Nana", "Ann,Nancy", "Ann,Nanny", "Anne,Annie", "Anne,Nan", "Anne,Nana", "Anne,Nancy", "Anne,Nanny", "Anthony,Tony", "Antoinette,Ann", "Antoinette,Netta", "Antoinette,Tony", "Antonia,Ann", "Antonia,Netta", "Antonia,Tony", "Arabella,Ara", "Arabella,Arry", "Arabella,Bella", "Arabella,Belle", "Arabelle,Ara", "Arabelle,Arry", "Arabelle,Bella", "Arabelle,Belle", "Archibald,Archie", "Arlene,Arly", "Arlene,Lena", "Armena,Arry", "Armena,Mena", "Arthur,Art", "Asahel,Asa", "Asaph,Asa", "Asenath,Assene", "Asenath,Natty", "Asenath,Sene", "August,Gus", "Augusta,Aggy", "Augusta,Gatsy", "Augusta,Gussie", "Augusta,Tina", "Augustina,Aggy", "Augustina,Gatsy", "Augustina,Gussie", "Augustina,Tina", "Augustine,August", "Augustine,Austin", "Augustine,Gus", "Augustus,August", "Augustus,Austin", "Augustus,Gus", "Azariah,Aze", "Azariah,Riah", "Barbara,Bab", "Barbara,Babs", "Barbara,Barby", "Barbara,Bobbie", "Barnabas,Barney", "Bartholomew,Bart", "Bartholomew,Bartel", "Bartholomew,Bat", "Bartholomew,Mees", "Bartholomew,Meus", "Beatrice,Bea", "Beatrice,Trisha", "Beatrice,Trix", "Beatrice,Trixie", "Belinda,Belle", "Belinda,Linda", "Benedict,Ben", "Benedict,Bennie", "Benjamin,Ben", "Benjamin,Benjy", "Benjamin,Bennie", "Benjamin,Jamie", "Bernard,Barney", "Bernard,Berney", "Bernard,Bernie", "Bertha,Bert", "Bertha,Bertie", "Bertha,Birdie", "Bill,Fred", "Billy,Fred", "Bradford,Brad", "Bradford,Ford", "Bridget,Biddie", "Bridget,Biddy", "Bridget,Bridgie", "Bridget,Bridie", "Broderick,Brady", "Broderick,Brody", "Broderick,Rick", "Broderick,Ricky", "Calvin,Cal", "Calvin,Vin", "Calvin,Vinny", "Cameron,Cam", "Cameron,Ron", "Cameron,Ronny", "Camille,Cammie", "Camille,Millie", "Carol,Carrie", "Carol,Cassie", "Carol,Lynn", "CarolAnn,Carol", "CarolAnn,Carole", "Caroline,Carol", "Caroline,Carole", "Caroline,Carrie", "Caroline,Cassie", "Caroline,Lynn", "Carolyn,Carrie", "Carolyn,Cassie", "Carolyn,Lynn", "Casey,K.C.", "Cassandra,Cassie", "Cassandra,Sandra", "Cassandra,Sandy", "Catherine,Cassie", "Catherine,Cathy", "Catherine,Kathy", "Catherine,Katy", "Catherine,Kay", "Catherine,Kit", "Catherine,Kittie", "Catherine,Lena", "Catherine,Trina", "Cathleen,Cassie", "Cathleen,Cathy", "Cathleen,Kathy", "Cathleen,Katy", "Cathleen,Kay", "Cathleen,Kit", "Cathleen,Kittie", "Cathleen,Lena", "Cathleen,Trina", "Cecilia,Celia", "Cecilia,Cissy", "Cedric,Ced", "Cedric,Rick", "Cedric,Ricky", "Charles,Carl", "Charles,Charlie", "Charles,Chick", "Charles,Chuck", "Charlotte,Char", "Charlotte,Lotta", "Charlotte,Lottie", "Charlotte,Sherry", "Chauncey,Chan", "Chester,Chet", "Christa,Chris", "Christian,Chris", "Christian,Kit", "Christiana,Ann", "Christiana,Chris", "Christiana,Christy", "Christiana,Crissy", "Christiana,Kris", "Christiana,Kristy", "Christiana,Tina", "Christina,Chris", "Christina,Christy", "Christina,Crissy", "Christina,Kris", "Christina,Kristy", "Christina,Tina", "Christine,Chris", "Christine,Chrissy", "Christine,Crissy", "Christine,Kris", "Christine,Kristy", "Christine,Tina", "Christopher,Chris", "Christopher,Kit", "Clarence,Clair", "Clarence,Clare", "Clarinda,Clara", "Clarissa,Cissy", "Clarissa,Clara", "Clement,Clem", "Clifford,Cliff", "Clifford,Ford", "Clifton,Cliff", "Clifton,Tony", "Columbus,Clum", "Conrad,Con", "Conrad,Conny", "Constance,Connie", "Cordelia,Cordy", "Cordelia,Delia", "Cornelia,Cornie", "Cornelia,Corny", "Cornelia,Nelia", "Cornelia,Nelle", "Cornelia,Nelly", "Cornelius,Con", "Cornelius,Conny", "Cornelius,Corny", "Cornelius,Niel", "Courtney,Court", "Courtney,Curt", "Curtis,Curt", "Cynthia,Cindy", "Cynthia,Cintha", "Cyrenius,Cene", "Cyrenius,Cy", "Cyrenius,Renius", "Cyrenius,Serene", "Cyrenius,Swene", "Dal,Dahl", "Dalton,Dahl", "Daniel,Dan", "Daniel,Danny", "Darlene,Darry", "Darlene,Lena", "David,Dave", "David,Davey", "David,Day", "Debora,Deb", "Debora,Debbie", "Debora,Debby", "Deborah,Deb", "Deborah,Debbie", "Deborah,Debby", "Debra,Deb", "Debra,Debbie", "Delbert,Bert", "Delbert,Del", "Deliverance,Della", "Deliverance,Delly", "Deliverance,Dilly", "Delores,Dee", "Delores,Dell", "Delores,Della", "Delores,Lola", "Delores,Lolly", "Dennis,Denny", "Dennison,Denny", "Derrick,Eric", "Derrick,Rick", "Derrick,Ricky", "Dicey,Dicie", "Domenic,Dom", "Dominic,Dom", "Donald,Don", "Donald,Donnie", "Donald,Donny", "Donald,Dony", "Dorcus,Darkey", "Dorothy,Dolly", "Dorothy,Dortha", "Dorothy,Dot", "Dorothy,Dotty", "Ebenezer,Eb", "Ebenezer,Ebbie", "Ebenezer,Eben", "Edgar,Ed", "Edgar,Eddie", "Edgar,Eddy", "Edith,Edie", "Edith,Edye", "Edmond,Ed", "Edmond,Eddie", "Edmond,Eddy", "Edmund,Ed", "Edmund,Eddie", "Edmund,Eddy", "Edmund,Ned", "Edmund,Ted", "Eduardo,Ed", "Eduardo,Eddie", "Eduardo,Eddy", "Edward,Ed", "Edward,Eddie", "Edward,Eddy", "Edward,Ned", "Edward,Ted", "Edward,Teddy", "Edwin,Ed", "Edwin,Eddie", "Edwin,Eddy", "Edwin,Ned", "Edwin,Win", "Edyth,Edie", "Edyth,Edye", "Edythe,Edie", "Edythe,Edye", "Elbert,Albert", "Eleanor,Elaine", "Eleanor,Ellen", "Eleanor,Ellie", "Eleanor,Lanna", "Eleanor,Lenora", "Eleanor,Nelly", "Eleanor,Nora", "Eleazer,Lazar", "Elias,Eli", "Elias,Lee", "Elias,Lias", "Elijah,Eli", "Elijah,Lige", "Eliphalet,Left", "Elisha,Eli", "Elisha,Lish", "Elizabeth,Bess", "Elizabeth,Bessie", "Elizabeth,Beth", "Elizabeth,Betsy", "Elizabeth,Betty", "Elizabeth,Eliza", "Elizabeth,Lib", "Elizabeth,Libby", "Elizabeth,Lisa", "Elizabeth,Liz", "Elizabeth,Liza", "Elizabeth,Lizzie", "Ellswood,Elsey", "Elmira,Ellie", "Elmira,Elly", "Elmira,Mira", "Elouise,Louise", "Elsie,Elsey", "Elswood,Elsey", "Elwood,Woody", "Elze,Elsey", "Emanuel,Manny", "Emanuel,Manuel", "Emeline,Em", "Emeline,Emily", "Emeline,Emma", "Emeline,Emmy", "Emeline,Milly", "Emily,Emma", "Emily,Emmy", "Emily,Millie", "Epaphroditius,Dite", "Epaphroditius,Ditus", "Epaphroditius,Dyce", "Epaphroditius,Dyche", "Epaphroditius,Eppa", "Ephraim,Eph", "Eric,Rick", "Eric,Ricky", "Ernest,Ernie", "Estella,Essy", "Estella,Stella", "Estelle,Essy", "Estelle,Stella", "Eugene,Gene", "Evaline,Eva", "Evaline,Eve", "Evaline,Lena", "Ezekiel,Ez", "Ezekiel,Zeke", "Ezra,Ez", "Faith,Fay", "Feltie,Felty", "Ferdinand,Ferdie", "Ferdinand,Fred", "Ferdinand,Freddie", "Ferdinand,Freddy", "Fidelia,Delia", "Florence,Flo", "Florence,Flora", "Florence,Flossy", "Frances,Cissy", "Frances,Fanny", "Frances,Fran", "Frances,Francie", "Frances,Frankie", "Frances,Frannie", "Frances,Franniey", "Frances,Sis", "Francine,Fran", "Francine,Francie", "Francine,Frannie", "Francine,Franniey", "Francis,Fran", "Francis,Frank", "Francis,Frankie", "Franklin,Fran", "Franklin,Frank", "Franklind,Frank", "Frederick,Fred", "Frederick,Freddie", "Frederick,Freddy", "Frederick,Fritz", "Fredericka,Freda", "Fredericka,Freddy", "Fredericka,Frieda", "Fredericka,Ricka", "Frieda,Fred", "Frieda,Freddie", "Frieda,Freddy", "Gabriel,Gabby", "Gabriel,Gabe", "Gabriella,Ella", "Gabriella,Gabby", "Gabrielle,Ella", "Gabrielle,Gabby", "Genevieve,Eve", "Genevieve,Jean", "Genevieve,Jenny", "Geoffrey,Geoff", "Geoffrey,Jeff", "Gerald,Gerry", "Gerald,Jerry", "Geraldine,Dina", "Geraldine,Gerrie", "Geraldine,Gerry", "Geraldine,Jerry", "Gertrude,Gert", "Gertrude,Gertie", "Gertrude,Trudy", "Gilbert,Bert", "Gilbert,Gil", "Gilbert,Wilber", "Gwendolyn,Gwen", "Gwendolyn,Wendy", "Hannah,Anna", "Hannah,Nan", "Hannah,Nanny", "Harold,Hal", "Harold,Harry", "Harriet,Hattie", "Helen,Ella", "Helen,Ellen", "Helen,Ellie", "Helen,Lena", "Helene,Ella", "Helene,Ellen", "Helene,Ellie", "Helene,Lena", "Heloise,Eloise", "Heloise,Elouise", "Heloise,Lois", "Henrietta,Etta", "Henrietta,Etty", "Henrietta,Hank", "Henrietta,Nettie", "Henrietta,Retta", "Henry,Hal", "Henry,Hank", "Henry,Harry", "Hephsibah,Hipsie", "Hepsibah,Hipsie", "Herbert,Bert", "Herbert,Herb", "Hermione,Hermie", "Hester,Esther", "Hester,Hessy", "Hester,Hetty", "Hezekiah,Hez", "Hezekiah,Hy", "Hezekiah,Kiah", "Hiram,Hy", "Hopkins,Hop", "Hopkins,Hopp", "Horace,Horry", "Hubert,Bert", "Hubert,Hub", "Hubert,Hugh", "Ignatius,Iggy", "Ignatius,Nace", "Ignatius,Nate", "Ignatius,Natius", "Irene,Rena", "Irving,Irv", "Isaac,Ike", "Isaac,Zeke", "Isabel,Bell", "Isabel,Bella", "Isabel,Belle", "Isabel,Ib", "Isabel,Issy", "Isabel,Nib", "Isabel,Nibby", "Isabel,Tibbie", "Isabella,Bella", "Isabella,Belle", "Isabella,Ib", "Isabella,Issy", "Isabella,Nib", "Isabella,Nibby", "Isabella,Tibbie", "Isabelle,Bella", "Isabelle,Belle", "Isabelle,Ib", "Isabelle,Issy", "Isabelle,Nib", "Isabelle,Nibby", "Isabelle,Tibbie", "Isadora,Dora", "Isadora,Issy", "Isidore,Izzy", "Jacob,Jaap", "Jacob,Jake", "Jacob,Jay", "Jacobus,Jacob", "James,Jamie", "James,Jem", "James,Jim", "James,Jimmie", "James,Jimmy", "Jane,Janie", "Jane,Jean", "Jane,Jennie", "Jane,Jessie", "Janet,Jan", "Janet,Jessie", "Janice,Jan", "Jean,Jane", "Jean,Jeannie", "Jeanette,Janet", "Jeanette,Jean", "Jeanette,Jessie", "Jeanette,Nettie", "Jeanne,Jane", "Jeanne,Jeannie", "Jedidiah,Jed", "Jefferson,Jeff", "Jefferson,Sonny", "Jeffrey,Geoff", "Jeffrey,Jeff", "Jehiel,Hiel", "Jemima,Mima", "Jennifer,Jennie", "Jeremiah,Jereme", "Jeremiah,Jerry", "Jessica,Jessie", "Joan,Jo", "Joan,Nonie", "Joann,Jo", "Joanna,Hannah", "Joanna,Jo", "Joanna,Joan", "Joanna,Jody", "Joanne,Jo", "Johanna,Jo", "Johannah,Hannah", "Johannah,Joan", "Johannah,Jody", "Johannah,Nonie", "John,Jack", "John,Jock", "John,Johnny", "Jon,John", "Jon,Nathan", "Jonathan,John", "Jonathan,Nathan", "Joseph,Jody", "Joseph,Joe", "Joseph,Joey", "Joseph,Jos", "Josephine,Fina", "Josephine,Jo", "Josephine,Jody", "Josephine,Joey", "Josephine,Josey", "Joshua,Jos", "Joshua,Josh", "Josiah,Jos", "Joyce,Joy", "Juanita,Nettie", "Juanita,Nita", "Judson,Jud", "Judson,Sonny", "Julia,Jill", "Julia,Julie", "Julian,Jule", "Julias,Jule", "Junior,JR", "Junior,June", "Junior,Junie", "Kasey,K.C.", "Katelin,Kate", "Katelin,Kay", "Katelin,Kaye", "Katelyn,Kate", "Katelyn,Kay", "Katelyn,Kaye", "Katherine,Cassie", "Katherine,Cathy", "Katherine,Kate", "Katherine,Kathy", "Katherine,Katy", "Katherine,Kay", "Katherine,Kaye", "Katherine,Kit", "Katherine,Kittie", "Katherine,Lena", "Katherine,Trina", "Kathleen,Cassie", "Kathleen,Cathy", "Kathleen,Kathy", "Kathleen,Katy", "Kathleen,Kay", "Kathleen,Kit", "Kathleen,Kittie", "Kathleen,Lena", "Kathleen,Trina", "Kathryn,Kathy", "Kendall,Ken", "Kendall,Kenny", "Kenneth,Ken", "Kenneth,Kendrick", "Kenneth,Kenny", "Kent,Ken", "Kent,Kendrick", "Kent,Kenny", "Keziah,Kizza", "Keziah,Kizzie", "Kimberley,Kim", "Kimberly,Kim", "Kingsley,King", "Kingston,King", "Kristen,Chris", "Kristin,Chris", "Kristine,Chris", "Kristine,Christy", "Kristine,Crissy", "Kristine,Kris", "Kristine,Kristy", "Kristine,Tina", "Kristy,Chris", "Lafayette,Fate", "Lafayette,Laffie", "Lamont,Monty", "Laurence,Larry", "Laurence,Lon", "Laurence,Lonny", "Laurence,Lorne", "Laurence,Lorry", "Lavina,Ina", "Lavina,Vina", "Lavina,Viney", "Lavinia,Ina", "Lavinia,Vina", "Lavinia,Viney", "Lawrence,Larry", "Lawrence,Lon", "Lawrence,Lonny", "Lawrence,Lorne", "Lawrence,Lorry", "LeRoy,L.R.", "LeRoy,Lee", "LeRoy,Roy", "Lemuel,Lem", "Lenora,Lee", "Lenora,Nora", "Leonard,Len", "Leonard,Lenny", "Leonard,Leo", "Leonard,Leon", "Leonard,Lineau", "Leslie,Les", "Lester,Les", "Letitia,Lettice", "Letitia,Lettie", "Letitia,Tish", "Letitia,Titia", "Levi,Lee", "Lidia,Lyddy", "Lillah,Lil", "Lillah,Lilly", "Lillah,Lily", "Lillah,Lolly", "Lillian,Lil", "Lillian,Lilly", "Lillian,Lolly", "Lincoln,Link", "Linda,Lindy", "Linda,Lynn", "Lisa,Alice", "Lisa,Melissa", "Lois,Louise", "Lorenzo,Loren", "Loretta,Etta", "Loretta,Lorrie", "Loretta,Retta", "Lorraine,Lorrie", "Louisa,Eliza", "Louisa,Lois", "Louisa,Lou", "Louise,Eliza", "Louise,Lois", "Louise,Lou", "Lucas,Luke", "Lucias,Luke", "Lucille,Cille", "Lucille,Lou", "Lucille,Lu", "Lucille,Lucy", "Lucinda,Cindy", "Lucinda,Lou", "Lucinda,Lu", "Lucinda,Lucy", "Luella,Ella", "Luella,Lu", "Luella,Lula", "Luther,Luke", "Lydia,Lyddy", "Lyndon,Lindy", "Lyndon,Lynn", "Madeline,Lena", "Madeline,Maddy", "Madeline,Madge", "Madeline,Magda", "Madeline,Maggie", "Magdelina,Lena", "Magdelina,Madge", "Magdelina,Magda", "Mahala,Hallie", "Marcus,Mark", "Margaret,Daisy", "Margaret,Gretta", "Margaret,Madge", "Margaret,Maggie", "Margaret,Maggy", "Margaret,Marge", "Margaret,Margery", "Margaret,Margie", "Margaret,Margy", "Margaret,Meg", "Margaret,Midge", "Margaret,Peg", "Margaret,Peggy", "Margaret,Rita", "Margaretta,Daisy", "Margaretta,Gretta", "Margaretta,Madge", "Margaretta,Maggie", "Margaretta,Marge", "Margaretta,Margery", "Margaretta,Margie", "Margaretta,Meg", "Margaretta,Midge", "Margaretta,Peg", "Margaretta,Peggy", "Margaretta,Rita", "Marjorie,Margie", "Marjorie,Margy", "Martha,Marty", "Martha,Mat", "Martha,Mattie", "Martha,Patsy", "Martha,Patty", "Martin,Marty", "Martina,Tina", "Marvin,Marv", "Mary,Mae", "Mary,Mamie", "Mary,Mitzi", "Mary,Molly", "Mary,Polly", "Matilda,Matty", "Matilda,Maud", "Matilda,Tilly", "Matthew,Matt", "Matthew,Mattie", "Matthew,Matty", "Matthew,Thias", "Matthew,Thys", "Matthias,Matt", "Matthias,Thias", "Matthias,Thys", "Maurice,Morey", "Mehitabel,Hetty", "Mehitabel,Hitty", "Mehitabel,Mabel", "Mehitabel,Mitty", "Melinda,Linda", "Melinda,Lindy", "Melinda,Lynn", "Melinda,Mel", "Melinda,Mindy", "Melissa,Lisa", "Melissa,Lissa", "Melissa,Mel", "Melissa,Milly", "Melissa,Missy", "Mervyn,Merv", "Michael,Micah", "Michael,Mick", "Michael,Micky", "Michael,Mike", "Michelle,Mickey", "Mildred,Milly", "Millicent,Milly", "Millicent,Missy", "Minerva,Minnie", "Miranda,Mandy", "Miranda,Mira", "Miranda,Randy", "Miriam,Mimi", "Miriam,Mitzi", "Mitchell,Mitch", "Montgomery,Gum", "Montgomery,Monty", "Morris,Morey", "Nancy,Ann", "Nancy,Nan", "Napoleon,Leon", "Napoleon,Nap", "Napoleon,Nappy", "Natalie,Natty", "Natalie,Nettie", "Nathan,Nat", "Nathan,Nate", "Nathaniel,Nat", "Nathaniel,Nate", "Nathaniel,Nathan", "Nathaniel,Natty", "Nathaniel,Than", "Nicholas,Claas", "Nicholas,Claes", "Nicholas,Nick", "Norbert,Bert", "Norbert,Norby", "Obadiah,Diah", "Obadiah,Dyer", "Obadiah,Obed", "Obadiah,Obie", "Olive,Livia", "Olive,Nollie", "Olive,Ollie", "Oliver,Ollie", "Olivia,Livia", "Olivia,Nollie", "Olivia,Ollie", "Oswald,Ossy", "Oswald,Ozzy", "Oswald,Waldo", "Pamela,Pam", "Parmelia,Amelia", "Parmelia,Melia", "Parmelia,Milly", "Patience,Pat", "Patience,Patty", "Patricia,Pat", "Patricia,Patsy", "Patricia,Patty", "Patricia,Tricia", "Patrick,Paddy", "Patrick,Pat", "Patrick,Pate", "Patrick,Patsy", "Patrick,Peter", "Paula,Lina", "Paula,Polly", "Paulina,Lina", "Paulina,Polly", "Pelegrine,Perry", "Penelope,Penny", "Percival,Percy", "Peter,Pate", "Peter,Pete", "Philetus,Leet", "Philetus,Phil", "Philinda,Linda", "Philinda,Lindy", "Philinda,Lynn", "Philip,Phil", "Phillip,Phil", "Prescott,Pres", "Prescott,Scott", "Prescott,Scotty", "Priscilla,Cilla", "Priscilla,Cissy", "Priscilla,Prissy", "Prudence,Prudy", "Prudence,Prue", "Rachel,Shelly", "Rafaela,Rafa", "Randolph,Dolph", "Randolph,Randy", "Raphael,Ralph", "Raymond,Ray", "Rebecca,Becca", "Rebecca,Beck", "Rebecca,Becky", "Rebecca,Reba", "Regina,Gina", "Regina,Reggie", "Reginald,Naldo", "Reginald,Reg", "Reginald,Reggie", "Reginald,Renny", "Relief,Leafa", "Reuben,Rube", "Ricardo,Rick", "Ricardo,Ricky", "Richard,Dick", "Richard,Dickie", "Richard,Dickon", "Richard,Dicky", "Richard,Rich", "Richard,Rick", "Richard,Ricky", "Robert,Bob", "Robert,Bobby", "Robert,Dob", "Robert,Dobbin", "Robert,Hob", "Robert,Hobkin", "Robert,Rob", "Roberta,Bert", "Roberta,Bertie", "Roberta,Birdie", "Roberta,Bobbie", "Roberta,Robbie", "Rodger,Bobby", "Rodger,Hodge", "Rodger,Robby", "Rodger,Robin", "Rodger,Rod", "Rodger,Roge", "Rodger,Rupert", "Roger,Bobby", "Roger,Hodge", "Roger,Robby", "Roger,Robin", "Roger,Rod", "Roger,Roge", "Roger,Rupert", "Roland,Lanny", "Roland,Orlando", "Roland,Rollo", "Roland,Rolly", "Ronald,Naldo", "Ronald,Ron", "Ronald,Ronny", "Rosabel,Belle", "Rosabel,Rosa", "Rosabel,Rose", "Rosabel,Roz", "Rosabella,Belle", "Rosabella,Rosa", "Rosabella,Rose", "Rosabella,Roz", "Rosalinda,Linda", "Rosalinda,Rosa", "Rosalinda,Rose", "Rosalinda,Roz", "Rosalyn,Linda", "Rosalyn,Rosa", "Rosalyn,Rose", "Rosalyn,Roz", "Roseann,Ann", "Roseann,Rose", "Roseann,Rosie", "Roseann,Roz", "Roseanna,Ann", "Roseanna,Rose", "Roseanna,Rosie", "Roseanna,Roz", "Roseanne,Ann", "Roxanna,Ann", "Roxanna,Rose", "Roxanna,Roxie", "Roxanne,Ann", "Roxanne,Rose", "Roxanne,Roxie", "Rudolph,Dolph", "Rudolph,Olph", "Rudolph,Rolf", "Rudolph,Rudy", "Rudolphus,Dolph", "Rudolphus,Olph", "Rudolphus,Rolf", "Rudolphus,Rudy", "Russell,Russ", "Russell,Rusty", "Sabrina,Brina", "Samuel,Sam", "Samuel,Sammy", "Sandra,Cassandra", "Sandra,Sandy", "Sarah,Sadie", "Sarah,Sally", "Serena,Rena", "Seymour,Morey", "Seymour,See", "Shelton,Shel", "Shelton,Shelly", "Shelton,Tony", "Sheridan,Dan", "Sheridan,Danny", "Sheridan,Sher", "Shirley,Lee", "Shirley,Sherry", "Shirley,Shirl", "Sidney,Sid", "Sidney,Syd", "Silas,Si", "Simeon,Si", "Simeon,Sion", "Simon,Si", "Simon,Sion", "Smith,Smitty", "Solomon,Sal", "Solomon,Salmon", "Solomon,Saul", "Solomon,Sol", "Solomon,Solly", "Solomon,Zolly", "Sophia,Sophie", "Stephan,Steve", "Stephen,Steph", "Stephen,Steve", "Steven,Steph", "Steven,Steve", "Stuart,Stu", "Submit,Mitty", "Sullivan,Sully", "Sullivan,Van", "Susan,Hannah", "Susan,Sue", "Susan,Sukey", "Susan,Susie", "Susan,Suzie", "Susannah,Hannah", "Susannah,Sue", "Susannah,Sukey", "Susannah,Susie", "Sylvester,Si", "Sylvester,Sly", "Sylvester,Sy", "Sylvester,Syl", "Sylvester,Vessie", "Sylvester,Vester", "Sylvester,Vet", "Tabitha,Tabby", "Terence,Terry", "Teresa,Terry", "Thaddeus,Thad", "Theodore,Ted", "Theodore,Teddy", "Theodore,Theo", "Theresa,Terry", "Theresa,Tess", "Theresa,Tessa", "Theresa,Tessie", "Theresa,Thirza", "Theresa,Thursa", "Theresa,Tracy", "Thom,Tom", "Thom,Tommy", "Thomas,Thom", "Thomas,Tom", "Thomas,Tommy", "Timothy,Tim", "Timothy,Timmy", "Tobias,Bias", "Tobias,Toby", "Tryphena,Phena", "Uriah,Riah", "Valentine,Felty", "Valeri,Val", "Valerie,Val", "Vanessa,Essa", "Vanessa,Nessa", "Vanessa,Vanna", "Veronica,Franky", "Veronica,Frony", "Veronica,Ron", "Veronica,Ronie", "Veronica,Ronna", "Veronica,Ronnie", "Veronica,Vonnie", "Victor,Vic", "Victoria,Torie", "Victoria,Tory", "Victoria,Vic", "Victoria,Vicki", "Victoria,Vicky", "Vincent,Vic", "Vincent,Vin", "Vincent,Vince", "Vincent,Vinnie", "Vincent,Vinny", "Vincenzo,Vic", "Vincenzo,Vin", "Vincenzo,Vinnie", "Vincenzo,Vinny", "Vinson,Vinny", "Virginia,Ginger", "Virginia,Ginny", "Virginia,Jane", "Virginia,Jennie", "Virginia,Virgy", "Wallace,Wally", "Walter,Wally", "Walter,Walt", "Washington,Wash", "Wilber,Bert", "Wilber,Will", "Wilbur,Willie", "Wilbur,Willy", "Wilfred,Fred", "Wilfred,Will", "Wilfred,Willie", "Wilhelmina,Mina", "Wilhelmina,Minnie", "Wilhelmina,Willie", "Wilhelmina,Wilma", "Will,Fred", "William,Bela", "William,Bell", "William,Bill", "William,Billy", "William,Will", "William,Willie", "William,Willy", "Willie,Fred", "Wilson,Will", "Wilson,Willie", "Wilson,Willy", "Winfield,Field", "Winfield,Win", "Winfield,Winny", "Winifred,Freddie", "Winifred,Winnet", "Winifred,Winnie", "Winnifred,Fred", "Winnifred,Freddie", "Winnifred,Freddy", "Winnifred,Winnie", "Winnifred,Winny", "Woodrow,Drew", "Woodrow,Wood", "Woodrow,Woody", "Yvonne,Vonna", "Zachariah,Zach", "Zachariah,Zachy", "Zachariah,Zeke", "Zebedee,Zeb", "Zedediah,Diah", "Zedediah,Dyer", "Zedediah,Zed", "Zephaniah,Zeph" }; String source = (String) aContext.getConfigParameterValue("SourceFile"); nicknames = new HashMap(); ArrayList nicks = null; for (int i=0; i < name_list.length; i++) { String name2nick = name_list[i]; String[] names = name2nick.split(","); if (!nicknames.containsKey(names[0])) { nicknames.put(names[0], new ArrayList()); } if (!nicknames.containsKey(names[1])) { nicknames.put(names[1], new ArrayList()); } ((List)(nicknames.get(names[1]))).add(names[0]); } } uima-addons-2.3.1/BSFAnnotator/src/test/resources/NicknamesRef.txt0000644000175000017500000000200711625126460025002 0ustar drazzibdrazzibFirstname(341,346): Smith Nickname(670,674): Jane Nickname(865,868): Jim Firstname(874,879): James Nickname(881,885): Jack Nickname(890,894): John Nickname(896,899): Ted Firstname(904,912): Theodore Nickname(917,922): Betty Firstname(927,936): Elizabeth Firstname(1148,1155): William Nickname(1178,1182): Will Nickname(1203,1209): Willie Nickname(1299,1303): Jack Nickname(1328,1332): John Nickname(1614,1619): Peggy Firstname(1620,1628): Margaret Nickname(1632,1637): Polly Firstname(1638,1642): Mary Nickname(1646,1651): Billy Firstname(1652,1659): William Firstname(1870,1878): Margaret Firstname(1906,1912): Teresa Nickname(1916,1921): Tessa Firstname(1926,1935): Henrietta Nickname(1939,1944): Hetty Nickname(2010,2016): Maggie Firstname(2022,2030): Margaret Nickname(2032,2035): Kit Firstname(2041,2052): Christopher Nickname(2054,2059): Biddy Firstname(2065,2072): Bridget Nickname(2074,2079): Fanny Firstname(2085,2092): Frances Nickname(2098,2104): Hattie Firstname(2110,2117): Harriet uima-addons-2.3.1/BSFAnnotator/src/test/resources/TEST.bsh0000644000175000017500000000642711625126460023163 0ustar drazzibdrazzib/* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /** * Example of beanshell script to be used as input for the * BSFAnnotator * @author Olivier Terrier * @version 1.0 */ import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.jcas.JCas; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import org.apache.uima.cas.*; import org.apache.uima.jcas.cas.*; import org.apache.uima.jcas.tcas.*; import org.apache.uima.annotator.bsf.types.Token; import java.util.regex.*; /** * Initialisation of global variables */ String scriptName; Pattern matchPattern; /** * Performs any startup tasks required by this annotator. * The Analysis Engine calls this method only once, just after an Annotator has been instantiated. * @param aContext Provides access to external resources that may be used by this annotator. * This includes configuration parameters, logging and instrumentation services, and access to external analysis resources. * @see com.ibm.uima.analysis_engine.annotator.BaseAnnotator#initialize(com.ibm.uima.analysis_engine.annotator.AnnotatorContext) */ public void initialize(UimaContext aContext) throws ResourceInitializationException { String source = (String) aContext.getConfigParameterValue("SourceFile"); String regexp = (String) aContext.getConfigParameterValue("Regexp"); if (regexp == null) regexp = "Dave|David|Bob|Tim|Joe"; matchPattern = Pattern.compile(regexp); } /** * Invokes this annotator's analysis logic. * This annotator will access the data in the JCas and add new data to the JCas. * @param jcas contains the document to be analyzed and may contain other metadata about that document. * @param rs a list of output types and features that this annotator should produce. */ public void process(JCas jcas) throws AnalysisEngineProcessException { // Looking for regexp in the document text and storing start/end indexes in arrays String text = jcas.getDocumentText(); Matcher matcher = matchPattern.matcher(text); List annotArray = new ArrayList(); while (matcher.find()) { // Create an EntityOccurrence for each firstname found in the text Token token = new Token(jcas, matcher.start(), matcher.end()); token.addToIndexes(); } } uima-addons-2.3.1/BSFAnnotator/src/test/resources/RhinoTestAnnotator.xml0000644000175000017500000000605611625126460026233 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.bsf.BSFAnnotator Rhino Annotator Test of Rhino BSF Annotator. 1.0 TEMIS SourceFile BSF script to be loaded String false true Regexp Regular expression String false true SourceFile TEST.js Regexp Dave|David|Bob|Tim|Joe org.apache.uima.annotator.bsf.types.Token uima.tcas.Annotation x-unspecified true true false uima-addons-2.3.1/BSFAnnotator/src/test/resources/BeanshellTestAnnotator.xml0000644000175000017500000000606111625126460027045 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.bsf.BSFAnnotator BSH Annotator Test of Beanshell BSF Annotator. 1.0 TEMIS SourceFile BSF script to be loaded String false true Regexp Regular expression String false true SourceFile TEST.bsh Regexp Dave|David|Bob|Tim|Joe org.apache.uima.annotator.bsf.types.Token uima.tcas.Annotation x-unspecified true true false uima-addons-2.3.1/BSFAnnotator/src/test/resources/Nicknames.txt0000644000175000017500000000411011625126460024342 0ustar drazzibdrazzibA Brief Discussion of Nicknames and Diminutives First things first: the word nickname derives from the Middle English phrase "an eke-name" where "eke" means "additional." A nickname is a name, any kind of name, that one is called in place of one's real name. Some nicknames are affectionate phrases used to describe a person. Shorty Smith is presumably short, for example. Slim Pickings is skinny, and Red Cooper may have red hair, while Scarface Capone has a scarred face. During the Middle Ages, many of these descriptive nicknames evolved to become surnames (last names, family names, etc.). Thus, an ancestor of Neil Armstrong must have had strong arms, and Jane White had an ancestor with a pale complexion or hair. But the most common type of nickname is the Diminutive, usually a shortened or otherwise altered version of one's true name, such as Jim, for James, Jack for John, Ted for Theodore, or Betty for Elizabeth. Diminutives are usually used with inferiors or equals, such as children and servants, or close friends or relatives. Usually meant affectionately, often times there are varying degrees of diminutives. A man is William to his acquaintances, Will to his friends, and Willie to his mother. Nicknames of this sort are among the oldest parts of language still used. Jack remained a nickname for John for centuries after its origianl connection and lost. Until the 20th century, one could still find Neds and Nans for Edwards and Anns, again, alghouh the original connotations have long since past. Some connections are so old that we do not really undestand how it happened, as in Peggy/Margaret or Polly/Mary or Billy/William. "Diminutives" are formed by corrupting, shortening, or otherwise changing a person's given name into something different. This happens in a variety of ways: Sometimes, longer names are contracted, as in Margaret to Greta, Konradt to Kurt, Teresa to Tessa, or Henrietta to Hetty. Other times a letter (usually "r" ) is dropped, as we see in Maggie from Margaret, Kit from Christopher, Biddy from Bridget, Fanny from Frances, and Hattie from Harriet. uima-addons-2.3.1/BSFAnnotator/src/test/resources/BSFAggregatedAE.xml0000644000175000017500000000765611625126460025230 0ustar drazzibdrazzib org.apache.uima.java false Aggregated BSF AE Example of an aggregated AE calling several BSF annotators. 1.0 TEMIS BshSourceFile BSF script to be loaded String false true BeanshellNicknameAnnotator/SourceFile RhinoSourceFile BSF script to be loaded String false true RhinoAnnotator/SourceFile RhinoRegexp Regular expression String false true RhinoAnnotator/Regexp BshSourceFile NICKNAMES.bsh RhinoSourceFile TEST.js RhinoRegexp \b\w+\b RhinoAnnotator BeanshellNicknameAnnotator true true false uima-addons-2.3.1/BSFAnnotator/src/test/resources/TEST.js0000644000175000017500000000315111625126460023012 0ustar drazzibdrazzib//Licensed to the Apache Software Foundation (ASF) under one //or more contributor license agreements. See the NOTICE file //distributed with this work for additional information //regarding copyright ownership. The ASF licenses this file //to you under the Apache License, Version 2.0 (the //"License"); you may not use this file except in compliance //with the License. You may obtain a copy of the License at // //http://www.apache.org/licenses/LICENSE-2.0 // //Unless required by applicable law or agreed to in writing, //software distributed under the License is distributed on an //"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY //KIND, either express or implied. See the License for the //specific language governing permissions and limitations //under the License. // Example of javascript script to be used as input for the BSFAnnotator importPackage(Packages.org.apache.uima); importPackage(Packages.org.apache.uima.analysis_component); importPackage(Packages.org.apache.uima.jcas); importPackage(Packages.org.apache.uima.jcas.tcas); importPackage(Packages.org.apache.uima.annotator.bsf.types); importPackage(java.util.regex); var matchPattern; // Annotator initialize method function initialize(context) { var pattern = context.getConfigParameterValue("Regexp"); matchPattern = Pattern.compile(pattern); } // Annotator process method function process(jcas) { var text = jcas.getDocumentText(); var matcher = matchPattern.matcher(text); while (matcher.find()) { var token = new Token(jcas, matcher.start(), matcher.end()); token.addToIndexes(); } } uima-addons-2.3.1/BSFAnnotator/src/test/java/0000755000175000017500000000000011625126460020604 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/test/java/org/0000755000175000017500000000000011625126460021373 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/test/java/org/apache/0000755000175000017500000000000011625126460022614 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/test/java/org/apache/uima/0000755000175000017500000000000011625126460023547 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/test/java/org/apache/uima/annotator/0000755000175000017500000000000011625126460025554 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/test/java/org/apache/uima/annotator/bsf/0000755000175000017500000000000011625126460026326 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/src/test/java/org/apache/uima/annotator/bsf/TestRhino.java0000644000175000017500000000434211625126460031113 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.bsf; import java.io.File; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * Testclass for the BSF annotator. */ public class TestRhino extends TestCase { private AnnotatorTester annotRhinoTester; /** * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { this.annotRhinoTester = new AnnotatorTester(JUnitExtension.getFile("RhinoTestAnnotator.xml")); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); this.annotRhinoTester = null; } public void testAnnotatorRhino() throws Exception { //retrieve Annotator sample text String text = AnnotatorTester.readFileContent(JUnitExtension.getFile("testdoc.txt"), "UTF-8"); //execute sample text CAS cas = this.annotRhinoTester.performTest(text,"en"); //define result interested in String[] tofs = {"org.apache.uima.annotator.bsf.types.Token"}; //compare results File outputFile = new File(JUnitExtension.getFile("testdocRef.txt").getParent(), "testdocRef_testoutput.txt") ; AnnotatorTester.checkResult(cas, tofs, JUnitExtension.getFile("testdocRef.txt"), outputFile); } } uima-addons-2.3.1/BSFAnnotator/src/test/java/org/apache/uima/annotator/bsf/TestAggregated.java0000644000175000017500000000453211625126460032067 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.bsf; import java.io.File; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * Testclass for the BSF annotator. */ public class TestAggregated extends TestCase { private AnnotatorTester annotAggregTester; /** * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { this.annotAggregTester = new AnnotatorTester(JUnitExtension.getFile("BSFAggregatedAE.xml")); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); this.annotAggregTester = null; } public void testAnnotatorAggregated() throws Exception { //retrieve Annotator sample text String text = AnnotatorTester.readFileContent(JUnitExtension.getFile("Nicknames.txt"), "UTF-8"); //execute sample text CAS cas = this.annotAggregTester.performTest(text,"en"); //define result interested in String[] tofs = {"org.apache.uima.annotator.bsf.types.Token", "org.apache.uima.annotator.bsf.types.Firstname", "org.apache.uima.annotator.bsf.types.Nickname"}; //compare results File outputFile = new File(JUnitExtension.getFile("NicknamesRef.txt").getParent(), "NicknamesRef_testoutput.txt") ; AnnotatorTester.checkResult(cas, tofs, JUnitExtension.getFile("NicknamesRef.txt"), outputFile); } } uima-addons-2.3.1/BSFAnnotator/src/test/java/org/apache/uima/annotator/bsf/TestBeanshell.java0000644000175000017500000000435011625126460031730 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.bsf; import java.io.File; import junit.framework.TestCase; import org.apache.uima.cas.CAS; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.apache.uima.test.junit_extension.JUnitExtension; /** * Testclass for the BSF annotator. */ public class TestBeanshell extends TestCase { private AnnotatorTester annotBshTester; /** * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { this.annotBshTester = new AnnotatorTester(JUnitExtension.getFile("BeanshellTestAnnotator.xml")); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); this.annotBshTester = null; } public void testAnnotatorBeanshell() throws Exception { //retrieve Annotator sample text String text = AnnotatorTester.readFileContent(JUnitExtension.getFile("testdoc.txt"), "UTF-8"); //execute sample text CAS cas = this.annotBshTester.performTest(text,"en"); //define result interested in String[] tofs = {"org.apache.uima.annotator.bsf.types.Token"}; //compare results File outputFile = new File(JUnitExtension.getFile("testdocRef.txt").getParent(), "testdocRef_testoutput.txt") ; AnnotatorTester.checkResult(cas, tofs, JUnitExtension.getFile("testdocRef.txt"), outputFile); } } uima-addons-2.3.1/BSFAnnotator/desc/0000755000175000017500000000000011625126462017035 5ustar drazzibdrazzibuima-addons-2.3.1/BSFAnnotator/desc/BSFAnnotator.xml0000644000175000017500000000510211625126462022055 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.bsf.BSFAnnotator Bean Scripting Framework (BSF) Annotator Runs annotator scripts using Apache's Bean Scripting Framework ${project.version} The Apache Software Foundation SourceFile The name of the source file containing the script to run. String false true uima-addons-2.3.1/OpenCalaisAnnotator/0000755000175000017500000000000011625127314017520 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/pom.xml0000644000175000017500000000732711625126506021050 0ustar drazzibdrazzib 4.0.0 org.apache.uima uima-addons-parent 2.3.1 ../uima-addons-parent OpenCalaisAnnotator jar 2.3.1 UIMA Annotator: ${project.artifactId} Sends text to a remote open calais annotators and adds the annotations returned to the CAS ${uimaWebsiteUrl} scm:svn:http://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} scm:svn:https://svn.apache.org/repos/asf/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} http://svn.apache.org/viewvc/uima/${uimaScmRoot}/tags/uima-addons-2.3.1-rc5/${uimaScmProject} ${project.artifactId} desc/OpenCalaisAnnotator.xml 2.3.1 org.apache.uima uimaj-core ${uimaDependencyVersion} provided org.apache.uima uimaj-test-util ${uimaDependencyVersion} test org.apache.uima uimaj-component-test-util ${uimaDependencyVersion} test junit junit 4.8.2 test commons-io commons-io 2.0.1 uima-an-calais uima-addons-2.3.1/OpenCalaisAnnotator/LICENSE.txt0000644000175000017500000002644611625126506021361 0ustar drazzibdrazzib Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. uima-addons-2.3.1/OpenCalaisAnnotator/marker-file-identifying-single-project0000644000175000017500000000000011625126506027063 0ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/marker-file-identifying-standard-pear0000644000175000017500000000000011625126506026663 0ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/marker-file-identifying-osgi-project0000644000175000017500000000000011625126506026543 0ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/NOTICE.txt0000644000175000017500000000031211625126506021240 0ustar drazzibdrazzibApache UIMA Open Calais Annotator component Copyright 2008-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). uima-addons-2.3.1/OpenCalaisAnnotator/src/0000755000175000017500000000000011625126504020307 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/main/0000755000175000017500000000000011625126504021233 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/0000755000175000017500000000000011625126504022154 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/0000755000175000017500000000000011625126504022743 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/0000755000175000017500000000000011625126504024164 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/0000755000175000017500000000000011625126504025117 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/0000755000175000017500000000000011625126506026355 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Person_Type.java0000644000175000017500000000476011625126506031476 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class Person_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Person_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Person_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Person(addr, Person_Type.this); Person_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Person(addr, Person_Type.this); } }; /** @generated */ public final static int typeIndexID = Person.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Person"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Person_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/FaxNumber.java0000644000175000017500000000421711625126506031113 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:12 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:12 CEST 2010 * @generated */ public class FaxNumber extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(FaxNumber.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected FaxNumber() {} /** Internal - constructor used by generator * @generated */ public FaxNumber(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public FaxNumber(JCas jcas) { super(jcas); readObject(); } /** @generated */ public FaxNumber(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/NaturalDisaster.java0000644000175000017500000000426311625126506032332 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class NaturalDisaster extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(NaturalDisaster.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected NaturalDisaster() {} /** Internal - constructor used by generator * @generated */ public NaturalDisaster(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public NaturalDisaster(JCas jcas) { super(jcas); readObject(); } /** @generated */ public NaturalDisaster(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Technology_Type.java0000644000175000017500000000503411625126506032336 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class Technology_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Technology_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Technology_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Technology(addr, Technology_Type.this); Technology_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Technology(addr, Technology_Type.this); } }; /** @generated */ public final static int typeIndexID = Technology.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Technology"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Technology_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Technology.java0000644000175000017500000000422511625126506031336 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class Technology extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Technology.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Technology() {} /** Internal - constructor used by generator * @generated */ public Technology(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Technology(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Technology(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/ProviceOrState.java0000644000175000017500000000425511625126506032137 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class ProviceOrState extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(ProviceOrState.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected ProviceOrState() {} /** Internal - constructor used by generator * @generated */ public ProviceOrState(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public ProviceOrState(JCas jcas) { super(jcas); readObject(); } /** @generated */ public ProviceOrState(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Company_Type.java0000644000175000017500000000477311625126506031642 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Company_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Company_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Company_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Company(addr, Company_Type.this); Company_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Company(addr, Company_Type.this); } }; /** @generated */ public final static int typeIndexID = Company.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Company"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Company_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/NaturalFeature_Type.java0000644000175000017500000000511011625126506033140 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class NaturalFeature_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (NaturalFeature_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = NaturalFeature_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new NaturalFeature(addr, NaturalFeature_Type.this); NaturalFeature_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new NaturalFeature(addr, NaturalFeature_Type.this); } }; /** @generated */ public final static int typeIndexID = NaturalFeature.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.NaturalFeature"); /** initialize variables to correspond with Cas Type and Features * @generated */ public NaturalFeature_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/IndustryTerm.java0000644000175000017500000000424111625126506031672 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:12 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:12 CEST 2010 * @generated */ public class IndustryTerm extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(IndustryTerm.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected IndustryTerm() {} /** Internal - constructor used by generator * @generated */ public IndustryTerm(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public IndustryTerm(JCas jcas) { super(jcas); readObject(); } /** @generated */ public IndustryTerm(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/IndustryTerm_Type.java0000644000175000017500000000506211625126506032675 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:12 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:12 CEST 2010 * @generated */ public class IndustryTerm_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (IndustryTerm_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = IndustryTerm_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new IndustryTerm(addr, IndustryTerm_Type.this); IndustryTerm_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new IndustryTerm(addr, IndustryTerm_Type.this); } }; /** @generated */ public final static int typeIndexID = IndustryTerm.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.IndustryTerm"); /** initialize variables to correspond with Cas Type and Features * @generated */ public IndustryTerm_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Facility.java0000644000175000017500000000421111625126506030762 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Facility extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Facility.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Facility() {} /** Internal - constructor used by generator * @generated */ public Facility(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Facility(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Facility(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Continent_Type.java0000644000175000017500000000502111625126506032160 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Continent_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Continent_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Continent_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Continent(addr, Continent_Type.this); Continent_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Continent(addr, Continent_Type.this); } }; /** @generated */ public final static int typeIndexID = Continent.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Continent"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Continent_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Holiday.java0000644000175000017500000000420311625126506030610 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:12 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:12 CEST 2010 * @generated */ public class Holiday extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Holiday.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Holiday() {} /** Internal - constructor used by generator * @generated */ public Holiday(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Holiday(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Holiday(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Organization_Type.java0000644000175000017500000000506011625126506032666 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class Organization_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Organization_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Organization_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Organization(addr, Organization_Type.this); Organization_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Organization(addr, Organization_Type.this); } }; /** @generated */ public final static int typeIndexID = Organization.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Organization"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Organization_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Continent.java0000644000175000017500000000421711625126506031165 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Continent extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Continent.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Continent() {} /** Internal - constructor used by generator * @generated */ public Continent(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Continent(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Continent(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Country_Type.java0000644000175000017500000000477311625126506031677 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Country_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Country_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Country_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Country(addr, Country_Type.this); Country_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Country(addr, Country_Type.this); } }; /** @generated */ public final static int typeIndexID = Country.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Country"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Country_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/FaxNumber_Type.java0000644000175000017500000000502111625126506032106 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:12 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:12 CEST 2010 * @generated */ public class FaxNumber_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (FaxNumber_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = FaxNumber_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new FaxNumber(addr, FaxNumber_Type.this); FaxNumber_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new FaxNumber(addr, FaxNumber_Type.this); } }; /** @generated */ public final static int typeIndexID = FaxNumber.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.FaxNumber"); /** initialize variables to correspond with Cas Type and Features * @generated */ public FaxNumber_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/URL_Type.java0000644000175000017500000000471711625126506030674 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class URL_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (URL_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = URL_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new URL(addr, URL_Type.this); URL_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new URL(addr, URL_Type.this); } }; /** @generated */ public final static int typeIndexID = URL.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.URL"); /** initialize variables to correspond with Cas Type and Features * @generated */ public URL_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/ProviceOrState_Type.java0000644000175000017500000000511011625126506033127 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class ProviceOrState_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (ProviceOrState_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = ProviceOrState_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new ProviceOrState(addr, ProviceOrState_Type.this); ProviceOrState_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new ProviceOrState(addr, ProviceOrState_Type.this); } }; /** @generated */ public final static int typeIndexID = ProviceOrState.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.ProviceOrState"); /** initialize variables to correspond with Cas Type and Features * @generated */ public ProviceOrState_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Person.java0000644000175000017500000000417511625126506030475 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class Person extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Person.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Person() {} /** Internal - constructor used by generator * @generated */ public Person(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Person(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Person(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Anniversary.java0000644000175000017500000000423311625126506031523 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:10 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:10 CEST 2010 * @generated */ public class Anniversary extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Anniversary.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Anniversary() {} /** Internal - constructor used by generator * @generated */ public Anniversary(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Anniversary(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Anniversary(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/NaturalDisaster_Type.java0000644000175000017500000000512311625126506033327 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class NaturalDisaster_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (NaturalDisaster_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = NaturalDisaster_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new NaturalDisaster(addr, NaturalDisaster_Type.this); NaturalDisaster_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new NaturalDisaster(addr, NaturalDisaster_Type.this); } }; /** @generated */ public final static int typeIndexID = NaturalDisaster.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.NaturalDisaster"); /** initialize variables to correspond with Cas Type and Features * @generated */ public NaturalDisaster_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Currency.java0000644000175000017500000000421111625126506031010 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Currency extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Currency.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Currency() {} /** Internal - constructor used by generator * @generated */ public Currency(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Currency(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Currency(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/PhoneNumber_Type.java0000644000175000017500000000504711625126506032451 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class PhoneNumber_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (PhoneNumber_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = PhoneNumber_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new PhoneNumber(addr, PhoneNumber_Type.this); PhoneNumber_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new PhoneNumber(addr, PhoneNumber_Type.this); } }; /** @generated */ public final static int typeIndexID = PhoneNumber.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.PhoneNumber"); /** initialize variables to correspond with Cas Type and Features * @generated */ public PhoneNumber_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/BaseType_Type.java0000644000175000017500000000705211625126506031741 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FeatureImpl; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.tcas.Annotation_Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class BaseType_Type extends Annotation_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (BaseType_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = BaseType_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new BaseType(addr, BaseType_Type.this); BaseType_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new BaseType(addr, BaseType_Type.this); } }; /** @generated */ public final static int typeIndexID = BaseType.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.BaseType"); /** @generated */ final Feature casFeat_calaisType; /** @generated */ final int casFeatCode_calaisType; /** @generated */ public String getCalaisType(int addr) { if (featOkTst && casFeat_calaisType == null) jcas.throwFeatMissing("calaisType", "org.apache.uima.calais.BaseType"); return ll_cas.ll_getStringValue(addr, casFeatCode_calaisType); } /** @generated */ public void setCalaisType(int addr, String v) { if (featOkTst && casFeat_calaisType == null) jcas.throwFeatMissing("calaisType", "org.apache.uima.calais.BaseType"); ll_cas.ll_setStringValue(addr, casFeatCode_calaisType, v);} /** initialize variables to correspond with Cas Type and Features * @generated */ public BaseType_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); casFeat_calaisType = jcas.getRequiredFeatureDE(casType, "calaisType", "uima.cas.String", featOkTst); casFeatCode_calaisType = (null == casFeat_calaisType) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_calaisType).getCode(); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/PhoneNumber.java0000644000175000017500000000423311625126506031444 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class PhoneNumber extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(PhoneNumber.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected PhoneNumber() {} /** Internal - constructor used by generator * @generated */ public PhoneNumber(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public PhoneNumber(JCas jcas) { super(jcas); readObject(); } /** @generated */ public PhoneNumber(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/City_Type.java0000644000175000017500000000473211625126506031137 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class City_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (City_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = City_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new City(addr, City_Type.this); City_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new City(addr, City_Type.this); } }; /** @generated */ public final static int typeIndexID = City.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.City"); /** initialize variables to correspond with Cas Type and Features * @generated */ public City_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Facility_Type.java0000644000175000017500000000500611625126506031766 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:12 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:12 CEST 2010 * @generated */ public class Facility_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Facility_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Facility_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Facility(addr, Facility_Type.this); Facility_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Facility(addr, Facility_Type.this); } }; /** @generated */ public final static int typeIndexID = Facility.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Facility"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Facility_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Region_Type.java0000644000175000017500000000476011625126506031453 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class Region_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Region_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Region_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Region(addr, Region_Type.this); Region_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Region(addr, Region_Type.this); } }; /** @generated */ public final static int typeIndexID = Region.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Region"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Region_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Holiday_Type.java0000644000175000017500000000477311625126506031625 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:12 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:12 CEST 2010 * @generated */ public class Holiday_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Holiday_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Holiday_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Holiday(addr, Holiday_Type.this); Holiday_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Holiday(addr, Holiday_Type.this); } }; /** @generated */ public final static int typeIndexID = Holiday.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Holiday"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Holiday_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Organization.java0000644000175000017500000000424111625126506031665 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class Organization extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Organization.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Organization() {} /** Internal - constructor used by generator * @generated */ public Organization(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Organization(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Organization(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Region.java0000644000175000017500000000417511625126506030452 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class Region extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Region.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Region() {} /** Internal - constructor used by generator * @generated */ public Region(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Region(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Region(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Anniversary_Type.java0000644000175000017500000000504511625126506032526 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Anniversary_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Anniversary_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Anniversary_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Anniversary(addr, Anniversary_Type.this); Anniversary_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Anniversary(addr, Anniversary_Type.this); } }; /** @generated */ public final static int typeIndexID = Anniversary.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Anniversary"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Anniversary_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/EmailAddress.java0000644000175000017500000000424111625126506031556 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class EmailAddress extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(EmailAddress.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected EmailAddress() {} /** Internal - constructor used by generator * @generated */ public EmailAddress(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public EmailAddress(JCas jcas) { super(jcas); readObject(); } /** @generated */ public EmailAddress(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Currency_Type.java0000644000175000017500000000500611625126506032014 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Currency_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (Currency_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = Currency_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new Currency(addr, Currency_Type.this); Currency_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new Currency(addr, Currency_Type.this); } }; /** @generated */ public final static int typeIndexID = Currency.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.Currency"); /** initialize variables to correspond with Cas Type and Features * @generated */ public Currency_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Country.java0000644000175000017500000000420311625126506030662 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Country extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Country.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Country() {} /** Internal - constructor used by generator * @generated */ public Country(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Country(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Country(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/BaseType.java0000644000175000017500000000601611625126506030737 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; import org.apache.uima.jcas.tcas.Annotation; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class BaseType extends Annotation { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(BaseType.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected BaseType() {} /** Internal - constructor used by generator * @generated */ public BaseType(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public BaseType(JCas jcas) { super(jcas); readObject(); } /** @generated */ public BaseType(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} //*--------------* //* Feature: calaisType /** getter for calaisType - gets OpenCalais type * @generated */ public String getCalaisType() { if (BaseType_Type.featOkTst && ((BaseType_Type)jcasType).casFeat_calaisType == null) jcasType.jcas.throwFeatMissing("calaisType", "org.apache.uima.calais.BaseType"); return jcasType.ll_cas.ll_getStringValue(addr, ((BaseType_Type)jcasType).casFeatCode_calaisType);} /** setter for calaisType - sets OpenCalais type * @generated */ public void setCalaisType(String v) { if (BaseType_Type.featOkTst && ((BaseType_Type)jcasType).casFeat_calaisType == null) jcasType.jcas.throwFeatMissing("calaisType", "org.apache.uima.calais.BaseType"); jcasType.ll_cas.ll_setStringValue(addr, ((BaseType_Type)jcasType).casFeatCode_calaisType, v);} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/NaturalFeature.java0000644000175000017500000000425511625126506032150 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class NaturalFeature extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(NaturalFeature.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected NaturalFeature() {} /** Internal - constructor used by generator * @generated */ public NaturalFeature(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public NaturalFeature(JCas jcas) { super(jcas); readObject(); } /** @generated */ public NaturalFeature(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/EmailAddress_Type.java0000644000175000017500000000506211625126506032561 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.FSGenerator; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.cas.Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class EmailAddress_Type extends BaseType_Type { /** @generated */ protected FSGenerator getFSGenerator() {return fsGenerator;} /** @generated */ private final FSGenerator fsGenerator = new FSGenerator() { public FeatureStructure createFS(int addr, CASImpl cas) { if (EmailAddress_Type.this.useExistingInstance) { // Return eq fs instance if already created FeatureStructure fs = EmailAddress_Type.this.jcas.getJfsFromCaddr(addr); if (null == fs) { fs = new EmailAddress(addr, EmailAddress_Type.this); EmailAddress_Type.this.jcas.putJfsFromCaddr(addr, fs); return fs; } return fs; } else return new EmailAddress(addr, EmailAddress_Type.this); } }; /** @generated */ public final static int typeIndexID = EmailAddress.typeIndexID; /** @generated @modifiable */ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.calais.EmailAddress"); /** initialize variables to correspond with Cas Type and Features * @generated */ public EmailAddress_Type(JCas jcas, Type casType) { super(jcas, casType); casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/Company.java0000644000175000017500000000420311625126506030625 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class Company extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(Company.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected Company() {} /** Internal - constructor used by generator * @generated */ public Company(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public Company(JCas jcas) { super(jcas); readObject(); } /** @generated */ public Company(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/URL.java0000644000175000017500000000415311625126506027665 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:13 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:13 CEST 2010 * @generated */ public class URL extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(URL.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected URL() {} /** Internal - constructor used by generator * @generated */ public URL(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public URL(JCas jcas) { super(jcas); readObject(); } /** @generated */ public URL(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/calais/City.java0000644000175000017500000000416111625126506030132 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* First created by JCasGen Thu Jun 17 13:00:11 CEST 2010 */ package org.apache.uima.calais; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; import org.apache.uima.jcas.cas.TOP_Type; /** * Updated by JCasGen Thu Jun 17 13:00:11 CEST 2010 * @generated */ public class City extends BaseType { /** @generated * @ordered */ public final static int typeIndexID = JCasRegistry.register(City.class); /** @generated * @ordered */ public final static int type = typeIndexID; /** @generated */ public int getTypeIndexID() {return typeIndexID;} /** Never called. Disable default constructor * @generated */ protected City() {} /** Internal - constructor used by generator * @generated */ public City(int addr, TOP_Type type) { super(addr, type); readObject(); } /** @generated */ public City(JCas jcas) { super(jcas); readObject(); } /** @generated */ public City(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } /** * Write your own initialization here * @generated modifiable */ private void readObject() {} } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/annotator/0000755000175000017500000000000011625126504027124 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/annotator/calais/0000755000175000017500000000000011625126504030360 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/annotator/calais/RDFSaxHandler.javauima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/annotator/calais/RDFSaxHandler.j0000644000175000017500000000755711625126504033136 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.calais; import java.util.ArrayList; import java.util.HashMap; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class RDFSaxHandler extends DefaultHandler { DescriptionElement currentDesc = null; private boolean enableOffset = false; private boolean enableLength = false; private boolean enableDocument = false; private Offset offset; private HashMap elements; private ArrayList subjectMap; public RDFSaxHandler(HashMap elements, ArrayList subjectMap, Offset offset) { this.elements = elements; this.subjectMap = subjectMap; this.offset = offset; } /* * (non-Javadoc) * * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, * java.lang.String, java.lang.String) */ public void endElement(String uri, String localName, String qName) throws SAXException { if(qName.equals("rdf:Description")) { this.elements.put(this.currentDesc.getAboutURL(), this.currentDesc); if(this.currentDesc.getSubjectURL() != null) { this.subjectMap.add(this.currentDesc); } } } /* * (non-Javadoc) * * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, * java.lang.String, java.lang.String, org.xml.sax.Attributes) */ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if(qName.equals("rdf:Description")) { this.currentDesc = new DescriptionElement(); // get "about" attribute value this.currentDesc.setAboutURL(attributes.getValue("rdf:about")); } else if(qName.equals("rdf:type")) { // get "resource" attribute value this.currentDesc.setTypeURL(attributes.getValue("rdf:resource")); } else if(qName.equals("c:subject")) { // get "resource" attribute value this.currentDesc.setSubjectURL(attributes.getValue("rdf:resource")); } else if(qName.equals("c:offset")) { this.enableOffset = true; } else if(qName.equals("c:length")) { this.enableLength = true; } else if(qName.equals("rdf:RDF")) { this.enableDocument = true; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if(this.enableOffset) { this.currentDesc.setOffset(Integer.parseInt(new String(ch, start, length))); this.enableOffset = false; } else if(this.enableLength) { this.currentDesc.setLength(Integer.parseInt(new String(ch, start, length))); this.enableLength = false; } else if(this.enableDocument) { String documentText = new String(ch, start, length); this.offset.setOffset(documentText.toLowerCase().indexOf("") + 6); this.enableDocument = false; } } } uima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/annotator/calais/Offset.java0000644000175000017500000000210011625126504032442 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.calais; /** * * */ public class Offset { private int offset = 0; public int getOffset() { return this.offset; } public void setOffset(int offset) { this.offset = offset; } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/annotator/calais/OpenCalaisAnnotator.javauima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/annotator/calais/OpenCalaisAnnot0000644000175000017500000004216611625126504033332 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.calais; import java.io.BufferedInputStream; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import org.w3c.dom.Document; import org.xml.sax.SAXException; public class OpenCalaisAnnotator extends CasAnnotator_ImplBase { private static String CONFIG_PARAM_NAME_SUBMITTER = "submitter"; private static String CONFIG_PARAM_NAME_LICENSE_ID = "licenseID"; private static String CONFIG_PARAM_NAME_ALLOW_SEARCH = "allowSearch"; private static String CONFIG_PARAM_NAME_ALLOW_DISTRIBUTION = "allowDistribution"; private SAXParser saxParser; private Type anniversaryType; private Type cityType; private Type companyType; private Type continentType; private Type countryType; private Type currencyType; private Type emailAddressType; private Type facilityType; private Type faxNumberType; private Type holidayType; private Type industryTermType; private Type naturalDisasterType; private Type naturalFeatureType; private Type organizationType; private Type personType; private Type phoneNumberType; private Type provinceOrStateType; private Type regionType; private Type technologyType; private Type urlType; private Feature calaisTypeFeat; private String serviceParams; private Logger logger; private URL calaisService; private HashMap typeMapping; private String[] charsToReplace = {"<", ">", "\"", "'", "&"}; public void process(CAS aCas) throws AnalysisEngineProcessException { try { String modifiedText = aCas.getDocumentText(); // open connection and send data InputStream serviceInputStream = callServiceOnText(modifiedText); // result is an XML that contains the RDF XML result // first get the RDF XML result out of the returned XML DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); BufferedInputStream in = new BufferedInputStream(serviceInputStream); Document feedDoc = docBuilder.parse(in); in.close(); String RdfXmlContent = feedDoc.getDocumentElement().getTextContent(); // System.out.println(RdfXmlContent); // create new InputStream for the RDF XML content BufferedInputStream bufByteIn = new BufferedInputStream(new ByteArrayInputStream( RdfXmlContent.getBytes(feedDoc.getXmlEncoding()))); // create SAX handler HashMap elements = new HashMap(); ArrayList subjectMap = new ArrayList(); Offset offset = new Offset(); RDFSaxHandler saxHandler = new RDFSaxHandler(elements, subjectMap, offset); // parse RDF XML content returned by the calais service this.saxParser.parse(bufByteIn, saxHandler); //check offset correction String text = aCas.getDocumentText(); ArrayList positionsList = new ArrayList(); int index = -1; for(int i = 0; i < this.charsToReplace.length; i++) { index = text.indexOf(this.charsToReplace[i]); while(index > -1) { positionsList.add(index); index = text.indexOf(this.charsToReplace[i],index + 1); } } //now the positions list contains all positions where characters have been removed Integer[] positions = positionsList.toArray(new Integer[]{}); Arrays.sort(positions); // analyze entities Iterator elementIt = subjectMap.iterator(); while (elementIt.hasNext()) { DescriptionElement element = elementIt.next(); // retrieve subject URL, the subject URL must be equal to an about URL in the elements // map to get the type of the current element DescriptionElement typeElement = elements.get(element.getSubjectURL()); String typeURL = typeElement.getTypeURL(); // get current CAS type for the type URL Type currentType = this.typeMapping.get(typeURL); //if mapping is available, create an annotation if (currentType != null) { // get reference element that contains the annotation span int begin = 0; if (element.getOffset()>0) { begin = element.getOffset() - offset.getOffset() - 1; } //make begin offset correction for(int i = 0; i < positions.length; i++) { Integer pos = positions[i]; if(pos < begin) { begin++; } } int end = begin + element.getLength(); // create annotation if (end - begin > 0) { AnnotationFS annotFs = aCas.createAnnotation(currentType, begin, end); annotFs.setStringValue(this.calaisTypeFeat, element.getTypeURL().intern()); aCas.addFsToIndexes(annotFs); } } } } catch (IOException ex) { throw new AnalysisEngineProcessException(ex); } catch (SAXException ex) { throw new AnalysisEngineProcessException(ex); } catch (ParserConfigurationException ex) { throw new AnalysisEngineProcessException(ex); } } protected InputStream callServiceOnText(String modifiedText) throws IOException, UnsupportedEncodingException { URLConnection connection = this.calaisService.openConnection(); connection.setDoOutput(true); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection .getOutputStream(), "UTF-8")); writer.write(this.serviceParams); for(int i = 0; i < this.charsToReplace.length; i++) { modifiedText = modifiedText.replaceAll(this.charsToReplace[i], ""); } modifiedText = modifiedText.replaceAll("\n", " "); modifiedText = modifiedText.replaceAll("\r", " "); if (this.getContext().getLogger().isLoggable(Level.INFO)) this.getContext().getLogger().log(Level.FINER,new StringBuilder(this.calaisService.toString()). append(this.serviceParams).append(modifiedText).toString()); writer.write(modifiedText); writer.flush(); writer.close(); return connection.getInputStream(); } /* * (non-Javadoc) * * @see org.apache.uima.analysis_component.AnalysisComponent_ImplBase#initialize(org.apache.uima.UimaContext) */ public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); // initialize annotator logger this.logger = this.getContext().getLogger(); // create SAX parser try { SAXParserFactory factory = SAXParserFactory.newInstance(); this.saxParser = factory.newSAXParser(); } catch (ParserConfigurationException ex) { throw new ResourceInitializationException(ex); } catch (SAXException ex) { throw new ResourceInitializationException(ex); } // get configuration parameters // get submitter String submitter = (String) this.getContext().getConfigParameterValue( CONFIG_PARAM_NAME_SUBMITTER); this.logger.log(Level.CONFIG, "Parameter \"{0}\" set to \"{1}\"", new Object[] { CONFIG_PARAM_NAME_SUBMITTER, submitter }); // get licenseID String licenseID = (String) this.getContext().getConfigParameterValue( CONFIG_PARAM_NAME_LICENSE_ID); this.logger.log(Level.CONFIG, "Parameter \"{0}\" set to \"{1}\"", new Object[] { CONFIG_PARAM_NAME_LICENSE_ID, licenseID }); // get allowSearch Boolean allowSearch = (Boolean) this.getContext().getConfigParameterValue( CONFIG_PARAM_NAME_ALLOW_SEARCH); this.logger.log(Level.CONFIG, "Parameter \"{0}\" set to \"{1}\"", new Object[] { CONFIG_PARAM_NAME_ALLOW_SEARCH, allowSearch.toString() }); // get allowDistribution Boolean allowDistribution = (Boolean) this.getContext().getConfigParameterValue( CONFIG_PARAM_NAME_ALLOW_DISTRIBUTION); this.logger.log(Level.CONFIG, "Parameter \"{0}\" set to \"{1}\"", new Object[] { CONFIG_PARAM_NAME_ALLOW_DISTRIBUTION, allowDistribution.toString() }); // generate externalID for the calais service String externalID = "UIMACalaisAnnotWrapper-" + System.currentTimeMillis(); this.logger.log(Level.CONFIG, "Generated external ID: \"{0}\"", externalID); // create configXML for calais service String configXML = getConfigXML(allowDistribution.toString(), allowSearch.toString(), externalID, submitter); // create service parameter string StringBuffer serviceParamsBuf = new StringBuffer(); // param licenseID serviceParamsBuf.append("&licenseID="); serviceParamsBuf.append(licenseID); // param configXML serviceParamsBuf.append("¶msXML="); serviceParamsBuf.append(configXML); // param content serviceParamsBuf.append("&content="); this.serviceParams = serviceParamsBuf.toString(); // create calais service URL try { this.calaisService = new URL("http://api.opencalais.com/enlighten/calais.asmx/Enlighten"); } catch (MalformedURLException ex) { throw new ResourceInitializationException(ex); } } /* * (non-Javadoc) * * @see org.apache.uima.analysis_component.CasAnnotator_ImplBase#typeSystemInit(org.apache.uima.cas.TypeSystem) */ public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { super.typeSystemInit(typeSystem); // get types and features this.personType = typeSystem.getType("org.apache.uima.calais.Person"); this.anniversaryType = typeSystem.getType("org.apache.uima.calais.Anniversary"); this.cityType = typeSystem.getType("org.apache.uima.calais.City"); this.companyType = typeSystem.getType("org.apache.uima.calais.Company"); this.continentType = typeSystem.getType("org.apache.uima.calais.Continent"); this.countryType = typeSystem.getType("org.apache.uima.calais.Country"); this.currencyType = typeSystem.getType("org.apache.uima.calais.Currency"); this.emailAddressType = typeSystem.getType("org.apache.uima.calais.EmailAddress"); this.facilityType = typeSystem.getType("org.apache.uima.calais.Facility"); this.faxNumberType = typeSystem.getType("org.apache.uima.calais.FaxNumber"); this.holidayType = typeSystem.getType("org.apache.uima.calais.Holiday"); this.industryTermType = typeSystem.getType("org.apache.uima.calais.IndustryTerm"); this.naturalDisasterType = typeSystem.getType("org.apache.uima.calais.NaturalDisaster"); this.naturalFeatureType = typeSystem.getType("org.apache.uima.calais.NaturalFeature"); this.organizationType = typeSystem.getType("org.apache.uima.calais.Organization"); this.phoneNumberType = typeSystem.getType("org.apache.uima.calais.PhoneNumber"); this.provinceOrStateType = typeSystem.getType("org.apache.uima.calais.ProviceOrState"); this.regionType = typeSystem.getType("org.apache.uima.calais.Region"); this.technologyType = typeSystem.getType("org.apache.uima.calais.Technology"); this.urlType = typeSystem.getType("org.apache.uima.calais.URL"); this.calaisTypeFeat = this.personType.getFeatureByBaseName("calaisType"); // create type mapping HashMap this.typeMapping = new HashMap(20); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Person", this.personType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Anniversary", this.anniversaryType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/City", this.cityType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Company", this.companyType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Continent", this.continentType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Country", this.countryType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Currency", this.currencyType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/EmailAddress", this.emailAddressType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Facility", this.facilityType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/FaxNumber", this.faxNumberType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Holiday", this.holidayType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/IndustryTerm", this.industryTermType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/NaturalDisaster", this.naturalDisasterType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/NaturalFeature", this.naturalFeatureType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Organization", this.organizationType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/PhoneNumber", this.phoneNumberType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/ProvinceOrState", this.provinceOrStateType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Region", this.regionType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/Technology", this.technologyType); this.typeMapping.put("http://s.opencalais.com/1/type/em/e/URL", this.urlType); } /** * create configuration XML needed by the calais service * * @param allowDistribution * @param allowSearch * @param externalID * @param submitter * @return */ private String getConfigXML(String allowDistribution, String allowSearch, String externalID, String submitter) { StringBuffer buffer = new StringBuffer(); // create root element buffer.append(""); // set processing directives buffer.append(""); // close processing directives buffer.append(""); // set user directives buffer.append(""); // set external meta data buffer.append(""); buffer.append(""); // close root element buffer.append(""); return buffer.toString(); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootuima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/annotator/calais/DescriptionElement.javauima-addons-2.3.1/OpenCalaisAnnotator/src/main/java/org/apache/uima/annotator/calais/DescriptionElem0000644000175000017500000000367111625126504033400 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.calais; /** * * */ public class DescriptionElement { private String aboutURL = null; private String typeURL = null; private String subjectURL = null; private int offset = 0; private int length = 0; public DescriptionElement() { this.aboutURL = null; this.typeURL = null; this.subjectURL = null; this.offset = 0; this.length = 0; } public String getAboutURL() { return this.aboutURL; } public void setAboutURL(String aboutURL) { this.aboutURL = aboutURL; } public String getTypeURL() { return this.typeURL; } public void setTypeURL(String typeURL) { this.typeURL = typeURL; } public String getSubjectURL() { return this.subjectURL; } public void setSubjectURL(String subjectURL) { this.subjectURL = subjectURL; } public int getOffset() { return this.offset; } public void setOffset(int offset) { this.offset = offset; } public int getLength() { return this.length; } public void setLength(int length) { this.length = length; } } uima-addons-2.3.1/OpenCalaisAnnotator/src/test/0000755000175000017500000000000011625126504021266 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/test/resources/0000755000175000017500000000000011625126504023300 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/test/resources/returnedRDF.xml0000644000175000017500000003316011625126504026211 0ustar drazzibdrazzib <!--Use of the Calais Web Service is governed by the Terms of Service located at http://www.opencalais.com. By using this service or the results of the service you agree to these terms of service.--><!--Relations: ManMadeDisaster, PersonCareer Company: Gulf oil Country: United States IndustryTerm: oil Person: Obama Position: President--><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:c="http://s.opencalais.com/1/pred/"><rdf:Description c:allowDistribution="false" c:allowSearch="false" c:calaisRequestID="f12a4c4b-2f82-0cba-129a-20dae936d2c7" c:externalID="UIMACalaisAnnotWrapper-1278324092434" c:id="http://id.opencalais.com/c9T-0PIYdMlgiRTgpv-9eQ" rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"><rdf:type rdf:resource="http://s.opencalais.com/1/type/sys/DocInfo"/><c:document><![CDATA[<body> President Obama vows to make BP pay for the Gulf oil spill, and says the US must end its fossil fuel addiction</body>]]></c:document><c:docTitle/><c:docDate>2010-07-05 06:01:32.703</c:docDate><c:externalMetadata/><c:submitter/></rdf:Description><rdf:Description c:contentType="TEXT/html" c:emVer="7.1.1103.5" c:langIdVer="DefaultLangId" c:language="English" c:processingVer="CalaisJob01" c:submissionDate="2010-07-05 06:01:32.563" rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/meta"><rdf:type rdf:resource="http://s.opencalais.com/1/type/sys/DocInfoMeta"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:submitterCode>596f0d42-503d-c70f-1e0e-4efb394163bd</c:submitterCode><c:signature>digestalg-1|NTiWKU0XrcpEfbf1Kjj7d84bzpE=|SVTE3TimiYhYx8To2AT7TJFP8+AG72+0eB6bbjlhGXQPDfQltgE+/g==</c:signature></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/lid/DefaultLangId"><rdf:type rdf:resource="http://s.opencalais.com/1/type/lid/DefaultLangId"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:lang rdf:resource="http://d.opencalais.com/lid/DefaultLangId/English"/></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/cat/1"><rdf:type rdf:resource="http://s.opencalais.com/1/type/cat/DocCat"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:category rdf:resource="http://d.opencalais.com/cat/Calais/DisasterAccident"/><c:classifierName>Calais</c:classifierName><c:categoryName>Disaster_Accident</c:categoryName><c:score>1.000</c:score></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/comphash-1/07a0f805-2794-3765-9569-9334a45aa9c4"><rdf:type rdf:resource="http://s.opencalais.com/1/type/em/e/Company"/><c:name>Gulf oil</c:name><c:nationality>N/A</c:nationality></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/Instance/1"><rdf:type rdf:resource="http://s.opencalais.com/1/type/sys/InstanceInfo"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:subject rdf:resource="http://d.opencalais.com/comphash-1/07a0f805-2794-3765-9569-9334a45aa9c4"/><!--Company: Gulf oil; --><c:detection>[President Obama vows to make BP pay for the ]Gulf oil[ spill, and says the US must end its fossil fuel]</c:detection><c:prefix>President Obama vows to make BP pay for the </c:prefix><c:exact>Gulf oil</c:exact><c:suffix> spill, and says the US must end its fossil fuel</c:suffix><c:offset>51</c:offset><c:length>8</c:length></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/genericHasher-1/0d87e8a5-fb41-33c9-a1fb-bedf134b384e"><rdf:type rdf:resource="http://s.opencalais.com/1/type/em/e/Position"/><c:name>President</c:name></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/Instance/2"><rdf:type rdf:resource="http://s.opencalais.com/1/type/sys/InstanceInfo"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:subject rdf:resource="http://d.opencalais.com/genericHasher-1/0d87e8a5-fb41-33c9-a1fb-bedf134b384e"/><!--Position: President; --><c:detection>[&lt;body&gt; ]President[ Obama vows to make BP pay for the Gulf oil]</c:detection><c:prefix>&lt;body&gt; </c:prefix><c:exact>President</c:exact><c:suffix> Obama vows to make BP pay for the Gulf oil</c:suffix><c:offset>7</c:offset><c:length>9</c:length></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/genericHasher-1/31ec6404-85fe-33f5-af02-cb37fec6b170"><rdf:type rdf:resource="http://s.opencalais.com/1/type/em/e/IndustryTerm"/><c:name>oil</c:name></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/Instance/3"><rdf:type rdf:resource="http://s.opencalais.com/1/type/sys/InstanceInfo"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:subject rdf:resource="http://d.opencalais.com/genericHasher-1/31ec6404-85fe-33f5-af02-cb37fec6b170"/><!--IndustryTerm: oil; --><c:detection>[ President Obama vows to make BP pay for the Gulf ]oil[ spill, and says the US must end its fossil fuel]</c:detection><c:prefix> President Obama vows to make BP pay for the Gulf </c:prefix><c:exact>oil</c:exact><c:suffix> spill, and says the US must end its fossil fuel</c:suffix><c:offset>56</c:offset><c:length>3</c:length></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/genericHasher-1/104afbe3-c373-382b-9fc6-f9df7a5e588c"><rdf:type rdf:resource="http://s.opencalais.com/1/type/em/r/ManMadeDisaster"/><!--United States--><c:location rdf:resource="http://d.opencalais.com/genericHasher-1/a54ac18b-a956-3b5c-b235-0609ca899305"/><c:manmadedisaster>oil spill</c:manmadedisaster></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/Instance/4"><rdf:type rdf:resource="http://s.opencalais.com/1/type/sys/InstanceInfo"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:subject rdf:resource="http://d.opencalais.com/genericHasher-1/104afbe3-c373-382b-9fc6-f9df7a5e588c"/><!--ManMadeDisaster: location: United States; manmadedisaster: oil spill; --><c:detection>[President Obama vows to make BP pay for ]the Gulf oil spill, and says the US[ must end its fossil fuel]</c:detection><c:prefix>President Obama vows to make BP pay for </c:prefix><c:exact>the Gulf oil spill, and says the US</c:exact><c:suffix> must end its fossil fuel</c:suffix><c:offset>47</c:offset><c:length>35</c:length></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/genericHasher-1/0146cea0-79f2-3571-b518-c52480cdf71b"><rdf:type rdf:resource="http://s.opencalais.com/1/type/em/r/PersonCareer"/><!--Obama--><c:person rdf:resource="http://d.opencalais.com/pershash-1/cbc8c069-5e3f-3778-b9e5-e93f1c6d323a"/><!--President--><c:position rdf:resource="http://d.opencalais.com/genericHasher-1/0d87e8a5-fb41-33c9-a1fb-bedf134b384e"/><c:careertype>political</c:careertype><c:status>current</c:status></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/Instance/5"><rdf:type rdf:resource="http://s.opencalais.com/1/type/sys/InstanceInfo"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:subject rdf:resource="http://d.opencalais.com/genericHasher-1/0146cea0-79f2-3571-b518-c52480cdf71b"/><!--PersonCareer: person: Obama; position: President; careertype: political; status: current; --><c:detection>[&lt;body&gt; ]President Obama[ vows to make BP pay for the Gulf oil spill, and]</c:detection><c:prefix>&lt;body&gt; </c:prefix><c:exact>President Obama</c:exact><c:suffix> vows to make BP pay for the Gulf oil spill, and</c:suffix><c:offset>7</c:offset><c:length>15</c:length></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/er/geo/country/ralg-geo1/152649df-347e-e289-1a9e-acc883e07d17"><rdf:type rdf:resource="http://s.opencalais.com/1/type/er/Geo/Country"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><!--United States--><c:subject rdf:resource="http://d.opencalais.com/genericHasher-1/a54ac18b-a956-3b5c-b235-0609ca899305"/><c:name>United States</c:name><c:latitude>40.4230003233</c:latitude><c:longitude>-98.7372244786</c:longitude></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/er/company/ralg-tr1r/47a1035d-81d5-372e-9065-ad657badf3d5"><rdf:type rdf:resource="http://s.opencalais.com/1/type/er/Company"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><!--Gulf oil--><c:subject rdf:resource="http://d.opencalais.com/comphash-1/07a0f805-2794-3765-9569-9334a45aa9c4"/><c:score>1.0</c:score><c:name>Gulf Oil LP</c:name><c:shortname>Gulf Oil LP</c:shortname><c:ticker>GUFOL</c:ticker></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/pershash-1/cbc8c069-5e3f-3778-b9e5-e93f1c6d323a"><rdf:type rdf:resource="http://s.opencalais.com/1/type/em/e/Person"/><c:name>Obama</c:name><c:persontype>political</c:persontype><c:nationality>N/A</c:nationality><c:commonname>Barack Obama</c:commonname></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/Instance/6"><rdf:type rdf:resource="http://s.opencalais.com/1/type/sys/InstanceInfo"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:subject rdf:resource="http://d.opencalais.com/pershash-1/cbc8c069-5e3f-3778-b9e5-e93f1c6d323a"/><!--Person: Obama; --><c:detection>[&lt;body&gt; President ]Obama[ vows to make BP pay for the Gulf oil spill, and]</c:detection><c:prefix>&lt;body&gt; President </c:prefix><c:exact>Obama</c:exact><c:suffix> vows to make BP pay for the Gulf oil spill, and</c:suffix><c:offset>17</c:offset><c:length>5</c:length></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/genericHasher-1/a54ac18b-a956-3b5c-b235-0609ca899305"><rdf:type rdf:resource="http://s.opencalais.com/1/type/em/e/Country"/><c:name>United States</c:name></rdf:Description><rdf:Description rdf:about="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb/Instance/7"><rdf:type rdf:resource="http://s.opencalais.com/1/type/sys/InstanceInfo"/><c:docId rdf:resource="http://d.opencalais.com/dochash-1/4325c163-1016-37d6-85d1-cb65a6c222fb"/><c:subject rdf:resource="http://d.opencalais.com/genericHasher-1/a54ac18b-a956-3b5c-b235-0609ca899305"/><!--Country: United States; --><c:detection>[ make BP pay for the Gulf oil spill, and says the ]US[ must end its fossil fuel]</c:detection><c:prefix> make BP pay for the Gulf oil spill, and says the </c:prefix><c:exact>US</c:exact><c:suffix> must end its fossil fuel</c:suffix><c:offset>80</c:offset><c:length>2</c:length></rdf:Description></rdf:RDF> uima-addons-2.3.1/OpenCalaisAnnotator/src/test/resources/IntegrationTestOpenCalaisAnnotator.xml0000644000175000017500000002034211625126504032773 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.calais.OpenCalaisAnnotator OpenCalaisAnnotator allowDistribution Boolean false true allowSearch Boolean false true submitter String false true licenseID String false true allowDistribution false allowSearch false submitter licenseID g6h9zamsdtwhb93nc247ecrs org.apache.uima.calais.Person org.apache.uima.calais.BaseType org.apache.uima.calais.Anniversary org.apache.uima.calais.BaseType org.apache.uima.calais.City org.apache.uima.calais.BaseType org.apache.uima.calais.Company org.apache.uima.calais.BaseType org.apache.uima.calais.Continent org.apache.uima.calais.BaseType org.apache.uima.calais.Country org.apache.uima.calais.BaseType org.apache.uima.calais.Currency org.apache.uima.calais.BaseType org.apache.uima.calais.EmailAddress org.apache.uima.calais.BaseType org.apache.uima.calais.Facility org.apache.uima.calais.BaseType org.apache.uima.calais.FaxNumber org.apache.uima.calais.BaseType org.apache.uima.calais.Holiday org.apache.uima.calais.BaseType org.apache.uima.calais.IndustryTerm org.apache.uima.calais.BaseType org.apache.uima.calais.NaturalDisaster org.apache.uima.calais.BaseType org.apache.uima.calais.NaturalFeature org.apache.uima.calais.BaseType org.apache.uima.calais.Organization org.apache.uima.calais.BaseType org.apache.uima.calais.PhoneNumber org.apache.uima.calais.BaseType org.apache.uima.calais.ProviceOrState org.apache.uima.calais.BaseType org.apache.uima.calais.Region org.apache.uima.calais.BaseType org.apache.uima.calais.Technology org.apache.uima.calais.BaseType org.apache.uima.calais.URL org.apache.uima.calais.BaseType org.apache.uima.calais.BaseType uima.tcas.Annotation calaisType OpenCalais type uima.cas.String true true false uima-addons-2.3.1/OpenCalaisAnnotator/src/test/resources/MockedTestOpenCalaisAnnotator.xml0000644000175000017500000002032511625126504031713 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.calais.mock.MockedOpenCalaisAnnotator OpenCalaisAnnotator allowDistribution Boolean false true allowSearch Boolean false true submitter String false true licenseID String false true allowDistribution false allowSearch false submitter licenseID org.apache.uima.calais.Person org.apache.uima.calais.BaseType org.apache.uima.calais.Anniversary org.apache.uima.calais.BaseType org.apache.uima.calais.City org.apache.uima.calais.BaseType org.apache.uima.calais.Company org.apache.uima.calais.BaseType org.apache.uima.calais.Continent org.apache.uima.calais.BaseType org.apache.uima.calais.Country org.apache.uima.calais.BaseType org.apache.uima.calais.Currency org.apache.uima.calais.BaseType org.apache.uima.calais.EmailAddress org.apache.uima.calais.BaseType org.apache.uima.calais.Facility org.apache.uima.calais.BaseType org.apache.uima.calais.FaxNumber org.apache.uima.calais.BaseType org.apache.uima.calais.Holiday org.apache.uima.calais.BaseType org.apache.uima.calais.IndustryTerm org.apache.uima.calais.BaseType org.apache.uima.calais.NaturalDisaster org.apache.uima.calais.BaseType org.apache.uima.calais.NaturalFeature org.apache.uima.calais.BaseType org.apache.uima.calais.Organization org.apache.uima.calais.BaseType org.apache.uima.calais.PhoneNumber org.apache.uima.calais.BaseType org.apache.uima.calais.ProviceOrState org.apache.uima.calais.BaseType org.apache.uima.calais.Region org.apache.uima.calais.BaseType org.apache.uima.calais.Technology org.apache.uima.calais.BaseType org.apache.uima.calais.URL org.apache.uima.calais.BaseType org.apache.uima.calais.BaseType uima.tcas.Annotation calaisType OpenCalais type uima.cas.String true true false uima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/0000755000175000017500000000000011625126502022205 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/0000755000175000017500000000000011625126502022774 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/apache/0000755000175000017500000000000011625126502024215 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/apache/uima/0000755000175000017500000000000011625126502025150 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/apache/uima/annotator/0000755000175000017500000000000011625126502027155 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/apache/uima/annotator/calais/0000755000175000017500000000000011625126502030411 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/apache/uima/annotator/calais/mock/0000755000175000017500000000000011625126502031342 5ustar drazzibdrazzib././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootuima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/apache/uima/annotator/calais/mock/MockedOpenCalaisAnnotator.javauima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/apache/uima/annotator/calais/mock/MockedOpen0000644000175000017500000000271411625126502033315 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.calais.mock; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URL; import org.apache.uima.annotator.calais.OpenCalaisAnnotator; /** * Mocked version of the {@link OpenCalaisAnnotator} for testing purpose only */ public class MockedOpenCalaisAnnotator extends OpenCalaisAnnotator { @Override protected InputStream callServiceOnText(String modifiedText) throws IOException, UnsupportedEncodingException { URL resource = this.getClass().getResource("/returnedRDF.xml"); return resource.openStream(); } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootuima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/apache/uima/annotator/calais/OpenCalaisAnnotatorTest.javauima-addons-2.3.1/OpenCalaisAnnotator/src/test/java/org/apache/uima/annotator/calais/OpenCalaisAnnot0000644000175000017500000000552211625126502033356 0ustar drazzibdrazzib/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.uima.annotator.calais; import static org.junit.Assert.fail; import static org.junit.Assert.assertTrue; import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASException; import org.apache.uima.cas.Type; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.test.junit_extension.AnnotatorTester; import org.junit.Test; /** * Test for {@link OpenCalaisAnnotator} */ public class OpenCalaisAnnotatorTest { private String integrationDescPath = "src/test/resources/IntegrationTestOpenCalaisAnnotator.xml"; private String mockedDescPath = "src/test/resources/MockedTestOpenCalaisAnnotator.xml"; private static final String text = "President Obama vows to \"make BP pay\" for the Gulf oil spill, and says the US must end its fossil fuel \"addiction\""; @Test public void integrationTest() { try { AnnotatorTester annotatorTester = new AnnotatorTester(integrationDescPath); testAnnotator(annotatorTester); } catch (Exception e) { e.printStackTrace(); fail(e.getLocalizedMessage()); } } @Test public void unitMockedTest() { try { AnnotatorTester annotatorTester = new AnnotatorTester(mockedDescPath); testAnnotator(annotatorTester); } catch (Exception e) { e.printStackTrace(); fail(e.getLocalizedMessage()); } } private void testAnnotator(AnnotatorTester annotatorTester) throws Exception, CASException { CAS cas = annotatorTester.performTest(text, "en"); for (Annotation annotation : cas.getJCas().getAnnotationIndex( org.apache.uima.calais.BaseType.type)) { Type type = annotation.getType(); assertTrue(annotation.getType().getName() != null); assertTrue(annotation.getBegin() >= 0); assertTrue(annotation.getEnd() > 0); assertTrue(annotation.getCoveredText() != null && !"".equals(annotation.getCoveredText())); assertTrue(annotation.getFeatureValueAsString(type.getFeatureByBaseName("calaisType")) != null); } } } uima-addons-2.3.1/OpenCalaisAnnotator/desc/0000755000175000017500000000000011625126506020440 5ustar drazzibdrazzibuima-addons-2.3.1/OpenCalaisAnnotator/desc/OpenCalaisAnnotator.xml0000644000175000017500000002025411625126506025071 0ustar drazzibdrazzib org.apache.uima.java true org.apache.uima.annotator.calais.OpenCalaisAnnotator OpenCalaisAnnotator allowDistribution Boolean false true allowSearch Boolean false true submitter String false true licenseID String false true allowDistribution false allowSearch false submitter licenseID org.apache.uima.calais.Person org.apache.uima.calais.BaseType org.apache.uima.calais.Anniversary org.apache.uima.calais.BaseType org.apache.uima.calais.City org.apache.uima.calais.BaseType org.apache.uima.calais.Company org.apache.uima.calais.BaseType org.apache.uima.calais.Continent org.apache.uima.calais.BaseType org.apache.uima.calais.Country org.apache.uima.calais.BaseType org.apache.uima.calais.Currency org.apache.uima.calais.BaseType org.apache.uima.calais.EmailAddress org.apache.uima.calais.BaseType org.apache.uima.calais.Facility org.apache.uima.calais.BaseType org.apache.uima.calais.FaxNumber org.apache.uima.calais.BaseType org.apache.uima.calais.Holiday org.apache.uima.calais.BaseType org.apache.uima.calais.IndustryTerm org.apache.uima.calais.BaseType org.apache.uima.calais.NaturalDisaster org.apache.uima.calais.BaseType org.apache.uima.calais.NaturalFeature org.apache.uima.calais.BaseType org.apache.uima.calais.Organization org.apache.uima.calais.BaseType org.apache.uima.calais.PhoneNumber org.apache.uima.calais.BaseType org.apache.uima.calais.ProviceOrState org.apache.uima.calais.BaseType org.apache.uima.calais.Region org.apache.uima.calais.BaseType org.apache.uima.calais.Technology org.apache.uima.calais.BaseType org.apache.uima.calais.URL org.apache.uima.calais.BaseType org.apache.uima.calais.BaseType uima.tcas.Annotation calaisType OpenCalais type uima.cas.String true true false