Return-Path: X-Original-To: apmail-jackrabbit-users-archive@minotaur.apache.org Delivered-To: apmail-jackrabbit-users-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E9F6692AE for ; Wed, 4 Jan 2012 01:54:12 +0000 (UTC) Received: (qmail 86101 invoked by uid 500); 4 Jan 2012 01:54:12 -0000 Delivered-To: apmail-jackrabbit-users-archive@jackrabbit.apache.org Received: (qmail 86075 invoked by uid 500); 4 Jan 2012 01:54:12 -0000 Mailing-List: contact users-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@jackrabbit.apache.org Delivered-To: mailing list users@jackrabbit.apache.org Received: (qmail 86066 invoked by uid 99); 4 Jan 2012 01:54:12 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 04 Jan 2012 01:54:12 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (nike.apache.org: 80.76.153.6 is neither permitted nor denied by domain of pontus.amberg@comhem.se) Received: from [80.76.153.6] (HELO ch-smtp05.sth.basefarm.net) (80.76.153.6) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 04 Jan 2012 01:54:05 +0000 Received: from c80-216-182-58.bredband.comhem.se ([80.216.182.58]:51268 helo=[192.168.0.101]) by ch-smtp05.sth.basefarm.net with esmtp (Exim 4.76) (envelope-from ) id 1RiG2Q-0002Zc-I5 for users@jackrabbit.apache.org; Wed, 04 Jan 2012 02:53:13 +0100 Message-ID: <4F03B102.2050508@comhem.se> Date: Wed, 04 Jan 2012 02:53:06 +0100 From: Pontus Amberg User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111124 Thunderbird/8.0 MIME-Version: 1.0 To: users@jackrabbit.apache.org Subject: Re: Conflict between expected classloading behaviour on jackrabbit-api and default classloading Glassfish Policy References: <4EF92497.7000209@comhem.se> <4EF9CEB2.3020901@milso.se> <4EFCE9E7.50002@comhem.se> In-Reply-To: Content-Type: multipart/mixed; boundary="------------090407050500040906090407" X-Originating-IP: 80.216.182.58 X-Scan-Result: No virus found in message 1RiG2Q-0002Zc-I5. X-Scan-Signature: ch-smtp05.sth.basefarm.net 1RiG2Q-0002Zc-I5 591c0fc1ba4440b38f7c5c16478c0666 X-Virus-Checked: Checked by ClamAV on apache.org --------------090407050500040906090407 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Here's a small test for Jackrabbit JCA lookup in Glassfish. To try it out follow these steps 1. Deploy Jackrabbit JCA in Glassfish as I described in my first response. Make sure that the connection resource is named "jcr/Repository" as that is the name used by the EJB in the attached example. 2. Unzip the attached example and build it with Maven "mvn install" 3. Deploy the JcaJackrabbitEar-1.0.0-SNAPSHOT.ear file found in /JcaJackrabbitEar/target/ to Glassfish 4. You should now be able to access a webapp at http://localhost:8080/JcaJackrabbitWeb that contains a link that will create a new Node in the repository using the value of the parameter "name" as the name of the new node. /Pontus On 2012-01-01T00:09:14 CET, Gustavo Henrique Orair wrote: > > Hi Pontus, > > Did you try using my small test example? > Could you provide your small test? > > Br, > Orair. > > 2011/12/29 Pontus Amberg: >> >> The only injection I had in the small test I made was an injection of >> the EJB reference in the servlet that accessed the EJB. Otherwise >> there were no other injection and the jndi lookup worked fine. >> >> /Pontus >> >> >> On 2011-12-27 16:00, Gustavo Henrique Orair wrote: >>> >>> >>> Hi Pontus, >>> >>> I use JcrUtils because my Crawler class where I "inject" the JCR >>> repository were developed to be used both in J2SE and J2EE >>> environment. >>> So, I have a .properties file that inform the uri to be used to get >>> the JCR repository. In tests and J2SE environment, I specify a "file:" >>> scheme and in production and J2EE environment I just change the uri to >>> a "jndi:" scheme. >>> >>> Did you check if there is no injection (annotation or deployment >>> descriptor) in your project when you tested the explicit Jndi lookup? >>> Please, double check this. >>> >>> As I discussed with Glassfish developers, if glassfish finds at least >>> one injection inside the EAR client, it will put the resource adapter >>> available to the application. >>> >>> If you confirm that explicit Jndi lookups works without any resource >>> injection inside the same application project, could you give a try in >>> the ears I've filed in Glassfish issue? >>> http://java.net/jira/browse/GLASSFISH-18082 or >>> http://java.net/jira/secure/attachment/48733/useJackrabbitJCA-ROOT.tar.gz >>> to access the file directly. >>> >>> Thanks for your attention, >>> Orair. >>> >>> 2011/12/27 Pontus Amberg: >>>> >>>> >>>> I tested with a direct lookup >>>> >>>> >>>> InitialContext ctx = new InitialContext(); >>>> Repository repository = (Repository) ctx.lookup("jcr/local"); >>>> and that worked. Why do you want to use JcrUtils? >>>> >>>> /Pontus >>>> >>>> >>>> On Tue Dec 27 13:14:56 2011, Gustavo Henrique Orair wrote: >>>>> >>>>> >>>>> Pontus, >>>>> thank you for your attention. >>>>> >>>>> As I said, I am using JCRUtils.getRepository with an jndi: scheme uri. >>>>> It results in an explicit JNDI lookup for the resources that is >>>>> different from your approach (using injection). >>>>> The derived classloading policy states that the libraries inside >>>>> resource adapter would be available to the application "clients" if >>>>> there is a reference on the application to the resource adapter. >>>>> Since I am using explicit JNDI lookups, Glassfish doesn't find this >>>>> "reference" and the resource adapter doesn't work. >>>>> >>>>> Just as a reference if someone find this page facing similar problems, >>>>> I've created an issue on Glassfish >>>>> http://java.net/jira/browse/GLASSFISH-18082 . >>>>> Btw, I will comment on this issue stating that some JackRabbit users >>>>> successfully used Jackrabbit-JCA using injection. >>>>> >>>>> Br, >>>>> Orair. >>>>> >>>>> 2011/12/26 Pontus Amberg: >>>>>> >>>>>> >>>>>> I'm testing Jackrabbit JCA right now on Glassfish 3.1.1 and I >>>>>> have not >>>>>> encountered any class loading problems. The way I deployed it was to >>>>>> >>>>>> 1. Copy jcr-2.0.jar to >>>>>> /glassfish-3.1.1/glassfish/domains/domain1/lib/ >>>>>> 2. Start glassfish >>>>>> 3. Open Glassfish web admin console at >>>>>> http://localhost:4848 >>>>>> 4. Deploy jackrabbit.rar using >>>>>> Applications->Deploy... >>>>>> 5. Create a new connection pool for jackrabbit.rar using >>>>>> Resources->Connectors->Connector connection pool->New... >>>>>> In step 2 when creating the pool enter values for the Additional >>>>>> Properties named "ConfigFile"& "HomeDir" >>>>>> In my setup they are >>>>>> ConfigFile: /home/pontus/glassfish-3.1.1/jackrabbit/repository.xml >>>>>> HomeDir: /home/pontus/glassfish-3.1.1/jackrabbit >>>>>> I just copied the default repository.xml file created when starting >>>>>> a >>>>>> standalone Jackrabbit and placed it in >>>>>> /home/pontus/glassfish-3.1.1/jackrabbit/ >>>>>> 6. Create a new connection resource named "jcr/local" for the >>>>>> new pool using >>>>>> Resources->Connectors->Connector Resources->New... >>>>>> >>>>>> If I haven't forgotten anything in the steps above you should now be >>>>>> able >>>>>> to inject a reference directly using >>>>>> >>>>>> @Resource(name="jcr/local") >>>>>> private Repository repository; >>>>>> >>>>>> or look it up like this >>>>>> >>>>>> InitialContext ctx = new InitialContext(); >>>>>> Repository repository = (Repository) ctx.lookup("jcr/local"); >>>>>> >>>>>> Using it this way you don't need to include any Jackrabbit jars >>>>>> in you >>>>>> ear archive and you don't need to use JcrUtils. >>>>>> >>>>>> /Pontus >>>>>> >>>>>> >>>>>> On 2011-12-21 17:06, Gustavo Henrique Orair wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> I am trying to make JackRabbit JCA work on Glassfish 3.1.1. In >>>>>>> production, >>>>>>> my client used JCRUtils.getRepository with an jndi: scheme uri. So I >>>>>>> really >>>>>>> get the JCR Repository from JackRabbit JCA using explicit JNDI >>>>>>> lookups >>>>>>> (performed by JndiRepositoryFactory class). >>>>>>> >>>>>>> I successfully make it work if I include the jackrabbit libraries in >>>>>>> my >>>>>>> EAR. But it shouldn't be needed and I started to investigate why it >>>>>>> doesn't >>>>>>> work. >>>>>>> >>>>>>> I've checked the code and tried to understand how JackRabbit JCA >>>>>>> (Resource >>>>>>> Adapter) created the JCR Repository. >>>>>>> >>>>>>> I asked in Glassfish Users and dev list about these problems >>>>>>> (see the >>>>>>> detailed discussion on >>>>>>> >>>>>>> >>>>>>> >>>>>>> http://www.java.net/forum/topic/glassfish/glassfish/jackrabbit-jca-classloading-issues >>>>>>> ). >>>>>>> And looks like the expected classloading policy used on >>>>>>> org.apache.jackrabbit.client.RepositoryFactoryImpl class is >>>>>>> different >>>>>>> from >>>>>>> delivered "derived" classloading policy (Since Glassfish 3.1 >>>>>>> version, >>>>>>> the >>>>>>> Connector Service default policy is "derived" classloading >>>>>>> policy) at >>>>>>> least >>>>>>> for this use case. >>>>>>> >>>>>>> They proposed to me try to change the >>>>>>> org.apache.jackrabbit.client.RepositoryFactoryImpl class code from: >>>>>>> Class repositoryFactoryClass = >>>>>>> Class.forName("org.apache.jackrabbit.core.RepositoryFactoryImpl", >>>>>>> true,Thread.currentThread().getContextClassLoader()); >>>>>>> to: >>>>>>> Class repositoryFactoryClass = >>>>>>> Class.forName("org.apache.jackrabbit.core.RepositoryFactoryImpl"); >>>>>>> >>>>>>> Does someone has already these problems? JackRabbit developers may >>>>>>> tell >>>>>>> me >>>>>>> which are the implications on change the classloader used on >>>>>>> org.apache.jackrabbit.client.RepositoryFactoryImpl from >>>>>>> jackrabbit-api >>>>>>> module? >>>>>>> >>>>>>> Best Regards, >>>>>>> >>>>>>> >>>>>>> >>>>>>> --------------------------------------------------------------------------------------------------------------------- >>>>>>> Gustavo Henrique Orair >>>>>>> >>>>>>> >>>>>>> >>>>>>> ------------------------------------------------------------------------------------------------------------------ >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>>> >>> >>> >>> >> >> > > > > --------------090407050500040906090407 Content-Type: application/zip; name="JcaJackrabbit.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="JcaJackrabbit.zip" UEsDBBQDAAAAAPkUJEAAAAAAAAAAAAAAAAARAAAASmNhSmFja3JhYmJpdEVhci9QSwMEFAMA AAgAkQgkQLy6UusQAgAAJgcAABgAAABKY2FKYWNrcmFiYml0RWFyL3BvbS54bWy9VVFv2yAQ fm5+RZV3m7Sb9hAxS5tWaauStlKmda9nfHFIMUaA4/TfDwMlSpZoWSvVT/d99x33mcOYKt2u kdnLbSOk+TxeWaumhDSwQZmDArbCvNU1ebifk4/5JJ+Mg3K6NTyp+77P+w9edz2ZXJHf89nC FTaQcWksSIbj0YUrmBrPzloGlrfyjG6XpxRbUwUy87rc4XExuqBNW6H4hdq49QufomSPc5pa t536URUGc92yJ7SGcXQmc4vG5mtgTxrKkltKonIoAm35Eph16JbBbRLdgKYkJb10E1tdDe2z xd2Xh8X3+5+UbHYWlKuHmsu6wKE+wSFXdlwM6ziV6BxpXJyAj/fchF1A0FlQHLhxTzJ0nX9K LmKKtXLJ606DTdxOn9Qps+QC76DBOSg12JVtFhWUHOZiSYVL6ISd8fJrJyuB37guBC8pOZII NX6KnUDjYMA9lnNPvTCvG6J/To/yEcv9zYt68ld7iuv3MHSzPmHosD0laccCPDJWiltk3YC9 ao9JK/OqiGPJ/MHku6ZqBQaLcFKREg9Tsm5BhGUTDCfbR8l3lEWU2p/lp0aJGixmoJTg4QbJ to04YjJJNZq20wzNOX5PNTj7JQ6IoKEkfbgpdhkXv3zntEKFskLJeBjgjnh28HVH6z+P1T8v rSCyzwoLHMp95F9pZ/Y9vD/im7z3oE96jzANgpL4byxGfwBQSwMEFAMAAAAAerKbPwAAAAAA AAAAAAAAABUAAABKY2FKYWNrcmFiYml0RWFyL3NyYy9QSwMEFAMAAAAAsA0kQAAAAAAAAAAA AAAAABoAAABKY2FKYWNrcmFiYml0RWFyL3NyYy9tYWluL1BLAwQUAwAAAACwDSRAAAAAAAAA AAAAAAAAJgAAAEpjYUphY2tyYWJiaXRFYXIvc3JjL21haW4vYXBwbGljYXRpb24vUEsDBBQD AAAAAPwUJEAAAAAAAAAAAAAAAAARAAAASmNhSmFja3JhYmJpdEVqYi9QSwMEFAMAAAgANQQk QJlw3BGIAQAA8QMAABgAAABKY2FKYWNrcmFiYml0RWpiL3BvbS54bWydU0FPwjAYPcOvMNzX DjAeSF3iwUQJCAnGeO26j9EBbdOWgf/ertvoXEI03vbe9177XvONKC0LYPbucjwI8zjaWatm GB9pCQJRRdkOkNQ5Xq+W+B7FKB7VytnF8Kv6fD6j89TrJnE8xp/LxcYZjzTiwlgqGIyGA2eY Gc8uJKOWS/GH2+5uKS4mq8nI65DDo2Q4IEeZweEDtHHnJ35EcJerNLmWJ/WaJQaQlmwP1jAO LiSyYCwqKNtrmqbcEtwqnYlqy7eUWYfmjM6vouciJTgMK2nZXDWuro82b0/rzcvqneAyRFDO T3Mu8gQqf4BuloECkYFwoYzDHeKrgiF/QUt66YYchJjNGCCiivcCDkLEBxSHXH5imFSQKC1L nkFGsMc+Bg45fo+FCqZvR3PD25km/83UwvB2JD3xQ+aV6nDKuajIK/DfIbfUebth9bo1lm6N Xo96A6FIo1rbK/Wz1TS0qkdMii3PT5ramvOkO6xd1Wn1EA0OLtyzea4tFL59fdz0J7j5zZPh N1BLAwQUAwAAAACCFZI/AAAAAAAAAAAAAAAAFQAAAEpjYUphY2tyYWJiaXRFamIvc3JjL1BL AwQUAwAAAAAXAiRAAAAAAAAAAAAAAAAAGgAAAEpjYUphY2tyYWJiaXRFamIvc3JjL21haW4v UEsDBBQDAAAAALYVkj8AAAAAAAAAAAAAAAAfAAAASmNhSmFja3JhYmJpdEVqYi9zcmMvbWFp bi9qYXZhL1BLAwQUAwAAAACCFZI/AAAAAAAAAAAAAAAAKAAAAEpjYUphY2tyYWJiaXRFamIv c3JjL21haW4vamF2YS9NRVRBLUlORi9QSwMECgMAAAAAqhWbP7J/Au4ZAAAAGQAAADMAAABK Y2FKYWNrcmFiYml0RWpiL3NyYy9tYWluL2phdmEvTUVUQS1JTkYvTUFOSUZFU1QuTUZNYW5p ZmVzdC1WZXJzaW9uOiAxLjANCg0KUEsDBBQDAAAAALYVkj8AAAAAAAAAAAAAAAAiAAAASmNh SmFja3JhYmJpdEVqYi9zcmMvbWFpbi9qYXZhL3NlL1BLAwQUAwAAAAC2FZI/AAAAAAAAAAAA AAAAMAAAAEpjYUphY2tyYWJiaXRFamIvc3JjL21haW4vamF2YS9zZS9yb2NrZXRzY2llbmNl L1BLAwQUAwAAAAC2FZI/AAAAAAAAAAAAAAAANQAAAEpjYUphY2tyYWJiaXRFamIvc3JjL21h aW4vamF2YS9zZS9yb2NrZXRzY2llbmNlL3Rlc3QvUEsDBBQDAAAAAOQTJEAAAAAAAAAAAAAA AAA5AAAASmNhSmFja3JhYmJpdEVqYi9zcmMvbWFpbi9qYXZhL3NlL3JvY2tldHNjaWVuY2Uv dGVzdC9lamIvUEsDBBQDAAAIAKgUJEBrwiSCZgIAAGsHAABLAAAASmNhSmFja3JhYmJpdEVq Yi9zcmMvbWFpbi9qYXZhL3NlL3JvY2tldHNjaWVuY2UvdGVzdC9lamIvSmNhSmFja3JhYmJp dC5qYXZhpVRBbtswEDxXr9joRCEF/QDDQNLULRIEAeqkt1xocmMzoUmBXDs2ivy9pCJbsiS3 KcqDKHGXnJ2ZFUshX8QCISD3Tr4gBanRSuSEgTg+z8dZplel8wTPYiO2aYlPb76MB1enW4kl aWcHwvckCA2GMBB78MIGIdPOSyKv52vCD6Y97Mpu6rP0/M6poeUZli5ocn73x2DDo591Hymc iMQVg1ceFVrSwnSZWrHSdsGvrU7RK2cJtzScc1dNrTKyi4N+WbmeGy1BGhEC3EhxEz30Yj7X BFUFqwjfCdw6KQz8yjKIYzSCixkGt/YS2UqUJaqIhzCBPNIYNTLkxT6/9HoT4aGJgW9JWaVd DNnDTnnGZ9MfP69n06/vGDWnjdMKhFLJPnZPPooAURIsgJbevQZoN1nkA/WoTYFQzxOwa2PG hzj5XcpujaOPY0tA0jadgK+dACtqqgfYXSBccbcmHhWyZCzLvyHJpbYtfTjneTFubxzWMWKy JlCkMrhx7mVdsp4x42MCf63q1i207RfSCNau16Rklvj3WprlhIHyz/A+c3JXS+EvvRc7VhTF +HRV+onVYJNJMqfoGPKpcjip3jY5CSq0QQXkYIG0L/isS+Tt3/T4jgTeOQLrFA7okhqwSqhe JntYHkuY1auxG7oE9xv4UoQqperdDzN9WGJVDzzmo/w87T3PH3MQxqNQO8CtDhQGmH+Y9aVS CfYdJJ6fkBqgARkOhIRSDaHBFuJBbPDoD3kDKUgugQ1crIBdVU6IEtH6B9bX438e9qStMKZ7 Megn2DcqnE2g06o91sYtosSs70nzVj3fst9QSwMEFAMAAAgA3RMkQKVWr3dsAAAAiAAAAFAA AABKY2FKYWNrcmFiYml0RWpiL3NyYy9tYWluL2phdmEvc2Uvcm9ja2V0c2NpZW5jZS90ZXN0 L2VqYi9KY2FKYWNrcmFiYml0TG9jYWwuamF2YVWMOQ7DMAwEe76CL9AH0qQ2UuUHFLMJ6EMS JMYwYPjvPjp3i53BFNFBfuCGULMO8KaGpAiO5gF9fBDZVHJ17mWW5bzCK6uMB3heg8o/jqZs yVG/ouBOpTu6VWI0vxzG4kifdkdvTNnBK220A1BLAwQUAwAACACWAyRA8ooerXYAAACLAAAA UQAAAEpjYUphY2tyYWJiaXRFamIvc3JjL21haW4vamF2YS9zZS9yb2NrZXRzY2llbmNlL3Rl c3QvZWpiL0pjYUphY2tyYWJiaXRSZW1vdGUuamF2YSWMOw7CMBBEa3yKLaHxBdJQp6CAE6zX Q7QJ/sheIiTE3UmUbjTv6VWWhSdQh29FFlgXRRZ4QzePOQzOaaqlGc288me//B2pGDZyPZar 7/BSIc2G9mQBjcLjVm4cgtoh0ded1qKROMZbiTg/rGmeKHPCZXA/9wdQSwMEFAMAAAAAHRAk QAAAAAAAAAAAAAAAACQAAABKY2FKYWNrcmFiYml0RWpiL3NyYy9tYWluL3Jlc291cmNlcy9Q SwMEFAMAAAAAARUkQAAAAAAAAAAAAAAAABEAAABKY2FKYWNrcmFiYml0V2ViL1BLAwQUAwAA CAC3CCRANoGa3mADAADdCwAAGAAAAEpjYUphY2tyYWJiaXRXZWIvcG9tLnhtbMVW28oTMRC+ tk8RRRDB3dQDXkhcEFRUrIqKCl6l2ek2mk2WJNsD4rs7f9I2u42L9ULcq2Tmm8k3x5Z11nwD 4cmuVdo9vrH2vntEacs3oEvecbGG0tiGvnu7oA/KeTm/EZGPdk6e0NvtttzeD7h78/ld+mXx +gMatryQ2nmuBdyYXUODRy5IXxvBvTT6gtfIFGLn6igsAq7E+41qdo21pgb1CaxD/1VQMTqS Iaaxpu9e1pWD0hrxHbwTEpBk6cH58hsX3y1fLqVn9IickcPHuPVyxYVH4SvBX52wn2HJaFIO LDaHh+9ekSk+vHny7sOLtx8Z3SRCHbrhjdRNteWW0XSdobKGDnQNGjk6BA8E+6trCucb3/Bd 4hx0iVFQAxRbWBa8k2OyCD3xfFjOE7mgccJ0UGGjbGQNNaPhHqjQMZec2uWZzlnnSX72bZnx viC/CPJ7ZAxX5uH0V2HFayoBSpa9VHWAdqrHSjk8ny7hnGLHbj02buzig8kw5rOgY2ML03ZS gS2iQRZ5Cv1eeb+8lyKOSmH0Sja95f4kw5hNbwVgrh4yGs9Hjee2AR818XzwQzNHKIuU/kXU W35RwHfLuxcFvOJSvdUL6RzOEw7pl1ZV3vbA6G80/yfi1GwXBJ6HDTsQPRKNTZgkR0QgvOYO qg1XsuYeYw/3k7YxXAXjdK1wFvaMhuMRRhMuS3eyNr3vev9UWhDe2H118wcGZ6yDuqyl/cno GSBZOqlA+0N14iUox1nz0EYOuTyJp5diQuSr8Ug024/JanJLxi8uGvRn06I5Zi9jmsRZYHkL RumgsmcCd9am6ewGe2rBNW+gjZkdby+8XS+Kj2vpSJTecmREgqCmx+wQb4jDygF5JpTsHJD2 HhAH3uMcORKpGq32JXnpCTYa0YZIvVI9aAEEHfk1kMVV65OwR4n0DtSqJEURiaT5ygYM4pMl PjkoalZQJVcg9kJB0fKuQ15ZOcc/HFkxJ9qbnRwvot8FeI4jxSMgcX82rMuEKmky1XOpPFgE JEQKNn1TK2eAOc9Slqqhv4l9NHKXmY6S+Z7rBkY+v+LKunN75CLH5ovoD8soX0hR8qc8Mi7G qUeRbLSxUDEaDyN/I3j+QlLlmsEwT3fNxLSPR/l8lmk+zCg8/CeZMRr/0qP0F1BLAwQUAwAA AAA7F5I/AAAAAAAAAAAAAAAAFQAAAEpjYUphY2tyYWJiaXRXZWIvc3JjL1BLAwQUAwAAAADI vJ0/AAAAAAAAAAAAAAAAGgAAAEpjYUphY2tyYWJiaXRXZWIvc3JjL21haW4vUEsDBBQDAAAA AGsXkj8AAAAAAAAAAAAAAAAfAAAASmNhSmFja3JhYmJpdFdlYi9zcmMvbWFpbi9qYXZhL1BL AwQUAwAAAABrF5I/AAAAAAAAAAAAAAAAIgAAAEpjYUphY2tyYWJiaXRXZWIvc3JjL21haW4v amF2YS9zZS9QSwMEFAMAAAAAaxeSPwAAAAAAAAAAAAAAADAAAABKY2FKYWNrcmFiYml0V2Vi L3NyYy9tYWluL2phdmEvc2Uvcm9ja2V0c2NpZW5jZS9QSwMEFAMAAAAAaxeSPwAAAAAAAAAA AAAAADUAAABKY2FKYWNrcmFiYml0V2ViL3NyYy9tYWluL2phdmEvc2Uvcm9ja2V0c2NpZW5j ZS90ZXN0L1BLAwQUAwAAAACNBSRAAAAAAAAAAAAAAAAAPQAAAEpjYUphY2tyYWJiaXRXZWIv c3JjL21haW4vamF2YS9zZS9yb2NrZXRzY2llbmNlL3Rlc3Qvc2VydmxldC9QSwMEFAMAAAgA iRQkQFEJpj3kAgAAqwcAAFYAAABKY2FKYWNrcmFiYml0V2ViL3NyYy9tYWluL2phdmEvc2Uv cm9ja2V0c2NpZW5jZS90ZXN0L3NlcnZsZXQvSmNhSmFja3JhYmJpdFNlcnZsZXQuamF2Yb1U wVLbMBA921+x9ckZGKVcm8kM05YWGAYyhZYLF8XeJEqE5ErrEKbw713ZjomTUNpLc7Bl6e3q vacXFTJbyCmCR+FstkDymUKToSD0JDy6pUYaxLG6L6wjmMulFMqKs6uTVYYFKWsG22sjpwzd OkXouoUrYeS9MlNxZhQpqT9ZQ7iiwV7MZfXav8tqTUxc1++3YNIYSzIAxC2Om6JXsDOiQpzy 499g3/Bnif7v0b6wxmNr0CsHgPOxOM/kOZ+Sk+OxogubSc1Vxy860qTfgSS9uCjHWmWQaek9 dBabGmDf0eQeNjjBrziOCqeWkhB8sCuDiTJSg7ZmCixFSf0DnWcbv599hiEcXTCTfj86Pjn/ GN67TGG+OTWIozg6vlqicyrHsJklzAhzWFqVQ26/sppdT8HV70PY4yC4ZtADmjn74GE7E4ew kVYWGUXd/IEym19DMKXWTPVNOcM1cCPxYEtu0ZISU2wW0t4gZmi/DyMtlYFqryYePN8WeKSK iaGbxwLTJOD6RShJ2g4X1i7KAth15u4JZQ7W8HCOWdDIIHKPldJoRxs+QFc+EwvAjjIGprvq e51mQlcs0iQk/cNU27HU3SCeSLc1MR9vRzXs/QyZpGwG6dZ/HvCoV6tgU0URTNYmTb5IpTEH sqBbH94ltQo8qnHXxHvcOJlhyrW81jSZ6NLPGsUOqXSmIhBHwL/6yf5yDIGvIQQ7qQwzNscq XeV0BoV0vEToavg1OeZcw4frpIZjH61xaRIWmWBdoCZp+B5W6YGnp6pUcJf7tCc0mikxweHw PUuvC6IKnpyi1jZpmmwzPjNLu8AqEdLkkDmUhC33GtYxsSpg4qFECNGy65oUZpoohXE3/kLm +SV3r+QE9O4uNzN0CH4mtWYiDzBGkBBqKtE53CXJQRgdJHcJKMMeIzhrKRjvsLBekXWPL+ya pKQbEXmxCfcefdewfSKf4z9fSiPr/8utVF9/bde2Q03xOf4NUEsDBBQDAAAAAJW1nj8AAAAA AAAAAAAAAAAkAAAASmNhSmFja3JhYmJpdFdlYi9zcmMvbWFpbi9yZXNvdXJjZXMvUEsDBBQD AAAAAIu1nj8AAAAAAAAAAAAAAAAhAAAASmNhSmFja3JhYmJpdFdlYi9zcmMvbWFpbi93ZWJh cHAvUEsDBBQDAAAAADsXkj8AAAAAAAAAAAAAAAAqAAAASmNhSmFja3JhYmJpdFdlYi9zcmMv bWFpbi93ZWJhcHAvTUVUQS1JTkYvUEsDBAoDAAAAACIYkj+yfwLuGQAAABkAAAA1AAAASmNh SmFja3JhYmJpdFdlYi9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUZNYW5p ZmVzdC1WZXJzaW9uOiAxLjANCg0KUEsDBBQDAAAAAC0JJEAAAAAAAAAAAAAAAAApAAAASmNh SmFja3JhYmJpdFdlYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9QSwMEFAMAAAgAGRiSP9zL 62KpAAAA/AAAADIAAABKY2FKYWNrcmFiYml0V2ViL3NyYy9tYWluL3dlYmFwcC9XRUItSU5G L2JlYW5zLnhtbIWOvQ6CMBSFZ3mKprst6GIIP5sTTmriRkrbQIncGm6lPL5NMa7e8bvfyTlF vU5PsugZjYWSZiylRIO0ykBf0vvtvD/RukqKTgtAElzAkg7OvXLOR7EIhm9g0k48vDhgZFrT zcxXND/be8/8kdm554c0zfjj0lzloCexN4BOgNQ02YVAjpE2VgoXN/1tI19DWYls7CxibJHK 8Di7zdqUraholZBwSbHh6gNQSwMEFAMAAAAAOxeSPwAAAAAAAAAAAAAAAC0AAABKY2FKYWNr cmFiYml0V2ViL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2xpYi9QSwMEFAMAAAgAKAkkQNdZ ehH5AAAA5gEAADAAAABKY2FKYWNrcmFiYml0V2ViL3NyYy9tYWluL3dlYmFwcC9XRUItSU5G L3dlYi54bWyNkE1PhDAQhs/LryC9t2WXmBhS2JgYEzfrSY3eSCnjUi2F0LrFf+9IUEOyB67v xzwzI/Zja+IzDE53NidblpAYrOpqbU85eX66o9dkX0QiQEVl38eYti4bnc5J432fcR5CYCFl 3XDiuyTZ8teH46NqoJVUW+elVUCizVT7q7zLs2Tu0zLVtRwtbt2kAZAZgLgVaT5vVe7KKza6 +gfkdOYm/LFT0uNRK+bE60lpmcwkXefkBaobFO9vyf8LU3xhEW1ErV1v5Be1soXioORBqo9B VpX22BJ8YWM8gEEq0DdtgBrtPIpLtdC2hpE1vjWCLwys8wt98bt18Q1QSwMEFAMAAAgALgsk QLEyWQXvAAAASwEAACsAAABKY2FKYWNrcmFiYml0V2ViL3NyYy9tYWluL3dlYmFwcC9pbmRl eC5odG1sdU9NT4NAED23v2LcO4ymPRgFTIQa21RtzDaNxwXGQrrs4jKC/fey6LWnl3kv8z6i q+wtlR+7FVTcaNjtH7frFESAeFikiJnM4Fm+bGEZXt+AdMp0NdfWKI24ehUgKub2DnEYhnBY hNYdUb6jt1qitrajsORSJPPIUx5IlSM0xAr8a0Bf33Ufi9QaJsOBPLckoPi7YsH0w5PbPRSV ch1xvJdPwa135Jo1JZI6hlYdKcKJGAX8D8lteU7ms7Xp7YmAK4KOXK+JoSJHMJ9FYwdHn7HY FGqjipNTeV7zg1ENxQfr9Fj8khKh8kk+wuO07hdQSwMEFAMAAAgACAEkQKIM88lHAQAAzwIA AAcAAABwb20ueG1sjZHNbsIwEITP5ClQ7rFD20OF3Eg9ULUIChL05+o422BIbMt2CI9f4wQa olI1J+/stzMbmygtt8Ds8FAWwjyEG2vVGOOS7kEgqijbAJI6x8vFHN+hGMVhQ44Php/puq5R feu5mzge4c/5bOUGSxpxYSwVDMJg4AbGxqszyajlUvwjbXiNOJisESPPIVeHQRIMSCkzKN5B GxeQ+B7BF1rgoFzLSr1kiQGkJduBNYyDWxNZMBZtKdtpmqbcEnwi3RDVln9RZl01ZXTagTod x+3boNExPFq9Pi5Xz4s1wSfdIcoN05yLPFGyJPhc+uUELaGfcNR8U2mpwMWBcT6D0+uhtOJF hoysNIOJYDI7mr2tn6J7gv9knCXuejY3WBXevz33tplsU4KbxnWG6h9m2Pt+nfiArmt7bDfK QIHIQDC3om9eCudfTIJvUEsBAj8DFAMAAAAA+RQkQAAAAAAAAAAAAAAAABEAAAAAAAAAAAAQ gP1BAAAAAEpjYUphY2tyYWJiaXRFYXIvUEsBAj8DFAMAAAgAkQgkQLy6UusQAgAAJgcAABgA AAAAAAAAAAAggLSBLwAAAEpjYUphY2tyYWJiaXRFYXIvcG9tLnhtbFBLAQI/AxQDAAAAAHqy mz8AAAAAAAAAAAAAAAAVAAAAAAAAAAAAEID9QXUCAABKY2FKYWNrcmFiYml0RWFyL3NyYy9Q SwECPwMUAwAAAACwDSRAAAAAAAAAAAAAAAAAGgAAAAAAAAAAABCA/UGoAgAASmNhSmFja3Jh YmJpdEVhci9zcmMvbWFpbi9QSwECPwMUAwAAAACwDSRAAAAAAAAAAAAAAAAAJgAAAAAAAAAA ABCA/UHgAgAASmNhSmFja3JhYmJpdEVhci9zcmMvbWFpbi9hcHBsaWNhdGlvbi9QSwECPwMU AwAAAAD8FCRAAAAAAAAAAAAAAAAAEQAAAAAAAAAAABCA/UEkAwAASmNhSmFja3JhYmJpdEVq Yi9QSwECPwMUAwAACAA1BCRAmXDcEYgBAADxAwAAGAAAAAAAAAAAACCAtIFTAwAASmNhSmFj a3JhYmJpdEVqYi9wb20ueG1sUEsBAj8DFAMAAAAAghWSPwAAAAAAAAAAAAAAABUAAAAAAAAA AAAQgP1BEQUAAEpjYUphY2tyYWJiaXRFamIvc3JjL1BLAQI/AxQDAAAAABcCJEAAAAAAAAAA AAAAAAAaAAAAAAAAAAAAEID9QUQFAABKY2FKYWNrcmFiYml0RWpiL3NyYy9tYWluL1BLAQI/ AxQDAAAAALYVkj8AAAAAAAAAAAAAAAAfAAAAAAAAAAAAEID9QXwFAABKY2FKYWNrcmFiYml0 RWpiL3NyYy9tYWluL2phdmEvUEsBAj8DFAMAAAAAghWSPwAAAAAAAAAAAAAAACgAAAAAAAAA AAAQgP1BuQUAAEpjYUphY2tyYWJiaXRFamIvc3JjL21haW4vamF2YS9NRVRBLUlORi9QSwEC PwMKAwAAAACqFZs/sn8C7hkAAAAZAAAAMwAAAAAAAAAAACCAtIH/BQAASmNhSmFja3JhYmJp dEVqYi9zcmMvbWFpbi9qYXZhL01FVEEtSU5GL01BTklGRVNULk1GUEsBAj8DFAMAAAAAthWS PwAAAAAAAAAAAAAAACIAAAAAAAAAAAAQgP1BaQYAAEpjYUphY2tyYWJiaXRFamIvc3JjL21h aW4vamF2YS9zZS9QSwECPwMUAwAAAAC2FZI/AAAAAAAAAAAAAAAAMAAAAAAAAAAAABCA/UGp BgAASmNhSmFja3JhYmJpdEVqYi9zcmMvbWFpbi9qYXZhL3NlL3JvY2tldHNjaWVuY2UvUEsB Aj8DFAMAAAAAthWSPwAAAAAAAAAAAAAAADUAAAAAAAAAAAAQgP1B9wYAAEpjYUphY2tyYWJi aXRFamIvc3JjL21haW4vamF2YS9zZS9yb2NrZXRzY2llbmNlL3Rlc3QvUEsBAj8DFAMAAAAA 5BMkQAAAAAAAAAAAAAAAADkAAAAAAAAAAAAQgP1BSgcAAEpjYUphY2tyYWJiaXRFamIvc3Jj L21haW4vamF2YS9zZS9yb2NrZXRzY2llbmNlL3Rlc3QvZWpiL1BLAQI/AxQDAAAIAKgUJEBr wiSCZgIAAGsHAABLAAAAAAAAAAAAIIC0gaEHAABKY2FKYWNrcmFiYml0RWpiL3NyYy9tYWlu L2phdmEvc2Uvcm9ja2V0c2NpZW5jZS90ZXN0L2VqYi9KY2FKYWNrcmFiYml0LmphdmFQSwEC PwMUAwAACADdEyRApVavd2wAAACIAAAAUAAAAAAAAAAAACCAtIFwCgAASmNhSmFja3JhYmJp dEVqYi9zcmMvbWFpbi9qYXZhL3NlL3JvY2tldHNjaWVuY2UvdGVzdC9lamIvSmNhSmFja3Jh YmJpdExvY2FsLmphdmFQSwECPwMUAwAACACWAyRA8ooerXYAAACLAAAAUQAAAAAAAAAAACCA tIFKCwAASmNhSmFja3JhYmJpdEVqYi9zcmMvbWFpbi9qYXZhL3NlL3JvY2tldHNjaWVuY2Uv dGVzdC9lamIvSmNhSmFja3JhYmJpdFJlbW90ZS5qYXZhUEsBAj8DFAMAAAAAHRAkQAAAAAAA AAAAAAAAACQAAAAAAAAAAAAQgP1BLwwAAEpjYUphY2tyYWJiaXRFamIvc3JjL21haW4vcmVz b3VyY2VzL1BLAQI/AxQDAAAAAAEVJEAAAAAAAAAAAAAAAAARAAAAAAAAAAAAEID9QXEMAABK Y2FKYWNrcmFiYml0V2ViL1BLAQI/AxQDAAAIALcIJEA2gZreYAMAAN0LAAAYAAAAAAAAAAAA IIC0gaAMAABKY2FKYWNrcmFiYml0V2ViL3BvbS54bWxQSwECPwMUAwAAAAA7F5I/AAAAAAAA AAAAAAAAFQAAAAAAAAAAABCA/UE2EAAASmNhSmFja3JhYmJpdFdlYi9zcmMvUEsBAj8DFAMA AAAAyLydPwAAAAAAAAAAAAAAABoAAAAAAAAAAAAQgP1BaRAAAEpjYUphY2tyYWJiaXRXZWIv c3JjL21haW4vUEsBAj8DFAMAAAAAaxeSPwAAAAAAAAAAAAAAAB8AAAAAAAAAAAAQgP1BoRAA AEpjYUphY2tyYWJiaXRXZWIvc3JjL21haW4vamF2YS9QSwECPwMUAwAAAABrF5I/AAAAAAAA AAAAAAAAIgAAAAAAAAAAABCA/UHeEAAASmNhSmFja3JhYmJpdFdlYi9zcmMvbWFpbi9qYXZh L3NlL1BLAQI/AxQDAAAAAGsXkj8AAAAAAAAAAAAAAAAwAAAAAAAAAAAAEID9QR4RAABKY2FK YWNrcmFiYml0V2ViL3NyYy9tYWluL2phdmEvc2Uvcm9ja2V0c2NpZW5jZS9QSwECPwMUAwAA AABrF5I/AAAAAAAAAAAAAAAANQAAAAAAAAAAABCA/UFsEQAASmNhSmFja3JhYmJpdFdlYi9z cmMvbWFpbi9qYXZhL3NlL3JvY2tldHNjaWVuY2UvdGVzdC9QSwECPwMUAwAAAACNBSRAAAAA AAAAAAAAAAAAPQAAAAAAAAAAABCA/UG/EQAASmNhSmFja3JhYmJpdFdlYi9zcmMvbWFpbi9q YXZhL3NlL3JvY2tldHNjaWVuY2UvdGVzdC9zZXJ2bGV0L1BLAQI/AxQDAAAIAIkUJEBRCaY9 5AIAAKsHAABWAAAAAAAAAAAAIIC0gRoSAABKY2FKYWNrcmFiYml0V2ViL3NyYy9tYWluL2ph dmEvc2Uvcm9ja2V0c2NpZW5jZS90ZXN0L3NlcnZsZXQvSmNhSmFja3JhYmJpdFNlcnZsZXQu amF2YVBLAQI/AxQDAAAAAJW1nj8AAAAAAAAAAAAAAAAkAAAAAAAAAAAAEID9QXIVAABKY2FK YWNrcmFiYml0V2ViL3NyYy9tYWluL3Jlc291cmNlcy9QSwECPwMUAwAAAACLtZ4/AAAAAAAA AAAAAAAAIQAAAAAAAAAAABCA/UG0FQAASmNhSmFja3JhYmJpdFdlYi9zcmMvbWFpbi93ZWJh cHAvUEsBAj8DFAMAAAAAOxeSPwAAAAAAAAAAAAAAACoAAAAAAAAAAAAQgP1B8xUAAEpjYUph Y2tyYWJiaXRXZWIvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL1BLAQI/AwoDAAAAACIYkj+y fwLuGQAAABkAAAA1AAAAAAAAAAAAIIC0gTsWAABKY2FKYWNrcmFiYml0V2ViL3NyYy9tYWlu L3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRlBLAQI/AxQDAAAAAC0JJEAAAAAAAAAAAAAA AAApAAAAAAAAAAAAEID9QacWAABKY2FKYWNrcmFiYml0V2ViL3NyYy9tYWluL3dlYmFwcC9X RUItSU5GL1BLAQI/AxQDAAAIABkYkj/cy+tiqQAAAPwAAAAyAAAAAAAAAAAAIIC0ge4WAABK Y2FKYWNrcmFiYml0V2ViL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2JlYW5zLnhtbFBLAQI/ AxQDAAAAADsXkj8AAAAAAAAAAAAAAAAtAAAAAAAAAAAAEID9QecXAABKY2FKYWNrcmFiYml0 V2ViL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2xpYi9QSwECPwMUAwAACAAoCSRA11l6EfkA AADmAQAAMAAAAAAAAAAAACCAtIEyGAAASmNhSmFja3JhYmJpdFdlYi9zcmMvbWFpbi93ZWJh cHAvV0VCLUlORi93ZWIueG1sUEsBAj8DFAMAAAgALgskQLEyWQXvAAAASwEAACsAAAAAAAAA AAAggLSBeRkAAEpjYUphY2tyYWJiaXRXZWIvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWxQ SwECPwMUAwAACAAIASRAogzzyUcBAADPAgAABwAAAAAAAAAAACCAtIGxGgAAcG9tLnhtbFBL BQYAAAAAKAAoAG8NAAAdHAAAAAA= --------------090407050500040906090407--