You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by bo...@apache.org on 2016/04/11 23:15:31 UTC

svn commit: r1738648 [7/12] - in /storm/site: publish/ publish/releases/0.9.6/ publish/releases/0.9.6/images/ publish/releases/0.9.6/images/logocontest/ publish/releases/0.9.6/images/logocontest/abartos/ publish/releases/0.9.6/images/logocontest/cboust...

Added: storm/site/publish/releases/0.9.6/storm-kafka.html
URL: http://svn.apache.org/viewvc/storm/site/publish/releases/0.9.6/storm-kafka.html?rev=1738648&view=auto
==============================================================================
--- storm/site/publish/releases/0.9.6/storm-kafka.html (added)
+++ storm/site/publish/releases/0.9.6/storm-kafka.html Mon Apr 11 21:15:29 2016
@@ -0,0 +1,476 @@
+<!DOCTYPE html>
+<html>
+    <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+    <link rel="icon" href="/favicon.ico" type="image/x-icon">
+
+    <title>Storm Kafka Integration</title>
+
+    <!-- Bootstrap core CSS -->
+    <link href="/assets/css/bootstrap.min.css" rel="stylesheet">
+    <!-- Bootstrap theme -->
+    <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet">
+
+    <!-- Custom styles for this template -->
+    <link rel="stylesheet" href="http://fortawesome.github.io/Font-Awesome/assets/font-awesome/css/font-awesome.css">
+    <link href="/css/style.css" rel="stylesheet">
+    <link href="/assets/css/owl.theme.css" rel="stylesheet">
+    <link href="/assets/css/owl.carousel.css" rel="stylesheet">
+    <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
+    <script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>
+    <script type="text/javascript" src="/assets/js/owl.carousel.min.js"></script>
+    <script type="text/javascript" src="/assets/js/storm.js"></script>
+    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
+    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
+    
+    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
+    <!--[if lt IE 9]>
+      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+    <![endif]-->
+  </head>
+
+
+  <body>
+    <header>
+  <div class="container-fluid">
+     <div class="row">
+          <div class="col-md-5">
+            <a href="/index.html"><img src="/images/logo.png" class="logo" /></a>
+          </div>
+          <div class="col-md-5">
+            
+              <h1>Version: 0.9.6</h1>
+            
+          </div>
+          <div class="col-md-2">
+            <a href="/releases.html" class="btn-std btn-block btn-download">Download</a>
+          </div>
+        </div>
+    </div>
+</header>
+<!--Header End-->
+<!--Navigation Begin-->
+<div class="navbar" role="banner">
+  <div class="container-fluid">
+      <div class="navbar-header">
+          <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+            </button>
+        </div>
+        <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
+          <ul class="nav navbar-nav">
+              <li><a href="/index.html" id="home">Home</a></li>
+                <li><a href="/getting-help.html" id="getting-help">Getting Help</a></li>
+                <li><a href="/about/integrates.html" id="project-info">Project Information</a></li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="documentation">Documentation <b class="caret"></b></a>
+                    <ul class="dropdown-menu">
+                      
+                        
+                          <li><a href="/releases/2.0.0-SNAPSHOT/index.html">2.0.0-SNAPSHOT</a></li>
+                        
+                      
+                        
+                          <li><a href="/releases/1.0.0-SNAPSHOT/index.html">1.0.0-SNAPSHOT</a></li>
+                        
+                      
+                        
+                      
+                        
+                          <li><a href="/releases/0.10.0/index.html">0.10.0</a></li>
+                        
+                      
+                        
+                          <li><a href="/releases/0.9.6/index.html">0.9.6</a></li>
+                        
+                      
+                        
+                      
+                        
+                      
+                        
+                      
+                        
+                      
+                        
+                      
+                    </ul>
+                </li>
+                <li><a href="/talksAndVideos.html">Talks and Slideshows</a></li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="contribute">Community <b class="caret"></b></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/contribute/Contributing-to-Storm.html">Contributing</a></li>
+                        <li><a href="/contribute/People.html">People</a></li>
+                        <li><a href="/contribute/BYLAWS.html">ByLaws</a></li>
+                    </ul>
+                </li>
+                <li><a href="/2015/11/05/storm096-released.html" id="news">News</a></li>
+            </ul>
+        </nav>
+    </div>
+</div>
+
+
+
+    <div class="container-fluid">
+    <h1 class="page-title">Storm Kafka Integration</h1>
+          <div class="row">
+           	<div class="col-md-12">
+	             <!-- Documentation -->
+
+<p class="post-meta"></p>
+
+<p>Provides core Storm and Trident spout implementations for consuming data from Apache Kafka 0.8.x.</p>
+
+<h2 id="spouts">Spouts</h2>
+
+<p>We support both Trident and core Storm spouts. For both spout implementations, we use a BrokerHost interface that
+tracks Kafka broker host to partition mapping and kafkaConfig that controls some Kafka related parameters.</p>
+
+<h3 id="brokerhosts">BrokerHosts</h3>
+
+<p>In order to initialize your Kafka spout/emitter you need to construct an instance of the marker interface BrokerHosts. 
+Currently, we support the following two implementations:</p>
+
+<h4 id="zkhosts">ZkHosts</h4>
+
+<p>ZkHosts is what you should use if you want to dynamically track Kafka broker to partition mapping. This class uses 
+Kafka&#39;s ZooKeeper entries to track brokerHost -&gt; partition mapping. You can instantiate an object by calling
+<code>java
+    public ZkHosts(String brokerZkStr, String brokerZkPath) 
+    public ZkHosts(String brokerZkStr)
+</code>
+Where brokerZkStr is just ip:port (e.g. localhost:2181). brokerZkPath is the root directory under which all the topics and
+partition information is stored. By default this is /brokers which is what the default Kafka implementation uses.</p>
+
+<p>By default, the broker-partition mapping is refreshed every 60 seconds from ZooKeeper. If you want to change it, you
+should set host.refreshFreqSecs to your chosen value.</p>
+
+<h4 id="statichosts">StaticHosts</h4>
+
+<p>This is an alternative implementation where broker -&gt; partition information is static. In order to construct an instance
+of this class, you need to first construct an instance of GlobalPartitionInformation.</p>
+<div class="highlight"><pre><code class="language-java" data-lang="java">    <span class="n">Broker</span> <span class="n">brokerForPartition0</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Broker</span><span class="o">(</span><span class="s">"localhost"</span><span class="o">);</span><span class="c1">//localhost:9092</span>
+    <span class="n">Broker</span> <span class="n">brokerForPartition1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Broker</span><span class="o">(</span><span class="s">"localhost"</span><span class="o">,</span> <span class="mi">9092</span><span class="o">);</span><span class="c1">//localhost:9092 but we specified the port explicitly</span>
+    <span class="n">Broker</span> <span class="n">brokerForPartition2</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Broker</span><span class="o">(</span><span class="s">"localhost:9092"</span><span class="o">);</span><span class="c1">//localhost:9092 specified as one string.</span>
+    <span class="n">GlobalPartitionInformation</span> <span class="n">partitionInfo</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GlobalPartitionInformation</span><span class="o">();</span>
+    <span class="n">partitionInfo</span><span class="o">.</span><span class="na">addPartition</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="n">brokerForPartition0</span><span class="o">);</span><span class="c1">//mapping from partition 0 to brokerForPartition0</span>
+    <span class="n">partitionInfo</span><span class="o">.</span><span class="na">addPartition</span><span class="o">(</span><span class="mi">1</span><span class="o">,</span> <span class="n">brokerForPartition1</span><span class="o">);</span><span class="c1">//mapping from partition 1 to brokerForPartition1</span>
+    <span class="n">partitionInfo</span><span class="o">.</span><span class="na">addPartition</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span> <span class="n">brokerForPartition2</span><span class="o">);</span><span class="c1">//mapping from partition 2 to brokerForPartition2</span>
+    <span class="n">StaticHosts</span> <span class="n">hosts</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StaticHosts</span><span class="o">(</span><span class="n">partitionInfo</span><span class="o">);</span>
+</code></pre></div>
+<h3 id="kafkaconfig">KafkaConfig</h3>
+
+<p>The second thing needed for constructing a kafkaSpout is an instance of KafkaConfig. 
+<code>java
+    public KafkaConfig(BrokerHosts hosts, String topic)
+    public KafkaConfig(BrokerHosts hosts, String topic, String clientId)
+</code></p>
+
+<p>The BrokerHosts can be any implementation of BrokerHosts interface as described above. The topic is name of Kafka topic.
+The optional ClientId is used as a part of the ZooKeeper path where the spout&#39;s current consumption offset is stored.</p>
+
+<p>There are 2 extensions of KafkaConfig currently in use.</p>
+
+<p>Spoutconfig is an extension of KafkaConfig that supports additional fields with ZooKeeper connection info and for controlling
+behavior specific to KafkaSpout. The Zkroot will be used as root to store your consumer&#39;s offset. The id should uniquely
+identify your spout.
+<code>java
+public SpoutConfig(BrokerHosts hosts, String topic, String zkRoot, String id);
+public SpoutConfig(BrokerHosts hosts, String topic, String id);
+</code>
+In addition to these parameters, SpoutConfig contains the following fields that control how KafkaSpout behaves:
+```java
+    // setting for how often to save the current Kafka offset to ZooKeeper
+    public long stateUpdateIntervalMs = 2000;</p>
+<div class="highlight"><pre><code class="language-" data-lang="">// Exponential back-off retry settings.  These are used when retrying messages after a bolt
+// calls OutputCollector.fail().
+// Note: be sure to set backtype.storm.Config.MESSAGE_TIMEOUT_SECS appropriately to prevent
+// resubmitting the message while still retrying.
+public long retryInitialDelayMs = 0;
+public double retryDelayMultiplier = 1.0;
+public long retryDelayMaxMs = 60 * 1000;
+
+// if set to true, spout will set Kafka topic as the emitted Stream ID
+public boolean topicAsStreamId = false;
+</code></pre></div><div class="highlight"><pre><code class="language-" data-lang="">Core KafkaSpout only accepts an instance of SpoutConfig.
+
+TridentKafkaConfig is another extension of KafkaConfig.
+TridentKafkaEmitter only accepts TridentKafkaConfig.
+
+The KafkaConfig class also has bunch of public variables that controls your application's behavior. Here are defaults:
+```java
+    public int fetchSizeBytes = 1024 * 1024;
+    public int socketTimeoutMs = 10000;
+    public int fetchMaxWait = 10000;
+    public int bufferSizeBytes = 1024 * 1024;
+    public MultiScheme scheme = new RawMultiScheme();
+    public boolean ignoreZkOffsets = false;
+    public long startOffsetTime = kafka.api.OffsetRequest.EarliestTime();
+    public long maxOffsetBehind = Long.MAX_VALUE;
+    public boolean useStartOffsetTimeIfOffsetOutOfRange = true;
+    public int metricsTimeBucketSizeInSecs = 60;
+</code></pre></div>
+<p>Most of them are self explanatory except MultiScheme.</p>
+
+<h3 id="multischeme">MultiScheme</h3>
+
+<p>MultiScheme is an interface that dictates how the byte[] consumed from Kafka gets transformed into a storm tuple. It
+also controls the naming of your output field.</p>
+<div class="highlight"><pre><code class="language-java" data-lang="java">  <span class="kd">public</span> <span class="n">Iterable</span><span class="o">&lt;</span><span class="n">List</span><span class="o">&lt;</span><span class="n">Object</span><span class="o">&gt;&gt;</span> <span class="n">deserialize</span><span class="o">(</span><span class="kt">byte</span><span class="o">[]</span> <span class="n">ser</span><span class="o">);</span>
+  <span class="kd">public</span> <span class="n">Fields</span> <span class="n">getOutputFields</span><span class="o">();</span>
+</code></pre></div>
+<p>The default <code>RawMultiScheme</code> just takes the <code>byte[]</code> and returns a tuple with <code>byte[]</code> as is. The name of the
+outputField is &quot;bytes&quot;.  There are alternative implementation like <code>SchemeAsMultiScheme</code> and
+<code>KeyValueSchemeAsMultiScheme</code> which can convert the <code>byte[]</code> to <code>String</code>.</p>
+
+<h3 id="examples">Examples</h3>
+
+<h4 id="core-spout">Core Spout</h4>
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">BrokerHosts</span> <span class="n">hosts</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ZkHosts</span><span class="o">(</span><span class="n">zkConnString</span><span class="o">);</span>
+<span class="n">SpoutConfig</span> <span class="n">spoutConfig</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SpoutConfig</span><span class="o">(</span><span class="n">hosts</span><span class="o">,</span> <span class="n">topicName</span><span class="o">,</span> <span class="s">"/"</span> <span class="o">+</span> <span class="n">topicName</span><span class="o">,</span> <span class="n">UUID</span><span class="o">.</span><span class="na">randomUUID</span><span class="o">().</span><span class="na">toString</span><span class="o">());</span>
+<span class="n">spoutConfig</span><span class="o">.</span><span class="na">scheme</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SchemeAsMultiScheme</span><span class="o">(</span><span class="k">new</span> <span class="n">StringScheme</span><span class="o">());</span>
+<span class="n">KafkaSpout</span> <span class="n">kafkaSpout</span> <span class="o">=</span> <span class="k">new</span> <span class="n">KafkaSpout</span><span class="o">(</span><span class="n">spoutConfig</span><span class="o">);</span>
+</code></pre></div>
+<h4 id="trident-spout">Trident Spout</h4>
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">TridentTopology</span> <span class="n">topology</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TridentTopology</span><span class="o">();</span>
+<span class="n">BrokerHosts</span> <span class="n">zk</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ZkHosts</span><span class="o">(</span><span class="s">"localhost"</span><span class="o">);</span>
+<span class="n">TridentKafkaConfig</span> <span class="n">spoutConf</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TridentKafkaConfig</span><span class="o">(</span><span class="n">zk</span><span class="o">,</span> <span class="s">"test-topic"</span><span class="o">);</span>
+<span class="n">spoutConf</span><span class="o">.</span><span class="na">scheme</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SchemeAsMultiScheme</span><span class="o">(</span><span class="k">new</span> <span class="n">StringScheme</span><span class="o">());</span>
+<span class="n">OpaqueTridentKafkaSpout</span> <span class="n">spout</span> <span class="o">=</span> <span class="k">new</span> <span class="n">OpaqueTridentKafkaSpout</span><span class="o">(</span><span class="n">spoutConf</span><span class="o">);</span>
+</code></pre></div>
+<h3 id="how-kafkaspout-stores-offsets-of-a-kafka-topic-and-recovers-in-case-of-failures">How KafkaSpout stores offsets of a Kafka topic and recovers in case of failures</h3>
+
+<p>As shown in the above KafkaConfig properties, you can control from where in the Kafka topic the spout begins to read by
+setting <code>KafkaConfig.startOffsetTime</code> as follows:</p>
+
+<ol>
+<li><code>kafka.api.OffsetRequest.EarliestTime()</code>:  read from the beginning of the topic (i.e. from the oldest messages onwards)</li>
+<li><code>kafka.api.OffsetRequest.LatestTime()</code>: read from the end of the topic (i.e. any new messsages that are being written to the topic)</li>
+<li>A Unix timestamp aka seconds since the epoch (e.g. via <code>System.currentTimeMillis()</code>):
+see <a href="https://cwiki.apache.org/confluence/display/KAFKA/FAQ#FAQ-HowdoIaccuratelygetoffsetsofmessagesforacertaintimestampusingOffsetRequest?">How do I accurately get offsets of messages for a certain timestamp using OffsetRequest?</a> in the Kafka FAQ</li>
+</ol>
+
+<p>As the topology runs the Kafka spout keeps track of the offsets it has read and emitted by storing state information
+under the ZooKeeper path <code>SpoutConfig.zkRoot+ &quot;/&quot; + SpoutConfig.id</code>.  In the case of failures it recovers from the last
+written offset in ZooKeeper.</p>
+
+<blockquote>
+<p><strong>Important:</strong>  When re-deploying a topology make sure that the settings for <code>SpoutConfig.zkRoot</code> and <code>SpoutConfig.id</code>
+were not modified, otherwise the spout will not be able to read its previous consumer state information (i.e. the
+offsets) from ZooKeeper -- which may lead to unexpected behavior and/or to data loss, depending on your use case.</p>
+</blockquote>
+
+<p>This means that when a topology has run once the setting <code>KafkaConfig.startOffsetTime</code> will not have an effect for
+subsequent runs of the topology because now the topology will rely on the consumer state information (offsets) in
+ZooKeeper to determine from where it should begin (more precisely: resume) reading.
+If you want to force the spout to ignore any consumer state information stored in ZooKeeper, then you should
+set the parameter <code>KafkaConfig.ignoreZkOffsets</code> to <code>true</code>.  If <code>true</code>, the spout will always begin reading from the
+offset defined by <code>KafkaConfig.startOffsetTime</code> as described above.</p>
+
+<h2 id="using-storm-kafka-with-different-versions-of-scala">Using storm-kafka with different versions of Scala</h2>
+
+<p>Storm-kafka&#39;s Kafka dependency is defined as <code>provided</code> scope in maven, meaning it will not be pulled in
+as a transitive dependency. This allows you to use a version of Kafka built against a specific Scala version.</p>
+
+<p>When building a project with storm-kafka, you must explicitly add the Kafka dependency. For example, to
+use Kafka 0.8.1.1 built against Scala 2.10, you would use the following dependency in your <code>pom.xml</code>:</p>
+<div class="highlight"><pre><code class="language-xml" data-lang="xml">        <span class="nt">&lt;dependency&gt;</span>
+            <span class="nt">&lt;groupId&gt;</span>org.apache.kafka<span class="nt">&lt;/groupId&gt;</span>
+            <span class="nt">&lt;artifactId&gt;</span>kafka_2.10<span class="nt">&lt;/artifactId&gt;</span>
+            <span class="nt">&lt;version&gt;</span>0.8.1.1<span class="nt">&lt;/version&gt;</span>
+            <span class="nt">&lt;exclusions&gt;</span>
+                <span class="nt">&lt;exclusion&gt;</span>
+                    <span class="nt">&lt;groupId&gt;</span>org.apache.zookeeper<span class="nt">&lt;/groupId&gt;</span>
+                    <span class="nt">&lt;artifactId&gt;</span>zookeeper<span class="nt">&lt;/artifactId&gt;</span>
+                <span class="nt">&lt;/exclusion&gt;</span>
+                <span class="nt">&lt;exclusion&gt;</span>
+                    <span class="nt">&lt;groupId&gt;</span>log4j<span class="nt">&lt;/groupId&gt;</span>
+                    <span class="nt">&lt;artifactId&gt;</span>log4j<span class="nt">&lt;/artifactId&gt;</span>
+                <span class="nt">&lt;/exclusion&gt;</span>
+            <span class="nt">&lt;/exclusions&gt;</span>
+        <span class="nt">&lt;/dependency&gt;</span>
+</code></pre></div>
+<p>Note that the ZooKeeper and log4j dependencies are excluded to prevent version conflicts with Storm&#39;s dependencies.</p>
+
+<h2 id="writing-to-kafka-as-part-of-your-topology">Writing to Kafka as part of your topology</h2>
+
+<p>You can create an instance of storm.kafka.bolt.KafkaBolt and attach it as a component to your topology or if you 
+are using trident you can use storm.kafka.trident.TridentState, storm.kafka.trident.TridentStateFactory and
+storm.kafka.trident.TridentKafkaUpdater.</p>
+
+<p>You need to provide implementation of following 2 interfaces</p>
+
+<h3 id="tupletokafkamapper-and-tridenttupletokafkamapper">TupleToKafkaMapper and TridentTupleToKafkaMapper</h3>
+
+<p>These interfaces have 2 methods defined:</p>
+<div class="highlight"><pre><code class="language-java" data-lang="java">    <span class="n">K</span> <span class="nf">getKeyFromTuple</span><span class="p">(</span><span class="n">Tuple</span><span class="o">/</span><span class="n">TridentTuple</span> <span class="n">tuple</span><span class="o">);</span>
+    <span class="n">V</span> <span class="n">getMessageFromTuple</span><span class="o">(</span><span class="n">Tuple</span><span class="o">/</span><span class="n">TridentTuple</span> <span class="n">tuple</span><span class="o">);</span>
+</code></pre></div>
+<p>As the name suggests, these methods are called to map a tuple to Kafka key and Kafka message. If you just want one field
+as key and one field as value, then you can use the provided FieldNameBasedTupleToKafkaMapper.java 
+implementation. In the KafkaBolt, the implementation always looks for a field with field name &quot;key&quot; and &quot;message&quot; if you 
+use the default constructor to construct FieldNameBasedTupleToKafkaMapper for backward compatibility 
+reasons. Alternatively you could also specify a different key and message field by using the non default constructor.
+In the TridentKafkaState you must specify what is the field name for key and message as there is no default constructor.
+These should be specified while constructing and instance of FieldNameBasedTupleToKafkaMapper.</p>
+
+<h3 id="kafkatopicselector-and-trident-kafkatopicselector">KafkaTopicSelector and trident KafkaTopicSelector</h3>
+
+<p>This interface has only one method
+<code>java
+public interface KafkaTopicSelector {
+    String getTopics(Tuple/TridentTuple tuple);
+}
+</code>
+The implementation of this interface should return the topic to which the tuple&#39;s key/message mapping needs to be published 
+You can return a null and the message will be ignored. If you have one static topic name then you can use 
+DefaultTopicSelector.java and set the name of the topic in the constructor.</p>
+
+<h3 id="specifying-kafka-producer-properties">Specifying Kafka producer properties</h3>
+
+<p>You can provide all the produce properties , see <a href="http://kafka.apache.org/documentation.html#producerconfigs">http://kafka.apache.org/documentation.html#producerconfigs</a> 
+section &quot;Important configuration properties for the producer&quot;, in your Storm topology config by setting the properties
+map with key kafka.broker.properties.</p>
+
+<h3 id="putting-it-all-together">Putting it all together</h3>
+
+<p>For the bolt :
+```java
+        TopologyBuilder builder = new TopologyBuilder();</p>
+<div class="highlight"><pre><code class="language-" data-lang="">    Fields fields = new Fields("key", "message");
+    FixedBatchSpout spout = new FixedBatchSpout(fields, 4,
+                new Values("storm", "1"),
+                new Values("trident", "1"),
+                new Values("needs", "1"),
+                new Values("javadoc", "1")
+    );
+    spout.setCycle(true);
+    builder.setSpout("spout", spout, 5);
+    KafkaBolt bolt = new KafkaBolt()
+            .withTopicSelector(new DefaultTopicSelector("test"))
+            .withTupleToKafkaMapper(new FieldNameBasedTupleToKafkaMapper());
+    builder.setBolt("forwardToKafka", bolt, 8).shuffleGrouping("spout");
+
+    Config conf = new Config();
+    //set producer properties.
+    Properties props = new Properties();
+    props.put("metadata.broker.list", "localhost:9092");
+    props.put("request.required.acks", "1");
+    props.put("serializer.class", "kafka.serializer.StringEncoder");
+    conf.put(KafkaBolt.KAFKA_BROKER_PROPERTIES, props);
+
+    StormSubmitter.submitTopology("kafkaboltTest", conf, builder.createTopology());
+</code></pre></div><div class="highlight"><pre><code class="language-" data-lang="">
+For Trident:
+
+```java
+        Fields fields = new Fields("word", "count");
+        FixedBatchSpout spout = new FixedBatchSpout(fields, 4,
+                new Values("storm", "1"),
+                new Values("trident", "1"),
+                new Values("needs", "1"),
+                new Values("javadoc", "1")
+        );
+        spout.setCycle(true);
+
+        TridentTopology topology = new TridentTopology();
+        Stream stream = topology.newStream("spout1", spout);
+
+        TridentKafkaStateFactory stateFactory = new TridentKafkaStateFactory()
+                .withKafkaTopicSelector(new DefaultTopicSelector("test"))
+                .withTridentTupleToKafkaMapper(new FieldNameBasedTupleToKafkaMapper("word", "count"));
+        stream.partitionPersist(stateFactory, fields, new TridentKafkaUpdater(), new Fields());
+
+        Config conf = new Config();
+        //set producer properties.
+        Properties props = new Properties();
+        props.put("metadata.broker.list", "localhost:9092");
+        props.put("request.required.acks", "1");
+        props.put("serializer.class", "kafka.serializer.StringEncoder");
+        conf.put(TridentKafkaState.KAFKA_BROKER_PROPERTIES, props);
+        StormSubmitter.submitTopology("kafkaTridentTest", conf, topology.build());
+</code></pre></div>
+
+
+	          </div>
+	       </div>
+	  </div>
+<footer>
+    <div class="container-fluid">
+        <div class="row">
+            <div class="col-md-3">
+                <div class="footer-widget">
+                    <h5>Meetups</h5>
+                    <ul class="latest-news">
+                        
+                        <li><a href="http://www.meetup.com/Apache-Storm-Apache-Kafka/">Apache Storm & Apache Kafka</a> <span class="small">(Sunnyvale, CA)</span></li>
+                        
+                        <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Apache Storm & Kafka Users</a> <span class="small">(Seattle, WA)</span></li>
+                        
+                        <li><a href="http://www.meetup.com/New-York-City-Storm-User-Group/">NYC Storm User Group</a> <span class="small">(New York, NY)</span></li>
+                        
+                        <li><a href="http://www.meetup.com/Bay-Area-Stream-Processing">Bay Area Stream Processing</a> <span class="small">(Emeryville, CA)</span></li>
+                        
+                        <li><a href="http://www.meetup.com/Boston-Storm-Users/">Boston Realtime Data</a> <span class="small">(Boston, MA)</span></li>
+                        
+                        <li><a href="http://www.meetup.com/storm-london">London Storm User Group</a> <span class="small">(London, UK)</span></li>
+                        
+                        <!-- <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Seatle, WA</a> <span class="small">(27 Jun 2015)</span></li> -->
+                    </ul>
+                </div>
+            </div>
+            <div class="col-md-3">
+                <div class="footer-widget">
+                    <h5>About Storm</h5>
+                    <p>Storm integrates with any queueing system and any database system. Storm's spout abstraction makes it easy to integrate a new queuing system. Likewise, integrating Storm with database systems is easy.</p>
+               </div>
+            </div>
+            <div class="col-md-3">
+                <div class="footer-widget">
+                    <h5>First Look</h5>
+                    <ul class="footer-list">
+                        <li><a href="/releases/current/Rationale.html">Rationale</a></li>
+                        <li><a href="/releases/current/Tutorial.html">Tutorial</a></li>
+                        <li><a href="/releases/current/Setting-up-development-environment.html">Setting up development environment</a></li>
+                        <li><a href="/releases/current/Creating-a-new-Storm-project.html">Creating a new Storm project</a></li>
+                    </ul>
+                </div>
+            </div>
+            <div class="col-md-3">
+                <div class="footer-widget">
+                    <h5>Documentation</h5>
+                    <ul class="footer-list">
+                        <li><a href="/releases/current/index.html">Index</a></li>
+                        <li><a href="/releases/current/javadocs/index.html">Javadoc</a></li>
+                        <li><a href="/releases/current/FAQ.html">FAQ</a></li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+        <hr/>
+        <div class="row">   
+            <div class="col-md-12">
+                <p align="center">Copyright © 2015 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. 
+                    <br>Apache Storm, Apache, the Apache feather logo, and the Apache Storm project logos are trademarks of The Apache Software Foundation. 
+                    <br>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
+            </div>
+        </div>
+    </div>
+</footer>
+<!--Footer End-->
+<!-- Scroll to top -->
+<span class="totop"><a href="#"><i class="fa fa-angle-up"></i></a></span> 
+
+</body>
+
+</html>
+

Added: storm/site/releases/0.9.6/Daemon-Fault-Tolerance.md
URL: http://svn.apache.org/viewvc/storm/site/releases/0.9.6/Daemon-Fault-Tolerance.md?rev=1738648&view=auto
==============================================================================
--- storm/site/releases/0.9.6/Daemon-Fault-Tolerance.md (added)
+++ storm/site/releases/0.9.6/Daemon-Fault-Tolerance.md Mon Apr 11 21:15:29 2016
@@ -0,0 +1,30 @@
+---
+title: Daemon Fault Tolerance
+layout: documentation
+documentation: true
+---
+Storm has several different daemon processes.  Nimbus that schedules workers, supervisors that launch and kill workers, the log viewer that gives access to logs, and the UI that shows the status of a cluster.
+
+## What happens when a worker dies?
+
+When a worker dies, the supervisor will restart it. If it continuously fails on startup and is unable to heartbeat to Nimbus, Nimbus will reschedule the worker.
+
+## What happens when a node dies?
+
+The tasks assigned to that machine will time-out and Nimbus will reassign those tasks to other machines.
+
+## What happens when Nimbus or Supervisor daemons die?
+
+The Nimbus and Supervisor daemons are designed to be fail-fast (process self-destructs whenever any unexpected situation is encountered) and stateless (all state is kept in Zookeeper or on disk). As described in [Setting up a Storm cluster](Setting-up-a-Storm-cluster.html), the Nimbus and Supervisor daemons must be run under supervision using a tool like daemontools or monit. So if the Nimbus or Supervisor daemons die, they restart like nothing happened.
+
+Most notably, no worker processes are affected by the death of Nimbus or the Supervisors. This is in contrast to Hadoop, where if the JobTracker dies, all the running jobs are lost. 
+
+## Is Nimbus a single point of failure?
+
+If you lose the Nimbus node, the workers will still continue to function. Additionally, supervisors will continue to restart workers if they die. However, without Nimbus, workers won't be reassigned to other machines when necessary (like if you lose a worker machine). 
+
+So the answer is that Nimbus is "sort of" a SPOF. In practice, it's not a big deal since nothing catastrophic happens when the Nimbus daemon dies. There are plans to make Nimbus highly available in the future.
+
+## How does Storm guarantee data processing?
+
+Storm provides mechanisms to guarantee data processing even if nodes die or messages are lost. See [Guaranteeing message processing](Guaranteeing-message-processing.html) for the details.

Added: storm/site/releases/0.9.6/favicon.ico
URL: http://svn.apache.org/viewvc/storm/site/releases/0.9.6/favicon.ico?rev=1738648&view=auto
==============================================================================
Binary file - no diff available.

Propchange: storm/site/releases/0.9.6/favicon.ico
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: storm/site/releases/0.9.6/images/architecture.png
URL: http://svn.apache.org/viewvc/storm/site/releases/0.9.6/images/architecture.png?rev=1738648&view=auto
==============================================================================
Binary file - no diff available.

Propchange: storm/site/releases/0.9.6/images/architecture.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: storm/site/releases/0.9.6/images/architecture.svg
URL: http://svn.apache.org/viewvc/storm/site/releases/0.9.6/images/architecture.svg?rev=1738648&view=auto
==============================================================================
--- storm/site/releases/0.9.6/images/architecture.svg (added)
+++ storm/site/releases/0.9.6/images/architecture.svg Mon Apr 11 21:15:29 2016
@@ -0,0 +1,1458 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="544.86658"
+   height="338.26587"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="architecture.svg"
+   inkscape:export-filename="/Users/evans/src/storm/docs/images/architecture.png"
+   inkscape:export-xdpi="105.62804"
+   inkscape:export-ydpi="105.62804">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient5388"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#00a3d8;stop-opacity:1;"
+         offset="0"
+         id="stop5390" />
+      <stop
+         style="stop-color:#00a3d8;stop-opacity:0;"
+         offset="1"
+         id="stop5392" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5382"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#0000fb;stop-opacity:0;"
+         offset="0"
+         id="stop5384" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       x="-1.0755"
+       y="-1.0755"
+       width="3.1508999"
+       height="3.1508999"
+       id="filter5371"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="19.681861"
+         id="feGaussianBlur5373" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter5329"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.6493015"
+         id="feGaussianBlur5331" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3678">
+      <stop
+         offset="0"
+         style="stop-color:#a9a9a9"
+         id="stop3680" />
+      <stop
+         offset="1"
+         style="stop-color:#a9a9a9;stop-opacity:0"
+         id="stop3682" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       color-interpolation-filters="sRGB"
+       height="3.1508999"
+       x="-1.0755"
+       y="-1.0755"
+       width="3.1508999"
+       id="filter5371-4">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="19.681861"
+         id="feGaussianBlur5373-8" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       x="-1.0755"
+       y="-1.0755"
+       width="3.1508999"
+       height="3.1508999"
+       id="filter5371-9"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="19.681861"
+         id="feGaussianBlur5373-6" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter5329-0"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.6493015"
+         id="feGaussianBlur5331-1" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient6010"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-28.11,1.7569)"
+       x1="244.60001"
+       y1="81.633003"
+       x2="288.82001"
+       y2="178.42999" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient6012"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(28.11,-1.7569)"
+       x1="386.38"
+       y1="81.633003"
+       x2="433.48999"
+       y2="130.03" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient6014"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-28.11,1.7569)"
+       x1="244.60001"
+       y1="81.633003"
+       x2="288.82001"
+       y2="178.42999" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient6016"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(28.11,-1.7569)"
+       x1="386.38"
+       y1="81.633003"
+       x2="433.48999"
+       y2="130.03" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient6018"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-28.11,1.7569)"
+       x1="244.60001"
+       y1="81.633003"
+       x2="288.82001"
+       y2="178.42999" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient6020"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(28.11,-1.7569)"
+       x1="386.38"
+       y1="81.633003"
+       x2="433.48999"
+       y2="130.03" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient6022"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-28.11,1.7569)"
+       x1="244.60001"
+       y1="81.633003"
+       x2="288.82001"
+       y2="178.42999" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient6024"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(28.11,-1.7569)"
+       x1="386.38"
+       y1="81.633003"
+       x2="433.48999"
+       y2="130.03" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.1575153"
+     inkscape:cx="608.93395"
+     inkscape:cy="206.83051"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1151"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(557.72816,-327.93824)">
+    <g
+       transform="matrix(0.42178612,0,0,0.42178612,-435.02174,463.7697)"
+       id="g5325">
+      <image
+         y="10.172749"
+         x="-289.89471"
+         id="image5327"
+         xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAGWCAIAAADHTXI1AAAAA3NCSVQICAjb4U/gAAAgAElEQVR4 nO3dd3xcxbUH8DO3bFPvsiRbllzlgjtgbGN6TAs8QkKLgQRCh0AeNS+QEFJISIGEEpJAYlqAgAPB cSgGbGNj427JTS5qlmR1abX1lpl5f6xcMG7anW13z/fD5/PySHx1rfLTlDNnCOccEELIWqR4vwBC CImH0YYQsiCMNoSQBWG0IYQsCKMNIWRBGG0IIQvCaEMIWRBGG0LIgjDaEEIWhNGGELIgjDaEkAVh tCGELAijDSFkQRhtCCELwmhDCFkQRhtCyIIw2hBCFoTRhhCyIIw2hJAFYbQhhCwIow0hZEEYbQgh C8JoQwhZEEYbQsiCMNoQQhaE0YYQsiCMNoSQBWG0IYQsCKMNIWRBGG0IIQvCaEMIWRBGG0LIgjDa EEIWhNGGELIgjDaEkAVhtCGELAijDSFkQRhtCCELwmhDCFkQRhtCyIIw2hBCFoTRhhCyIIw2hJAF YbQhhCwIow0hZEEYbQghC8JoQwhZEEYbQsiCMNoQQhaE0YYQsiCMNoSQBWG0IYQsCKMNIWRBGG0I IQvCaEMIWZAS7xdAScagLKDTgG4GDdbv1/a5g+3uYLcn6AmafX7d7df9GvXrZkCnBmUAoJsMAGyK pMqSTZFkiaiylOVSs1y2bJct26Vmp9mLshxDshxZ6Q67TJw2xWmTVRl/6aKIYLSh4+j16c3d3ube wL6+QGOnt6XXv7fb39Lr39fr1wxGCAAADPyfg6TD/wUAAONH+gB84N+6HGpBhr0w01FZmF6en16a 6xqS7SzIcAzNcxVlOQX+jVAqIJwf8dsNpbR2d2BDQ09NU+/Otv4DQdbr02VJUmSiSESSiCIR8pVE iwTn3GScMW4yblJOGcty2fIz7EPz0o
 qznCOKMsaXZY0vzRpXliMfMTgROgRGGxrQ7dVqW90rajs+ 3tpW1+EJ6NTt14MGU2SiyJIikdgHCh2IOWZSrsgkza5kOJS8DMf0itxZY4qmV+QVZztz0mwxfiuU FDDaUt3udk91Y8+yHe0fb21r7PICEACQCEiESATEjssiwTlnHBjn+2e1XJGk8WXZs8cUzhpdMGZI 1ughmfF9Q5RQMNpSVH/AWLypeem2tnX1PTV7+wDAaZOVZJvoGZT5Naoq0rjSrNHFmSePyLtgchlm HAKMtlRjULajpe/vn9Ut297e0Ol1+w2HKtkUKXFGZ2HgnOsmCxrMYZOLsxzjy7K/Pm3ovJNKirKc uCqXsjDaUkW3V1u2re2tNU0f1rRqJgUgcVk+i6qBjQjOAUh+uu1rJ5VcMn3YySPy89Lt8X41FGsY bdbX7dXeXN3wzy8a1+7pohxcNjnebxQLnHOvRm2KdNqogrPHF186fRhOVFMKRpuV9fr0Bct3v7Ky vrbVrVOebpeTeuIZBs65X6cAUJbrOnt88e3njsHakRSB0WZN7e7Au+v3/uGDHQ0dXkIg2VfTIsQ5 1ykHzu2qfN7Ekuvnjpg7tsiupsToNWVhtFkNZfy1z+v/tmz3ql2ddjX5Nj2jza9TuyKdP6l0/pzK 8yeVxvt1ULRgtFnK8h3tTyzaunxHu26yNDueojsyznl/wMxyqWeOK77za2NPH1sU7zdC4mG0WURD p/ePH+5YsHxPUKeqIuFy0nEZlDHGbYr0PzOGff9rYycOy433GyGRMNqSnsn5S8v3/G7xtl1tnhTc KIicJ2iWZDu+e8aom84ahefwLQOjLbltb3E/8tam9ze3pE5VRzRoJtNNNnFo9v0Xj//WKcPj/TpI AIy2ZKUZ9MVlu3+3eFtzj9+hyjgDjRDnPGAwuyJdcWr5Q5ecVJ6fFu83QhHBaEtK21vcj/2r+p31 e+3xXlbjnFMOlHHgnPKBQ+wAwI
 7cmw0AQJJI6JUJITIJ/b+JchQ/FHCVhekPXDxh/uzKeL8OCh9G W/J5fVX9z96pifHK2oEIo4yH8ijUr82hysXZzrJcV3GWoyDTmeFQstNsTpuSZpOddiUUu6osGZRR xk3KDJP1BYx+vx7qyruvN9DmDnT0Bzs9GqXsQMs2ykGWiERAeFe4E+HXqSqTq2YOf/Tyybj6lqQw 2pJJt1f76cLNCz6ro5TFpuL0wMlzSSLZabZQF9zRxRljS7KG5aWNKs4oy0t3qJIiS6oEQAbd9Zsy zjg3DBowWX2Ht67T09Dh3dnWX9fh7egP9vn0bq9mUGZT5BiPTynjQYOOL8v+3benY3VIMsJoSxrr 6rrv/8f6Vbs6XbZYDNYMyoIGkyUyrjRrcnnO6OLMqtKsqtLskUUZ0f7QIbvbPbva+mtb3Vua+3a0 9u9odbv9hsMm2+TYjeP8Os1Nsz1w8fjbzh2Lq5nJBaMtOby4bPcv361p7vFHtRA3NGcEQhSJjC/L PnNc8ZyxhaOKMioKYxRnR9PU42/u8m5u6v2gunVdXbcnaDDGgZAYxFyo/O2600c8fuXUdIca1Y+F BMJoS3TeoPHjtzf/9dNdjPHoTUJDPR2zXOrwgvS5VUVXzawYV5LpSryfZIOyzv7gx1vb/r1+76bG nra+QNBg6Q4lqkMqyrhfp+dNHPKHa2fEPeXRCcJoS2jbW9z3/2P9ki37olfeQRn3Bs2yXOfZE4ac d1LJvJNKM50Jl2hHtHNf/wfVLct3dCyv7ejxaJlOJaojOJ9mji/L/sO1M04bXRi9j4JEwWhLXP/d 3HLfa+t3tXkyHOInoaFmGJTx0hznt2dVXDhl6PTKPOEfJQY0g36xp2vxppY3VtV3ebSozlL9Oi3N cT7znVPOm1gSjecjgTDaEhFn/E+f7PzJwmpPwIjGGQO/TmUCY0qyrptT+a1Th1ujvqHdHViwfM+b XzTW7us3abS6A/h1WpRp/+
 010y87uTwaz0eiYLQlHG/Q+Nk7Nc98VBuNBt+h6eek8pxvnVJ+w5mj rNdZO9RS+NWV9evru0NX1gv/EJrJspzqb66ZduXMCuEPR6JgtCWWph7/g6+tf3ttk/ByXMq4ZrLS HOe1c0bMn105vCBd4MMTTWuv/931e5/5qLauw6vKRHjAGZQ5bMpT86djuiUsjLYEUtPUc+vf1qyt 6xaba6Em2ml25dLpQ++/aELqXBHQ7g48/WHtKyv2tPYFXTbB+zCaQV0O9Y/XzcDj9IkJoy1RfLqt 7c4Faxo7vWIrPAzKDMpPHZl/z/lVF08dKvDJyWJdXffvFm/7z6ZmxsGuiBy+aSbLT7c9f+NM3FVI QBhtCeH1VfX3vrre7dcF5lrojFSWy3bvhePmzxlhvWW1Exdqqv6r97bsafeIPcuhmaw8P+3vN89K 0v1lC8NoizfOnnx/x6MLq02hx0I1kwKHM8YV//iySfhTF9LQ6f3ZO9VvrWkSewLXEzQnDs1+++4z sA9SQsFoiyd/0PjpOzXPfLhDkkQudfs0szjLces5Y74/rwrvbTrMi8t2P7Zwc5s7KLA6xO03LpxS +tptsxPw/EbKwmiLm16fft9r6177vMGpCrtJL7RjcPrYop9/awoO1o4m1Ghg9e4ugZ95n2bedu6Y 314zXcjTUOQw2uKj3R24+YXVH1S3Clz68evUqUrfO2v0Dy+ZmCyHpeKl16c//M+NC5bvETVeDnWa e/r6U7CBZYLAaIuD3e2e6/+0cn19t8Bc82nmiKKMRy47CWsRTtyT/932s3dqNJMJ2TnVDFqc7Vx4 91y8HCsRYLTF2rq67lteXL21uU/UWk9oEvq1k0p+ecXUqtIsIc9MHQvXNP7vq+t6fLqQsZtPM8+Z MOSlW2fnpNkifxqKhPhjKOgYPt3WdtXTywXmmmYyxuH786peuW025loYLju5/MWbZw3NS/PrNPKn uWzyki37/vLJzsgfhS
 KEo7bYeW/D3rsWrGnv10SdeA/thP70m1NwfSdCAofSlHGbKv/n3rNwGye+ MNpi5OUVdQ+9vkFgUa5fp1OH5z45fwb+CAmxvcX9vb+u2tzYE/kXKKjTM8cXv3nX6U5bFFsio2PD CWks/PGD7fe8vNYdMITkmkGZX6eXThv69t1zMddEqSrN+suNM8eUZPk0M8JHqYq0dFvbP1Y1CHgt FC6MtuiijP/6vS2PvLVZ2DacyRiH+y4ct+DWWdbos5Y4qkqz/vTdU0cUZUS47iZLhHJ49qPa1l6/ qHdDg4XRFkWU8Z+8vfnn79ZwEHMw26Asy6k+de2MRy+fHI1OZGh6Zd6z3zmlKNNuHv2K6BPhssk1 e/teWVEn6sXQYOGPR7QYlP3glbW/XbxNkYgScTsdzrlPM4fmpb182+zvzh0p5A3REZ0+tuiXV07l nNOI0+25JThwixuMtqjwB41bX1z9p4932RUBR3k45/0Bc+aogn/eNffMccVC3hAdw5UzK+6eV+XX aSSbbLJE2vu155ZgIUh8YLSJ1+3Vbvzr6ldX1qfbBbQ/DFXkfvOUcqxci6W75lWdN3FIwGCRPESW 4F/rmpp6cOAWBxhtgrW7A7e8sPrttU1pdgF3xxmU6ZTfdu6YF26aWZLjEvKG6ETkpdt/8a3JRZl2 g4afbjZZquvwvr4SV9ziAKNNpNZe/41/WfXOur3pdgFFHppBVVl67PJJv71mOlZIxd7EYbnfn1dl 0PDnpIQQzvn71a3dXk3gi6ETgdEmTEOn99vPrviwZl+WS418vKYZND/D/vT1J999/jghr4fCcNOZ o04dmR9JLYjLJq+t6/58Z4fAt0InAqNNjO0t7m8/u2Llzk4h1yH7NLO8IP3Fm2fhhUnx5XKo95xf 5VSlsHdLCSEmZf/Z2BzhfisaLIw2AWqaeuY/t2JtXbeQXPMEzWkVef+4fTZuhiaCeZNKzxo/JMKB 2wfVrV2eoMC3Qs
 eF0RapdXXd3/nzqm0t7shzLbQZev6kktfuPB17fiUIVZaunVOZ4VAiGbh1ebRP t7WJfTF0bBhtEVm+o/3651dua3FH3syDMu7X6dWnDX/hptOG5eJmaAKZN6l0WkVeROcTCPn3+mZx b4SOD/fdwvdhTevtf/uipTcQea4ZlDEOt5075vErpx7xBBVl3GdQr06DDACgTTN7PMHWgNkRNFsD Zr9O3QFDoywoy0wzg1/+GXQQAACXQtIk4lJlpyKVu9RhGbYROc6SDAcA2ICrEnEqUqZNBjy/9RWq LF0xc/hntRFtBVTv7e0PGNjYPWYw2sIUar7W5RHQfC10cv5Hl048dDO0zq21eoIdfqNLp3v8ZotH 29Kvt/UH2xkBxkHUReiMA2U2Ajk2aWS6bWyWfUJxRo4q5SmkLN02Md8ly3ghFgDAhZNLf5nj7PJo 4dVgKxLp8+mrd3fiZcwxg9EWjoVrGu96KdImRaFDPCbjWU71N9dMu/zU4Yv2dK/tCuwN0naNtvj0 un7No1EAAEJACv0jgQTCcg0AJAKKpAO0A7T3Gyv7dKhzA2UgSyVp6uSCtCK7XKGSM8syZw/LFvZB k1B+huNrJ5W8sHR3eL0qJQI9Pn1TQw9GW8xgtA3ayyvq7n1tvT8YZq6FEo0QQh02u0kNp80oL3i8 TfvRP7d1BEyPzoDzgSxTJBB3V+bxSfs/KAAAtOqsdW8/UAaEZOzqLXS2FMvkqsrs8yvzchSSar3/ ZYmcXlX0/Me7wvvjhBDDZDvb+sW+FToGjLbBeXHZ7ofe2BjUzUHl2oFT1oQQI8MJALrTrqU7QSKQ 4fK4bB19GgCAREBQb3EBDkk6D+Men7kHYOWmTljXXpWufLMyZ0a+c1ZxRupkXNWQzDElmY1dvvD6 Uyky2dvt7/XpqfMZiy+MtkH48yc7H3p9A+NwIr3SDozOOOfUYQtmugBAs9sODsQYB7sKLhuA0Dlm NBz6ejZ5u8
 5/Wt0JlM0qcM7Md15SkZMK09URhRkVBem72jxhRptEWnr9bX0BjLbYwGg7UU/+d9uP 394McJxcO5BoiiJrihzMdGl2G6jywXQ4UEPgtEF2WlTfOYpsMoC8sk9f2Rl4vqH/pPTWW6ryLyzP tvDPrcuhluen0XBPy8uy1OnROj3BKsD2LbGA0XZCfv3elp+/W0PIUZtKHphyUoeNqfLB+eYBh1VF OW2QmfzFa4oEiuRhfGWfvnJVa9Ha1nvHF1w0PHtsftJG9jGNGZLptMmc8zDOCMsE+ny6269H48XQ V2G0HQdl/Bfv1vz6vS22IzWVDH2Xc86NDKfutAPAwURj/PA4O0AicFjwJbXQqhxAO8B9G9qfq+3+ RnnWHeMKrFd4XJrjcjlU3aDy4L90hBDDpJ0ebAESIxhtxxK63OA3/9lqV+UDuXZgygkAoUW0L005 j5FoIRKBnAwQcVVCIrIrdTp/YkvXq439N5Rn3ndyWUbibIxErDjb6VKloG7KEM6vJVmS+nHUFisY bUelGfSHb2589qNahzrQLDc0RvvSlBPgRBPtgMy0BNoGjQaJgFNt1dlj23tere97dNqQK8bkW+OS mvwMhxLZX8QTjPQmQHSCMNqOzBs0Hnx9wwtLd7ts8uG7nIdOOeEri2jH5rRBihy1kQjY5DoG85fv /VdD34OTi2eUZMb7nSLlsCt2VQ77LKkkEd2MqCM5OnEYbUfgDxp3v7x2wfK6TKcSzpTzaJJ6SzRs TnVhs3dlZ9294wvumVoS+WURcZQm4rCwkDdBx4XRdrhen37fa+v+tr5FLc/vOXTKCYMcoB3GGlui 4bEr7Yzft7Hj01bPH+dWVGbZ4/1CceNUrTAxTwr4if6Sta39l7695ZXGflZZpB1IotAwLZJcs9iW aBgkAjZ5cXvg3EW1i/Z0x/ttwmRGNuZijOMdFzGD0XbQimb3RW9tWd7Yp2W6Is2yQ1l7S3RQbHJd kF21rO
 nXq/fG+1XCEYig1y4AcOAZKbLSmgDw523Aimb3vNerO9xBUGVhoRZi+S3RQVEkL5EeqO68 cckezYgoKWKvy6NpBg1/8M3Bwqc1Eg1GGwDAksa+ea9X+wIGRNCk6Miy0uK5JXpgKp1Qd45IBOzK C3Xuqz/a0x8w4v02g9Dj08IeuHHOM5xqbnrqrjPGGM78YdGe7iv/tS0quea0DZx+F+KwhAoNHiQC ACqldoA0maRJxK5ILlXOIZwokkqIjYDOAQB0gwaABEzWp1Mf4z7KNQAj1Gny0CfvP1oQdXZlYbM3 +NGef5w7Ill6zzb3+AO6ebTDdsdmMl6Y6chNw2iLkVSPtoU7u67611Zdp1HJtQhLPUwGlIV66mbY 5QybVOBS0xlzKWSoTR6e5Qg1AR+d43QccghMAS4RIh3px48xDgCMcxMGKpC9Ot3W5dvQ7qvtDezV aQcjnX6jUzMNnYFEvnSqPxrsyuI2/1Uf7XnjvBHpjiRIt71dXq9Gw7s/26C8KMtZkuMU/lboiFI6 2t7c3jH/39ujkmsSCbPUw2RgUAAoybCNz3ONzLIX2ORCm1SeaR+T4xwV4anMr/wtM+1KSYb9nIqD t2ft6vFv2OfZ5jU6dbq0uX+7WwdZiuJaoV1Z3Oa/bEn92+eNSPQjWZzt7fFTxggJ56fGMNmwvLTC bIy2GEndaFtQ03bT4tpo5VpOxvHHOwemgRIBxosUmJiuzi3PO7UgzSGTHLs8NN0e+5naqFzXgQBt 6vHv9Oh1Hu2l2u41bs0gEjAufqvXrnzU6r3lk7pX540S/GSh2vu1ug6vTQmztbIik6rSLGXwLUNQ eFI02p7Z2HrHB7vAiE6uZacfdZjDOBgUGFdt0rB0W7ZEJqUpF47InV2a6VAku0QiuWxBuGG5rlD3 jvmj83o1+kJN+7ut3p0+wxMwBe+N2JXXGvpzPq17am5Fwh5X2Nvtr+/wqGE0/QBgHPLS7aeMzBf+ Vu
 hoUi/aOPv1Fy0PLK0DAPG5BgAZriNcaMA4aCYATMhzzCjMLpNhQp7zgoqcpFhgAgCnTXHalIdP G/YwwKI93e83ud9q6m/XmMirG5zqs7t7q7Idt09J0ItRtre6m3sCWa5wvmQmY8XZztNGFQh/K3Q0 KRdtj61qfuTj3VEJNQDIShvYEj2w4ch4PjNPL838+ojcUocyOsOW7F3MLhqRd9GIvOta+z9o9fyq usPLiahNVa4oD1V3zirJmFyUEfnTxKKMf7G7UwlryAYAwGHW6IJk+U1mDeRAe1jLo4w/uLT+Nysb opVroVOiBgVCSlzKELt8ZoHzmrH5Jen2HIdija4+h2n1aL9Y1/JSk8ejMzFbDSarcslr/mdsoqVA t1eb+9gHLT3+8ObLlPGPHjp3emWe8BdDR5MqozbNoPd8sue5Nc3RyjUAsKmTsu1Tc53j0pQrR+WV ZTmi9YESRkmG/ekzK69r7X98U9vCZq+A+akibfead69oeu7MioT6ZbBmT1djpze8lVC/Ts+bOGRS eY7wt0LHkBLRphn01g93/W1Dq+Bc239OqDDLcedp5ZNzHJPz01Ih0Q4zoyTzreKMl7a2/7C6szVI I91CVaSX692XVvReNCKBxjhvr2mEsDY3KeN2RbrhjJEJldSpwPoTUs2gV76/651N4nLNoACQ5lTL sxynlmU9eEpZll0pxLOBAM3u4M3LGha3ByKdnDJeaSOff31MUUZC1O439fjP/tkHHf3BMOLJEzS/ MWPYa3fMicaLoWOweLT1+vRvvb9rybZ2MblmUAA4vTx7ZEH6VeMKzym3/uWbg8bZ/Sv3PrmzxyBS RHsLOr2vKvfXs8vFvVn4nvzvtoff2myTyWAvsuKcMw6zxxSePCLfpEyRJbsiZThVuyqnO5QMh5rl VDMcSqbLnpduS7TlxWRn5Wjr18xvLKoVkGsGBYDCLMcd08vG57vOH56NXbeO7ZVtHbeubvFGlm4
 q pWsuHBn33dJen37lH5cv3d6e4Qjzi66ZNKgzSSKhg24cOGNcIsRpV7KcanaaLdtly0mzFWU58jMc lYXpo4ozRxRnJvtOetxZNtr6NfPiN6qXN/aFn2v7E+2k0qxfzBxammEvSYz5UVJYUt9z2fK9HjOC 0wsmu2yI6815o+JbxPvehr1XP7MijCHbcXHOTcYZB8o4ZTwUfOkOJc2uhPJucnnOKSMLZo4qKM5y 4JhusKwZbR0+/Ztvbwk/1/ZPPE8uz/nh9FLssRWeFc3uyz+ubzch7HSz6ebbZ5XHcT/BoOybTy37 sGafK1bnWznnlANlHIADEACwyaSqNHv2mMJZowuqSrNHxnsYmywsGG3tHu2s16u3tXnCyTWDgip/ Z2LRWRW5lrliLo6WNPZdtrTRwyDMmalOLytNW3BWRbzGLB/WtH7zqWVx/zYwKAsaTCIwvix7cnnO 3Kri8yaVJsgeS8KyWrR1+PQzX9s86FwzKKhyoUu9eWrp1WPzx+Y5gWCoifHKto75q1rDn5YGjDVf HxWvi/6+9viSz3d12hOj+TvnXDdZ0GCZTmVIjuvs8cXzZ4+YODQ7queOa5p6Grp8x/0QlPEsp3ra 6EIAWFfX3ekJyhLRDDqyKLOqNOuIf2Tnvv49HR5ZIpTxggzHlOG5YlceLBVtze7g196sGVyuGTTN qc6syL20MidhTy8mu0dWND62rTvMgl7GL8iz/+frY0W/1PG9vqr+9r99AQDCV9kiRBk3GQMONkWa M7bo2tmVc8cV50Wnf+8tL6z68ye7jrsm49fpzFEFn/zfeQBw8W8++XRrm12V/DqdVpH39t1zi7IO b+XkDxrn/erjzU29Npn0B8xLpw996dZZYnfnrLPTt6vHf+nbWweRawYtzHLcPHX46aUZhzYsQ8I9 dHLpxr7gon3+cOrdJPJRV2BHl29sfkyvcG13B/78yS6/TtMEtgAQRJaILA18Jj/esm9Jzb5
 ZYwq/ cfKwb59W4Yr+zP1A0B9tVCRLRJYJIcRlk9fXdy9c23TrOWMO+9+8/kXj5qYeuyIDgCSRaEz5E2Kk HbkdXb7Zr2w6fq4ZFAxqIzAuz/X3S8et+Pbkn84ux1yLNqdNeea0oZUuGcK6O93g5OmaduFvdWwL lu9ZubMzAXPtMHZVtqvS0u3t//vquot+++nrq+qp0HswFFly2BRFkRVFdtoU5ZB2dYQQ5/7/yq7K X40nQogikReW7u716Yf+e2/QeHHpbojydDHRv3InYlO752tv1AxcRnU0h1Ry/HhG6cyyrITtC2ZJ w3JdD0wqunlVa3h/fFlXoNenx2yrenuL+7kltY4kuQ6ZEJLhUDjna3Z3ra/vfn1Vw/0XjQ8te0Xu 7vPHfevU4aHrIGyK/N/NLb/89xaXTfYEzfmzK245e4xuDhw3PGLdn12Vtzb3vb6q/tCB25tfNG5u 6lGivDmT9NG2trX/ore2HCvXDAoA44ozrhxfdPGInLiXgKasmyYUvbWn56MefdC7pYq0rSf477qe 6yYWR+fVvoQy/ti/qjv7NUeCNzT/MkJI6IU/qG5dV9d9wxkj75pXFfkC3MiijEPLTXa394dGhYZJ y/PTT6SXiU2RXli6+8qZFaHfTL0+/ZUVdbrJ7Y7oji2S4/fS0Sxp7Dtqru2fe55env3RtVM/vXrS w6cNw1yLr5/PKJXMcC67Y4R80afxmFw5+MLSXe9t3GtPkiHbV6XZFU/QePy9rZf89tNPt7WJfbhB D34JTHr85QXKuCKR2n39r6+qD/2bRRubV+3qTLfL0d7ATNavHwAs2tN9zbvbjpBrBgWDjivO+M7U ki3fm/Hx/CnnlGfj8fVEMGNI+q0js0MNhwfHriys693dF4jCS31JTVPPE4u2Ak+4XdFBUWUp3S5v aOi58unPnvzvtoA++E+4CLIspdmVUAXyqyvre306Zfz5j3cqEiGEKIosR3NOmqzR9ub
 2jhv+U3t4 rhkUDHrOuKInzh+z6tuTX7xw7KhcF160kUCIdOWovCJ7ON917QHa6NGP/7+LgDdoPPzW5qZuf0Ld UBGe0AaladKH3th454I1TT3+GL8AZTzToVw0pdSuyjZF2tDQs2hj87vrmjY39doUyaHK3zx5mCoR sZseh0rKtbYFNW23f7Dr4KXIBgUAm02+4eSyq8cXTStMw+PrCWt2aUGdLHsAACAASURBVMasAtfC Ft+gC0Hsyuu7us8Zlhm9auonFm39sGZf2MfgE1Ao4F5eUV/X4X1q/vSJw2JaDGBSduGUsjZ38L+b W20yef7jnX1+3SYTk/HxZdlXn1bx+qqG6G3mJd+o7ZmNrTctrh3Itf1bBA+fOaLrntnPfm307LIs zLWERqTvjMkL53CCRBa1eCiP1o/CwjWNz3xUmyAHDwQihKTb5dW7u656ZsXnOzti+aENyodku244 Y6TLJtsUaWtz395uHyHEoPyO88aEfoVEb/k0yb6Qv1699wcf7tJ1CgA2At+dXvb3C8ds/d6Mn84u T/QLetF+F43Iq7SRML6peyivi85y27q67gde36AZ1JIlQaGxW2On95pnPvuwJsz6m/B4gsYFk8um DM/VKZclosqSTzNPHZl/3sSon/xJpmh7ZEXjAx/t0nVamOX41bmjVsyf8sL5o2NTEIDEuqb8yOcK j80g0r92dgt/mZ37+m95cXVDp0+RJYOyaPyjmUwz6MF/TGYyHuMzjnZVbu/Xbv7rKuHbpscmS+SO c8cA5xC6aloi35k70q7Kmhndv35yzN36NfPBpXUv1bSPK8748ezyeZW5mQlfJo6O4eqx+Y9t6Rr0 Pc0m+6JH/KitzR349qyKG84YKfaxJmWUcd1knqDZH9A7+zVP0Oj16UGDuv16QKfugBHQDEKIqkg2 RVKiP2B02eQuj/bd51e+evscUTW9J+L8yaUzRuSv3NnJGJ8ztvCiKWUx+KDJERD
 V7d6gyd75xng8 FGUNuU61MkOtG3xNQmc4J7WO4/SxRaePLRL/3KPo9eltfYGGLm9Dp7exy9flCdZ1eLe2uHs8miIT myJFtYeSXZW7PNpNL6z+511zj9aTQzinTbnj3DE79/WrMvnO3JGHniqJXp4nR7RNK06fPSwOvR9Q lOQ51ctH5f16c8fg9kkVqdVvNPX4k7q5dk6aLSfNdmistPb6Gzq9ezq8mxp7lm1v39PuMRkH4BKJ yrlxuyrvavPc/vcv/nHHnK/25IiSC6eUjSrOAIDRQ76Up9HbRkiOaMNNT4uRJTIuyw4mHVy0SaTJ q6/rSu5o+6qSHFdJjuu00YXzZ1f2B4yd+/rf27D3461tLT2+1r6gLBGnKoktIc5wKKt2df74rU3P fedUMpiBk0GZrpk+AlwztaM0Owjo1Bc0ZVmSCBj7TyzYVfmrpSc+zWQcdM30R6GoGCMDxUeeQmyK NNgaXENn+3zRLdyNr0ynOr0yb3pl3qOXw+c7O/69oXlFbceGhh6ZgNhC4jS78tKK+knluV/tOHQM Q7Kds6qKbIrUHzDKj9JmasLQbJ9mhmbWuWlHPcSaZldmjioAAN1kY0uyJNGl9ZZqRYmSSF2P/7wl 9Xt85uCWW/z6YzOG/Gh6adTeK+E09fiXbWv727Lda/d0ASECL6AxKMtNs/3z+2ecyCn3kIBu9gcM CB02cKpHbOze69MPtAPJTbcfbU5tUNbj1UL/2abIOS5FbDE2RhuKD874RUvqF+/tH1z5rmbeP7no VyenULSFeIPGh9WtT39Uu7aumzIu6hoaT9A8f1LJP+6YY701n2Sqa0NWQiTikgBOoHvEl/8Y6QyY wKOwUZrY0h3qZSeX//f+s397zbRxpVmeoClkUJJulz+s2ffyirrIH5VoMNpQ3GSF0WhVIs0ezauF 0xnJAuyqfNNZo/951+m3nD0KADQj0s8DIcSmSE8s2traG+vz89FmtVFo7Gk
 GpfuHHiey2XTs5VJJ IgAQum3XAv0njs0hD37NSCI9QdOnmal85XBFYcZT1558zoQhD72xcU+7x2WTI1l9UyTS3OP/wwc7 Hr9yqsCXjDuMtogsaez79aZ9/v1HRpyHDEPIV5aQ1P3ff9L+BFT2zymkLy+1egx614TCOF4tHBtO icDgfyb9BtUoLhDDxVOHVpVm3/vqug9r9kVYHWJTpDdW1V83Z0TMinhjAKMtXJz9Zv2+R6s7vJyA IoksPQwat04omFGYLuyBicoZRj2qRDTG49NZMfGMLMr4282zHv7nxgXL9yiyFPbZflWW2tzBBZ/t sdLADdfawtEfML7x3933bezwEmlgg08iAv5hPEOCl+cOe3ZOeSrcDa6G96MYkzbiySInzfb7+TN+ cME4k/FI2joqElm0sXnnvn6B7xZfOGobtE3tnhuWNm7oN8K5VfMYNHNaruO508ridVN67Blh/Cgy brdJ+F17KFWWHr18skTgN4u3A0B4Yze7Kte29n9Q3TJ6iEW+/XDUNjgLatrmvb9ng9cUnGsB44bK rMXnj0ydXAOAwGArPwAAQFYkKcr3vCWjB78+8btzR2gmC7soxGGT31jd6A0aYl8sXvBb5EQZlN3x ad13V7e2MxJOk9ijMZlK6RPTi58/qzLV7qbpNRgM/ufQTkiYM1lLs6vy41dOvXByqV8PsyLErkib m3qrm3rFvli8YLSdkB1dvgsX1T6zq4/ZFJF9WDSzyiUvPrvi3umlluzvemzBMDb1GM91KE7LtfkW wmlTfjt/xoiijKMdXD8+zt9Y3SDyneIHv0WOb+HOrgs/2PNRlwZi+19q5gXFrve/NuKc8myRj00S nPFeCoMu/mC8LMOeho1Ij2JYruuXV0yxK1KYWwqErNzZGa/L/cTCaDsmzn62ruWqZU11Ohc5CWUc TPbwuLy35o20WH+eE1ffF6jtCwz6s8p5gVNJwRHuibtgctnlJw/zBsO
 JJ0UibX2BtXXiu7THHkbb UTW7g9d8sOfhjR26IouchOq0SOJvzyn76exy651JPnHbegP1vcFBf2IZz8Dv2WOSJfL9eeOGF6SF MS2VCLj9+rLt7dF4sRjDb5MjW9HsPm/xrtdC12UKzbVZufb35424bHS+sGcmp9aAycKaNDmEv4rl VJVmfePk8jC2aAghQYNtb3FH7+bjmMFoO4I/b2m/4OOG7X4qeBKq09tHZr03b+Tkogxhj01OmkGX t/tg8INW1SYNdabuUPfE3XrOmCyXLYxCEFWRmrp97e6oXIoYSxhtX9IfMG5csufmVa0eBmIrPNI5 e3p60dNnVuakWIXHEXUHzXcb3YP+DDNeYFcqc2LUzj+pleenXTp9aBiFILJEWnp8DZ3eaLxVLGG0 HbS103vB4l0v1PcLn4ROTVf+dXbF7VOifq1ssli9z+MNo/qK8QKXelLBkftWo8N8fdpQRRp0r1mb TNrcwbboXGUdSxhtAxbu7Drvw/qVPZrIYwaMg2ZePTT9vQtGpWaFx9H8rqYjnEEx40NVYvleT6JM KMueVJ4bMAa3mUAI0Qza1O2L0lvFDEYbaAZ9ZEXjlSv2tupMbK6pnD08Lu+l80aWpMBZ9xO3qd1T 7TXCGRdLZGwGTudPVEmOa3J5jj74dpWyJLW5g9F4pVhK9RXZph7/PaubFzZ7BZfj6rTSJT8xYyju hH7Vb7Z0esL7LaJI3xpl8R52Yo0vy1YViXM+qG5uikyaunyaQZN6gJzS0bakvueu1S3bPYbwYwbn 5NmfPbNiVKqW4x7D2tb+fzd7wtuiKQI2ucj6bewEGlGUkZdu9wQNdTANjRWJeIKGZjKMtuTDGX92 8757NrYbnIjMNcZVzm4alf3b2eVJ/W0RPU9t7/JoNJzPOeOzilyK6NsqrW14fnp2ms0dGGQzD0J6 fboRVl+WxJGK0dbh03+6pvmZ2l5wCu2vb7IiBX41dch1E4tFPtZ
 CltT3vLqnL8zfJZr5nTF5g7rq HBVnOx2qPNjaXYlA0KAmRltyWdvaf+vnzet7gsJzbWq68sIZ5ViOezQB3bxn3b6wx8j5Mh+DFW2D lGZXMp1qGDdJBA2a7AcSUivaFu7sun5Vi8fkYiehYLKrh6b/fk55qjVcGwTO7lvZtKVPD3MPWjO/ WVVQmY3RNjihPgKDLW0L1X9E541iJ1WizR80frKu9YntPaBIYo9P2Uz68ylF904bAgQraY7qzR1d f64f/PGD/WwEzsh3YsOPMKip2pE4JaKt2R387tL6jzqCgrt+m6zSIT1/xvBzKnJFPtZydnT57tnQ bhApzDMeJqvKd82rxE9yOMLYDeCc21U52X+RWD/aljT23byiqc5Phd9mcFFZ+lOnDa3ECo9j6vDp l31U1xqMqNfA1UPSMrH9ZLjCuKLUkfz7+1b+duGM/3ZD6w+rOwxOBB+fMuh9E/J/PnNoyo72T1CH T7/s/d3bI7slp0iBO6cOEfhWqcMfNPTBd21jHDKdqk1J7nSzbLT1+vQ7Pmt8ba9X+CS0SIFfzSzB Co/j6vXp17y/a2VPuFsHITq9d0phKvfsjESHR+vz64OdWlLGM53qoKp8E5A1v2MOVniIPmYwLdex YO6w8QVYE38cvT79W+/vWtIX2W2tjFc6pKvH4GG1MLX2+n1BY7CLZpzz/Ax7stecWzDaFtS03bmh XXCFBwDo9OphGX89qwJHEMdV59a++f6uDV4z0s1ogz4woxSbC4RtT4e3z29Ig1xrMynPz3Ak+2KL pX5KByo8tnSBUwVF3HCa8XTOHp9edPvkYqzwOK4VTX03rdwb4foaAIBOp+U6vlmRI+i9UtHutn5P wMgeZLklZaw8P+mb4lkn2nZ0+e5a2fRRe0D4MYNKG1lwZuXssiyRj7Ukzp7Z1PZQdafH5JEvcaoy PD6tGJsSh80fNLa1uOVBDr445w6bUpSZ9FdQWCTaltT3fHt
 5UzsTetYdAHR6QZHz+bnDy7KS/isd bc3u4E/WtrxQ5wZVFlAUrZk3jcrGgsFINHb7NzX2ONTBfS1MxktznMPyk341OemjjVL6+41t/7ex XfCVegCgmY9MKnxwSjEurh3Xwp1dP9/YtsGti/nVYrJpuY7HZw4V8KgUtq6+u6nbn+EY3FfEoLwo y1mS/Md1k/uHtten37isYWGLD8TmmsmKFHj2jGHYSPK4QoO1l+vduiSJyTXG0wl/fFpxukPowkKK oYz/e/1e2+ALOAyTDctLK8rCaIufTe2eqz9p2C78mIFmzspzPD17KPbwOLZen/7P+t5H1u9rN0Hk rxbN/PH0YpyKRmhbc++n29psg1wZ4Jw7VKmqNCvZT1lB8kbbMxtbH6vuaDeFXqkHAAHj9jE5vzh1 aKbYvQjLeWVbx5+2d63sDIBTFflNpNMbRmbfO71U3BNT1POf7NJMZh/kTwfjkOWyTa+0Qpf25Is2 g7JbP61/ob4fFElkhYfJ0gl//JQhWOFxDAZl7+3p+V1Nx8o+HQCEb0afOyTtydnDRD4zJW1vcX9Q 3RrGH2ScZ6fZ5owpFP5KsZdk0bajy3fjssaV3eKPGUzIsT93SunsYXil3pG1erQNHd4fr9u3wWsC iB4sw0Avzz+dVoZLbBGijP/p49qGTl+Wa9CfScbh1JH51vgSJFO0vbm946ENbXVBJjzXLitL/+Oc cqx6P6JN7Z5Fe/vfqO/b0h0Epyo+1GDgQNULZ5RjG5XIrdzZ8faaJpc9nAVoyvgFkyyyGpAc0cYZ /8nalserO3RFRM3UAaGrQifk3z+jNNlPzAlHGX93d/ffdnZvcOutHh3siuDp5wGMV9rI2+dU4L5N 5PxB4+fv1PT4dNfg99Yo46U5zlmWmI1CUkRbszv4/ZVNC5u9oAqt8NBpiUt5/tSyi0ZYYdFUlFaP 1uHXX93R9Vqzt9XkoFNQpGiFGgy083z9zOGYa0L8atH
 Wz2o7wsg1APAGze+eMbIo0yJzl0SPtiWN fXd9vne7P6zr3Y5Bp+fk2v44d/jY5D8rJ0SzO7i0pb/Bb7y2q2d7qPI29FtEbGHNYUw2Lcv21zlY ZyPGwjWNz3xUO9iCjxDKeJZLvWhKmWX20BI62p7Z2PrgxnYvJ2InoWCye0dnP3xyGVZ41PX439rZ /UVPYKfP2NIdBIAoTjwPo5kXlaQ9P3c4LnEKsa6u+4HXNwR16gjrt5Ffp+dNHHLqSOvUqCdotPX6 9PtW7R2o8BDYEs9k6YQ/fWqKXhWqGbTTb3gNuq0n8Orunk29wU6Te0wOlIEqxyjRAIBx0Mzbx+Q8 MWsYHmITYnuL+5YXV+/rDYSXa6FK3f+ZYakvRyL+TTa1e+5YsXdljyZ4NqTTaTn2J08tTakeHu3u QE2f1ubTuxisbPN+1tLfHqAHVy0lAorQQfFxMZ7O2Y+nF2NdrijbW9zzn1tR2+oOL9cAQKd80rCc y08uF/ti8ZVw0fbm9o57NrS3+iPu9nUoxkEzbxiZ/dNTyiw//Wnq8a9u99b2Bhv9hhvILo++pzfg 1SgQMtCTwxm/xRSdVqUrfzh1KJ6jEmVdXfctL67e2tyXFsFiNGf8u2eMtNj6TAJFW0A3H1m196k9 fcJvabHIMIEzzeSayQImMxjXgQBAqye4us1b1+3b5TVadOZm4DFZkDKDAnAOhIAigSyDK96lLSYD gKuHpj89pxxbsIny3oa9P3hlXUtvIJJc8+v01JH5V55iqSEbJE601fX4v//53kWtPsE7oYxXOaQf n1R8+ej8gG5yNrhrtKPB5AAAlHEDgJvUAKJTFqDMYNygXDNZkLIg4zrlJmUBaWCE1Wuwnb2Bdo/W HjD3+Y0Og3nN/cn1VbIM8Y6yL9HMyjTlkZMKU3OJMxq8QeP3/93+1PvbDcrCK/UIoYw7Veme86tc ljiBcCjCefx/2hft6b5/TauAltNfxfiINGVMttO
 jm4KfHLF+gwEANWmAAzdoEAg1qY9yDcCkjIeG XSGEgERAlg4ukCULxolpfrci+4GpQ0bhSQNB1tV1/+yd6g9r9tkVKcIWHW6/cd3plc9cf4r1Stbj HG2U8d9vaH20ukNwhcdhBn8VY4wc9n2ZRJl1XCYDxidk235/cunZQ7OIlf5q8dPr0//yyc7nltS2 uYMumxzG3cmH0kxWnOX49/+eVVVqwY21eE5I2z3a/33R/MLuvqiXHcRyBxABgGZWZajXV2R/f1qJ 9YYDcdEfMBZvan76w9r19d12VY5kce0gzh+6ZKIlcw3iGG0DV4X2arErp0LRxnioR+4PJhVeNyoX z7oLEdDNf6xqeGNVw8raDiIRMaEG4Ama82dXXDdnhJCnJaD4RNsr2zpuXd3iFbsTiuKIcTBZkY1c PjzzwakleEtO5Cjje7t9b65uePOLxvoOj1ej6fZIZ6AH+DRzRmXeI9+YbIFuukcT62jrDxg/W9/6 xLZuUGWRxwxQvDAOmlmVZbuwJPOeqSWWLxuMgZ37+rfs7V28ueX9za1uvw6E2GQy2NtbjkEzWV66 /RdXTBlm6WF1TKNtV4//tk/rl/QIuvcIxRfjYNBZeY6rKgvOL8/G6WckDMo2N/au2tWxual3U2Nv zd4+iYDLJgtfqeSc22Tym2umnT62SOyTE03sImbRnu6bV7cKPmaAYk+nIJEMhczJsz80dcj4HCeW 4A6WQZlh0IDJalvdm5t619d3b2rsdfv1tr5A0GAOVRI4RjuUyTil7BdXTLlyZkU0np9QYlH8YVD2 +BfNj+3oNohkqfqGlMI4aKZNJqcMST8j237LpOIYzz0N0wgGg5E/h8uOA9+EEucSgMtGQBIZJZRx kzKDMs1kmkH9Og1ohidougPGvr5AS4+/scu7o7W/odPr00zGOeMAnEsSUSQiajXtiG8VNOij35h0 /8UTovQhEkrUo63Dp9+6rGFhsxcnoclq/2r
 a1aNyJ+c4LhqeA3Ksi2m2bq3etmUb9bsjf5TsOrzW YYW7wEecSsS/dM39Z138GgUAv24GdOrTzKBB3X6916e7/QYAKDJRJBLtIDsM51wz2ANfn/DDSyZa eOvgUNGNthXN7ltXNW/p1TDXkgnjYLLQrLNAgm9UZF89KneIy1YUjy0Czviy5Z/WrF2t+702oT+T NmK6DfmtvhGb+xyUMQIiHy5JBAAkAoQQmYAkEYmQeGWKZjKJwP9dMvG+C8enTu10FKMtKo0kUfQw DpoJACNyHZUu9dRs+9Vj80fluuL4S97j9bz/n/807ah2KJIsK6K+UwmAQlhDwPlKx7Be06aSRD2s IkJQp2lO9bHLJ9101uh4v0tMRSXavEHj/rWtz23vxsFaEmAcNDPdJs0sTDu9OG2oXT6tNDMRznvu a29btvjdlqbGNLtN4PdoKNeW9uau6C9wG7K1Z2dBnQ4vTH/i6mnnW+WeqhMnPtq2dnpvXt4k/qpQ FDmTQWg9SCIZCnEBL3Uolw7NPHNYVo5dLs+wJ84FlFu3Vn+yeJHu96Y7VMaFpY9KmMGllX3Z7/cO oYxbONcMyoIGO6Oq6Mn5M6x6lOrYBEfbwp1dt61qbjfx2GZiMBlQBpQBIRlOpTLTnqlKQxUyKdvx 9ZG5I3KccVwAOhrDNFau+GzNp0vSbJIki/ztqBLmp+SV9mG1gUwFaMyW8GPPp5lpduXGM0f96NKJ ifPrKsaERZtm0Cc2tz28oR0Ha3HDODAOlAHjEoHhLmVEjnNKYVqGBDkyGZPtOLk4I8E7qe5rb1ux dGn9tupMp/hJaEPA+WFvYW0g08KLa5xzv06nVeQ9cPH4i6cOjffrxJOYaGv1aDcva1i0z4/luMIc 6Jp5xPaZ+xu3qZTaAdJkUupQxmbZp+S7JhekOWRil0i2QxniUpPol3ZNU8/n7/7d29MldnFNIlwG bvlNA8q4ZjKXTb7xzFH3nF9VlOWM9xv
 FWcTRxtmSpv6rPtzd5TfApoJ1B/nRJZHQpy50rsYhSxmK 5FQlAEhX5UxVYprpUohdljIVqcQmF7jUkbnOifmu4nQ7ACjAFVlSCEnSrX1K6Y4dW99/63WbRFRV FZhrKmEml1b0Zb/fO8TgkiVzjXPu1ajLJp8zYcgDF0+YXolXhgMIOWhV59G+U1XgxLZcJ0A9pCPA oc0xnDJRVdnOuUMiqipnqlKWXcl2KPl2JcelWObW2yM6UOHhstsAQGyu9ZmOTR7Xf7qLJcItmWua yYDz8yYOmT+n8pszypP0d1s0JEQDcZSy9rW3vffOu562xlCuiRJaXOszHW92FNUGMgHAYrlmUMYY l2XplBH5N5816pyJJQm+ihp7GG0obkIVHhD0iZ2EWrgiN7RLwDiUZDtmjiq8fu6IuWOLsI/xEWG0 oTiglH722bL1y5Y4FMEVHqFNg1BFrpVyjTLu16lNITMq8+eOLbxwylBcUzs2jDYUa4ctrgkkEc44 WWmJTQPOuck4YxwIkQgMzUv72kkl50wYMnV4Lu5+ngiMNhRTW7dWr/hkifAKD9i/aRBaXJM4TbRS 5BPBOdcp101GGctwqPkZ9qIs5ykj8y+aUjatIg9X0wYFow3FztKln1R/vkzmVOwkFADUpK3IpYyb of5uJrOpcmVhekVBemVh+viy7Jkj8ycOy433CyYrjDYUC1rQt2r1F2s+XZLpDLPC44hjMP6VTQMF aISvGrav1lazQ364DvtvJQKMg0SgMNMxtiRr9JDMkUUZwwvSy3Kc5QWJfmgkKWC0oagLVXj0tTZK tnSxTyamlzKo1goXtWdp3GYnelhPUbiILruqLMmyBADq/rmwKhNFlgAgtImZ7bLlZ9iLsxxDsp1D 89MrCtKH56e5nLYMVXIlz6GRZIHRhqKLd1WvWfxsS2dAUgTf4MfMoKQ4jOIz96mFET1ISSP2zMjf JzvNnmaTVUUCAEWWHKpsV6QMh5L
 htDkdaq5LVWPenTiVYbShKGL17/GNv5dZt/Ancy3AiufK02+D rCnCH44sAKMNRQfVWc2zfMdLwEyQhXYepxpIChl5hTTpdlAFz3CRZWC0IfG4t5mt/xU0fwqyDYjQ WnkzAM5CMuUeqeJikY9FloO91ZBgvHUFW/849NeDIrQLOadAdSieKU29l+SMEflkZEU4akPicMZ2 vMy3PA+GFyehKL4w2pAYXOvlG37H698FIoEktJTB8EFWJZlwM05C0YnDaEMC8K5qtu6X0F0DitDj jTgJReHCaEORClV4gL8N1DSRzzUDoDjImG9L42/ESSgaLIw2FAHDy7b+NSoVHqYfMivI5LuloeeI fCxKGRhtKEy8v55t/B00fwqK4yhHPMN7LgWqQ9mZ0pQfkMwKYY9FKQajDYVjoMLDXQeqS2SuUQ1k OxlzDU5CUYQw2tAgMZPVvhqFCg8OZgAnoUgUjDY0CNzfwWue43veBkkRecyAU2AmlM7FSSgSBaMN naj9FR7VINtF5hozQFLJ+O9JY68F0d1BUMrCaEMnZKDCI9gFsk3c4hoHww9ZlTgJRcJhtKHjMYNs y5/4jpeAM6HHDDiYQVI+j5x0O05CkXAYbehYotXDg2qgppOq63ESiqIEO3+go4pOhcfAJFSa9iAp mS3omQgdDkdt6EgO9PAw/SInoZwCZ2ToOWTy3SS9TNhjEfoKjDZ0uIEeHnX/EjoJ5WAGwZZJqq6X qq4HWfDlyggdBiek6EsGKjy6NoPiEJZrobNTmcOlGT8ixaeKeSZCx4SjNnTQIRUe4o4ZcApUJ+Xz yNT7iSuyq6cQOmEYbQgA9ld4bP87AIhbXONAdVDTyYSbpdFX4SQUxRJOSNH+Co+WZSIb5HIKZhDy J0lT7yWF08Q8E6EThqO2VDdQ4eFpEnnMgFNgJqm4hEy6EyehKC5w1JbS2PYF4nt4cAq2bDLxNmnU 5cKeidAg4agtRQ1UeDS8ByB
 wcQ2AUyAyKZ0LpXPB1IAbwp5sAVQH2UbKzsaRbAxgtKWiaPXwOBTD UPsyqoM9m0z+gTTyMiBSvN/G+jDaUs5AhUegQ/DtU+ioOJhByJsoTX+I5J8U75dJFRhtqYTqrObZ qNzSgo6GGcAZGXYelvXFGEZbqtjfw+OTKE5C0WFCDU4m3CyNnY+T0BjDHdKUMFDh0d8Aiive75Ii OFAdMoZhg5N4wVGb1R3o4SH4lhZ0dKFy5aFn41UPcYTRZmUDFR7174o8ZoCOjRkgKWTMt6UJt2CX zTjCCallHazwwElozJgBcBaSKfdIFRfH+1VSHUabNe2v8GjHvEbtGAAACdxJREFUXIsRToFqkHeS dMpPSM6YeL8Nwgmp9RhetvWvUbilBR0dMwCADL9Ymv4AXnqfIDDaLIX317O1v4C2VYJvaUHHEKrw mHSnNOoKrPBIHDghtY5DbmlJi/e7pIbQpfcZw6RTHsXGTYkGR22WwExW+ypWeMQUM4DqZPgFeMwg MWG0JT3u7+Cb/8jr3wVJwUlojIQanIz/Ht6jmrBwQprcDt7SIvKqUHQMHMwgZA4nk++Whp4T75dB R4WjtiR2SA8PB+ZaLIQqPIpPk6beixUeCQ6jLSlxfwff9je+YwEAgIRD7y+L0tELTgGAjLxCmnQ7 VngkPoy2JER11vQBtCwDGRuufYWk8N4d0FcrdNmRgxkEZyF2RU8iGG1JiLNQK+p4v0eCIRIcmKTr fULvh9Yg7yRsJJlcMNqQVYSuUq19FZgh8spBZmIjyWSE0YasYH+jzU9FHsOgGsh2Mv57UtX1OEZO OrgCjZIeb1vN1v4M3HXiKmAGKjywkWTywlEbSmacsV1v8M1/FHkMAxtJWgJGG0pWXOvlm/7A97wt 8hhGqMJj7LXS+BuxwiOp4YQUJSXeW8s2/Ab2rQTFISjXOJgBcBZhI0lrwFEbSj5s7xK+9hcQ7ALZ JmxxzfBD/iSs8LAMjDa
 UVEJXqda+AswUVuERuiq04hIy6U6s8LAMnJCipMH9HWztY9CyTORRKjMA tky8KtR6MNpQcuAd69kXP4b+BpG9AEw/ZFZghYcl4YQUJQG28x98y18g2CWywoOZUDpXmvYASS8T 80yUSDDaUGIzvGzDb3ndvwBA2CQ0dMxgzDXSxNvwmIFV4YQUJa6BCo+2z0G2C67wmPFDbCRpbRht KEGxvUv4piehv17cVaoczCA2kkwROCFFiYeZbNuLfMufgJnCFtdCV4WOugobSaYIjDaUWLi/g2/4 NW98X2QPj1CFx+QfYCPJ1IETUpRADqnwENdA2PRD3knS1HvxqtCUgtGGEgXb9Rbf9DvQ+4XlGjOA maT8fGwkmYJwQori72APD4HHDA40khx/Ix4zSEE4akNxtr/CY5XQYwYBvCo0xWG0oXga6OERaBdW 4cEpUB2KZ0ozfoiNJFMZTkhRnJhBtuMlvvUvoZmjmGdSDSSFjLxCmnIPHjNIcRhtKA64t5lvepI3 fSiyQS7VwJGPjSRRCE5IUazxjvVsw2+gazOoaYKeSIHqkDdROuUneMwAheCoDcXQgVtaBFZ4UA2I RIZfTKb+gNhzxDwTJT+MNhQjXOvlNX/mu/4BRBI2CWUGKC4y4Wap6joxD0RWgRNSFAsHb2kRdVVo aBKaOVya8SNSfKqAByJrwVEbirr9PTzENchlBjADys7CRpLoaDDaUDQNVHj8WfAtLZKKjSTRsWG0 oWiJQg8PDmYQnIXYSBIdF661oagYqPDorhGWa5wC1bCRJDpBOGpD4g308DC8IhtJEolUXCJN/V9s JIlOBEYbEsrwss3P8N1vAGcie3io6WTSndLoq8Q8EKUAjDYkDO+vZ2t/IfKWlgPHDLCRJBokXGtD YgxUeLjrxFaukfJ52EgShQFHbShinLGtf+Vb/xIqyxDzzFCFx/jvSVXXY4UHCgOO2lBE9ld4/Bck VVCucTCDkDlcmvY
 gKZkt4oEoFWG0ofDtr/CoFrm4ZgZhyCxsJIkihBNSFCa26y1e8ywEu4RVeHAK AGTstdL4G7HCA0UIR21o8Mwg2/QU3/UP4ExQrnEw/OAqJhNvw6tCkRA4akODM1Dh0f6FuAa5HAw/ 5E+Spj9E8k8S8UCEMNrQYBzSw0NQI0lOgTMy/GIy6U6s8EACYbShExOq8Nj+d5HHp0LHDCbcLI25 BiRcG0EiYbSh4xuo8Gj6UNwVyBzMAGRWYIUHihKMNnQcvKuarfsldNcIayTJKTATSudiI0kUPRht 6FgGKjwEXoEc6uEx9lppwi2gOMQ8E6GvwGhDRxHq4SGywgPA8IGrGBtJohjAtVt0BAO3tLStEjYJ BQDTD0NmYSNJFBs4akOHO6SHh6ArkJkBAKTyf8jku/CqUBQbGG3oEMxk217kW/8CVBM2CTX9YMvC RpIoxjDa0ADu7+Cb/8jr/iXulhYAM4CNJFFcYLQhgAMVHl2bhTWSZAZwRoadh40kUVxgtCFg9e/x jb+HYBfINjG5ZgZAcZLx35PG3whEEvBAhAYJoy21HajwABDWINcMQOZwMvlurPBAcYTFH6lr/y0t q4ReFapD8UxsJIniDkdtKYq3rmDrHxd5SwvVQFLIyCukyd/HYwYo7jDaUk+owkNsDw8zAM5CMuUe qeJiMQ9EKDIYbalFfIXHgatCsZEkSiQYbSnkYIWH4hCTa6EKj4pLyNQf4DEDlFAw2lKF+AqPA40k q64T8DSEhMJoSwFmkG35E9/+dwBRFR54VShKdFj8YXHc28y+eBTaPhd2BTIzgBlQdhY2kkSJDEdt VjZQ4eFpEjYJZQZIKhlzjTTxNpBtAh6IUHTgqM2iOGM7XuZbnscKD5SacNRmQVzr5Rt+xxveAxC0 uHagwuOUn2AjSZQUMNqs5uAtLaIq1/Y3kpSm/i+o6QIeiFD04YTUUgYqPAIdwq5ADlV4TLpTGnUF 9vBASQRHbVZ
 BdVbzLK99BaguZnEtdKVexjDplEexkSRKOhhtVsC9zWz9r6D5E5DtwiahzCTl88jk u7HCAyUjjLakN1Dh0d8gbBIaqvAY/z2p6nqs8EBJCqMtubHtC4RWeHAwA5BZgY0kUbLDaEtWAxUe 9e8CkYRVeJhBGDILG0kiC8BoS0r7KzyqQXGJeSIzgEhk5BXSpNuxwgNZABZ/JJ/9FR7tgnKNgxkE ZyGZeJs06nIRD0Qo/nDUllRCPTx2vASciTtmoEHeSdhIElkMRlvS4P31bOPvoPlTkQ1ymUkqLiGT 7sSrQpHFYLQlh0MqPBzCGknKdnLSHdLoq7DCA1kPrrUlPGay2lf5ludB7xdUuTZQ4YGNJJGF4agt oR3s4UEkMZPQUK6VnSVN+QFWeCALw2hLXAdvaRE4YSQSGXutNP5GrPBA1obRlpA44/s+Z+sfB387 qBnCHqu6yISbsZEkSgUYbQmJmbxnW+gsp7hnGuAqwrPuKEVgtCGELAibCyKELAijDSFkQRhtCCEL wmhDCFkQRhtCyIIw2hBCFoTRhhCyIIw2hJAFYbQhhCwIow0hZEEYbQghC8JoQwhZEEYbQsiCMNoQ QhaE0YYQsiCMNoSQBWG0IYQsCKMNIWRBGG0IIQvCaEMIWRBGG0LIgjDaEEIWhNGGELIgjDaEkAVh tCGELAijDSFkQRhtCCELwmhDCFkQRhtCyIIw2hBCFoTRhhCyIIw2hJAFYbQhhCwIow0hZEEYbQgh C/p/tXGAXkhU+i0AAAAASUVORK5CYII= "
+         height="137.29469"
+         width="140" />
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:3.51219511;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5329"
+         width="140.48439"
+         height="140.49123"
+         x="-289.16486"
+         y="9.5095568" />
+    </g>
+    <g
+       transform="matrix(0.41667655,0,0,0.41667655,-362.02927,532.95802)"
+       id="g5343">
+      <rect
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.51219511;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5345"
+         width="140.48439"
+         height="140.49123"
+         x="-151.66487"
+         y="-1.016763" />
+      <image
+         y="2.0229614"
+         x="-129.60527"
+         id="image5347"

[... 1192 lines stripped ...]
Added: storm/site/releases/0.9.6/images/bolt.png
URL: http://svn.apache.org/viewvc/storm/site/releases/0.9.6/images/bolt.png?rev=1738648&view=auto
==============================================================================
Binary file - no diff available.

Propchange: storm/site/releases/0.9.6/images/bolt.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream