<div dir="ltr"><div style><br></div><div><h1 style="font-size:28px;margin:0px 0px 10px;padding:0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif">AeroGear Camel/SwitchYard Integration</h1><p style="margin:0px 0px 15px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">
There have been inquiries about how existing services could be exposed using AeroGear Controller, and this document will try to sort out why someone would want to do this, and also try to come up with some possible solutions.</p>
<h2 style="margin:20px 0px 10px;padding:0px;font-size:24px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(204,204,204);color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif">Why would you want to do this?</h2>
<p style="margin:0px 0px 15px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">Currently one can already expose a service as a RESTful endpoint in Camel using Camel&#39;s <a href="http://camel.apache.org/cxfrs.html" style="color:rgb(65,131,196);text-decoration:initial">CXFRS Component</a>. The same goes for a service in SwitchYard that can be exposed using the <a href="https://docs.jboss.org/author/display/SWITCHYARD/RESTEasy+Bindings" style="color:rgb(65,131,196);text-decoration:initial">RestEasy Component</a>.</p>
<p style="margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">So, a few reasons why users might opt to expose their services through AeroGear controller:</p>
<ul style="margin:15px 0px;padding:0px 0px 0px 30px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px"><li>Consistent way of exposing enterprise services externally for mobil developers<br style="margin-top:0px">
</li><li>Security</li></ul><h2 style="margin:20px 0px 10px;padding:0px;font-size:24px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(204,204,204);color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif">
Camel Integration</h2><p style="margin:0px 0px 15px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">Using Camel to integrate with existing services is a great option as Camel has a huge number of <a href="http://camel.apache.org/components.html" style="color:rgb(65,131,196);text-decoration:initial">components</a>. There is a SwitchYard Camel component too, so integrating with SwitchYard would also be possible using Camel. SwitchYard also has a new <a href="https://docs.jboss.org/author/display/SWITCHYARD/Remote+Invoker" style="color:rgb(65,131,196);text-decoration:initial">RemoteInvoker</a> which could be used for SwitchYard specific services and would be a separate controller class.</p>
<p style="margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">The goal here is to make things as flexibile as possible as it is difficult to try to account for different types of services. As a suggestion, an AeroGear Controller route that invokes a service using Camel might look like this:</p>
<div class="" style="border:none;padding:0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px"><pre style="font-size:13px;line-height:19px;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;word-wrap:break-word;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(204,204,204);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">
<span class="" style="font-weight:bold">public</span> <span class="" style="font-weight:bold">class</span> <span class="" style="color:rgb(68,85,136);font-weight:bold">Routes</span> <span class="" style="font-weight:bold">extends</span> <span class="">AbstractRoutingModule</span> <span class="" style="font-weight:bold">{</span>

    <span class="">@Override</span>
    <span class="" style="font-weight:bold">public</span> <span class="" style="color:rgb(68,85,136);font-weight:bold">void</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">configuration</span><span class="" style="font-weight:bold">()</span> <span class="" style="font-weight:bold">throws</span> <span class="">Exception</span> <span class="" style="font-weight:bold">{</span>
        <span class="">route</span><span class="" style="font-weight:bold">()</span>
               <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">from</span><span class="" style="font-weight:bold">(</span><span class="" style="color:rgb(221,17,68)">&quot;/cars/{id}&quot;</span><span class="" style="font-weight:bold">)</span>
               <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">on</span><span class="" style="font-weight:bold">(</span><span class="">RequestMethod</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">GET</span><span class="" style="font-weight:bold">)</span>
               <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">to</span><span class="" style="font-weight:bold">(</span><span class="">CarServiceController</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">class</span><span class="" style="font-weight:bold">).</span><span class="" style="color:rgb(0,128,128)">getCar</span><span class="" style="font-weight:bold">(</span><span class="" style="color:rgb(221,17,68)">&quot;direct://input&quot;</span><span class="" style="font-weight:bold">,</span> <span class="">param</span><span class="" style="font-weight:bold">(</span><span class="" style="color:rgb(221,17,68)">&quot;id&quot;</span><span class="" style="font-weight:bold">));</span>
    <span class="" style="font-weight:bold">}</span>
<span class="" style="font-weight:bold">}</span>
</pre></div><p style="margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">CarServiceController.class might look something like this:</p><div class="" style="border:none;padding:0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">
<pre style="font-size:13px;line-height:19px;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;word-wrap:break-word;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(204,204,204);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">
<span class="" style="font-weight:bold">public</span> <span class="" style="font-weight:bold">class</span> <span class="" style="color:rgb(68,85,136);font-weight:bold">CarServiceController</span> <span class="" style="font-weight:bold">extends</span> <span class="">CamelController</span> <span class="" style="font-weight:bold">{</span>

    <span class="" style="font-weight:bold">public</span> <span class="">String</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">getCar</span><span class="" style="font-weight:bold">(</span><span class="" style="font-weight:bold">final</span> <span class="">String</span> <span class="">endpointUri</span><span class="" style="font-weight:bold">,</span> <span class="" style="font-weight:bold">final</span> <span class="">String</span> <span class="">id</span><span class="" style="font-weight:bold">)</span> <span class="" style="font-weight:bold">{</span>
        <span class="" style="font-weight:bold">return</span> <span class="" style="font-weight:bold">(</span><span class="">String</span><span class="" style="font-weight:bold">)</span> <span class="">producerTemplate</span><span class="" style="font-weight:bold">().</span><span class="" style="color:rgb(0,128,128)">requestBody</span><span class="" style="font-weight:bold">(</span><span class="">endpointUri</span><span class="" style="font-weight:bold">,</span> <span class="">Long</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">valueOf</span><span class="" style="font-weight:bold">(</span><span class="">id</span><span class="" style="font-weight:bold">));</span>
    <span class="" style="font-weight:bold">}</span>
<span class="" style="font-weight:bold">}</span>
</pre></div><p style="margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">CamelController is very simple and gets injected with a CdiCamelContext and creates the ProducerTemplate.</p>
<div class="" style="border:none;padding:0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px"><pre style="font-size:13px;line-height:19px;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;word-wrap:break-word;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(204,204,204);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">
<span class="" style="font-weight:bold">public</span> <span class="" style="font-weight:bold">abstract</span> <span class="" style="font-weight:bold">class</span> <span class="" style="color:rgb(68,85,136);font-weight:bold">CamelController</span> <span class="" style="font-weight:bold">{</span>

    <span class="">@Inject</span>
    <span class="" style="font-weight:bold">private</span> <span class="">CdiCamelContext</span> <span class="">camelContext</span><span class="" style="font-weight:bold">;</span> 
    <span class="" style="font-weight:bold">private</span> <span class="" style="font-weight:bold">final</span> <span class="">ProducerTemplate</span> <span class="">producer</span><span class="" style="font-weight:bold">;</span>

    <span class="" style="font-weight:bold">public</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">CamelController</span><span class="" style="font-weight:bold">()</span> <span class="" style="font-weight:bold">{</span>
        <span class="">producer</span> <span class="" style="font-weight:bold">=</span> <span class="" style="font-weight:bold">this</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">camelContext</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">createProducerTemplate</span><span class="" style="font-weight:bold">();</span>
    <span class="" style="font-weight:bold">}</span>

    <span class="" style="font-weight:bold">protected</span> <span class="">ProducerTemplate</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">producerTemplate</span><span class="" style="font-weight:bold">()</span> <span class="" style="font-weight:bold">{</span>
        <span class="" style="font-weight:bold">return</span> <span class="">producer</span><span class="" style="font-weight:bold">;</span>
    <span class="" style="font-weight:bold">}</span>
<span class="" style="font-weight:bold">}</span>
</pre></div><p style="margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">We are simply making an instance of <a href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/ProducerTemplate.html" style="color:rgb(65,131,196);text-decoration:initial">ProducerTemplate</a> available to users, and they have access to all the methods of that interface. This will enable users to send one way messages, request/response messages, and also prepare the arguments to the service and process the result if needed.</p>
<p style="margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">A ProducerTemplate is created from a CamelContext. One can have multiple CamelContext&#39;s per application/deployment but the most common is that each deployment has one CamelContext. In this case we are injecting CdiCamelContext.</p>
<p style="margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">We could also add additional methods from ProducerTemplate to CamelController which just delegate, for example:</p>
<div class="" style="border:none;padding:0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px"><pre style="font-size:13px;line-height:19px;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;word-wrap:break-word;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(204,204,204);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">
<span class="" style="font-weight:bold">public</span> <span class="" style="font-weight:bold">abstract</span> <span class="" style="font-weight:bold">class</span> <span class="" style="color:rgb(68,85,136);font-weight:bold">CamelController</span> <span class="" style="font-weight:bold">{</span>

    <span class="">@Inject</span>
    <span class="" style="font-weight:bold">private</span> <span class="">CdiCamelContext</span> <span class="">camelContext</span><span class="" style="font-weight:bold">;</span> 
    <span class="" style="font-weight:bold">private</span> <span class="" style="font-weight:bold">final</span> <span class="">ProducerTemplate</span> <span class="">producer</span><span class="" style="font-weight:bold">;</span>

    <span class="" style="font-weight:bold">public</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">CamelController</span><span class="" style="font-weight:bold">()</span> <span class="" style="font-weight:bold">{</span>
        <span class="">producer</span> <span class="" style="font-weight:bold">=</span> <span class="" style="font-weight:bold">this</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">camelContext</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">createProducerTemplate</span><span class="" style="font-weight:bold">();</span>
    <span class="" style="font-weight:bold">}</span>

    <span class="" style="font-weight:bold">protected</span> <span class="">ProducerTemplate</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">producerTemplate</span><span class="" style="font-weight:bold">()</span> <span class="" style="font-weight:bold">{</span>
        <span class="" style="font-weight:bold">return</span> <span class="">producer</span><span class="" style="font-weight:bold">;</span>
    <span class="" style="font-weight:bold">}</span>

    <span class="" style="font-weight:bold">protected</span> <span class="">Object</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">requestBody</span><span class="" style="font-weight:bold">(</span><span class="" style="font-weight:bold">final</span> <span class="">String</span> <span class="">endpointUri</span><span class="" style="font-weight:bold">,</span> <span class="" style="font-weight:bold">final</span> <span class="">Object</span> <span class="">body</span><span class="" style="font-weight:bold">)</span> <span class="" style="font-weight:bold">{</span>
        <span class="" style="font-weight:bold">return</span> <span class="">producer</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">requestBody</span><span class="" style="font-weight:bold">(</span><span class="">endpointUri</span><span class="" style="font-weight:bold">,</span> <span class="">body</span><span class="" style="font-weight:bold">);</span>
    <span class="" style="font-weight:bold">}</span>
    <span class="" style="color:rgb(153,153,136);font-style:italic">//...more methods like requestBody</span>
<span class="" style="font-weight:bold">}</span>
</pre></div><p style="margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">This would save subclasses from having to call <code style="font-size:12px;line-height:normal;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;margin:0px 2px;padding:0px 5px;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;white-space:nowrap">producerTemplate()</code>.</p>
<h2 style="margin:20px 0px 10px;padding:0px;font-size:24px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(204,204,204);color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif">SwitchYard Integration</h2>
<p style="margin:0px 0px 15px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">As mentioned above, SwitchYard has a RemoveInvoker that could be used for invoking services from a remote client. This could be used in an AeroGear route:</p>
<div class="" style="border:none;padding:0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px"><pre style="font-size:13px;line-height:19px;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;word-wrap:break-word;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(204,204,204);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">
<span class="" style="font-weight:bold">public</span> <span class="" style="font-weight:bold">class</span> <span class="" style="color:rgb(68,85,136);font-weight:bold">Routes</span> <span class="" style="font-weight:bold">extends</span> <span class="">AbstractRoutingModule</span> <span class="" style="font-weight:bold">{</span>

    <span class="">@Override</span>
    <span class="" style="font-weight:bold">public</span> <span class="" style="color:rgb(68,85,136);font-weight:bold">void</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">configuration</span><span class="" style="font-weight:bold">()</span> <span class="" style="font-weight:bold">throws</span> <span class="">Exception</span> <span class="" style="font-weight:bold">{</span>
        <span class="">route</span><span class="" style="font-weight:bold">()</span>
               <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">from</span><span class="" style="font-weight:bold">(</span><span class="" style="color:rgb(221,17,68)">&quot;/server1/{id}&quot;</span><span class="" style="font-weight:bold">)</span>
               <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">on</span><span class="" style="font-weight:bold">(</span><span class="">RequestMethod</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">GET</span><span class="" style="font-weight:bold">)</span>
               <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">to</span><span class="" style="font-weight:bold">(</span><span class="">SwitchYard</span><span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">class</span><span class="" style="font-weight:bold">).</span><span class="" style="color:rgb(0,128,128)">invoke</span><span class="" style="font-weight:bold">(</span>
                   <span class="" style="color:rgb(221,17,68)">&quot;<a href="http://localhost:8080/switchyard-remote">http://localhost:8080/switchyard-remote</a>&quot;</span><span class="" style="font-weight:bold">,</span>
                   <span class="" style="color:rgb(221,17,68)">&quot;CarService&quot;</span><span class="" style="font-weight:bold">,</span> 
                   <span class="">pathParam</span><span class="" style="font-weight:bold">(</span><span class="" style="color:rgb(221,17,68)">&quot;id&quot;</span><span class="" style="font-weight:bold">));</span>
    <span class="" style="font-weight:bold">}</span>
<span class="" style="font-weight:bold">}</span>
</pre></div><p style="margin:15px 0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">SwitchYard is again very simple:</p><div class="" style="border:none;padding:0px;color:rgb(0,0,0);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px;margin-bottom:0px!important">
<pre style="font-size:13px;line-height:19px;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;word-wrap:break-word;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(204,204,204);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">
<span class="" style="font-weight:bold">public</span> <span class="" style="font-weight:bold">class</span> <span class="" style="color:rgb(68,85,136);font-weight:bold">SwitchYard</span> <span class="" style="font-weight:bold">{</span>

    <span class="" style="font-weight:bold">public</span> <span class="" style="font-weight:bold">static</span> <span class="" style="font-weight:bold">final</span> <span class="">String</span> <span class="">REMOTE_SERVICE</span> <span class="" style="font-weight:bold">=</span> <span class="" style="color:rgb(221,17,68)">&quot;urn:com.example.switchyard:remote&quot;</span><span class="" style="font-weight:bold">;</span>

    <span class="" style="font-weight:bold">public</span> <span class="">Object</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">invoke</span><span class="" style="font-weight:bold">(</span><span class="" style="font-weight:bold">final</span> <span class="">String</span> <span class="">url</span><span class="" style="font-weight:bold">,</span> 
                         <span class="" style="font-weight:bold">final</span> <span class="">String</span> <span class="">serviceName</span><span class="" style="font-weight:bold">,</span> 
                         <span class="" style="font-weight:bold">final</span> <span class="">Object</span> <span class="">payload</span><span class="" style="font-weight:bold">)</span> <span class="" style="font-weight:bold">throws</span> <span class="">IOException</span> <span class="" style="font-weight:bold">{</span>
        <span class="" style="font-weight:bold">return</span> <span class="" style="font-weight:bold">new</span> <span class="" style="color:rgb(153,0,0);font-weight:bold">HttpInvoker</span><span class="" style="font-weight:bold">(</span><span class="">url</span><span class="" style="font-weight:bold">).</span><span class="" style="color:rgb(0,128,128)">invoke</span><span class="" style="font-weight:bold">(</span><span class="" style="font-weight:bold">new</span> <span class="">RemoteMessage</span><span class="" style="font-weight:bold">()</span>
                <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">setContext</span><span class="" style="font-weight:bold">(</span><span class="" style="font-weight:bold">new</span> <span class="">DefaultContext</span><span class="" style="font-weight:bold">())</span>
                <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">setService</span><span class="" style="font-weight:bold">(</span><span class="" style="font-weight:bold">new</span> <span class="">QName</span><span class="" style="font-weight:bold">(</span><span class="">REMOTE_SERVICE</span><span class="" style="font-weight:bold">,</span> <span class="">serviceName</span><span class="" style="font-weight:bold">))</span>
                <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">setContent</span><span class="" style="font-weight:bold">(</span><span class="">payload</span><span class="" style="font-weight:bold">))</span>
                <span class="" style="font-weight:bold">.</span><span class="" style="color:rgb(0,128,128)">getContent</span><span class="" style="font-weight:bold">();</span>
    <span class="" style="font-weight:bold">}</span>   
<span class="" style="font-weight:bold">}</span></pre><pre style="font-size:13px;line-height:19px;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;word-wrap:break-word;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(204,204,204);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">
<span style="color:rgb(34,34,34);font-family:arial;font-size:small;line-height:normal;white-space:normal;background-color:rgb(255,255,255)">The original gist can be found here: <a href="https://gist.github.com/4152998">https://gist.github.com/4152998</a></span><br style="color:rgb(34,34,34);font-family:arial;font-size:small;line-height:normal;white-space:normal;background-color:rgb(255,255,255)">
</pre><div><span style="color:rgb(34,34,34);font-family:arial;font-size:small;line-height:normal;white-space:normal;background-color:rgb(255,255,255)"><br></span></div></div></div></div>